5 CA module to configure the (standalone) HLT for athena.
10 if __name__ ==
"__main__":
11 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
13 parser = flags.getArgumentParser()
16 parser.add_argument(
'--disableHistograms', action=
'store_false', help=
'Turn off histograming')
17 parser.add_argument(
'--disableGlobalGroups', action=
'store_false', help=
'Turn off global groups')
18 parser.add_argument(
'--disableTriggerGroups', action=
'store_false', help=
'Turn off per-trigger groups')
19 parser.add_argument(
'--disableExpressGroup', action=
'store_false', help=
'Turn off express stream rates')
20 parser.add_argument(
'--disableUniqueRates', action=
'store_false', help=
'Turn off unique rates (much faster!)')
21 parser.add_argument(
'--disableLumiExtrapolation', action=
'store_false', help=
'Turn off luminosity extrapolation')
23 parser.add_argument(
'--MCDatasetName', default=
'', type=str, help=
'For MC input: Name of the dataset, can be used instead of MCCrossSection, MCFilterEfficiency')
24 parser.add_argument(
'--MCCrossSection', default=0.0, type=float, help=
'For MC input: Cross section of process in nb')
25 parser.add_argument(
'--MCFilterEfficiency', default=1.0, type=float, help=
'For MC input: Filter efficiency of any MC filter (0.0 - 1.0)')
26 parser.add_argument(
'--MCKFactor', default=1.0, type=float, help=
'For MC input: Additional multiplicitive fudge-factor to the supplied cross section.')
27 parser.add_argument(
'--MCIgnoreGeneratorWeights', action=
'store_true', help=
'For MC input: Flag to disregard any generator weights.')
29 parser.add_argument(
'--outputHist', default=
'RatesHistograms.root', type=str, help=
'Histogram output ROOT file')
31 parser.add_argument(
'--targetLuminosity', default=2e34, type=float)
33 parser.add_argument(
'--doRatesVsPositionInTrain', action=
'store_true', help=
'Study rates vs BCID position in bunch train')
34 parser.add_argument(
'--vetoStartOfTrain', default=0, type=int, help=
'Number of BCIDs at the start of the train to veto, implies doRatesVsPositionInTrain')
36 parser.add_argument(
'--maxEvents', type=int, help=
'Maximum number of events to process')
37 parser.add_argument(
'flags', nargs=
'*', help=
'Config flag overrides')
39 parser.add_argument(
'--ratesJson', type=str, help=
'Input JSON of triggers for rates')
40 args, _ = parser.parse_known_args()
44 with open(args.ratesJson,
'r')
as f:
45 triggers_data = json.load(f)
46 L1_items = triggers_data.get(
"L1_items", [])
48 userDefinedL1items = triggers_data.get(
"userDefinedL1items", [])
49 userDefinedNames = [item[
"name"]
for item
in userDefinedL1items
if "name" in item]
50 userDefinedDefinitions = [item[
"definition"]
for item
in userDefinedL1items
if "definition" in item]
54 userDefinedDefinitions = []
57 if not args.filesInput:
58 from TrigValTools.TrigValSteering
import Input
59 flags.Input.Files = Input.load_input_json()[
'data'][
'paths']
62 flags.Trigger.enabledSignatures=[
'Calib']
63 flags.Trigger.doLVL1=
True
64 flags.Concurrency.NumConcurrentEvents = 1
65 flags.Concurrency.NumThreads = 1
66 flags.Exec.MaxEvents = 1000
68 useBunchCrossingData = (args.doRatesVsPositionInTrain
or args.vetoStartOfTrain > 0)
72 flags.fillFromArgs(parser=parser)
73 except Exception
as e:
74 print(f
"Error filling flags: {e}")
77 if (flags.Input.isMC):
78 flags.IOVDb.GlobalTag=
"OFLCOND-MC23-SDR-RUN3-05"
80 from TriggerJobOpts.runHLT
import athenaCfg
82 from AthenaConfiguration.ComponentFactory
import CompFactory
84 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
87 from TrigConfxAOD.TrigConfxAODConfig
import getxAODConfigSvc
90 histSvc = CompFactory.THistSvc()
91 histSvc.Output += [
"RATESTREAM DATAFILE='RatesHistograms.root' OPT='RECREATE'"]
92 acc.addService(histSvc)
96 xsec = args.MCCrossSection
97 fEff = args.MCFilterEfficiency
98 dset = args.MCDatasetName
99 if flags.Input.isMC
and xsec == 0:
100 from RatesAnalysis.GetCrossSectionAMITool
import GetCrossSectionAMI
101 amiTool = GetCrossSectionAMI()
103 dset = amiTool.getDatasetNameFromPath(flags.Input.Files[0])
104 amiTool.queryAmi(dset)
105 xsec = amiTool.crossSection
106 fEff = amiTool.filterEfficiency
108 ebw = CompFactory.EnhancedBiasWeighter(
'EnhancedBiasRatesTool')
109 ebw.RunNumber = flags.Input.RunNumbers[0]
110 ebw.UseBunchCrossingData =
False
111 ebw.IsMC = flags.Input.isMC
116 ebw.MCCrossSection = xsec
117 ebw.MCFilterEfficiency = fEff
118 ebw.MCKFactor = args.MCKFactor
119 ebw.MCIgnoreGeneratorWeights = args.MCIgnoreGeneratorWeights
121 acc.addPublicTool(ebw)
123 tdt = CompFactory.Trig.TrigDecisionTool(
'TrigDecisionTool')
124 tdt.TrigConfigSvc = cfgsvc
125 tdt.HLTSummary =
"HLTNav_Summary_OnlineSlimmed"
126 tdt.NavigationFormat =
"TrigComposite"
127 acc.addPublicTool(tdt)
129 rates = CompFactory.L1TopoRatesCalculator()
132 rates.m_L1_items_json = L1_items
133 except AttributeError:
134 print(
"Failed to set L1_items, method not found")
136 if userDefinedNames
and userDefinedDefinitions:
137 rates.m_userDefinedNames = userDefinedNames
138 rates.m_userDefinedDefinitions = userDefinedDefinitions
140 rates.DoTriggerGroups =
True
141 rates.DoGlobalGroups =
True
142 rates.DoExpressRates =
True
143 rates.DoUniqueRates =
True
144 rates.DoHistograms =
True
145 rates.UseBunchCrossingData =
False
146 rates.TargetLuminosity = 2e34
147 rates.VetoStartOfTrain =
False
148 rates.EnableLumiExtrapolation =
True
149 rates.EnhancedBiasRatesTool = ebw
150 rates.TrigDecisionTool = tdt
151 rates.TrigConfigSvc = cfgsvc
152 acc.addEventAlgo(rates)
158 sys.exit(acc.run().isFailure())