ATLAS Offline Software
Public Member Functions | Public Attributes | Private Member Functions | Private Attributes | List of all members
python.trfExe.scriptExecutor Class Reference
Inheritance diagram for python.trfExe.scriptExecutor:
Collaboration diagram for python.trfExe.scriptExecutor:

Public Member Functions

def __init__ (self, name='Script', trf=None, conf=None, inData=set(), outData=set(), exe=None, exeArgs=None, memMonitor=True)
 
def exe (self)
 
def exe (self, value)
 
def exeArgs (self)
 
def exeArgs (self, value)
 
def preExecute (self, input=set(), output=set())
 
def execute (self)
 
def postExecute (self)
 
def validate (self)
 
def inData (self)
 
def inData (self, value)
 
def outData (self)
 
def outData (self, value)
 
def myMerger (self)
 Now define properties for these data members. More...
 
def name (self)
 
def name (self, value)
 
def substep (self)
 
def trf (self)
 
def trf (self, value)
 
def inDataUpdate (self, value)
 
def outDataUpdate (self, value)
 
def input (self)
 
def output (self)
 
def extraMetadata (self)
 
def hasExecuted (self)
 
def rc (self)
 
def errMsg (self)
 
def validation (self)
 
def validation (self, value)
 
def hasValidated (self)
 
def isValidated (self)
 
def first (self)
 
def preExeStartTimes (self)
 
def exeStartTimes (self)
 
def exeStopTimes (self)
 
def valStartTimes (self)
 
def valStopTimes (self)
 
def preExeCpuTime (self)
 
def preExeWallTime (self)
 
def cpuTime (self)
 
def usrTime (self)
 
def sysTime (self)
 
def wallTime (self)
 
def memStats (self)
 
def memAnalysis (self)
 
def postExeCpuTime (self)
 
def postExeWallTime (self)
 
def validationCpuTime (self)
 
def validationWallTime (self)
 
def cpuTimeTotal (self)
 
def wallTimeTotal (self)
 
def eventCount (self)
 
def reSimEvent (self)
 
def athenaMP (self)
 
def dbMonitor (self)
 
def setPreExeStart (self)
 
def setValStart (self)
 
def doAll (self, input=set(), output=set())
 Convenience function. More...
 

Public Attributes

 conf
 Executor configuration: More...
 
 inData
 
 outData
 

Private Member Functions

def _buildStandardCommand (self)
 

Private Attributes

 _exe
 
 _exeArgs
 
 _echoOutput
 
 _cmd
 
 _memMonitor
 
 _input
 
 _output
 
 _logFileName
 
 _echologger
 
 _exeLogFile
 
 _echostream
 
 _hasExecuted
 
 _exeStart
 
 _memSummaryFile
 
 _memFullFile
 
 _rc
 Check rc. More...
 
 _exeStop
 
 _memStats
 
 _valStart
 
 _hasValidated
 
 _isValidated
 
 _errMsg
 
 _eventCount
 Check event counts (always do this by default) Do this here so that all script executors have this by default (covers most use cases with events) More...
 
 _valStop
 
 _name
 
 _inData
 
 _outData
 
 _extraMetadata
 
 _preExeStart
 
 _memLeakResult
 
 _athenaMP
 
 _athenaMT
 
 _athenaConcurrentEvents
 
 _dbMonitor
 
 _resimevents
 
 _alreadyInContainer
 
 _containerSetup
 
 _myMerger
 
 _trf
 
 _validation
 

Detailed Description

Definition at line 619 of file trfExe.py.

Constructor & Destructor Documentation

◆ __init__()

def python.trfExe.scriptExecutor.__init__ (   self,
  name = 'Script',
  trf = None,
  conf = None,
  inData = set(),
  outData = set(),
  exe = None,
  exeArgs = None,
  memMonitor = True 
)

Reimplemented in python.trfExe.DQMPostProcessExecutor, and python.trfExe.DQMergeExecutor.

Definition at line 620 of file trfExe.py.

620  def __init__(self, name = 'Script', trf = None, conf = None, inData = set(), outData = set(),
621  exe = None, exeArgs = None, memMonitor = True):
622  # Name of the script we want to execute
623  self._exe = exe
624 
625  # With arguments (currently this means paste in the corresponding _argdict entry)
626  self._exeArgs = exeArgs
627 
628  super(scriptExecutor, self).__init__(name=name, trf=trf, conf=conf, inData=inData, outData=outData)
629 
630  self._extraMetadata.update({'script' : exe})
631 
632  # Decide if we echo script output to stdout
633  self._echoOutput = False
634 
635  # Can either be written by base class or child
636  self._cmd = None
637 
638  self._memMonitor = memMonitor
639 

