DAS  3.0
Das Analysis System
PrefixCommand

Description

General utilities for prefix commands (try, parallel, submit).
The explicit options (`cmds`) are unchanged; among the implicit options,
the inputs are checked (if any), and the output is adapted to each thread.

Public Member Functions

None __init__ (self, str prefix, List[str] cmds)
 
None parse (self, List[str] args)
 
int get_entries (self, input)
 
None prepare_io (self, bool multi=True)
 
None prepare_fire_and_forget (self)
 
None clean_up_last_run (self)
 
None __init__ (self, str prefix, List[str] cmds)
 
None parse (self, List[str] args)
 
int get_entries (self, input)
 
None prepare_io (self, bool multi=True)
 
None prepare_fire_and_forget (self)
 
None clean_up_last_run (self)
 
None __init__ (self, str prefix, List[str] cmds)
 
None parse (self, List[str] args)
 
int get_entries (self, input)
 
None prepare_io (self, bool multi=True)
 
None prepare_fire_and_forget (self)
 
None clean_up_last_run (self)
 

Public Attributes

 name
 
 cmds
 
 helper
 
 splittable
 
 nSplit
 
 extension
 
 inputs
 
 output
 
 args
 
 absinputs
 
 absoutput
 

Static Public Attributes

 str
 
 Path
 

Private Member Functions

str _help_text (self)
 
