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