Member Function Documentation

◆ _buildStandardCommand()

def python.trfExe.scriptExecutor._buildStandardCommand (   self)
private

Definition at line 706 of file trfExe.py.

706  def _buildStandardCommand(self):
707  if self._exe:
708  self._cmd = [self.exe, ]
709  else:
710  raise trfExceptions.TransformExecutionException(trfExit.nameToCode('TRF_EXEC_SETUP_FAIL'),
711  'No executor set in {0}'.format(self.__class__.__name__))
712  for arg in self.exeArgs:
713  if arg in self.conf.argdict:
714  # If we have a list then add each element to our list, else just str() the argument value
715  # Note if there are arguments which need more complex transformations then
716  # consider introducing a special toExeArg() method.
717  if isinstance(self.conf.argdict[arg].value, list):
718  self._cmd.extend([ str(v) for v in self.conf.argdict[arg].value])
719  else:
720  self._cmd.append(str(self.conf.argdict[arg].value))
721 
722 

◆ athenaMP()

def python.trfExe.transformExecutor.athenaMP (   self)
inherited

Definition at line 452 of file trfExe.py.

452  def athenaMP(self):
453  return self._athenaMP
454 

◆ cpuTime()

def python.trfExe.transformExecutor.cpuTime (   self)
inherited

Definition at line 366 of file trfExe.py.

366  def cpuTime(self):
367  if self._exeStart and self._exeStop:
368  return calcCpuTime(self._exeStart, self._exeStop)
369  else:
370  return None
371 

◆ cpuTimeTotal()

def python.trfExe.transformExecutor.cpuTimeTotal (   self)
inherited

Definition at line 430 of file trfExe.py.

430  def cpuTimeTotal(self):
431  if self._preExeStart and self._valStop:
432  return calcCpuTime(self._preExeStart, self._valStop)
433  else:
434  return None
435 

◆ dbMonitor()

def python.trfExe.transformExecutor.dbMonitor (   self)
inherited

Definition at line 456 of file trfExe.py.

456  def dbMonitor(self):
457  return self._dbMonitor
458 
459 

◆ doAll()

def python.trfExe.transformExecutor.doAll (   self,
  input = set(),
  output = set() 
)
inherited

Convenience function.

Definition at line 499 of file trfExe.py.

499  def doAll(self, input=set(), output=set()):
500  self.preExecute(input, output)
501  self.execute()
502  self.postExecute()
503  self.validate()
504 

◆ errMsg()

def python.trfExe.transformExecutor.errMsg (   self)
inherited

Definition at line 304 of file trfExe.py.

304  def errMsg(self):
305  return self._errMsg
306 

◆ eventCount()

def python.trfExe.transformExecutor.eventCount (   self)
inherited

Definition at line 444 of file trfExe.py.

444  def eventCount(self):
445  return self._eventCount
446 

◆ exe() [1/2]

def python.trfExe.scriptExecutor.exe (   self)

Definition at line 641 of file trfExe.py.

641  def exe(self):
642  return self._exe
643 

◆ exe() [2/2]

def python.trfExe.scriptExecutor.exe (   self,
  value 
)

Definition at line 645 of file trfExe.py.

645  def exe(self, value):
646  self._exe = value
647  self._extraMetadata['script'] = value
648 

◆ exeArgs() [1/2]

def python.trfExe.scriptExecutor.exeArgs (   self)

Definition at line 650 of file trfExe.py.

650  def exeArgs(self):
651  return self._exeArgs
652 

◆ exeArgs() [2/2]

def python.trfExe.scriptExecutor.exeArgs (   self,
  value 
)

Definition at line 654 of file trfExe.py.

654  def exeArgs(self, value):
655  self._exeArgs = value
656 # self._extraMetadata['scriptArgs'] = value
657 

◆ execute()

def python.trfExe.scriptExecutor.execute (   self)

Reimplemented from python.trfExe.transformExecutor.

Reimplemented in python.trfExe.bsMergeExecutor, and python.trfExe.POOLMergeExecutor.

Definition at line 723 of file trfExe.py.

