6 if __name__==
'__main__':
10 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
12 parser = flags.getArgumentParser()
14 parser.add_argument(
'--disableGlobalGroups', action=
'store_true', help=
'Turn off global groups')
15 parser.add_argument(
'--disableTriggerGroups', action=
'store_true', help=
'Turn off per-trigger groups')
16 parser.add_argument(
'--disableExpressGroup', action=
'store_true', help=
'Turn off express stream rates')
17 parser.add_argument(
'--disableUniqueRates', action=
'store_true', help=
'Turn off unique rates (much faster!)')
18 parser.add_argument(
'--disableLumiExtrapolation', action=
'store_true', help=
'Turn off luminosity extrapolation')
20 parser.add_argument(
'--MCDatasetName', default=
'', type=str, help=
'For MC input: Name of the dataset, can be used instead of MCCrossSection, MCFilterEfficiency')
21 parser.add_argument(
'--MCCrossSection', default=0.0, type=float, help=
'For MC input: Cross section of process in nb')
22 parser.add_argument(
'--MCFilterEfficiency', default=1.0, type=float, help=
'For MC input: Filter efficiency of any MC filter (0.0 - 1.0)')
23 parser.add_argument(
'--MCKFactor', default=1.0, type=float, help=
'For MC input: Additional multiplicitive fudge-factor to the supplied cross section.')
24 parser.add_argument(
'--MCIgnoreGeneratorWeights', action=
'store_true', help=
'For MC input: Flag to disregard any generator weights.')
26 parser.add_argument(
'--doRatesVsPositionInTrain', action=
'store_true', help=
'Study rates vs BCID position in bunch train')
27 parser.add_argument(
'--vetoStartOfTrain', default=0, type=int, help=
'Number of BCIDs at the start of the train to veto, implies doRatesVsPositionInTrain')
29 parser.add_argument(
'--targetLuminosity', default=2e34, type=float)
31 parser.add_argument(
'--outputHist', default=
'RatesHistograms.root', type=str, help=
'Histogram output ROOT file')
32 parser.add_argument(
'--inputPrescalesHLTJSON', default=
'', type=str, help=
'JSON of HLT prescales to simulate applying when computing rates')
33 parser.add_argument(
'--inputPrescalesL1JSON', default=
'', type=str, help=
'JSON of L1 prescales to simulate applying when computing rates')
34 parser.add_argument(
'--ebWeightsDirectory', default=
'', type=str, help=
'Path to directory with local EB xml files')
36 parser.add_argument(
'flags', nargs=
'*', help=
'Config flag overrides')
39 args = parser.parse_args()
41 flags.Exec.EventPrintoutInterval = 1000
42 flags.Common.MsgSuppression =
False
43 flags.Concurrency.NumThreads = 1
45 args = flags.fillFromArgs(parser=parser)
48 useBunchCrossingData = (args.doRatesVsPositionInTrain
or args.vetoStartOfTrain > 0)
51 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
52 from AthenaConfiguration.ComponentFactory
import CompFactory
54 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
58 histSvc = CompFactory.THistSvc()
59 histSvc.Output += [
"RATESTREAM DATAFILE='" + args.outputHist +
"' OPT='RECREATE'"]
60 cfg.addService(histSvc)
63 from AthenaServices.MetaDataSvcConfig
import MetaDataSvcCfg
66 from TrigConfxAOD.TrigConfxAODConfig
import getxAODConfigSvc
69 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
74 xsec = args.MCCrossSection
75 fEff = args.MCFilterEfficiency
76 dset = args.MCDatasetName
77 if flags.Input.isMC
and xsec == 0:
78 from RatesAnalysis.GetCrossSectionAMITool
import GetCrossSectionAMI
79 amiTool = GetCrossSectionAMI()
81 dset = amiTool.getDatasetNameFromPath(flags.Input.Files[0])
82 amiTool.queryAmi(dset)
83 xsec = amiTool.crossSection
84 fEff = amiTool.filterEfficiency
86 ebw = CompFactory.EnhancedBiasWeighter(
'EnhancedBiasRatesTool')
87 ebw.RunNumber = flags.Input.RunNumbers[0]
88 ebw.UseBunchCrossingData = useBunchCrossingData
89 ebw.IsMC = flags.Input.isMC
91 ebw.MCCrossSection = xsec
92 ebw.MCFilterEfficiency = fEff
93 ebw.MCKFactor = args.MCKFactor
94 ebw.DoMultiSliceDiJet =
False
95 ebw.MCIgnoreGeneratorWeights = args.MCIgnoreGeneratorWeights
96 ebw.EBWeightsDirectory = args.ebWeightsDirectory
if args.ebWeightsDirectory
else ""
97 cfg.addPublicTool(ebw)
99 rates = CompFactory.FullMenu()
101 rates.DoTriggerGroups =
not args.disableTriggerGroups
102 rates.DoGlobalGroups =
not args.disableGlobalGroups
103 rates.DoExpressRates =
not args.disableExpressGroup
104 rates.DoUniqueRates =
not args.disableUniqueRates
105 rates.UseBunchCrossingData = useBunchCrossingData
106 rates.TargetLuminosity = args.targetLuminosity
107 rates.VetoStartOfTrain = args.vetoStartOfTrain
108 rates.EnableLumiExtrapolation =
not args.disableLumiExtrapolation
109 rates.EnhancedBiasRatesTool = ebw
110 rates.TrigDecisionTool = tdt
111 rates.TrigConfigSvc = cfgsvc
112 rates.DoMultiSliceDiJet =
False
113 rates.histogramSuffix =
""
115 """Return all of the HLT items, and their lower chains
119 from collections
import OrderedDict
as odict
124 inputFilePSL1JSON=args.inputPrescalesL1JSON
125 inputFilePSHLTJSON=args.inputPrescalesHLTJSON
127 if (inputFilePSL1JSON!=
"" and inputFilePSHLTJSON!=
""):
128 with open(inputFilePSL1JSON,
'r')
as fh:
129 l1ps_json_file = json.load(fh, object_pairs_hook = odict)
131 with open(inputFilePSHLTJSON,
'r')
as fh:
132 hltps_json_file = json.load(fh, object_pairs_hook = odict)
134 for chain_name, ch
in l1ps_json_file[
'cutValues'].
items():
135 prescaleL1_input = ch[
'info'].
split()[1]
136 p = {
'prescale':
float(prescaleL1_input)}
137 prescales[chain_name] = p
139 for chain_name, ch
in hltps_json_file[
'prescales'].
items():
140 prescaleHLT_input = ch[
'prescale']
141 prescaleExpressHLT_input = ch[
'prescale_express']
if 'prescale_express' in ch
else -1
144 'prescale':
float(prescaleHLT_input),
145 'prescale_express':
float(prescaleExpressHLT_input)
147 prescales[chain_name] = p
150 rates.PrescalesJSON = prescales
153 cfg.addEventAlgo(rates)
156 if useBunchCrossingData:
157 from LumiBlockComps.BunchCrossingCondAlgConfig
import BunchCrossingCondAlgCfg
162 cfg.printConfig(withDetails=
False)
164 sc = cfg.run(flags.Exec.MaxEvents)
165 sys.exit(0
if sc.isSuccess()
else 1)