List[str_synopsis (self)
 
None _prepare_single_output (self)
 
None _prepare_multi_output (self)
 
None _prepare_input (self)
 
None _save_environment (self)
 
str _help_text (self)
 
List[str_synopsis (self)
 
None _prepare_single_output (self)
 
None _prepare_multi_output (self)
 
None _prepare_input (self)
 
None _save_environment (self)
 
str _help_text (self)
 
List[str_synopsis (self)
 
None _prepare_single_output (self)
 
None _prepare_multi_output (self)
 
None _prepare_input (self)
 
None _save_environment (self)
 

Constructor & Destructor Documentation

◆ __init__() [1/3]

None __init__ (   self,
str  prefix,
List[str cmds 
)
Constructor from a separated list of arguments.
148  def __init__(self, prefix: str, cmds: List[str]) -> None:
149  """Constructor from a separated list of arguments."""
150 
151  self.name = os.path.basename(prefix)
152  self.cmds = cmds
153 
154  self.helper = self._help_text()
155  if self.helper[0].count("output") != 1:
156  raise ValueError(
157  f"`{self.cmds.exec}`"
158  + " does not match the requirements to be run with this prefix command: "
159  + "there must be exactly one `output` argument."
160  )
161 
162  self.splittable = ["nSplit" in row for row in self.helper[1:]].count(True)
163  self.nSplit = cmds.nSplit if self.splittable else 1
164 
165  self.extension = (
166  check_output([self.cmds.exec] + ["-o"])
167  .decode()
168  .strip()
169  .split("\n")[0]
170  .split(" ")[0]
171  )
172 

◆ __init__() [2/3]

None __init__ (   self,
str  prefix,
List[str cmds 
)
Constructor from a separated list of arguments.
148  def __init__(self, prefix: str, cmds: List[str]) -> None:
149  """Constructor from a separated list of arguments."""
150 
151  self.name = os.path.basename(prefix)
152  self.cmds = cmds
153 
154  self.helper = self._help_text()
155  if self.helper[0].count("output") != 1:
156  raise ValueError(
157  f"`{self.cmds.exec}`"
158  + " does not match the requirements to be run with this prefix command: "
159  + "there must be exactly one `output` argument."
160  )
161 
162  self.splittable = ["nSplit" in row for row in self.helper[1:]].count(True)
163  self.nSplit = cmds.nSplit if self.splittable else 1
164 
165  self.extension = (
166  check_output([self.cmds.exec] + ["-o"])
167  .decode()
168  .strip()
169  .split("\n")[0]
170  .split(" ")[0]
171  )
172 

◆ __init__() [3/3]

None __init__ (   self,
str  prefix,
List[str cmds 
)
Constructor from a separated list of arguments.
148  def __init__(self, prefix: str, cmds: List[str]) -> None:
149  """Constructor from a separated list of arguments."""
150 
151  self.name = os.path.basename(prefix)
152  self.cmds = cmds
153 
154  self.helper = self._help_text()
155  if self.helper[0].count("output") != 1:
156  raise ValueError(
157  f"`{self.cmds.exec}`"
158  + " does not match the requirements to be run with this prefix command: "
159  + "there must be exactly one `output` argument."
160  )
161 
162  self.splittable = ["nSplit" in row for row in self.helper[1:]].count(True)
163  self.nSplit = cmds.nSplit if self.splittable else 1
164 
165  self.extension = (
166  check_output([self.cmds.exec] + ["-o"])
167  .decode()
168  .strip()
169  .split("\n")[0]
170  .split(" ")[0]
171  )
172 

Member Function Documentation

◆ _help_text() [1/3]

str _help_text (   self)
private
Returns the command's normal help text.
173  def _help_text(self) -> str:
174  """Returns the command's normal help text."""
175  # if executable is given, then the helper is adapted to match with the prefix command
176  text = (
177  check_output(self.cmds.exec + " -h", shell=True)
178  .decode()
179  .strip()
180  .split("\n")
181  )
182  return text
183 

◆ _help_text() [2/3]

str _help_text (   self)
private
Returns the command's normal help text.
173  def _help_text(self) -> str:
174  """Returns the command's normal help text."""
175  # if executable is given, then the helper is adapted to match with the prefix command
176  text = (
177  check_output(self.cmds.exec + " -h", shell=True)
178  .decode()
179  .strip()
180  .split("\n")
181  )
182  return text
183 

◆ _help_text() [3/3]

str _help_text (   self)
private
Returns the command's normal help text.
173  def _help_text(self) -> str:
174  """Returns the command's normal help text."""
175  # if executable is given, then the helper is adapted to match with the prefix command
176  text = (
177  check_output(self.cmds.exec + " -h", shell=True)
178  .decode()
179  .strip()
180  .split("\n")
181  )
182  return text
183 

◆ _prepare_input() [1/3]

None _prepare_input (   self)
private
Resolve the paths to the input(s).
258  def _prepare_input(self) -> None:
259  """Resolve the paths to the input(s)."""
260 
261  for x in self.inputs:
262  self.absinputs += glob(x)
263  if len(self.inputs) > 0 and len(self.absinputs) == 0:
264  raise ValueError("Inputs could not be found: " + " ".join(self.inputs))
265 
266  self.absinputs = [str(Path(x).resolve()) for x in self.absinputs]
267 

◆ _prepare_input() [2/3]

None _prepare_input (   self)
private
Resolve the paths to the input(s).
258  def _prepare_input(self) -> None:
259  """Resolve the paths to the input(s)."""
260 
261  for x in self.inputs:
262  self.absinputs += glob(x)
263  if len(self.inputs) > 0 and len(self.absinputs) == 0:
264  raise ValueError("Inputs could not be found: " + " ".join(self.inputs))
265 
266  self.absinputs = [str(Path(x).resolve()) for x in self.absinputs]
267 

◆ _prepare_input() [3/3]

None _prepare_input (   self)
private
Resolve the paths to the input(s).
258  def _prepare_input(self) -> None:
259  """Resolve the paths to the input(s)."""
260 
261  for x in self.inputs:
262  self.absinputs += glob(x)
263  if len(self.inputs) > 0 and len(self.absinputs) == 0:
264  raise ValueError("Inputs could not be found: " + " ".join(self.inputs))
265 
266  self.absinputs = [str(Path(x).resolve()) for x in self.absinputs]
267 

◆ _prepare_multi_output() [1/3]

None _prepare_multi_output (   self)
private
Prepare the members for parallel running (local or on farm).
227  def _prepare_multi_output(self) -> None:
228  """Prepare the members for parallel running (local or on farm)."""
229 
230  if self.absoutput.suffix != "":
231  raise ValueError(
232  f"A directory with an extension is misleading: {self.output}"
233  )
234 
235  if self.absoutput.exists():
236  if self.absoutput.is_file():
237  raise ValueError(self.output + " is not a directory")
238 
239  new_rootfiles = []
240  for k in range(self.nSplit):
241  rootfile = self.absoutput / f"{k}{self.extension}"
242  if rootfile.exists() and not os.access(rootfile, os.W_OK):
243  raise ValueError(
244  "The root files in " + self.output + " are not writable"
245  )
246  new_rootfiles += [str(rootfile)]
247 
248  existing_rootfiles = glob(str(self.absoutput / f"*{self.extension}"))
249  if len(set(existing_rootfiles).difference(new_rootfiles)) > 0:
250  raise ValueError(
251  "Residual files from a former run will not be overwritten."
252  )
253  else:
254  self.absoutput.mkdir(parents=True)
255 
256  self._save_environment()
257 

◆ _prepare_multi_output() [2/3]

None _prepare_multi_output (   self)
private
Prepare the members for parallel running (local or on farm).
227  def _prepare_multi_output(self) -> None:
228  """Prepare the members for parallel running (local or on farm)."""
229 
230  if self.absoutput.suffix != "":
231  raise ValueError(
232  f"A directory with an extension is misleading: {self.output}"
233  )
234 
235  if self.absoutput.exists():
236  if self.absoutput.is_file():
237  raise ValueError(self.output + " is not a directory")
238 
239  new_rootfiles = []
240  for k in range(self.nSplit):
241  rootfile = self.absoutput / f"{k}{self.extension}"
242  if rootfile.exists() and not os.access(rootfile, os.W_OK):
243  raise ValueError(
244  "The root files in " + self.output + " are not writable"
245  )
246  new_rootfiles += [str(rootfile)]
247 
248  existing_rootfiles = glob(str(self.absoutput / f"*{self.extension}"))
249  if len(set(existing_rootfiles).difference(new_rootfiles)) > 0:
250  raise ValueError(
251  "Residual files from a former run will not be overwritten."
252  )
253  else:
254  self.absoutput.mkdir(parents=True)
255 
256  self._save_environment()
257 

◆ _prepare_multi_output() [3/3]

None _prepare_multi_output (   self)
private
Prepare the members for parallel running (local or on farm).
227  def _prepare_multi_output(self) -> None:
228  """Prepare the members for parallel running (local or on farm)."""
229 
230  if self.absoutput.suffix != "":
231  raise ValueError(
232  f"A directory with an extension is misleading: {self.output}"
233  )
234 
235  if self.absoutput.exists():
236  if self.absoutput.is_file():
237  raise ValueError(self.output + " is not a directory")
238 
239  new_rootfiles = []
240  for k in range(self.nSplit):
241  rootfile = self.absoutput / f"{k}{self.extension}"
242  if rootfile.exists() and not os.access(rootfile, os.W_OK):
243  raise ValueError(
244  "The root files in " + self.output + " are not writable"
245  )
246  new_rootfiles += [str(rootfile)]
247 
248  existing_rootfiles = glob(str(self.absoutput / f"*{self.extension}"))
249  if len(set(existing_rootfiles).difference(new_rootfiles)) > 0:
250  raise ValueError(
251  "Residual files from a former run will not be overwritten."
252  )
253  else:
254  self.absoutput.mkdir(parents=True)
255 
256  self._save_environment()
257 

◆ _prepare_single_output() [1/3]

None _prepare_single_output (   self)
private
Prepare the working area for a single-run command.
211  def _prepare_single_output(self) -> None:
212  """Prepare the working area for a single-run command."""
213 
214  if self.absoutput.exists():
215  if not os.access(self.absoutput, os.W_OK):
216  raise ValueError(self.absoutput + " is not writable")
217  if self.absoutput.is_dir():
218  self.absoutput /= "0" + self.extension
219  else:
220  if len(self.absoutput.suffix) == 0: # then assume it's a directory
221  self.absoutput.mkdir(parents=True)
222  self.absoutput /= "0" + self.extension
223 
224  if self.absoutput.is_dir():
225  self._save_environment()
226 

◆ _prepare_single_output() [2/3]

None _prepare_single_output (   self)
private
Prepare the working area for a single-run command.
211  def _prepare_single_output(self) -> None:
212  """Prepare the working area for a single-run command."""
213 
214  if self.absoutput.exists():
215  if not os.access(self.absoutput, os.W_OK):
216  raise ValueError(self.absoutput + " is not writable")
217  if self.absoutput.is_dir():
218  self.absoutput /= "0" + self.extension
219  else:
220  if len(self.absoutput.suffix) == 0: # then assume it's a directory
221  self.absoutput.mkdir(parents=True)
222  self.absoutput /= "0" + self.extension
223 
224  if self.absoutput.is_dir():
225  self._save_environment()
226 

◆ _prepare_single_output() [3/3]

None _prepare_single_output (   self)
private
Prepare the working area for a single-run command.
211  def _prepare_single_output(self) -> None:
212  """Prepare the working area for a single-run command."""
213 
214  if self.absoutput.exists():
215  if not os.access(self.absoutput, os.W_OK):
216  raise ValueError(self.absoutput + " is not writable")
217  if self.absoutput.is_dir():
218  self.absoutput /= "0" + self.extension
219  else:
220  if len(self.absoutput.suffix) == 0: # then assume it's a directory
221  self.absoutput.mkdir(parents=True)
222  self.absoutput /= "0" + self.extension
223 
224  if self.absoutput.is_dir():
225  self._save_environment()
226 

◆ _save_environment() [1/3]

None _save_environment (   self)
private
Save environment in a file.
268  def _save_environment(self) -> None:
269  """Save environment in a file."""
270 
271  env = self.absoutput / ".env"
272  with open(env, "w") as f:
273  for key, value in os.environ.items():
274  if key in ["PWD", "OLDPWD", "TMPDIR"]:
275  continue
276  value = shlex.quote(value)
277  print(f"export {key}={value}", file=f)
278  os.chmod(env, stat.S_IRWXU)
279 

◆ _save_environment() [2/3]

None _save_environment (   self)
private
Save environment in a file.
268  def _save_environment(self) -> None:
269  """Save environment in a file."""
270 
271  env = self.absoutput / ".env"
272  with open(env, "w") as f:
273  for key, value in os.environ.items():
274  if key in ["PWD", "OLDPWD", "TMPDIR"]:
275  continue
276  value = shlex.quote(value)
277  print(f"export {key}={value}", file=f)
278  os.chmod(env, stat.S_IRWXU)
279 

◆ _save_environment() [3/3]

None _save_environment (   self)
private
Save environment in a file.
268  def _save_environment(self) -> None:
269  """Save environment in a file."""
270 
271  env = self.absoutput / ".env"
272  with open(env, "w") as f:
273  for key, value in os.environ.items():
274  if key in ["PWD", "OLDPWD", "TMPDIR"]:
275  continue
276  value = shlex.quote(value)
277  print(f"export {key}={value}", file=f)
278  os.chmod(env, stat.S_IRWXU)
279 

◆ _synopsis() [1/3]

List[str] _synopsis (   self)
private
Extract synopsis from helper (after undoing the bold characters).
184  def _synopsis(self) -> List[str]:
185  """Extract synopsis from helper (after undoing the bold characters)."""
186  synopsis = self.helper[0].replace("\x1b[1m", "").replace("\x1b[0m", "")
187  return synopsis.split()[1:]
188 

◆ _synopsis() [2/3]

List[str] _synopsis (   self)
private
Extract synopsis from helper (after undoing the bold characters).
184  def _synopsis(self) -> List[str]:
185  """Extract synopsis from helper (after undoing the bold characters)."""
186  synopsis = self.helper[0].replace("\x1b[1m", "").replace("\x1b[0m", "")
187  return synopsis.split()[1:]
188 

◆ _synopsis() [3/3]

List[str] _synopsis (   self)
private
Extract synopsis from helper (after undoing the bold characters).
184  def _synopsis(self) -> List[str]:
185  """Extract synopsis from helper (after undoing the bold characters)."""
186  synopsis = self.helper[0].replace("\x1b[1m", "").replace("\x1b[0m", "")
187  return synopsis.split()[1:]
188 

◆ clean_up_last_run() [1/3]

None clean_up_last_run (   self)
Removes the executable, libraries, hidden files, and dictionaries from the output directory.
307  def clean_up_last_run(self) -> None:
308  """Removes the executable, libraries, hidden files, and dictionaries from the output directory."""
309 
310  exec = Path(which(self.cmds.exec)).name
311 
312  for file in [exec, ".env", ".condor"]:
313  file = self.absoutput / Path(file)
314  if file.is_file():
315  os.remove(str(file))
316 
317  for ext in ["so", "pcm"]:
318  for file in glob(str(self.absoutput) + f"/*{ext}"):
319  print("Removing " + file)
320  os.remove(file)
321 
322 

◆ clean_up_last_run() [2/3]

None clean_up_last_run (   self)
Removes the executable, libraries, hidden files, and dictionaries from the output directory.
307  def clean_up_last_run(self) -> None:
308  """Removes the executable, libraries, hidden files, and dictionaries from the output directory."""
309 
310  exec = Path(which(self.cmds.exec)).name
311 
312  for file in [exec, ".env", ".condor"]:
313  file = self.absoutput / Path(file)
314  if file.is_file():
315  os.remove(str(file))
316 
317  for ext in ["so", "pcm"]:
318  for file in glob(str(self.absoutput) + f"/*{ext}"):
319  print("Removing " + file)
320  os.remove(file)
321 
322 

◆ clean_up_last_run() [3/3]

None clean_up_last_run (   self)
Removes the executable, libraries, hidden files, and dictionaries from the output directory.
307  def clean_up_last_run(self) -> None:
308  """Removes the executable, libraries, hidden files, and dictionaries from the output directory."""
309 
310  exec = Path(which(self.cmds.exec)).name
311 
312  for file in [exec, ".env", ".condor"]:
313  file = self.absoutput / Path(file)
314  if file.is_file():
315  os.remove(str(file))
316 
317  for ext in ["so", "pcm"]:
318  for file in glob(str(self.absoutput) + f"/*{ext}"):
319  print("Removing " + file)
320  os.remove(file)
321 
322 

◆ get_entries() [1/3]

int get_entries (   self,
  input 
)
Obtain the number of entries from input n-tuple.
202  def get_entries(self, input) -> int:
203  """Obtain the number of entries from input n-tuple."""
204 
205  output = check_output(["printEntries"] + [input.strip('\\"')])
206  nevents = int(output.decode().splitlines()[0].replace("\n", ""))
207  if nevents == 0:
208  raise ValueError("Empty input tree.")
209  return nevents
210 

◆ get_entries() [2/3]

int get_entries (   self,
  input 
)
Obtain the number of entries from input n-tuple.
202  def get_entries(self, input) -> int:
203  """Obtain the number of entries from input n-tuple."""
204 
205  output = check_output(["printEntries"] + [input.strip('\\"')])
206  nevents = int(output.decode().splitlines()[0].replace("\n", ""))
207  if nevents == 0:
208  raise ValueError("Empty input tree.")
209  return nevents
210 

◆ get_entries() [3/3]

int get_entries (   self,
  input 
)
Obtain the number of entries from input n-tuple.
202  def get_entries(self, input) -> int:
203  """Obtain the number of entries from input n-tuple."""
204 
205  output = check_output(["printEntries"] + [input.strip('\\"')])
206  nevents = int(output.decode().splitlines()[0].replace("\n", ""))
207  if nevents == 0:
208  raise ValueError("Empty input tree.")
209  return nevents
210 

◆ parse() [1/3]

None parse (   self,
List[str args 
)
Put input(s), output, and other arguments in dedicated members.
189  def parse(self, args: List[str]) -> None:
190  """Put input(s), output, and other arguments in dedicated members."""
191 
192  synopsis = self._synopsis()
193  i = synopsis.index("output")
194  if i >= len(args):
195  raise ValueError("Unable to identify `output` in given arguments")
196 
197  self.inputs = args[:i]
198  self.output = args[i]
199  if len(args) > i:
200  self.args = args[i + 1 :]
201 

◆ parse() [2/3]

None parse (   self,
List[str args 
)
Put input(s), output, and other arguments in dedicated members.
189  def parse(self, args: List[str]) -> None:
190  """Put input(s), output, and other arguments in dedicated members."""
191 
192  synopsis = self._synopsis()
193  i = synopsis.index("output")
194  if i >= len(args):
195  raise ValueError("Unable to identify `output` in given arguments")
196 
197  self.inputs = args[:i]
198  self.output = args[i]
199  if len(args) > i:
200  self.args = args[i + 1 :]
201 

◆ parse() [3/3]

None parse (   self,
List[str args 
)
Put input(s), output, and other arguments in dedicated members.
189  def parse(self, args: List[str]) -> None:
190  """Put input(s), output, and other arguments in dedicated members."""
191 
192  synopsis = self._synopsis()
193  i = synopsis.index("output")
194  if i >= len(args):
195  raise ValueError("Unable to identify `output` in given arguments")
196 
197  self.inputs = args[:i]
198  self.output = args[i]
199  if len(args) > i:
200  self.args = args[i + 1 :]
201 

◆ prepare_fire_and_forget() [1/3]

None prepare_fire_and_forget (   self)
Copies the executable, libraries, and dictionaries to the output directory.
292  def prepare_fire_and_forget(self) -> None:
293  """Copies the executable, libraries, and dictionaries to the output directory."""
294 
295  # copy executables and libraries to working directory
296  exec = Path(which(self.cmds.exec)).resolve()
297  copy_exec = self.absoutput / exec.name
298  if exec != copy_exec:
299  copy2(exec, self.output)
300  exec = copy_exec
301  self.cmds.exec = str(exec)
302 
303  for ext in ["so", "pcm"]:
304  for file in glob(os.environ["DARWIN_FIRE_AND_FORGET"] + f"/*{ext}"):
305  copy2(file, self.output)
306 

◆ prepare_fire_and_forget() [2/3]

None prepare_fire_and_forget (   self)
Copies the executable, libraries, and dictionaries to the output directory.
292  def prepare_fire_and_forget(self) -> None:
293  """Copies the executable, libraries, and dictionaries to the output directory."""
294 
295  # copy executables and libraries to working directory
296  exec = Path(which(self.cmds.exec)).resolve()
297  copy_exec = self.absoutput / exec.name
298  if exec != copy_exec:
299  copy2(exec, self.output)
300  exec = copy_exec
301  self.cmds.exec = str(exec)
302 
303  for ext in ["so", "pcm"]:
304  for file in glob(os.environ["DARWIN_FIRE_AND_FORGET"] + f"/*{ext}"):
305  copy2(file, self.output)
306 

◆ prepare_fire_and_forget() [3/3]

None prepare_fire_and_forget (   self)
Copies the executable, libraries, and dictionaries to the output directory.
292  def prepare_fire_and_forget(self) -> None:
293  """Copies the executable, libraries, and dictionaries to the output directory."""
294 
295  # copy executables and libraries to working directory
296  exec = Path(which(self.cmds.exec)).resolve()
297  copy_exec = self.absoutput / exec.name
298  if exec != copy_exec:
299  copy2(exec, self.output)
300  exec = copy_exec
301  self.cmds.exec = str(exec)
302 
303  for ext in ["so", "pcm"]:
304  for file in glob(os.environ["DARWIN_FIRE_AND_FORGET"] + f"/*{ext}"):
305  copy2(file, self.output)
306 

◆ prepare_io() [1/3]

None prepare_io (   self,
bool   multi = True 
)
Prepare input and output files and directories.
280  def prepare_io(self, multi: bool = True) -> None:
281  """Prepare input and output files and directories."""
282 
283  self._prepare_input()
284  self.absoutput = Path(self.output).resolve()
285 
286  if multi:
287  self.inputs = [shlex.quote(x) for x in self.inputs]
288  self._prepare_multi_output()
289  else:
290  self._prepare_single_output()
291 

◆ prepare_io() [2/3]

None prepare_io (   self,
bool   multi = True 
)
Prepare input and output files and directories.
280  def prepare_io(self, multi: bool = True) -> None:
281  """Prepare input and output files and directories."""
282 
283  self._prepare_input()
284  self.absoutput = Path(self.output).resolve()
285 
286  if multi:
287  self.inputs = [shlex.quote(x) for x in self.inputs]
288  self._prepare_multi_output()
289  else:
290  self._prepare_single_output()
291 

◆ prepare_io() [3/3]

None prepare_io (   self,
bool   multi = True 
)
Prepare input and output files and directories.
280  def prepare_io(self, multi: bool = True) -> None:
281  """Prepare input and output files and directories."""
282 
283  self._prepare_input()
284  self.absoutput = Path(self.output).resolve()
285 
286  if multi:
287  self.inputs = [shlex.quote(x) for x in self.inputs]
288  self._prepare_multi_output()
289  else:
290  self._prepare_single_output()
291 

Member Data Documentation

◆ absinputs

absinputs

◆ absoutput

absoutput

◆ args

args

◆ cmds

cmds

◆ extension

extension

◆ helper

helper

◆ inputs

inputs

◆ name

name

◆ nSplit

nSplit

◆ output

output

◆ Path

Path
static

◆ splittable

splittable

◆ str

str
static

The documentation for this class was generated from the following file:
transcribe.parse
def parse(List[str] argv)
Definition: transcribe.py:17
Darwin::Tools::split
@ split
activate -k and -j to define slice
Definition: Options.h:26
difference
double difference(double *x, double *p)
Definition: ModifiedGaussianCore.cc:10
metPhiCorrectionExample.range
range
Definition: metPhiCorrectionExample.py:100