723  def execute(self):
724  self._hasExecuted = True
725  msg.info('Starting execution of {0} ({1})'.format(self._name, self._cmd))
726 
727  self._exeStart = os.times()
728  msg.debug('exeStart time is {0}'.format(self._exeStart))
729  if ('execOnly' in self.conf.argdict and self.conf.argdict['execOnly'] is True):
730  msg.info('execOnly flag is set - execution will now switch, replacing the transform')
731  os.execvp(self._cmd[0], self._cmd)
732 
733  encargs = {'encoding' : 'utf8'}
734  try:
735  # if we are already inside a container, then
736  # must map /srv of the nested container to /srv of the parent container:
737  # https://twiki.atlas-canada.ca/bin/view/AtlasCanada/Containers#Mount_point_summary
738  if self._alreadyInContainer and self._containerSetup is not None:
739  msg.info("chdir /srv to launch a nested container for the substep")
740  os.chdir("/srv")
741  p = subprocess.Popen(self._cmd, shell = False, stdout = subprocess.PIPE, stderr = subprocess.STDOUT, bufsize = 1, **encargs)
742  # go back to the original working directory immediately after to store prmon in it
743  if self._alreadyInContainer and self._containerSetup is not None:
744  msg.info("chdir {} after launching the nested container".format(self._workdir))
745  os.chdir(self._workdir)
746 
747  if self._memMonitor:
748  try:
749  self._memSummaryFile = 'prmon.summary.' + self._name + '.json'
750  self._memFullFile = 'prmon.full.' + self._name
751  memMonitorCommand = ['prmon', '--pid', str(p.pid), '--filename', 'prmon.full.' + self._name,
752  '--json-summary', self._memSummaryFile, '--log-filename', 'prmon.' + self._name + '.log',
753  '--interval', '30']
754  mem_proc = subprocess.Popen(memMonitorCommand, shell = False, close_fds=True, **encargs)
755  # TODO - link mem.full.current to mem.full.SUBSTEP
756  except Exception as e:
757  msg.warning('Failed to spawn memory monitor for {0}: {1}'.format(self._name, e))
758  self._memMonitor = False
759 
760  while p.poll() is None:
761  line = p.stdout.readline()
762  if line:
763  self._echologger.info(line.rstrip())
764  # Hoover up remaining buffered output lines
765  for line in p.stdout:
766  self._echologger.info(line.rstrip())
767 
768  self._rc = p.returncode
769  msg.info('%s executor returns %d', self._name, self._rc)
770  self._exeStop = os.times()
771  msg.debug('exeStop time is {0}'.format(self._exeStop))
772  except OSError as e:
773  errMsg = 'Execution of {0} failed and raised OSError: {1}'.format(self._cmd[0], e)
774  msg.error(errMsg)
775  raise trfExceptions.TransformExecutionException(trfExit.nameToCode('TRF_EXEC'), errMsg)
776  finally:
777  if self._memMonitor:
778  try:
779  mem_proc.send_signal(signal.SIGUSR1)
780  countWait = 0
781  while (not mem_proc.poll()) and countWait < 10:
782  time.sleep(0.1)
783  countWait += 1
784  except OSError:
785  pass
786 
787 

◆ exeStartTimes()

def python.trfExe.transformExecutor.exeStartTimes (   self)
inherited

Definition at line 336 of file trfExe.py.

336  def exeStartTimes(self):
337  return self._exeStart
338 

◆ exeStopTimes()

def python.trfExe.transformExecutor.exeStopTimes (   self)
inherited

Definition at line 340 of file trfExe.py.

340  def exeStopTimes(self):
341  return self._exeStop
342 

◆ extraMetadata()

def python.trfExe.transformExecutor.extraMetadata (   self)
inherited

Definition at line 292 of file trfExe.py.

292  def extraMetadata(self):
293  return self._extraMetadata
294 

◆ first()

def python.trfExe.transformExecutor.first (   self)
inherited
Note
At the moment only athenaExecutor sets this property, but that might be changed...

Definition at line 325 of file trfExe.py.

325  def first(self):
326  if hasattr(self, '_first'):
327  return self._first
328  else:
329  return None
330 

◆ hasExecuted()

def python.trfExe.transformExecutor.hasExecuted (   self)
inherited

Definition at line 296 of file trfExe.py.

296  def hasExecuted(self):
297  return self._hasExecuted
298 

◆ hasValidated()

def python.trfExe.transformExecutor.hasValidated (   self)
inherited

Definition at line 316 of file trfExe.py.

316  def hasValidated(self):
317  return self._hasValidated
318 

◆ inData() [1/2]

def python.trfExe.transformExecutor.inData (   self)
inherited

Definition at line 235 of file trfExe.py.

235  def inData(self):
236 
237  if '_inData' in dir(self):
238  return self._inData
239  return None
240 

◆ inData() [2/2]

def python.trfExe.transformExecutor.inData (   self,
  value 
)
inherited

Definition at line 242 of file trfExe.py.

242  def inData(self, value):
243  self._inData = set(value)
244 

◆ inDataUpdate()

