ATLAS Offline Software
Loading...
Searching...
No Matches
Trig_reco_tf.py
Go to the documentation of this file.
1#! /usr/bin/env python
2
3# Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
4
5
8
9import sys
10import time
11
12from PyJobTransforms.transform import transform
13from PyJobTransforms.trfExe import athenaExecutor, DQMergeExecutor
14from PyJobTransforms.trfArgs import addAthenaArguments, addDetectorArguments
15from PyJobTransforms.trfDecorators import stdTrfExceptionHandler, sigUsrStackTrace
16from RecJobTransforms.recTransformUtils import addCommonRecTrfArgs, addStandardRecoFiles
17
18import PyJobTransforms.trfArgClasses as trfArgClasses
19
20from TrigTransform.trigRecoExe import trigRecoExecutor
21from TrigTransform.trigCostExe import trigCostExecutor
22from TrigTransform.trigRateExe import trigRateExecutor
23
24# Setup core logging here
25from PyJobTransforms.trfLogger import msg
26msg.info('logging set in %s', sys.argv[0])
27
28@stdTrfExceptionHandler
29@sigUsrStackTrace
30def main():
31
32 msg.info('This is %s', sys.argv[0])
33
34 trf = getTransform()
35 trf.parseCmdLineArgs(sys.argv[1:])
36 trf.execute()
37 trf.generateReport()
38
39 msg.info("%s stopped at %s, trf exit code %d", sys.argv[0], time.asctime(), trf.exitCode)
40 sys.exit(trf.exitCode)
41
43 executorSet = set()
44
45 # BSRDOtoRAW is the HLT step of the trigger transform
46 # literalRunargs used for when running with athena
47 executorSet.add(trigRecoExecutor(name = 'BSRDOtoRAW', skeletonFile = 'TriggerJobOpts/runHLT_standalone.py',
48 skeletonCA = 'TriggerJobOpts.runHLT',
49 substep = 'b2r', tryDropAndReload = False,
50 inData = ['BS_RDO', 'RDO'], outData = ['BS', 'DRAW_TRIGCOST', 'HIST_HLTMON', 'HIST_DEBUGSTREAMMON'],
51 perfMonFile = 'ntuple_BSRDOtoRAW.pmon.gz',
52 literalRunargs = ['writeBS = runArgs.writeBS',
53 'from AthenaCommon.AthenaCommonFlags import jobproperties as jps',
54 'jps.AthenaCommonFlags.FilesInput.set_Value_and_Lock(runArgs.inputBS_RDOFile)',
55 'jps.AthenaCommonFlags.EvtMax.set_Value_and_Lock(runArgs.maxEvents)',
56 'if hasattr(runArgs,\'skipEvents\'):',
57 ' jps.AthenaCommonFlags.SkipEvents.set_Value_and_Lock(runArgs.skipEvents)',
58 'if hasattr(runArgs,\'outputBSFile\'):',
59 ' jps.AthenaCommonFlags.BSRDOOutput.set_Value_and_Lock( runArgs.outputBSFile )']))
60
61 # RAWtoCOST is the COST step for trigger transform
62 # runs in athena and will succeed if input BS file has costmon enabled
63 executorSet.add(trigCostExecutor(name = 'DRAWCOSTtoNTUPCOST',
64 exe = 'RunTrigCostAnalysis.py',
65 inData = ['DRAW_TRIGCOST'], outData = ['NTUP_TRIGCOST']))
66
67 # AODtoNTUPRATE is the RATE step for trigger transform
68 # runs in athena from an input AOD file
69 executorSet.add(trigRateExecutor(name = 'AODtoNTUPRATE',
70 exe = 'RatesAnalysisFullMenu.py',
71 inData = ['AOD'], outData = ['NTUP_TRIGRATE']))
72
73 # RAWtoALL, DQHistogramMerge are the reconstruction substeps for trigger transform
74 # shortened list from addRecoSubsteps in RecJobTransforms.recTransformUtils
75 executorSet.add(athenaExecutor(name = 'RAWtoALL',
76 skeletonCA = 'RecJobTransforms.RAWtoALL_Skeleton',
77 substep = 'r2a', inData = ['BS', 'RDO'],
78 outData = ['ESD', 'AOD', 'HIST_R2A'],
79 perfMonFile = 'ntuple_RAWtoALL.pmon.gz'))
80 executorSet.add(DQMergeExecutor(name = 'DQHistogramMerge', inData = ['HIST_R2A'], outData = ['HIST']))
81
82 # Other reco steps - not currently used in trigger reprocessings
83 # if remove can also remove outputNTUP_TRIGFile
84
85 trf = transform(executor = executorSet, description = 'Trigger transform to run HLT, followed by'
86 ' general purpose ATLAS reconstruction transform. Input to HLT is inputBS_RDOFile'
87 ' with outputs of RDO, ESD or AOD. For more details see:'
88 ' https://twiki.cern.ch/twiki/bin/viewauth/Atlas/TriggerTransform or for reco_tf, see:'
89 ' https://twiki.cern.ch/twiki/bin/viewauth/Atlas/RecoTf')
90
91 # Add arguments
92 # shortened list from RecJobTransforms.Reco_tf
93 addAthenaArguments(trf.parser)
94 addDetectorArguments(trf.parser)
95 # shortened list from addAllRecoArgs in RecJobTransforms.recTransformUtils
96 addCommonRecTrfArgs(trf.parser)
97 addStandardRecoFiles(trf.parser)
98
99 # Now add specific trigger transform arguments
100 # Putting this last makes them appear last in the help so easier to find
101 addTriggerArgs(trf.parser)
102 addTrigCostRateArgs(trf.parser)
103 addTriggerDBArgs(trf.parser)
104 addDebugArgs(trf.parser)
105
106 return trf
107
108
109def addTriggerArgs(parser):
110 # Use arggroup to get these arguments in their own sub-section (of --help)
111 parser.defineArgGroup('Trigger', 'Specific options related to the trigger configuration used for reprocessing')
112
113 # Arguments specific for trigger transform
114 # writeBS used in literal arguments when running HLT step in athena (not athenaHLT/EF)
115 parser.add_argument('--writeBS', type=trfArgClasses.argFactory(trfArgClasses.argBool, runarg=True),
116 help='Needed if running BSRDO to BS step in athena (default: True)', group='Trigger', default=trfArgClasses.argBool(True, runarg=True))
117 # input BS file for the HLT step (name just to be unique identifier)
118 parser.add_argument('--inputBS_RDOFile', nargs='+',
119 type=trfArgClasses.argFactory(trfArgClasses.argBSFile, io='input', runarg=True, type='bs'),
120 help='Input bytestream file', group='Trigger')
121 # without an outputBSFile name specified then any further steps will know to use tmp.BS
122 parser.add_argument('--outputBSFile', nargs='+',
123 type=trfArgClasses.argFactory(trfArgClasses.argBSFile, io='output', runarg=True, type='bs'),
124 help='Output bytestream file', group='Trigger')
125 # select output stream in BS file
126
128 parser.add_argument('--streamSelection', nargs='+', type=trfArgClasses.argFactory(trfArgClasses.argList, runarg=True),
129 help='select output streams in produced BS file (default: \"Main\"). Specify \"All\" to disable splitting (standard reco will fail on any events with only PEB data)', group='Trigger', default=trfArgClasses.argList("Main", runarg=True))
130 # HLT out histogram file, if defined renames expert-monitoring file that is produced automatically
131 parser.add_argument('--outputHIST_HLTMONFile', nargs='+',
132 type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', runarg=True, countable=False),
133 help='Output HLTMON file', group='Trigger')
134 # Trigger Configuration String as used in reco Steps
135 parser.add_argument('--triggerConfig', nargs='+', metavar='substep=TRIGGERCONFIG',
136 type=trfArgClasses.argFactory(trfArgClasses.argSubstep, runarg=True, separator='='),
137 help='Trigger Configuration String. '
138 'N.B. This argument uses EQUALS (=) to separate the substep name from the value.', group='Trigger')
139 # precommand
140 parser.add_argument('--precommand', nargs='+', type=trfArgClasses.argFactory(trfArgClasses.argList, runarg=True),
141 help='precommand for trigger step ("-c")', group='Trigger')
142 # postcommand
143 parser.add_argument('--postcommand', nargs='+', type=trfArgClasses.argFactory(trfArgClasses.argList, runarg=True),
144 help='postcommand for trigger step ("-C")', group='Trigger')
145
146 # trigger executable
147 parser.add_argument('--trigExe', type=trfArgClasses.argFactory(trfArgClasses.argString, runarg=True),
148 default=trfArgClasses.argString("athenaHLT.py"),
149 help='Executable to run in the trigger step', group='Trigger')
150
151 # For prodsys to make sure uses inputBS_RDOFile rather than inputBSFile when running the b2r step
152 parser.add_argument('--prodSysBSRDO', type=trfArgClasses.argFactory(trfArgClasses.argBool, runarg=True),
153 help='For prodsys to make sure uses inputBS_RDOFile rather than inputBSFile when running the b2r step', group='Trigger')
154
155
157 # Use arggroup to get these arguments in their own sub-section (of --help)
158 parser.defineArgGroup('TrigCost', 'Specific options related to the trigger cost and rates steps in trigger reprocessings')
159
160 # without a outputDRAW_TRIGCOSTFile name specified then it will not be possible to run any further COST analysis if the BS is slimmed to a specific stream
161 parser.add_argument('--outputDRAW_TRIGCOSTFile', nargs='+',
162 type=trfArgClasses.argFactory(trfArgClasses.argBSFile, io='output', runarg=True),
163 help='Output bytestream file of CostMonitoring stream', group='TrigCost')
164 # input BS file for the TRIGCOST step (name just to be unique identifier for prodSys)
165 parser.add_argument('--inputDRAW_TRIGCOSTFile', nargs='+',
166 type=trfArgClasses.argFactory(trfArgClasses.argBSFile, io='input', runarg=True),
167 help='Input bytestream file of CostMonitoring stream', group='TrigCost')
168 # NTUP_COST is used for COST monitoring - used in the reco release
169 parser.add_argument('--outputNTUP_TRIGCOSTFile', nargs='+',
170 type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', runarg=True, countable=False),
171 help='D3PD output NTUP_TRIGCOST file', group='TrigCost')
172 # NTUP_RATE is used for COST monitoring - used in the reco release
173 parser.add_argument('--outputNTUP_TRIGRATEFile', nargs='+',
174 type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', runarg=True, countable=False),
175 help='D3PD output NTUP_TRIGRATE file', group='TrigCost')
176
177 # Additional cost arguments for cost processing step
178 parser.add_argument('--costopts', nargs='+',
179 type=trfArgClasses.argFactory(trfArgClasses.argSubstepList, splitter=' ', runarg=False),
180 help='Extra options to pass to cost processing.', group='TrigCost')
181
182 # Additional rate arguments for rates analysis step
183 parser.add_argument('--rateopts', nargs='+',
184 type=trfArgClasses.argFactory(trfArgClasses.argSubstepList, splitter=' ', runarg=False),
185 help='Extra options to pass to rates analysis.', group='TrigCost')
186
188 # Use arggroup to get these arguments in their own sub-section (of --help)
189 parser.defineArgGroup('TriggerDB', 'Specific options related to the trigger DB')
190
191 parser.add_argument('--useDB', type=trfArgClasses.argFactory(trfArgClasses.argBool, runarg=True),
192 help='read from DB', group='TriggerDB')
193 parser.add_argument('--DBserver', type=trfArgClasses.argFactory(trfArgClasses.argString, runarg=True),
194 help='DB name', group='TriggerDB')
195 parser.add_argument('--DBsmkey', type=trfArgClasses.argFactory(trfArgClasses.argString, runarg=True),
196 help='DB SMK', group='TriggerDB')
197 parser.add_argument('--DBhltpskey', type=trfArgClasses.argFactory(trfArgClasses.argString, runarg=True),
198 help='DB hltpskey', group='TriggerDB')
199 parser.add_argument('--DBl1pskey', type=trfArgClasses.argFactory(trfArgClasses.argString, runarg=True),
200 help='DB l1pskey', group='TriggerDB')
201
202
203def addDebugArgs(parser):
204 # Use arggroup to get these arguments in their own sub-section (of --help)
205 parser.defineArgGroup('Debug', 'Specific options related to the trigger debug recovery')
206
207 parser.add_argument('--outputHIST_DEBUGSTREAMMONFile', nargs='+',
208 type=trfArgClasses.argFactory(trfArgClasses.argHISTFile, io='output', runarg=True, countable=False),
209 help='Output DEBUGSTREAMMON file', group='Debug')
210
211
212if __name__ == '__main__':
213 main()
STL class.
Main package for new style ATLAS job transforms.
Transform argument class definitions.
Transform execution functions.
Logging configuration for ATLAS job transforms.
addTrigCostRateArgs(parser)
addTriggerArgs(parser)
addTriggerDBArgs(parser)
addDebugArgs(parser)