diff --git a/Reconstruction/RecJobTransforms/python/recoTransforms.py b/Reconstruction/RecJobTransforms/python/recoTransforms.py index b5c79d635281483d480205b61d4ebd08b5ee2632..e1c8fce8be43cba6b0c6fcaa29e0aaca9a435bd8 100644 --- a/Reconstruction/RecJobTransforms/python/recoTransforms.py +++ b/Reconstruction/RecJobTransforms/python/recoTransforms.py @@ -2,7 +2,7 @@ ## @brief Specialist reconstruction and bytestream transforms # @author atlas-comp-jt-dev@cern.ch -# @version $Id: recoTransforms.py 609797 2014-08-01 14:51:02Z graemes $ +# @version $Id: recoTransforms.py 611371 2014-08-12 09:21:15Z seuster $ import os import re @@ -68,11 +68,11 @@ class skimRawExecutor(scriptExecutor): count += 1 except ValueError, e: msg.warning("Failed to understand this line from master filter file: {0} {1}".format(line, e)) - if count == 0: - # If there are no matched events, create a bogus request for run and event 0 to keep - # AtlCopyBSEvent.exe CLI - msg.info("No events matched in this input file - empty RAW file output will be made") - os.write(slimFF.fileno(), "0 0\n") + if count == 0: + # If there are no matched events, create a bogus request for run and event 0 to keep + # AtlCopyBSEvent.exe CLI + msg.info("No events matched in this input file - empty RAW file output will be made") + os.write(slimFF.fileno(), "0 0\n") msg.info("Matched {0} lines from the master filter file against input events; wrote these to {1}".format(count, slimmedFilterFile)) # Build up the right command line for acmd.py diff --git a/Reconstruction/RecJobTransforms/scripts/DigiMReco_trf.py b/Reconstruction/RecJobTransforms/scripts/DigiMReco_trf.py deleted file mode 100755 index 92a5583443bd48b03fe276d7c6e047fa30efacde..0000000000000000000000000000000000000000 --- a/Reconstruction/RecJobTransforms/scripts/DigiMReco_trf.py +++ /dev/null @@ -1,500 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -__doc__ ="""Specialist transform to run digitisation, followed by multiple -reconstruction steps, each with configurable trigger menus. Individual ESDs -are merged then AOD/TAG generated.""" - -import shutil, ast, sys, os - -from PyJobTransformsCore.trf import Author,JobReport -from SimuJobTransforms.Digi_trf import HITtoRDOJobTransform -from RecJobTransforms.RDOtoRDOTrigger_trf import RDOtoRDOTriggerJobTransform -from RecJobTransforms.RAWtoESD_trf import RAWtoESDJobTransform -from RecJobTransforms.ESDtoAOD_trf import ESDtoAODJobTransform -from PATJobTransforms.ESDtoDPD_trf import ESDtoDPDJobTransform -from PATJobTransforms.MergePool_trf import MergePoolJobTransform -from PATJobTransforms.ArgDicTools import DefaultConfigFromSysArgv -from PATJobTransforms.BaseOfCompositeTrf import BaseOfCompositeTrf -from PATJobTransforms.DQHistogramMerge_trf import DQHistogramMergeJobTransform -from PyJobTransformsCore.trferr import TransformDefinitionError - - -# Note0: ListOfDefaultPositionalKeys needs to be maintained by hand, to support 'grep' from ProdSys (arg!) -# Note1: Adding preInclude_h2r/r2e/e2a (and co.) to the ListOfDefaultPositionalKeys is a particular hack for prodsys -# to know that these are valid - it's not used at all by the trf, which does its usual mapping as key_substep -ListOfDefaultPositionalKeys=['inputHitsFile','outputRDOFile','outputESDFile','outputAODFile','outputTAGFile','outputHISTFile','outputDESD_MBIASFile','outputDESDM_EGAMMAFile','outputDESDM_MUONFile','outputDESD_CALJETFile','outputDESDM_TRACKFile','outputDESD_SGLELFile','outputDESD_SGLMUFile','outputDESDM_METFile','outputDESD_PHOJETFile','outputDESDM_RPVLLFile','outputNTUP_TOPEJETFile', 'outputNTUP_HSG5GAMHFile', 'outputNTUP_JETMETWZFile', 'outputNTUP_TRIGBJETFile', 'outputNTUP_BTAGD3PDFile', 'outputNTUP_SUSYFile', 'outputNTUP_SMTRILEPFile', 'outputNTUP_HIFile', 'outputNTUP_JETMETFULLFile', 'outputNTUP_PHYSICSFile', 'outputNTUP_SUSY01LEPFile', 'outputNTUP_PHOTONFile', 'outputNTUP_SMZEEFile', 'outputNTUP_PROMPTPHOTFile', 'outputNTUP_SMQCDFile', 'outputNTUP_FASTMONFile', 'outputNTUP_SMDYMUMUFile', 'outputNTUP_SMBKGEFile', 'outputNTUP_HSG5ZHMETFile', 'outputNTUP_JETMETEMCLFile', 'outputNTUP_HSG5ZHLLFile', 'outputNTUP_L1TGCFile', 'outputNTUP_SUSYLLPFile', 'outputNTUP_SMWMUNUFile', 'outputNTUP_BKGDFile', 'outputNTUP_SMWMUNUJJFile', 'outputNTUP_TOPBOOSTFile', 'outputNTUP_SMDILEPFile', 'outputNTUP_SMWENUFile', 'outputNTUP_HSG5ZBBFile', 'outputNTUP_SMWZFile', 'outputNTUP_HSG2File', 'outputNTUP_ENHBIASFile', 'outputNTUP_MCPFile', 'outputNTUP_HSG5WHFile', 'outputNTUP_SMWZSOFTFile', 'outputNTUP_TRIGMUFile', 'outputNTUP_SUSYSKIMFile', 'outputNTUP_TOPELFile', 'outputNTUP_TOPFile', 'outputNTUP_JETMETFile', 'outputNTUP_SMDYEEFile', 'outputNTUP_HIGHMULTFile', 'outputNTUP_HSG5GAMZFile', 'outputNTUP_HECNOISEFile', 'outputNTUP_TRIGFile', 'outputNTUP_SMWENUJJFile', 'outputNTUP_SCTFile', 'outputNTUP_WZFile', 'outputNTUP_LARNOISEFile', 'outputNTUP_L1CALOPROBFile', 'outputNTUP_TRTFile', 'outputNTUP_SMBKGMUFile', 'outputNTUP_SMZMUMUFile', 'outputNTUP_BTAGFile', 'outputNTUP_TOPMUFile', 'outputNTUP_ZPRIMEEEFile', 'outputNTUP_EGAMMAFile', 'outputNTUP_TAUSMALLFile', 'outputNTUP_MINBIASFile', 'outputNTUP_L1CALOFile', 'outputNTUP_TAUMEDIUMFile', 'outputNTUP_MUONFile', 'outputNTUP_TOPJETFile', 'outputNTUP_SUSY23LEPFile','outputNTUP_TRKVALIDFile','doRDOTrigger','tmpRDO','tmpESD','maxEvents','skipEvents', 'triggerConfigByRun','preInclude_h2r','postInclude_h2r','preExec_h2r','postExec_h2r','preInclude_r2e','postInclude_r2e','preExec_r2e','postExec_r2e','preInclude_e2a','postInclude_e2a','preExec_e2a','postExec_e2a','preInclude_rdo2rdotrig','postInclude_rdo2rdotrig','preExec_rdo2rdotrig','postExec_rdo2rdotrig','RunNumber','autoConfiguration','DBRelease','conditionsTag','beamType','extraParameter','geometryVersion','--ignoreerrors','--athenaopts','--omitvalidation','--extraignorefilter','numberOfLowPtMinBias', 'numberOfHighPtMinBias', 'numberOfBeamHalo', 'numberOfBeamGas', 'numberOfCavernBkg','LowPtMinbiasHitsFile','bunchSpacing', 'pileupInitialBunch', 'pileupFinalBunch', 'doAllNoise', 'AddCaloDigi', 'DataRunNumber','LucidOn', 'ALFAOn', 'ZDCOn', 'jobNumber','digiSeedOffset1','digiSeedOffset2','HighPtMinbiasHitsFile','beamGasHitsFile','beamHaloHitsFile','cavernHitsFile','samplingFractionDbTag','IgnoreConfigError','testPileUpConfig','digiRndmSvc','outputTXT_FTKIPFile','outputDESDM_ALLCELLSFile'] - -# Default values of input/output types, for standard tests now set in PATJobTransforms/python/DefaultInputs.py - -class DigiMultiTriggerRecoTrf( BaseOfCompositeTrf ): - def __init__(self, inDic): - - if '-h' in inDic or '--help' in inDic: - print '\n', sys.argv[0] - print __doc__ - print "See: https://twiki.cern.ch/twiki/bin/viewauth/Atlas/DigiMReco" - print "Prodsys understood keys are as follows:" - print ListOfDefaultPositionalKeys - sys.exit(0) - - BaseOfCompositeTrf.__init__(self,inputDic=inDic,ProdSysKeys=ListOfDefaultPositionalKeys, - name="DigiMultiReco_trf", - authors = [ Author('Graeme A Stewart','graeme.andrew.stewart@cern.ch') ] , - help = __doc__ ) - - - # Remove arguments which are private to this transform - # This is a bt of a hack, but will be fixed properly in the - # new trf version - self.stripPrivateArguments() - - #Construct dictionaries - self.dicHitsToRDO=self.AddNewSubStep("h2r", self.runHitstoRDO) - self.dicRDOToRDOTrigger=self.AddNewSubStep("rdo2rdotrig",self.runRDOtoRDOtrigger) - self.dicRAWToESD=self.AddNewSubStep("r2e",self.runRAWtoESD) - self.dicESDMerge=self.AddNewSubStep("mrg",self.runESDMerge) - self.dicESDToAOD=self.AddNewSubStep("e2a",self.runESDtoAOD) - self.dicESDToDPD=self.AddNewSubStep("e2d",self.runESDtoDPD) - - # Internal state for r2e sub-steps - self.esdOutputs = [] - self.lastESDEvent = 0 - - # Collect all monitoring from substeps in this list for final merge - self.monHistOutputs = [] - - # Parse the run or event dependent trigger configuration - self.parseTriggerConfig() - - #Internal sub-step configuration (i.e. fill dictionaries) - self.ConfigureInternalSubSteps() - self.ConfigureInputOutputs() - self.CommonSpecialFinalConfig() - - - def runJob(self): - #initialization... - allOK=True - rdoOK=False - rdotrigOK=False - esdOK=False - mrgOK=False - aodOK=False - dpdEsdOK=False - DQMergeOK=False - report=JobReport() - report.setProducer('DigiMultiRecoTrf') - - # Useful check - print sys.argv[0], "DigiMReco_trf substep configuration:" - for k, v in self.ValidSubStepsDic.iteritems(): - if self.SubStepIsExecuted(k): - print "%s substep will be executed" % k - else: - print "%s substep will be skipped" % k - print k, ":", v - - # First setup DBRelease if requested (do not propagate this arg to sub-transforms) - if self.inDic.has_key('DBRelease'): - self.getArgument('DBRelease').install() - - - ######################## - # HITS->RDO - if (allOK and self.SubStepIsExecuted('h2r')): - dic=self.dicHitsToRDO.copy() - print "HitsToRDO dic:",dic - RDO = HITtoRDOJobTransform(dic) - RDO._lastInChain=False - RDO.setParent(self) - RDO.setJobReportOptions('Summary') - reportRDO = RDO.exeArgDict( dic ) - report.addReport( reportRDO ) - rdoOK = ( reportRDO.exitCode() == 0 ) - print "rdoOK is", rdoOK - allOK = (allOK and rdoOK) - else: - print "Skipping Hits->RDO step..." - - - ######################## - # RDO->RDOTrigger - if (allOK and self.SubStepIsExecuted('rdo2rdotrig')): - dic=self.dicRDOToRDOTrigger.copy() - print "RDOtoRDOtrigger dic:",dic - RDOTrig = RDOtoRDOTriggerJobTransform(dic) - RDOTrig._lastInChain=False - RDOTrig.setParent(self) - RDOTrig.setJobReportOptions('Summary') - reportRDOTrig = RDOTrig.exeArgDict( dic ) - report.addReport( reportRDOTrig ) - rdotrigOK = ( reportRDOTrig.exitCode() == 0 ) - print "rdotrigOK is ",rdotrigOK - allOK = (allOK and rdotrigOK) - else: - print "Skipping RDO->RDOTrigger step..." - - - - ######################## - # RAW->ESD - if (allOK and self.SubStepIsExecuted('r2e')): - # eventTrigList is a list of tuples giving (Nevents, trigger) - eventTrigList = self.getEventTrigList() - print "Got eventTriggerList:", eventTrigList - if 'outputESDFile' in self.dicRAWToESD: - myESD = self.dicRAWToESD['outputESDFile'] - else: - myESD = self.dicRAWToESD['tmpESD'] - for eventCount, trigger in eventTrigList: - dic=self.dicRAWToESD.copy() - print "Orig RAWtoESD dic:",dic - ## Now modify the dictionary for this subjob - # However, if there is only going to be one ESD then - # we produce it 'directly' and merging can be skipped - if len(eventTrigList) == 1: - self.esdOutputs.append(myESD) - else: - if 'outputESDFile' in dic: - del dic['outputESDFile'] - dic['tmpESD'] = myESD + '.%03d' % (len(self.esdOutputs)+1) - self.esdOutputs.append(dic['tmpESD']) - # Add monitoring if required - if 'outputDQMonitorFile' in dic: - dic['outputDQMonitorFile'] += '.%03d' % (len(self.esdOutputs)) - self.monHistOutputs.append(dic['outputDQMonitorFile']) - # Special value of 0 for events disables any run/trigger configuration - if eventCount != 0: - dic['skipEvents'] = self.lastESDEvent - dic['maxEvents'] = eventCount - dic['triggerConfig'] = trigger - # Add this here to stop it causing trouble in the digi step - self.addDropAndReload(dic) - print "New RAWtoESD dic:", dic - - ESD = RAWtoESDJobTransform(dic) - ESD._lastInChain=False - ESD.setParent(self) - ESD.setJobReportOptions('Summary') - reportESD = ESD.exeArgDict( dic ) - report.addReport( reportESD ) - esdOK = ( reportESD.exitCode() == 0 ) - print "esdOK for", self.esdOutputs[-1], "is", esdOK - allOK = (allOK and esdOK) - if not allOK: - # Abort subsequent r2e steps if there is a problem - break - self.lastESDEvent += eventCount - else: - print "Skipping RAW->ESD step..." - - ######################## - # ESD->MergeESD - # Only merge if there is more than 1 ESD file :-) - if (allOK and self.SubStepIsExecuted('mrg') and len(self.esdOutputs) > 1): - dic=self.dicESDMerge.copy() - dic['inputESDFile'] = ",".join(self.esdOutputs) - print "ESDMerge dic:",dic - MRG = MergePoolJobTransform(dic) - MRG._lastInChain=False - MRG.setParent(self) - MRG.setJobReportOptions('Summary') - reportMRG = MRG.exeArgDict( dic ) - if 'outputESDFile' in dic: - self.addTriggerMetaData(reportMRG, dic['outputESDFile']) - report.addReport( reportMRG, mode='MERGE' ) - mrgOK = ( reportMRG.exitCode() == 0 ) - print "mrgOK is ", mrgOK - allOK = (allOK and mrgOK) - else: - print "Skipping ESD Merge step..." - - - - ######################## - # ESD->AOD - if(allOK and self.SubStepIsExecuted('e2a')): - dic=self.dicESDToAOD.copy() - # Add this here to stop it causing trouble in the digi step - self.addDropAndReload(dic) - if 'outputDQMonitorFile' in dic: - self.monHistOutputs.append(dic['outputDQMonitorFile']) - print "ESDtoAOD dic:",dic - AOD = ESDtoAODJobTransform(dic) - AOD._lastInChain=False - AOD.setParent(self) - AOD.setJobReportOptions('Summary') - reportAOD = AOD.exeArgDict( dic ) - # Ensure metadata is ok for our outputs - [ self.addTriggerMetaData(reportAOD, dic[key]) for key in dic.keys() if key.startswith('output')] - report.addReport( reportAOD, mode='MERGE' ) - aodOK = ( reportAOD.exitCode() == 0 ) - print "aodOK is ",aodOK - allOK = (allOK and aodOK) - else: - print "Skipping ESD->AOD step..." - - - ######################## - # ESD->DPD - if(allOK and self.SubStepIsExecuted('e2d')): - dic=self.dicESDToDPD.copy() - # Add this here to stop it causing trouble in the digi step - self.addDropAndReload(dic) - print "ESDtoDPD dic:",dic - DPD = ESDtoDPDJobTransform(dic) - DPD._lastInChain=False - DPD.setParent(self) - DPD.setJobReportOptions('Summary') - reportDPD = DPD.exeArgDict( dic ) - # Ensure metadata is ok for our outputs - [ self.addTriggerMetaData(reportDPD, dic[key]) for key in dic.keys() if key.startswith('output')] - report.addReport( reportDPD, mode='MERGE' ) - dpdEsdOK = ( reportDPD.exitCode() == 0 ) - print "dpdEsdOK is ",dpdEsdOK - allOK = (allOK and dpdEsdOK) - else: - print "Skipping ESD->DPD step..." - - - ########################## - # Monitoring file merging - if(allOK and self.inDic.has_key('outputHISTFile')): - dic={} - dic['inputFile']=self.monHistOutputs - dic['outputHISTFile']=self.inDic['outputHISTFile'] - print "DQHistogramMerg dic:",dic - DQMerge = DQHistogramMergeJobTransform(dic) - DQMerge._lastInChain=False - DQMerge.setParent(self) - DQMerge.forceSingleProcess() - DQMerge.setJobReportOptions('Summary') - reportDQMerge = DQMerge.exeArgDict( dic ) - report.addReport( reportDQMerge ) - DQMergeOK = ( reportDQMerge.exitCode() == 0 ) - print "DQMergeOK is ",DQMergeOK - allOK = (allOK and DQMergeOK) - else: - print "Skipping monitoring file merging step..." - - - return report - - - def addTriggerMetaData(self, jobReport, outputFileName): - '''Add special trigger configuration metadata to FileInfo objects in the job report''' - for f in jobReport.outputFiles(): - if f.filename() == outputFileName and self.triggerConfType == 'run': - f.addMetaData({'triggerConfig' : self.privateDic['triggerConfigByRun']}) - break - - - def stripPrivateArguments(self): - '''These are private arguments to this transform, only meaningful - for this module. Keep them out of the trf framework for now - (but probably put them in medium term - but they are more complex than current var types, being - string representations of dictionaries or lists)''' - self.privateDic = {} - for privateKey in ('triggerConfigByRun', 'triggerConfigByEvent'): - if privateKey in self.inDic: - self.privateDic[privateKey] = self.inDic[privateKey] - del self.inDic[privateKey] - - - def parseTriggerConfig(self): - '''Look at input dictionary and decide which trigger configuration we have''' - if 'triggerConfigByRun' in self.privateDic and 'triggerConfigByEvent' in self.privateDic: - raise RuntimeError('You cannot specify both triggerConfigByRun and triggerConfigByEvent - pick one only.') - if 'triggerConfigByRun' in self.privateDic: - self.triggerConfType = 'run' - self.triggerConf = self.extractTrigConf(self.privateDic['triggerConfigByRun'], dict) - elif 'triggerConfigByEvent' in self.privateDic: - self.triggerConfType = 'event' - self.triggerConf = self.extractTrigConf(self.privateDic['triggerConfigByEvent'], list) - else: - # No trigger switches then... - self.triggerConfType = None - self.triggerConf = [] - - - def extractTrigConf(self, triggerString, seqType): - '''Parse triggerConfigByRun or triggerConfigByEvent to get the runNumber/trigger or event/trigger mapping''' - try: - triggerConfig = ast.literal_eval(triggerString) - if not isinstance(triggerConfig, seqType): - raise RuntimeError('''Trying to extract trigger configuration from "%s" did not give the correct python object (is %s, should be %s)''' % (triggerString, type(triggerString), seqType)) - for i in triggerConfig: - if seqType == dict: - k = i - v = triggerConfig[i] - else: - k = i[0] - v = i[1] - if not (isinstance(k, int) and k > 0): - raise RuntimeError('Trigger configuration key %s is not a valid number' % k) - if not (isinstance(v, str)): - raise RuntimeError('Trigger configuration value %s is not a trigger string' % v) - except (ValueError, SyntaxError), x: - raise RuntimeError('"%s" did not parse as a valid python object and caused an exception: %s' % (triggerString, x)) - return triggerConfig - - - def getEventTrigList(self, fake=False): - '''Get list of event numbers with corresponding trigger setup''' - if fake: - return [(1, 'MCRECO:MC_pp_v2_tight_mc_prescale'), (1, 'MCRECO:MC_pp_v3_tight_mc_prescale')] - if self.triggerConfType == 'run': - # Need to import the event/runNumber lists - # This is generated by the h2r step - if that step is not run - # then this module needs to be present for the correct - # configuration to be found. - try: - sys.path.append(os.getcwd()) - from RunDMCTriggerRunsInfo import listOfRunsEvents - except ImportError, x: - raise RuntimeError('Could not find RunDMCTriggerRunsInfo to get event/runNumber list: %s' % x) - # Loop over the RDO run/event list and fill in the correct trigger - # Assume that the runnumber:event list is available somehow as self.RunEventStructure - result = [] - for runEventEntry in listOfRunsEvents: - try: - if ( len(result) > 0 ) and ( self.triggerConf[runEventEntry['run']] == result[-1][1] ): - # Same trigger configuration - so just extend the event span - result[-1][0] += runEventEntry['evts'] - else: - result.append([runEventEntry['evts'], self.triggerConf[runEventEntry['run']]]) - except KeyError: - raise RuntimeError('No trigger configuration for run number %d was found' % runEventEntry['run']) - return result - if self.triggerConfType == 'event': - # This is easy - just use the event/triggermap we have - return self.triggerConf - # No trigger conf found - set the special event value of 0, which processes the whole - # file with no special setup - return [(0,'')] - - - def ConfigureInternalSubSteps(self): - ## Treat special arguments here - # For us inputESDFile has to replicate the multiple file outputs of the r2e stages - # and these are used as inputs to the merge step. - if 'inputESDFile' in self.inDic: - self.esdOutputs = self.inDic['inputESDFile'].split(',') - - # Repeat the Reco_trf hack for monitoring histograms - if self.inDic.has_key("outputHISTFile"): - self.dicRAWToESD['outputDQMonitorFile']="MonitorESD.root" - self.dicESDToAOD['outputDQMonitorFile']="MonitorAOD.root" - - self.ConfigureCommonInternalSubSteps() - - - def ConfigureInputOutputs(self): - '''Daisy-chaining input->output''' - - # First sanity check: we can only start from one of HITS, RDO or ESD - # Having more than one input type makes no sense - inputs = set(('inputHitsFile', 'inputRDOFile', 'inputESDFile')) & set(self.inDic.keys()) - if len(inputs) > 1: - raise TransformDefinitionError, ('This transform can only take one primary input file. You cannot specify %s at the same time.' % - ' and '.join(inputs)) - if len(inputs) == 0: - raise TransformDefinitionError, 'One input file (HITS, RDO or ESD) must be specified.' - - ## Now check that outputs are defined - # If necessary generate tmp filenames for RDO and ESD - # HITS->RDO? - if self.hasInput(self.dicHitsToRDO): - outputs = set(self.dicHitsToRDO.keys()) & set(('tmpRDO', 'outputRDOFile')) - if len(outputs) > 1: - raise TransformDefinitionError, 'Only one output from Hits to RDO can be used - illegal to have both %s' % ' and '.join(outputs) - if self.inDic.get('doRDOTrigger', 'false').lower() == 'true': - # Different logic if we do the RDO -> RDOTrigger substep - if len(outputs) == 1: - finalRDOtype = outputs.pop() - self.dicHitsToRDO[finalRDOtype] = self.inDic[finalRDOtype] - self.dicRDOToRDOTrigger['inputRDOFile'] = self.dicHitsToRDO[finalRDOtype] - self.dicRDOToRDOTrigger['tmpRDO'] = self.inDic[finalRDOtype] + '.trigger' - self.dicRAWToESD['inputRDOFile'] = self.dicRDOToRDOTrigger['tmpRDO'] - else: - print "Autosetting tmpRDO file" - self.dicHitsToRDO['tmpRDO'] = self.dicRDOToRDOTrigger['inputRDOFile'] ='tmp.RDO.pool.root' - self.dicRDOToRDOTrigger['tmpRDO'] = self.dicRAWToESD['inputRDOFile'] = 'tmp.RDO.pool.root.trigger' - else: - if len(outputs) == 1: - self.dicRAWToESD['inputRDOFile'] = self.dicHitsToRDO[outputs.pop()] - else: - print "Autosetting tmpRDO file" - self.dicHitsToRDO['tmpRDO'] = self.dicRAWToESD['inputRDOFile'] ='tmp.RDO.pool.root' - - # RDO->ESD? - if self.hasInput(self.dicRAWToESD): - if self.inDic.get('doRDOTrigger', 'false').lower() == 'true' and self.runHitstoRDO() == False: - self.dicRDOToRDOTrigger['tmpRDO'] = self.inDic['inputRDOFile'] + '.trigger' - self.dicRAWToESD['inputRDOFile'] = self.dicRDOToRDOTrigger['tmpRDO'] - outputs = set(self.dicRAWToESD.keys()) & set(('tmpESD', 'outputESDFile')) - if len(outputs) > 1: - raise TransformDefinitionError, 'Only one output from RDO to ESD can be used - illegal to have both %s' % ' and '.join(outputs) - if len(outputs) == 1: - self.dicESDMerge['outputESDFile'] = self.dicESDToAOD['inputESDFile'] = self.dicESDToDPD['inputESDFile'] = self.dicRAWToESD[outputs.pop()] - else: - print "Autosetting tmpESD file" - self.dicRAWToESD['tmpESD'] = self.dicESDMerge['outputESDFile'] = self.dicESDToAOD['inputESDFile'] = self.dicESDToDPD['inputESDFile'] = 'tmp.ESD.pool.root' - - - def GetFirstSubStep(self): - # This transform only has two real starting points - HITS or RDO - # but support different entry points for debugging - if self.runHitstoRDO(): - return ["h2r"] - elif self.runRDOtoRDOtrigger(): - return ['rdo2rdotrig'] - elif self.runRAWtoESD(): - return ["r2e"] - elif self.runESDMerge(): - return ["mrg"] - return None - - def runHitstoRDO(self): - return (self.hasInput(self.dicHitsToRDO) and self.hasOutput(self.dicHitsToRDO)) - - def runRDOtoRDOtrigger(self): - return (self.hasInput(self.dicRDOToRDOTrigger) and self.hasOutput(self.dicRDOToRDOTrigger)) - - def runRAWtoESD(self): - return (self.hasInput(self.dicRAWToESD) and self.hasOutput(self.dicRAWToESD)) - - def runESDMerge(self): - # Always say we do this step, but at actual run time check if we have more than 1 ESD - return True - - def runESDtoAOD(self): - return (self.hasInput(self.dicESDToAOD) and self.hasOutput(self.dicESDToAOD)) - - def runESDtoDPD(self): - return (self.hasInput(self.dicESDToDPD) and self.hasOutput(self.dicESDToDPD)) - - def addDropAndReload(self, dic): - '''Add --drop-and-reload to the athenaopts in the dictionary, as long as that's possible''' - athena_config_related_opts = ['--config-only','--drop-and-reload','--drop-configuration','--keep-configuration'] - athena_current_opts=dic.get('--athenaopts','').split() - conflict_opts = set(athena_config_related_opts).intersection(set(athena_current_opts)) - if not conflict_opts: - print "Appending '--drop-and-reload' to --athenaopts" - dic['--athenaopts']=' '.join(athena_current_opts+['--drop-and-reload']) - else: - print "User has specified '%s' to '--athenaopts', so not appending '--drop-and-reload'"%(' '.join(conflict_opts)) - - -############### -if __name__ == '__main__': - #Special preparation for command-line - import sys - from PATJobTransforms.ArgDicTools import BuildDicFromCommandLine - inDic=BuildDicFromCommandLine(sys.argv) - trf = DigiMultiTriggerRecoTrf(inDic) - trf._lastInChain=True - sys.exit(trf.exeArgDict(inDic).exitCode()) - diff --git a/Reconstruction/RecJobTransforms/scripts/ESDtoAOD_trf.py b/Reconstruction/RecJobTransforms/scripts/ESDtoAOD_trf.py deleted file mode 100755 index ae986909800f54bcd9d99fc21dfd09abc1e21f88..0000000000000000000000000000000000000000 --- a/Reconstruction/RecJobTransforms/scripts/ESDtoAOD_trf.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -__doc__ = """Make AOD's from ESD's using RecExCommon.""" - -import glob -import tarfile - -from PATJobTransforms.BaseOfBasicTrf import BaseOfBasicTrf -from PyJobTransformsCore.trf import Author -from PyJobTransformsCore.trfutil import jiveXMLtgz - -class ESDtoAODJobTransform( BaseOfBasicTrf ): - def __init__(self,inDic,lastInChain=True): - BaseOfBasicTrf.__init__(self,inDic, - authors=[Author('David Cote','david.cote@cern.ch')], - skeleton='RecJobTransforms/skeleton.ESDtoAOD.py' , - help = __doc__,lastInChain=lastInChain ) - - self._addPostRunAction(self, prepend=True) - - - def matchEvents(self): - return self.matchEventsExpectEqual("inputESDFile","outputAODFile") - - - def postRunAction(self): - # Merge JiveXML files into a zip archive - print "Executing postRunActions for ESDtoAODJobTransform" - if 'outputTXT_JIVEXMLTGZFile' in self.inDic: - jiveXMLtgz(self.inDic['outputTXT_JIVEXMLTGZFile']) - - -# executed if not imported -if __name__ == '__main__': - #Special preparation for command-line - import sys - from PATJobTransforms.ArgDicTools import BuildDicFromCommandLine - inDic=BuildDicFromCommandLine(sys.argv) - #Construct and execute the transform - trf = ESDtoAODJobTransform(inDic) - sys.exit(trf.exeArgDict(inDic).exitCode()) diff --git a/Reconstruction/RecJobTransforms/scripts/RAWtoESD_trf.py b/Reconstruction/RecJobTransforms/scripts/RAWtoESD_trf.py deleted file mode 100755 index e6dd0343a623ed9b6c5df45c38a4353a62c5a54c..0000000000000000000000000000000000000000 --- a/Reconstruction/RecJobTransforms/scripts/RAWtoESD_trf.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -__doc__ = """Run reconstruction and make ESD's from RDO or BS using RecExCommon.""" - -from PATJobTransforms.BaseOfBasicTrf import BaseOfBasicTrf -from PyJobTransformsCore.trf import Author -from PyJobTransformsCore.trfutil import jiveXMLtgz - -class RAWtoESDJobTransform( BaseOfBasicTrf ): - def __init__(self,inDic,lastInChain=True): - BaseOfBasicTrf.__init__(self,inDic, - authors=[Author('David Cote','david.cote@cern.ch')], - skeleton='RecJobTransforms/skeleton.RAWtoESD.py' , - help = __doc__, lastInChain=lastInChain ) - - self._addPostRunAction(self, prepend=True) - - - def matchEvents(self): - #Note: _namedArgs has lower case keys - if self._namedArgs.has_key("inputbsfile"): - self.logger().warning("MatchEvents currently not executed for input bytestream because of potentially skipped truncated events.") - return - - return self.matchEventsExpectEqual("inputRDOFile","outputESDFile") - - - def postRunAction(self): - # Merge JiveXML files into a zip archive - print "Executing postRunActions for RAWtoESDJobTransform" - if 'outputTXT_JIVEXMLTGZFile' in self.inDic: - jiveXMLtgz(self.inDic['outputTXT_JIVEXMLTGZFile']) - - -# execute it if not imported -if __name__ == '__main__': - #Special preparation for command-line - import sys - from PATJobTransforms.ArgDicTools import BuildDicFromCommandLine - inDic=BuildDicFromCommandLine(sys.argv) - #Construct and execute the transform - trf = RAWtoESDJobTransform(inDic) - sys.exit(trf.exeArgDict(inDic).exitCode()) diff --git a/Reconstruction/RecJobTransforms/scripts/RDOtoRDOTrigger_trf.py b/Reconstruction/RecJobTransforms/scripts/RDOtoRDOTrigger_trf.py deleted file mode 100755 index 5b839d68196e51d0b3788a9ce71ee1ff510ce064..0000000000000000000000000000000000000000 --- a/Reconstruction/RecJobTransforms/scripts/RDOtoRDOTrigger_trf.py +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -__doc__ = """Run trigger only from RDO to RDOprime using RecExCommon.""" - -from PATJobTransforms.BaseOfBasicTrf import BaseOfBasicTrf -from PyJobTransformsCore.trf import Author - -class RDOtoRDOTriggerJobTransform( BaseOfBasicTrf ): - def __init__(self,inDic,lastInChain=True): - BaseOfBasicTrf.__init__(self,inDic, - authors=[Author('Graeme A Stewart','graeme.andrew.stewart@cern.ch')], - skeleton='RecJobTransforms/skeleton.RDOtoRDOtrigger.py' , - help = __doc__,lastInChain=lastInChain) - - - def matchEvents(self): - return self.matchEventsExpectEqual("inputRDOFile","outputRDOFile") - - -def main(): - #Special preparation for command-line - import sys - from PATJobTransforms.ArgDicTools import BuildDicFromCommandLine - inDic=BuildDicFromCommandLine(sys.argv) - #Construct and execute the transform - trf = RDOtoRDOTriggerJobTransform(inDic) - sys.exit(trf.exeArgDict(inDic).exitCode()) - - -# execute it if not imported -if __name__ == '__main__': - main() diff --git a/Reconstruction/RecJobTransforms/scripts/Reco_tf.py b/Reconstruction/RecJobTransforms/scripts/Reco_tf.py index 45215415dc83d038ffdfb8b87daad3e937f2f066..548b3e83015485e08f597360409371e50a3c12ad 100755 --- a/Reconstruction/RecJobTransforms/scripts/Reco_tf.py +++ b/Reconstruction/RecJobTransforms/scripts/Reco_tf.py @@ -3,7 +3,7 @@ # Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration ## Reco_tf.py - New transform re-implementation of the beast that is Reco_trf. -# @version $Id: Reco_tf.py 597385 2014-05-16 07:32:27Z graemes $ +# @version $Id: Reco_tf.py 613111 2014-08-22 17:01:32Z graemes $ import sys import time @@ -22,7 +22,7 @@ from RecJobTransforms.recTransformUtils import addAllRecoArgs, addRecoSubsteps import PyJobTransforms.trfArgClasses as trfArgClasses -ListOfDefaultPositionalKeys=['--AFPOn', '--ALFAOn', '--AMIConfig', '--AMITag', '--AddCaloDigi', '--DBRelease', '--DataRunNumber', '--FwdRegionOn', '--LucidOn', '--ZDCOn', '--asetup', '--athena', '--athenaopts', '--autoConfiguration', '--beamType', '--bunchSpacing', '--checkEventCount', '--command', '--conditionsTag', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--doAllNoise', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputAODFile', '--inputBSFile', '--inputBeamGasHitsFile', '--inputBeamHaloHitsFile', '--inputCavernHitsFile', '--inputESDFile', '--inputEVNTFile', '--inputHITSFile', '--inputHighPtMinbiasHitsFile', '--inputLowPtMinbiasHitsFile', '--inputNTUP_COMMONFile', '--inputRDOFile', '--jobNumber', '--maxEvents', '--numberOfBeamGas', '--numberOfBeamHalo', '--numberOfCavernBkg', '--numberOfHighPtMinBias', '--numberOfLowPtMinBias', '--outputAODFile', '--outputAOD_RPRFile', '--outputAOD_SKIMFile', '--outputD2AODM_WMUNUFile', '--outputD2AODM_ZEEFile', '--outputD2AODM_ZMUMUFile', '--outputD2AOD_DIONIAFile', '--outputD2AOD_DIPHOFile', '--outputD2AOD_H4LFile', '--outputD2AOD_WENUFile', '--outputD2AOD_ZEEFile', '--outputD2ESDM_TRKJETFile', '--outputD2ESD_DIPHOFile', '--outputD2ESD_JPSIUPSMMFile', '--outputD2ESD_WENUFile', '--outputD2ESD_WMUNUFile', '--outputD2ESD_ZMMFile', '--outputDAODFile', '--outputDAODM_HIGHMJJFile', '--outputDAODM_SGLEMFile', '--outputDAODM_SGLMUFile', '--outputDAODM_SGLPHFile', '--outputDAODM_SGLTAUFile', '--outputDAOD_2EMFile', '--outputDAOD_2L2QHSG2File', '--outputDAOD_2LHSG2File', '--outputDAOD_2MUFile', '--outputDAOD_2PHFile', '--outputDAOD_4LHSG2File', '--outputDAOD_EGLOOSEFile', '--outputDAOD_ELLOOSE18File', '--outputDAOD_ELLOOSEFile', '--outputDAOD_EMJETFile', '--outputDAOD_EMMETFile', '--outputDAOD_EMMUFile', '--outputDAOD_EMTAUFile', '--outputDAOD_H4LBREMRECFile', '--outputDAOD_HIGHMDIJETFile', '--outputDAOD_HSG1File', '--outputDAOD_HSG2File', '--outputDAOD_HWWFile', '--outputDAOD_JETMETFile', '--outputDAOD_JPSIMUMUFile', '--outputDAOD_MUFile', '--outputDAOD_MUJETFile', '--outputDAOD_MUMETFile', '--outputDAOD_MUTAUFile', '--outputDAOD_ONIAMUMUFile', '--outputDAOD_PHLOOSEFile', '--outputDAOD_RNDMFile', '--outputDAOD_SKIMELFile', '--outputDAOD_SUSYEGAMMAFile', '--outputDAOD_SUSYJETSFile', '--outputDAOD_SUSYMUONSFile', '--outputDAOD_TAUJETFile', '--outputDAOD_TESTFile', '--outputDAOD_UPSIMUMUFile', '--outputDAOD_ZEEGAMMAFile', '--outputDAOD_ZMUMUGAMMAFile', '--outputDESDM_ALLCELLSFile', '--outputDESDM_BEAMSPOTFile', '--outputDESDM_EGAMMAFile', '--outputDESDM_METFile', '--outputDESDM_MUONFile', '--outputDESDM_RPVLLCCFile', '--outputDESDM_RPVLLFile', '--outputDESDM_TRACKFile', '--outputDESD_CALJETFile', '--outputDESD_CALOCOMMFile', '--outputDESD_COLLCANDFile', '--outputDESD_CTLFWJETFile', '--outputDESD_EGTAUCOMMFile', '--outputDESD_EMCLUSCOMMFile', '--outputDESD_FWJETFile', '--outputDESD_HIRAREFile', '--outputDESD_IDCOMMFile', '--outputDESD_IDPROJCOMMFile', '--outputDESD_MBIASFile', '--outputDESD_MUONCOMMFile', '--outputDESD_ONIAMUMUHIFile', '--outputDESD_PHOJETFile', '--outputDESD_PIXELCOMMFile', '--outputDESD_PRESCALEDFile', '--outputDESD_RANDOMCOMMFile', '--outputDESD_RPCCOMMFile', '--outputDESD_SCTCOMMFile', '--outputDESD_SGLELFile', '--outputDESD_SGLMUFile', '--outputDESD_SKIMELFile', '--outputDESD_TGCCOMMFile', '--outputDESD_TILECOMMFile', '--outputDNTUPFile', '--outputDRAW_IDPROJCOMMFile', '--outputDRAW_WENUFile', '--outputDRAW_WMUNUFile', '--outputDRAW_ZEEFile', '--outputDRAW_ZMUMUFile', '--outputESDFile', '--outputHISTFile', '--outputHIST_AODFile', '--outputNTUP_2L2QHSG2File', '--outputNTUP_2LHSG2File', '--outputNTUP_4LHSG2File', '--outputNTUP_BKGDFile', '--outputNTUP_BTAGD3PDFile', '--outputNTUP_BTAGEFFFile', '--outputNTUP_BTAGFULLFile', '--outputNTUP_BTAGGHOSTFile', '--outputNTUP_BTAGSLIMFile', '--outputNTUP_CLUSTERCORRECTIONFile', '--outputNTUP_COMMONFile', '--outputNTUP_EGAMMAFile', '--outputNTUP_EMBHHDNFile', '--outputNTUP_EMBHHIMFile', '--outputNTUP_EMBHHUPFile', '--outputNTUP_EMBLHDNFile', '--outputNTUP_EMBLHIMFile', '--outputNTUP_EMBLHUPFile', '--outputNTUP_EMBLLDNFile', '--outputNTUP_EMBLLIMFile', '--outputNTUP_EMBLLUPFile', '--outputNTUP_ENHBIASFile', '--outputNTUP_FASTMONFile', '--outputNTUP_HECNOISEFile', '--outputNTUP_HIFile', '--outputNTUP_HIGHMULTFile', '--outputNTUP_HSG2File', '--outputNTUP_HSG5GAMHFile', '--outputNTUP_HSG5GAMZFile', '--outputNTUP_HSG5WHFile', '--outputNTUP_HSG5WHQFile', '--outputNTUP_HSG5WHUFile', '--outputNTUP_HSG5ZBBFile', '--outputNTUP_HSG5ZHLLFile', '--outputNTUP_HSG5ZHLLUFile', '--outputNTUP_HSG5ZHMETFile', '--outputNTUP_HSG5ZHMETUFile', '--outputNTUP_IDVTXFile', '--outputNTUP_IDVTXLUMIFile', '--outputNTUP_JETMETEMCLFile', '--outputNTUP_JETMETFULLFile', '--outputNTUP_JETMETFile', '--outputNTUP_JETMETWZFile', '--outputNTUP_L1CALOFile', '--outputNTUP_L1CALOPROBFile', '--outputNTUP_L1TGCFile', '--outputNTUP_LARNOISEFile', '--outputNTUP_MCPFile', '--outputNTUP_MINBIASFile', '--outputNTUP_MUFASTFile', '--outputNTUP_MUONCALIBFile', '--outputNTUP_MUONFile', '--outputNTUP_PHOTONFile', '--outputNTUP_PHYSICSFile', '--outputNTUP_PHYSVALFile', '--outputNTUP_PROMPTPHOTFile', '--outputNTUP_SCTFile', '--outputNTUP_SMBKGEFile', '--outputNTUP_SMBKGMUFile', '--outputNTUP_SMDILEPFile', '--outputNTUP_SMDYEEFile', '--outputNTUP_SMDYMUMUFile', '--outputNTUP_SMLIGHTFile', '--outputNTUP_SMQCDFile', '--outputNTUP_SMTRILEPFile', '--outputNTUP_SMWENUFile', '--outputNTUP_SMWENUJJFile', '--outputNTUP_SMWMUNUFile', '--outputNTUP_SMWMUNUJJFile', '--outputNTUP_SMWZFile', '--outputNTUP_SMWZSOFTFile', '--outputNTUP_SMZEEFile', '--outputNTUP_SMZMUMUFile', '--outputNTUP_SUSY01LEPFile', '--outputNTUP_SUSY23LEPFile', '--outputNTUP_SUSY34LEPFile', '--outputNTUP_SUSYBOOSTFile', '--outputNTUP_SUSYFile', '--outputNTUP_SUSYLEPTAUFile', '--outputNTUP_SUSYLLPFile', '--outputNTUP_SUSYRAZORFile', '--outputNTUP_SUSYSKIMFile', '--outputNTUP_SUSYTAGFile', '--outputNTUP_SUSYTRUTHFile', '--outputNTUP_TAUFULLFile', '--outputNTUP_TAUFile', '--outputNTUP_TAUMEDIUMFile', '--outputNTUP_TAUSMALLFile', '--outputNTUP_TOPBOOSTFile', '--outputNTUP_TOPEJETFile', '--outputNTUP_TOPELFile', '--outputNTUP_TOPFile', '--outputNTUP_TOPJETFile', '--outputNTUP_TOPMUFile', '--outputNTUP_TPHSG2File', '--outputNTUP_TRIGBJETFile', '--outputNTUP_TRIGFile', '--outputNTUP_TRIGMUFile', '--outputNTUP_TRKVALIDFile', '--outputNTUP_TRTFile', '--outputNTUP_TRUTHFile', '--outputNTUP_WPRIMEENFile', '--outputNTUP_WPRIMEMNFile', '--outputNTUP_WZFile', '--outputNTUP_ZPRIMEEEFile', '--outputNTUP_ZPRIMEMMFile', '--outputRDOFile', '--outputTAGFile', '--pileupFinalBunch', '--pileupInitialBunch', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reductionConf', '--reportName', '--reportType', '--runNumber', '--samplingFractionDbTag', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--tcmalloc', '--testPileUpConfig', '--tmpRDO', '--trigFilterList', '--triggerConfig', '--validationFlags'] +ListOfDefaultPositionalKeys=['--AFPOn', '--ALFAOn', '--AMIConfig', '--AMITag', '--AddCaloDigi', '--DBRelease', '--DataRunNumber', '--FwdRegionOn', '--LucidOn', '--ZDCOn', '--argJSON', '--asetup', '--athena', '--athenaMPMergeTargetSize', '--athenaopts', '--autoConfiguration', '--beamType', '--bunchSpacing', '--checkEventCount', '--command', '--conditionsTag', '--digiRndmSvc', '--digiSeedOffset1', '--digiSeedOffset2', '--doAllNoise', '--dumpJSON', '--dumpPickle', '--env', '--eventAcceptanceEfficiency', '--execOnly', '--geometryVersion', '--ignoreErrors', '--ignoreFiles', '--ignorePatterns', '--imf', '--inputAODFile', '--inputBSFile', '--inputBeamGasHitsFile', '--inputBeamHaloHitsFile', '--inputCavernHitsFile', '--inputESDFile', '--inputEVNTFile', '--inputHITSFile', '--inputHighPtMinbiasHitsFile', '--inputLowPtMinbiasHitsFile', '--inputNTUP_COMMONFile', '--inputRDOFile', '--jobNumber', '--maxEvents', '--numberOfBeamGas', '--numberOfBeamHalo', '--numberOfCavernBkg', '--numberOfHighPtMinBias', '--numberOfLowPtMinBias', '--orphanKiller', '--outputAODFile', '--outputAOD_RPRFile', '--outputAOD_SKIMFile', '--outputBSFile', '--outputD2AODM_WMUNUFile', '--outputD2AODM_ZEEFile', '--outputD2AODM_ZMUMUFile', '--outputD2AOD_DIONIAFile', '--outputD2AOD_DIPHOFile', '--outputD2AOD_H4LFile', '--outputD2AOD_WENUFile', '--outputD2AOD_ZEEFile', '--outputD2ESDM_TRKJETFile', '--outputD2ESD_DIPHOFile', '--outputD2ESD_JPSIUPSMMFile', '--outputD2ESD_WENUFile', '--outputD2ESD_WMUNUFile', '--outputD2ESD_ZMMFile', '--outputDAODFile', '--outputDAODM_HIGHMJJFile', '--outputDAODM_SGLEMFile', '--outputDAODM_SGLMUFile', '--outputDAODM_SGLPHFile', '--outputDAODM_SGLTAUFile', '--outputDAOD_2EMFile', '--outputDAOD_2L2QHSG2File', '--outputDAOD_2LHSG2File', '--outputDAOD_2MUFile', '--outputDAOD_2PHFile', '--outputDAOD_4LHSG2File', '--outputDAOD_EGLOOSEFile', '--outputDAOD_ELLOOSE18File', '--outputDAOD_ELLOOSEFile', '--outputDAOD_EMJETFile', '--outputDAOD_EMMETFile', '--outputDAOD_EMMUFile', '--outputDAOD_EMTAUFile', '--outputDAOD_H4LBREMRECFile', '--outputDAOD_HIGHMDIJETFile', '--outputDAOD_HSG1File', '--outputDAOD_HSG2File', '--outputDAOD_HWWFile', '--outputDAOD_JETMETFile', '--outputDAOD_JPSIHSG2File', '--outputDAOD_JPSIMUMUFile', '--outputDAOD_MUFile', '--outputDAOD_MUJETFile', '--outputDAOD_MUMETFile', '--outputDAOD_MUTAUFile', '--outputDAOD_ONIAMUMUFile', '--outputDAOD_PHLOOSEFile', '--outputDAOD_RED_TEST1File', '--outputDAOD_RED_TEST2File', '--outputDAOD_RNDMFile', '--outputDAOD_SKIMELFile', '--outputDAOD_SUSYEGAMMAFile', '--outputDAOD_SUSYJETSFile', '--outputDAOD_SUSYMUONSFile', '--outputDAOD_TAUJETFile', '--outputDAOD_TESTFile', '--outputDAOD_UPSIMUMUFile', '--outputDAOD_ZEEGAMMAFile', '--outputDAOD_ZMUMUGAMMAFile', '--outputDESDM_ALLCELLSFile', '--outputDESDM_BEAMSPOTFile', '--outputDESDM_EGAMMAFile', '--outputDESDM_METFile', '--outputDESDM_MUONFile', '--outputDESDM_RPVLLCCFile', '--outputDESDM_RPVLLFile', '--outputDESDM_TRACKFile', '--outputDESD_CALJETFile', '--outputDESD_CALOCOMMFile', '--outputDESD_COLLCANDFile', '--outputDESD_CTLFWJETFile', '--outputDESD_EGTAUCOMMFile', '--outputDESD_EMCLUSCOMMFile', '--outputDESD_FWJETFile', '--outputDESD_HIRAREFile', '--outputDESD_IDCOMMFile', '--outputDESD_IDPROJCOMMFile', '--outputDESD_MBIASFile', '--outputDESD_MUONCOMMFile', '--outputDESD_ONIAMUMUHIFile', '--outputDESD_PHOJETFile', '--outputDESD_PIXELCOMMFile', '--outputDESD_PRESCALEDFile', '--outputDESD_RANDOMCOMMFile', '--outputDESD_RPCCOMMFile', '--outputDESD_SCTCOMMFile', '--outputDESD_SGLELFile', '--outputDESD_SGLMUFile', '--outputDESD_SKIMELFile', '--outputDESD_SLTTMUFile', '--outputDESD_TAUMUHFile', '--outputDESD_TGCCOMMFile', '--outputDESD_TILECOMMFile', '--outputDNTUPFile', '--outputDRAW_IDPROJCOMMFile', '--outputDRAW_WENUFile', '--outputDRAW_WMUNUFile', '--outputDRAW_ZEEFile', '--outputDRAW_ZMUMUFile', '--outputESDFile', '--outputHISTFile', '--outputHIST_AODFile', '--outputNTUP_2L2QHSG2File', '--outputNTUP_2LHSG2File', '--outputNTUP_4LHSG2File', '--outputNTUP_BKGDFile', '--outputNTUP_BTAGD3PDFile', '--outputNTUP_BTAGEFFFile', '--outputNTUP_BTAGFULLFile', '--outputNTUP_BTAGGHOSTFile', '--outputNTUP_BTAGSLIMFile', '--outputNTUP_CLUSTERCORRECTIONFile', '--outputNTUP_COMMONFile', '--outputNTUP_EGAMMAFile', '--outputNTUP_EMBHHDNFile', '--outputNTUP_EMBHHIMFile', '--outputNTUP_EMBHHUPFile', '--outputNTUP_EMBLHDNFile', '--outputNTUP_EMBLHIMFile', '--outputNTUP_EMBLHUPFile', '--outputNTUP_EMBLLDNFile', '--outputNTUP_EMBLLIMFile', '--outputNTUP_EMBLLUPFile', '--outputNTUP_ENHBIASFile', '--outputNTUP_FASTMONFile', '--outputNTUP_HECNOISEFile', '--outputNTUP_HIGHMULTFile', '--outputNTUP_HSG2File', '--outputNTUP_HSG5GAMHFile', '--outputNTUP_HSG5GAMZFile', '--outputNTUP_HSG5WHFile', '--outputNTUP_HSG5WHQFile', '--outputNTUP_HSG5WHUFile', '--outputNTUP_HSG5ZBBFile', '--outputNTUP_HSG5ZHLLFile', '--outputNTUP_HSG5ZHLLUFile', '--outputNTUP_HSG5ZHMETFile', '--outputNTUP_HSG5ZHMETUFile', '--outputNTUP_IDVTXFile', '--outputNTUP_IDVTXLUMIFile', '--outputNTUP_JETMETEMCLFile', '--outputNTUP_JETMETFULLFile', '--outputNTUP_JETMETFile', '--outputNTUP_JETMETWZFile', '--outputNTUP_L1CALOFile', '--outputNTUP_L1CALOPROBFile', '--outputNTUP_L1TGCFile', '--outputNTUP_LARNOISEFile', '--outputNTUP_MCPFile', '--outputNTUP_MINBIASFile', '--outputNTUP_MUFASTFile', '--outputNTUP_MUONCALIBFile', '--outputNTUP_MUONFile', '--outputNTUP_PHOTONFile', '--outputNTUP_PHYSICSFile', '--outputNTUP_PHYSVALFile', '--outputNTUP_PROMPTPHOTFile', '--outputNTUP_SCTFile', '--outputNTUP_SMBKGEFile', '--outputNTUP_SMBKGMUFile', '--outputNTUP_SMDILEPFile', '--outputNTUP_SMDYEEFile', '--outputNTUP_SMDYMUMUFile', '--outputNTUP_SMLIGHTFile', '--outputNTUP_SMQCDFile', '--outputNTUP_SMTRILEPFile', '--outputNTUP_SMWENUFile', '--outputNTUP_SMWENUJJFile', '--outputNTUP_SMWMUNUFile', '--outputNTUP_SMWMUNUJJFile', '--outputNTUP_SMWZFile', '--outputNTUP_SMWZSOFTFile', '--outputNTUP_SMZEEFile', '--outputNTUP_SMZMUMUFile', '--outputNTUP_SUSYLLPFile', '--outputNTUP_SUSYTRUTHFile', '--outputNTUP_TAUFULLFile', '--outputNTUP_TAUFile', '--outputNTUP_TAUMEDIUMFile', '--outputNTUP_TAUSMALLFile', '--outputNTUP_TOPBOOSTFile', '--outputNTUP_TPHSG2File', '--outputNTUP_TRIGBJETFile', '--outputNTUP_TRIGFile', '--outputNTUP_TRIGMUFile', '--outputNTUP_TRKVALIDFile', '--outputNTUP_TRTFile', '--outputNTUP_TRUTHFile', '--outputNTUP_WPRIMEENFile', '--outputNTUP_WPRIMEMNFile', '--outputNTUP_WZFile', '--outputNTUP_ZPRIMEEEFile', '--outputNTUP_ZPRIMEMMFile', '--outputRDOFile', '--outputTAGFile', '--parallelFileValidation', '--passThrough', '--pileupFinalBunch', '--pileupInitialBunch', '--postExec', '--postInclude', '--preExec', '--preInclude', '--reductionConf', '--reportName', '--reportType', '--runNumber', '--samplingFractionDbTag', '--showGraph', '--showPath', '--showSteps', '--skipEvents', '--skipFileValidation', '--skipInputFileValidation', '--skipOutputFileValidation', '--steering', '--tcmalloc', '--testPileUpConfig', '--tmpRDO', '--trigFilterList', '--trigStream', '--triggerConfig', '--validationFlags'] @stdTrfExceptionHandler @sigUsrStackTrace diff --git a/Reconstruction/RecJobTransforms/scripts/csc_MergeHIST_trf.py b/Reconstruction/RecJobTransforms/scripts/csc_MergeHIST_trf.py deleted file mode 100755 index 9a1939ccc66e0bfecce58f3ea81f8e627d092068..0000000000000000000000000000000000000000 --- a/Reconstruction/RecJobTransforms/scripts/csc_MergeHIST_trf.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration - -__doc__ = """Merge several input DMQ monitoring histogram files into a single output file. For merging of NTUPs please use MergeNTUP_trf.py""" - -from PyJobTransformsCore.trf import * -from PyJobTransformsCore.full_trfarg import * -from PyJobTransformsCore.trfutil import * -from RecJobTransforms.RecConfig import recConfig - -class MergeHISTTransform( JobTransform ): - def __init__(self,lastInChain=True): - JobTransform.__init__(self, - authors = [ Author('Max Baak', 'mbaak@cern.ch') ] , - skeleton='RecJobTransforms/skeleton.csc_MergeHIST_trf.py' , - help = __doc__ , - config = recConfig,lastInChain=lastInChain) - - ## add arguments - self.add( InputMonitorHistArg(name='inputROOTFile'), default='NONE' ) - self.add( MonitorHistArg(name='outputROOTFile'), default='NONE' ) - self.add( JobConfigArg(package='RecJobTransforms'), default='NONE' ) - - -## execute it if not imported -if __name__ == '__main__': - trf = MergeHISTTransform() - sys.exit(trf.exeSysArgs().exitCode()) - -## Example of command lines are: -## csc_MergeHIST_trf.py inputROOTFile=$file1,$file2 outputROOTFile=$file3 - diff --git a/Reconstruction/RecJobTransforms/scripts/streamtest_mixer_trf.py b/Reconstruction/RecJobTransforms/scripts/streamtest_mixer_trf.py deleted file mode 100755 index fbc21d55509043f0762c2a5739458e736b3bd20f..0000000000000000000000000000000000000000 --- a/Reconstruction/RecJobTransforms/scripts/streamtest_mixer_trf.py +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env python - -# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration -__doc__ = """Run the streaming test.""" - -from PyJobTransformsCore.trf import JobTransform -from PyJobTransformsCore.full_trfarg import * -from RecJobTransforms.streaming_arg import * -from RecJobTransforms.MixStreamConfig import * - -class StreamMixingTransform(JobTransform): - def __init__(self): - JobTransform.__init__(self, - authors=[ Author('Ayana Holloway', 'ATHolloway@lbl.gov') ], - skeleton='RecJobTransforms/skeleton_mixing_streamtest.py', - help=__doc__, - config=mixStreamConfig ) - - # Add runargs in order - self.add ( JobConfigArg(package='RecJobTransforms')) - self.add ( PartitionArg() ) - self.add ( MaxEventsArg()) - self.add ( RandomSeedArg('Seed for MixingEventSelector') ) - self.add ( OutputRDOFileArg(name='theRDOFile'), default="test.pool.root" ) - self.add ( OutputRDOFileArg(name='egammaRDOFile'), default="NONE" ) - self.add ( OutputRDOFileArg(name='muonRDOFile'), default="NONE" ) - self.add ( OutputRDOFileArg(name='jetRDOFile'), default="NONE" ) - self.add ( OutputRDOFileArg(name='expressRDOFile'), default="NONE" ) - self.add ( TriggerConfigArg(), default='lumi1E31_no_prescale' ) - self.add ( GeometryVersionArg(), default='CSC-ATLAS-01-02-00' ) - - - def writeRunArgs(self): - #First clone old trf behavior - JobTransform.writeRunArgs(self); - - #Now make a new command file for including. - f = file("./streamtest_mixer_partition_args.py" ,'w') - f.write( "#Derived run config from PartitionArgs\n" ) - f.write( self.getArgument("partition").WritePartitionJobOptions() ) - f.close() - -# execute it if run as a script -if __name__ == '__main__': - # make transform object - trf = StreamMixingTransform() - import sys - sys.exit( trf.exeSysArgs().exitCode() ) diff --git a/Reconstruction/RecJobTransforms/share/skeleton.MergePool_tf.py b/Reconstruction/RecJobTransforms/share/skeleton.MergePool_tf.py index e442075f4f8b86a3dc567a6af9fd5245088202ec..d354c1ee899298044fe1c4b82fb7238d96a8e164 100644 --- a/Reconstruction/RecJobTransforms/share/skeleton.MergePool_tf.py +++ b/Reconstruction/RecJobTransforms/share/skeleton.MergePool_tf.py @@ -26,6 +26,15 @@ if hasattr(runArgs, "inputPOOL_MRG_INPUTFile"): else: recoLog.warning("No recognised data type for merge input and output ({0}). Merge setup may not be correct!".format(runArgs.inputPOOL_MRG_INPUTFileType)) +# DAOD comes in many flavours, so automate transforming this into a "standard" AOD argument +DAOD_Input_Key = [ k for k in dir(runArgs) if k.startswith("inputDAOD") and k.endswith("File") ] +if len(DAOD_Input_Key) is 1: + runArgs.inputAODFile = getattr(runArgs, DAOD_Input_Key[0]) + +DAOD_Output_Key = [ k for k in dir(runArgs) if k.startswith("outputDAOD") and k.endswith("_MRGFile") ] +if len(DAOD_Output_Key) is 1: + runArgs.outputAOD_MRGFile = getattr(runArgs, DAOD_Output_Key[0]) + if hasattr(runArgs,"inputFile"): athenaCommonFlags.FilesInput.set_Value_and_Lock( runArgs.inputFile ) if hasattr(runArgs,"inputAODFile"): rec.readAOD.set_Value_and_Lock( True ) diff --git a/Reconstruction/RecJobTransforms/share/skeleton.RAWtoESD.py b/Reconstruction/RecJobTransforms/share/skeleton.RAWtoESD.py index 7d5c52260b172eef6dbcf33c8ed14d7c3897868f..0c932a38c8a442dd63ca461e0e5b48ea35c784a9 100644 --- a/Reconstruction/RecJobTransforms/share/skeleton.RAWtoESD.py +++ b/Reconstruction/RecJobTransforms/share/skeleton.RAWtoESD.py @@ -59,6 +59,10 @@ if hasattr(runArgs,"outputDRAW_WMUNUFile"): #simpleName = outputBSNameStripper(runArgs.outputDRAW_WMUNUFile) primDPD.WriteRAWPerfDPD_WMUNU.FileName = runArgs.outputDRAW_WMUNUFile +if hasattr(runArgs,"trigFilterList"): + rec.doTriggerFilter.set_Value_and_Lock(True) + triggerListString = "|".join(runArgs.trigFilterList) + rec.triggerFilterList=triggerListString if hasattr(runArgs,"outputESDFile"): rec.doESD.set_Value_and_Lock( True )