def python.trfExe.transformExecutor.inDataUpdate (   self,
  value 
)
inherited

Definition at line 245 of file trfExe.py.

245  def inDataUpdate(self, value):
246 
247  if '_inData' in dir(self):
248  self._inData.update(value)
249  else:
250 
251  self.inData = value
252 
253 

◆ input()

def python.trfExe.transformExecutor.input (   self)
inherited
Note
This returns the actual input data with which this executor ran (c.f. inData which returns all the possible data types this executor could run with)

Definition at line 276 of file trfExe.py.

276  def input(self):
277 
278  if '_input' in dir(self):
279  return self._input
280  return None
281 

◆ isValidated()

def python.trfExe.transformExecutor.isValidated (   self)
inherited

Definition at line 320 of file trfExe.py.

320  def isValidated(self):
321  return self._isValidated
322 

◆ memAnalysis()

def python.trfExe.transformExecutor.memAnalysis (   self)
inherited

Definition at line 398 of file trfExe.py.

398  def memAnalysis(self):
399  return self._memLeakResult
400 

◆ memStats()

def python.trfExe.transformExecutor.memStats (   self)
inherited

Definition at line 394 of file trfExe.py.

394  def memStats(self):
395  return self._memStats
396 

◆ myMerger()

def python.trfExe.transformExecutor.myMerger (   self)
inherited

Now define properties for these data members.

Definition at line 207 of file trfExe.py.

207  def myMerger(self):
208  return self._myMerger
209 

◆ name() [1/2]

def python.trfExe.transformExecutor.name (   self)
inherited

Definition at line 211 of file trfExe.py.

211  def name(self):
212  return self._name
213 

◆ name() [2/2]

def python.trfExe.transformExecutor.name (   self,
  value 
)
inherited

Definition at line 215 of file trfExe.py.

215  def name(self, value):
216  self._name = value
217 

◆ outData() [1/2]

def python.trfExe.transformExecutor.outData (   self)
inherited

Definition at line 255 of file trfExe.py.

255  def outData(self):
256 
257  if '_outData' in dir(self):
258  return self._outData
259  return None
260 

◆ outData() [2/2]

def python.trfExe.transformExecutor.outData (   self,
  value 
)
inherited

Definition at line 262 of file trfExe.py.

262  def outData(self, value):
263  self._outData = set(value)
264 

◆ outDataUpdate()

def python.trfExe.transformExecutor.outDataUpdate (   self,
  value 
)
inherited

Definition at line 265 of file trfExe.py.

265  def outDataUpdate(self, value):
266 
267  if '_outData' in dir(self):
268  self._outData.update(value)
269  else:
270 
271  self.outData = value
272 

◆ output()

def python.trfExe.transformExecutor.output (   self)
inherited
Note
This returns the actual output data with which this executor ran (c.f. outData which returns all the possible data types this executor could run with)

Definition at line 285 of file trfExe.py.

285  def output(self):
286 
287  if '_output' in dir(self):
288  return self._output
289  return None
290 

◆ postExeCpuTime()

def python.trfExe.transformExecutor.postExeCpuTime (   self)
inherited

Definition at line 402 of file trfExe.py.

402  def postExeCpuTime(self):
403  if self._exeStop and self._valStart:
404  return calcCpuTime(self._exeStop, self._valStart)
405  else:
406  return None
407 

◆ postExecute()

def python.trfExe.scriptExecutor.postExecute (   self)

Reimplemented from python.trfExe.transformExecutor.

Reimplemented in python.trfExe.bsMergeExecutor, and python.trfExe.athenaExecutor.

Definition at line 788 of file trfExe.py.

788  def postExecute(self):
789  if hasattr(self._exeLogFile, 'close'):
790  self._exeLogFile.close()
791  if self._memMonitor:
792  try:
793  memFile = open(self._memSummaryFile)
794  self._memStats = json.load(memFile)
795  except Exception as e:
796  msg.warning('Failed to load JSON memory summmary file {0}: {1}'.format(self._memSummaryFile, e))
797  self._memMonitor = False
798  self._memStats = {}
799 
800 

◆ postExeWallTime()

def python.trfExe.transformExecutor.postExeWallTime (   self)
inherited

Definition at line 409 of file trfExe.py.

409  def postExeWallTime(self):
410  if self._exeStop and self._valStart:
411  return calcWallTime(self._exeStop, self._valStart)
412  else:
413  return None
414 

◆ preExeCpuTime()

def python.trfExe.transformExecutor.preExeCpuTime (   self)
inherited

Definition at line 352 of file trfExe.py.

352  def preExeCpuTime(self):
353  if self._preExeStart and self._exeStart:
354  return calcCpuTime(self._preExeStart, self._exeStart)
355  else:
356  return None
357 

◆ preExecute()

def python.trfExe.scriptExecutor.preExecute (   self,
  input = set(),
  output = set() 
)

Reimplemented from python.trfExe.transformExecutor.

Reimplemented in python.trfExe.archiveExecutor, python.trfExe.bsMergeExecutor, python.trfExe.NTUPMergeExecutor, python.trfExe.DQMPostProcessExecutor, python.trfExe.DQMergeExecutor, python.trfExe.reductionFrameworkExecutor, python.trfExe.POOLMergeExecutor, and python.trfExe.athenaExecutor.

Definition at line 658 of file trfExe.py.

658  def preExecute(self, input = set(), output = set()):
659  self.setPreExeStart()
660  msg.debug('scriptExecutor: Preparing for execution of {0} with inputs {1} and outputs {2}'.format(self.name, input, output))
661 
662  self._input = input
663  self._output = output
664 
665 
666  if self._cmd is None:
667  self._buildStandardCommand()
668  msg.info('Will execute script as %s', self._cmd)
669 
670  # Define this here to have it for environment detection messages
671  self._logFileName = "log.{0}".format(self._name)
672 
673 
675  if 'TRF_ECHO' in os.environ:
676  msg.info('TRF_ECHO envvar is set - enabling command echoing to stdout')
677  self._echoOutput = True
678  elif 'TRF_NOECHO' in os.environ:
679  msg.info('TRF_NOECHO envvar is set - disabling command echoing to stdout')
680  self._echoOutput = False
681  # PS1 is for sh, bash; prompt is for tcsh and zsh
682  elif isInteractiveEnv():
683  msg.info('Interactive environment detected (stdio or stdout is a tty) - enabling command echoing to stdout')
684  self._echoOutput = True
685  elif 'TZHOME' in os.environ:
686  msg.info('Tier-0 environment detected - enabling command echoing to stdout')
687  self._echoOutput = True
688  if self._echoOutput is False:
689  msg.info('Batch/grid running - command outputs will not be echoed. Logs for {0} are in {1}'.format(self._name, self._logFileName))
690 
691  # Now setup special loggers for logging execution messages to stdout and file
692  self._echologger = logging.getLogger(self._name)
693  self._echologger.setLevel(logging.INFO)
694  self._echologger.propagate = False
695 
696  encargs = {'encoding' : 'utf-8'}
697  self._exeLogFile = logging.FileHandler(self._logFileName, mode='w', **encargs)
698  self._exeLogFile.setFormatter(logging.Formatter('%(asctime)s %(message)s', datefmt='%H:%M:%S'))
699  self._echologger.addHandler(self._exeLogFile)
700 
701  if self._echoOutput:
702  self._echostream = logging.StreamHandler(_encoding_stream(sys.stdout))
703  self._echostream.setFormatter(logging.Formatter('%(name)s %(asctime)s %(message)s', datefmt='%H:%M:%S'))
704  self._echologger.addHandler(self._echostream)
705 

◆ preExeStartTimes()

def python.trfExe.transformExecutor.preExeStartTimes (   self)
inherited

Definition at line 332 of file trfExe.py.

332  def preExeStartTimes(self):
333  return self._preExeStart
334 

◆ preExeWallTime()

def python.trfExe.transformExecutor.preExeWallTime (   self)
inherited

Definition at line 359 of file trfExe.py.

359  def preExeWallTime(self):
360  if self._preExeStart and self._exeStart:
361  return calcWallTime(self._preExeStart, self._exeStart)
362  else:
363  return None
364 

◆ rc()

def python.trfExe.transformExecutor.rc (   self)
inherited

Definition at line 300 of file trfExe.py.

300  def rc(self):
301  return self._rc
302 

◆ reSimEvent()

def python.trfExe.transformExecutor.reSimEvent (   self)
inherited

Definition at line 448 of file trfExe.py.

448  def reSimEvent(self):
449  return self._resimevents
450 

◆ setPreExeStart()

def python.trfExe.transformExecutor.setPreExeStart (   self)
inherited

Definition at line 461 of file trfExe.py.

461  def setPreExeStart(self):
462  if self._preExeStart is None:
463  self._preExeStart = os.times()
464  msg.debug('preExeStart time is {0}'.format(self._preExeStart))
465 

◆ setValStart()

def python.trfExe.transformExecutor.setValStart (   self)
inherited

Definition at line 466 of file trfExe.py.

466  def setValStart(self):
467  if self._valStart is None:
468  self._valStart = os.times()
469  msg.debug('valStart time is {0}'.format(self._valStart))
470 

◆ substep()

def python.trfExe.transformExecutor.substep (   self)
inherited

Reimplemented in python.trfExe.athenaExecutor.

Definition at line 219 of file trfExe.py.

219  def substep(self):
220  if '_substep' in dir(self):
221  return self._substep
222  return None
223 

◆ sysTime()

def python.trfExe.transformExecutor.sysTime (   self)
inherited

Definition at line 380 of file trfExe.py.

380  def sysTime(self):
381  if self._exeStart and self._exeStop:
382  return self._exeStop[3] - self._exeStart[3]
383  else:
384  return None
385 

◆ trf() [1/2]

def python.trfExe.transformExecutor.trf (   self)
inherited

Definition at line 225 of file trfExe.py.

225  def trf(self):
226  if '_trf' in dir(self):
227  return self._trf
228  return None
229 

◆ trf() [2/2]

def python.trfExe.transformExecutor.trf (   self,
  value 
)
inherited

Definition at line 231 of file trfExe.py.

231  def trf(self, value):
232  self._trf = value
233 

◆ usrTime()

def python.trfExe.transformExecutor.usrTime (   self)
inherited

Definition at line 373 of file trfExe.py.

373  def usrTime(self):
374  if self._exeStart and self._exeStop:
375  return self._exeStop[2] - self._exeStart[2]
376  else:
377  return None
378 

◆ validate()

def python.trfExe.scriptExecutor.validate (   self)

Reimplemented from python.trfExe.transformExecutor.

Reimplemented in python.trfExe.DQMPostProcessExecutor, python.trfExe.DQMergeExecutor, python.trfExe.optionalAthenaExecutor, and python.trfExe.athenaExecutor.

Definition at line 801 of file trfExe.py.

801  def validate(self):
802  if self._valStart is None:
803  self._valStart = os.times()
804  msg.debug('valStart time is {0}'.format(self._valStart))
805  self._hasValidated = True
806 
807 
808  if self._rc == 0:
809  msg.info('Executor {0} validated successfully (return code {1})'.format(self._name, self._rc))
810  self._isValidated = True
811  self._errMsg = ''
812  else:
813  # Want to learn as much as possible from the non-zero code
814  # this is a bit hard in general, although one can do signals.
815  # Probably need to be more specific per exe, i.e., athena non-zero codes
816  self._isValidated = False
817  if self._rc < 0:
818  # Map return codes to what the shell gives (128 + SIGNUM)
819  self._rc = 128 - self._rc
820  if trfExit.codeToSignalname(self._rc) != "":
821  self._errMsg = '{0} got a {1} signal (exit code {2})'.format(self._name, trfExit.codeToSignalname(self._rc), self._rc)
822  else:
823  self._errMsg = 'Non-zero return code from %s (%d)' % (self._name, self._rc)
824  raise trfExceptions.TransformValidationException(trfExit.nameToCode('TRF_EXEC_FAIL'), self._errMsg)
825 
826 
828  if 'checkEventCount' in self.conf.argdict and self.conf.argdict['checkEventCount'].returnMyValue(exe=self) is False:
829  msg.info('Event counting for substep {0} is skipped'.format(self.name))
830  else:
831  if 'mpi' in self.conf.argdict and not mpi.mpiShouldValidate():
832  msg.info('MPI mode -- skipping output event count check')
833  else:
834  checkcount=trfValidation.eventMatch(self)
835  checkcount.decide()
836  self._eventCount = checkcount.eventCount
837  msg.info('Event counting for substep {0} passed'.format(self.name))
838 
839  self._valStop = os.times()
840  msg.debug('valStop time is {0}'.format(self._valStop))
841 
842 
843 

◆ validation() [1/2]

def python.trfExe.transformExecutor.validation (   self)
inherited

Definition at line 308 of file trfExe.py.

308  def validation(self):
309  return self._validation
310 

◆ validation() [2/2]

def python.trfExe.transformExecutor.validation (   self,
  value 
)
inherited

Definition at line 312 of file trfExe.py.

312  def validation(self, value):
313  self._validation = value
314 

◆ validationCpuTime()

def python.trfExe.transformExecutor.validationCpuTime (   self)
inherited

Definition at line 416 of file trfExe.py.

416  def validationCpuTime(self):
417  if self._valStart and self._valStop:
418  return calcCpuTime(self._valStart, self._valStop)
419  else:
420  return None
421 

◆ validationWallTime()

def python.trfExe.transformExecutor.validationWallTime (   self)
inherited

Definition at line 423 of file trfExe.py.

423  def validationWallTime(self):
424  if self._valStart and self._valStop:
425  return calcWallTime(self._valStart, self._valStop)
426  else:
427  return None
428 

◆ valStartTimes()

def python.trfExe.transformExecutor.valStartTimes (   self)
inherited

Definition at line 344 of file trfExe.py.

344  def valStartTimes(self):
345  return self._valStart
346 

◆ valStopTimes()

def python.trfExe.transformExecutor.valStopTimes (   self)
inherited

Definition at line 348 of file trfExe.py.

348  def valStopTimes(self):
349  return self._valStop
350 

◆ wallTime()

def python.trfExe.transformExecutor.wallTime (   self)
inherited

Definition at line 387 of file trfExe.py.

387  def wallTime(self):
388  if self._exeStart and self._exeStop:
389  return calcWallTime(self._exeStart, self._exeStop)
390  else:
391  return None
392 

◆ wallTimeTotal()

def python.trfExe.transformExecutor.wallTimeTotal (   self)
inherited

Definition at line 437 of file trfExe.py.

437  def wallTimeTotal(self):
438  if self._preExeStart and self._valStop:
439  return calcWallTime(self._preExeStart, self._valStop)
440  else:
441  return None
442 

Member Data Documentation

◆ _alreadyInContainer

python.trfExe.transformExecutor._alreadyInContainer
privateinherited

Definition at line 198 of file trfExe.py.

◆ _athenaConcurrentEvents

python.trfExe.transformExecutor._athenaConcurrentEvents
privateinherited

Definition at line 195 of file trfExe.py.

◆ _athenaMP

python.trfExe.transformExecutor._athenaMP
privateinherited

Definition at line 193 of file trfExe.py.

◆ _athenaMT

python.trfExe.transformExecutor._athenaMT
privateinherited

Definition at line 194 of file trfExe.py.

◆ _cmd

python.trfExe.scriptExecutor._cmd
private

Definition at line 635 of file trfExe.py.

◆ _containerSetup

python.trfExe.transformExecutor._containerSetup
privateinherited

Definition at line 199 of file trfExe.py.

◆ _dbMonitor

python.trfExe.transformExecutor._dbMonitor
privateinherited

Definition at line 196 of file trfExe.py.

◆ _echologger

python.trfExe.scriptExecutor._echologger
private

Definition at line 692 of file trfExe.py.

◆ _echoOutput

python.trfExe.scriptExecutor._echoOutput
private
Note
Query the environment for echo configuration Let the manual envars always win over auto-detected settings

Definition at line 632 of file trfExe.py.

◆ _echostream

python.trfExe.scriptExecutor._echostream
private

Definition at line 702 of file trfExe.py.

◆ _errMsg

python.trfExe.scriptExecutor._errMsg
private

Definition at line 811 of file trfExe.py.

◆ _eventCount

python.trfExe.scriptExecutor._eventCount
private

Check event counts (always do this by default) Do this here so that all script executors have this by default (covers most use cases with events)

Definition at line 836 of file trfExe.py.

◆ _exe

python.trfExe.scriptExecutor._exe
private

Definition at line 622 of file trfExe.py.

◆ _exeArgs

python.trfExe.scriptExecutor._exeArgs
private

Definition at line 625 of file trfExe.py.

◆ _exeLogFile

python.trfExe.scriptExecutor._exeLogFile
private

Definition at line 697 of file trfExe.py.

◆ _exeStart

python.trfExe.scriptExecutor._exeStart
private

Definition at line 727 of file trfExe.py.

◆ _exeStop

python.trfExe.scriptExecutor._exeStop
private

Definition at line 770 of file trfExe.py.

◆ _extraMetadata

python.trfExe.transformExecutor._extraMetadata
privateinherited

Definition at line 181 of file trfExe.py.

◆ _hasExecuted

python.trfExe.scriptExecutor._hasExecuted
private

Definition at line 724 of file trfExe.py.

◆ _hasValidated

python.trfExe.scriptExecutor._hasValidated
private

Definition at line 805 of file trfExe.py.

◆ _inData

python.trfExe.transformExecutor._inData
privateinherited

Definition at line 144 of file trfExe.py.

◆ _input

python.trfExe.scriptExecutor._input
private

Definition at line 662 of file trfExe.py.

◆ _isValidated

python.trfExe.scriptExecutor._isValidated
private

Definition at line 810 of file trfExe.py.

◆ _logFileName

python.trfExe.scriptExecutor._logFileName
private
Note
If an inherited class has set self._cmd leave it alone

Definition at line 671 of file trfExe.py.

◆ _memFullFile

python.trfExe.scriptExecutor._memFullFile
private

Definition at line 750 of file trfExe.py.

◆ _memLeakResult

python.trfExe.transformExecutor._memLeakResult
privateinherited

Definition at line 190 of file trfExe.py.

◆ _memMonitor

python.trfExe.scriptExecutor._memMonitor
private

Definition at line 637 of file trfExe.py.

◆ _memStats

python.trfExe.scriptExecutor._memStats
private

Definition at line 794 of file trfExe.py.

◆ _memSummaryFile

python.trfExe.scriptExecutor._memSummaryFile
private

Definition at line 749 of file trfExe.py.

◆ _myMerger

python.trfExe.transformExecutor._myMerger
privateinherited

Definition at line 202 of file trfExe.py.

◆ _name

python.trfExe.transformExecutor._name
privateinherited

Definition at line 141 of file trfExe.py.

◆ _outData

python.trfExe.transformExecutor._outData
privateinherited

Definition at line 145 of file trfExe.py.

◆ _output

python.trfExe.scriptExecutor._output
private

Definition at line 663 of file trfExe.py.

◆ _preExeStart

python.trfExe.transformExecutor._preExeStart
privateinherited
Note
Place holders for resource consumption. CPU and walltime are available for all executors but currently only athena is instrumented to fill in memory stats (and then only if PerfMonSD is enabled).

Definition at line 186 of file trfExe.py.

◆ _rc

python.trfExe.scriptExecutor._rc
private

Check rc.

Definition at line 768 of file trfExe.py.

◆ _resimevents

python.trfExe.transformExecutor._resimevents
privateinherited

Definition at line 197 of file trfExe.py.

◆ _trf

python.trfExe.transformExecutor._trf
privateinherited

Definition at line 232 of file trfExe.py.

◆ _validation

python.trfExe.transformExecutor._validation
privateinherited

Definition at line 313 of file trfExe.py.

◆ _valStart

python.trfExe.scriptExecutor._valStart
private

Definition at line 803 of file trfExe.py.

◆ _valStop

python.trfExe.scriptExecutor._valStop
private

Definition at line 839 of file trfExe.py.

◆ conf

python.trfExe.transformExecutor.conf
inherited

Executor configuration:

Note
that if conf and trf are None then we'll probably set the conf up later (this is allowed and expected to be done once the master transform has figured out what it's doing for this job)

Definition at line 163 of file trfExe.py.

◆ inData

python.trfExe.transformExecutor.inData
inherited
Note
Protect against _inData not yet being defined
Use normal setter

Definition at line 251 of file trfExe.py.

◆ outData

python.trfExe.transformExecutor.outData
inherited
Note
Protect against _outData not yet being defined
Use normal setter

Definition at line 271 of file trfExe.py.


The documentation for this class was generated from the following file:
python.trfUtils.isInteractiveEnv
def isInteractiveEnv()
Definition: trfUtils.py:703
validation
Definition: validation.py:1
validation.validate
def validate(testSampleDir, thisSampleName, testSamplePath, weight_database, outputSamples)
Definition: validation.py:26
vtune_athena.format
format
Definition: vtune_athena.py:14
python.trfUtils.calcCpuTime
def calcCpuTime(start, stop)
Definition: trfUtils.py:1684
python.trfExe._encoding_stream
def _encoding_stream(s)
Definition: trfExe.py:45
dumpHVPathFromNtuple.append
bool append
Definition: dumpHVPathFromNtuple.py:91
LArG4FSStartPointFilterLegacy.execute
execute
Definition: LArG4FSStartPointFilterLegacy.py:20
pool::DbPrintLvl::setLevel
void setLevel(MsgLevel l)
Definition: DbPrint.h:32
beamspotman.dir
string dir
Definition: beamspotman.py:621
CxxUtils::set
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
Definition: bitmask.h:232
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
python.trfUtils.calcWallTime
def calcWallTime(start, stop)
Definition: trfUtils.py:1692
python.processes.powheg.ZZ.ZZ.__init__
def __init__(self, base_directory, **kwargs)
Constructor: all process options are set here.
Definition: ZZ.py:18
Trk::open
@ open
Definition: BinningType.h:40
ActsTrk::detail::MakeDerivedVariant::extend
constexpr std::variant< Args..., T > extend(const std::variant< Args... > &, const T &)
Definition: MakeDerivedVariant.h:17
DeMoScan.first
bool first
Definition: DeMoScan.py:534
str
Definition: BTagTrackIpAccessor.cxx:11
CaloLCW_tf.trf
trf
Definition: CaloLCW_tf.py:20
python.ParticleTypeUtil.info
def info
Definition: ParticleTypeUtil.py:87