21 return channel_to_string[dsid]
25 if __name__==
'__main__':
29 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
31 parser = flags.getArgumentParser()
33 parser.add_argument(
'--disableGlobalGroups', action=
'store_true', help=
'Turn off global groups')
34 parser.add_argument(
'--disableTriggerGroups', action=
'store_true', help=
'Turn off per-trigger groups')
35 parser.add_argument(
'--disableExpressGroup', action=
'store_true', help=
'Turn off express stream rates')
36 parser.add_argument(
'--disableUniqueRates', action=
'store_true', help=
'Turn off unique rates (much faster!)')
37 parser.add_argument(
'--disableLumiExtrapolation', action=
'store_true', help=
'Turn off luminosity extrapolation')
39 parser.add_argument(
'--MCDatasetName', default=
'', type=str, help=
'For MC input: Name of the dataset, can be used instead of MCCrossSection, MCFilterEfficiency')
40 parser.add_argument(
'--MCCrossSection', default=0.0, type=float, help=
'For MC input: Cross section of process in nb')
41 parser.add_argument(
'--MCFilterEfficiency', default=1.0, type=float, help=
'For MC input: Filter efficiency of any MC filter (0.0 - 1.0)')
42 parser.add_argument(
'--MCKFactor', default=1.0, type=float, help=
'For MC input: Additional multiplicitive fudge-factor to the supplied cross section.')
43 parser.add_argument(
'--MCIgnoreGeneratorWeights', action=
'store_true', help=
'For MC input: Flag to disregard any generator weights.')
45 parser.add_argument(
'--doRatesVsPositionInTrain', action=
'store_true', help=
'Study rates vs BCID position in bunch train')
46 parser.add_argument(
'--vetoStartOfTrain', default=0, type=int, help=
'Number of BCIDs at the start of the train to veto, implies doRatesVsPositionInTrain')
48 parser.add_argument(
'--targetLuminosity', default=2e34, type=float)
50 parser.add_argument(
'--outputHist', default=
'RatesHistograms.root', type=str, help=
'Histogram output ROOT file')
51 parser.add_argument(
'--ebWeightsDirectory', default=
'', type=str, help=
'Path to directory with local EB xml files')
53 parser.add_argument(
'--doMultiSliceDiJet', action=
'store_true', help=
'Enable the HS-softer-than-PU (HSTP) filter; reweight the Slices according to Jet/ETMiss procedure; recommended by PMG for di-jet slices.')
55 parser.add_argument(
'flags', nargs=
'*', help=
'Config flag overrides')
57 args = parser.parse_args()
59 flags.Exec.EventPrintoutInterval = 1000
60 flags.Common.MsgSuppression =
False
61 flags.Concurrency.NumThreads = 1
63 args = flags.fillFromArgs(parser=parser)
66 useBunchCrossingData = (args.doRatesVsPositionInTrain
or args.vetoStartOfTrain > 0)
68 from AthenaConfiguration.AutoConfigFlags
import GetFileMD
71 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
72 from AthenaConfiguration.ComponentFactory
import CompFactory
74 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
78 histSvc = CompFactory.THistSvc()
79 histSvc.Output += [
"RATESTREAM DATAFILE='" + args.outputHist +
"' OPT='RECREATE'"]
80 cfg.addService(histSvc)
83 from AthenaServices.MetaDataSvcConfig
import MetaDataSvcCfg
86 from TrigConfxAOD.TrigConfxAODConfig
import getxAODConfigSvc
89 from TrigDecisionTool.TrigDecisionToolConfig
import TrigDecisionToolCfg
94 xsec = args.MCCrossSection
95 fEff = args.MCFilterEfficiency
96 dset = args.MCDatasetName
97 if flags.Input.isMC
and xsec == 0:
98 from RatesAnalysis.GetCrossSectionAMITool
import GetCrossSectionAMI
99 amiTool = GetCrossSectionAMI()
101 dset = amiTool.getDatasetNameFromPath(flags.Input.Files[0])
102 amiTool.queryAmi(dset)
103 xsec = amiTool.crossSection
104 fEff = amiTool.filterEfficiency
106 ebw = CompFactory.EnhancedBiasWeighter(
'EnhancedBiasRatesTool')
107 ebw.RunNumber = flags.Input.RunNumbers[0]
108 ebw.UseBunchCrossingData = useBunchCrossingData
109 ebw.IsMC = flags.Input.isMC
111 ebw.TargetLuminosity = args.targetLuminosity
112 ebw.MCCrossSection = xsec
113 ebw.MCFilterEfficiency = fEff
114 ebw.MCKFactor = args.MCKFactor
115 ebw.DoMultiSliceDiJet = args.doMultiSliceDiJet
and flags.Input.isMC
116 ebw.MCIgnoreGeneratorWeights = args.MCIgnoreGeneratorWeights
117 ebw.EBWeightsDirectory = args.ebWeightsDirectory
if args.ebWeightsDirectory
else ""
118 cfg.addPublicTool(ebw)
120 rates = CompFactory.RatesEmulationExample()
121 rates.DoTriggerGroups =
not args.disableTriggerGroups
122 rates.DoGlobalGroups =
not args.disableGlobalGroups
123 rates.DoExpressRates =
not args.disableExpressGroup
124 rates.DoUniqueRates =
not args.disableUniqueRates
125 rates.UseBunchCrossingData = useBunchCrossingData
126 rates.TargetLuminosity = args.targetLuminosity
127 rates.VetoStartOfTrain = args.vetoStartOfTrain
128 rates.EnableLumiExtrapolation =
not args.disableLumiExtrapolation
and not args.doMultiSliceDiJet
129 rates.EnhancedBiasRatesTool = ebw
130 rates.TrigDecisionTool = tdt
131 rates.TrigConfigSvc = cfgsvc
132 rates.DoMultiSliceDiJet = args.doMultiSliceDiJet
and flags.Input.isMC
135 cfg.addEventAlgo(rates)
138 from JetRecConfig.StandardSmallRJets
import AntiKt4Truth, standardghosts, flavourghosts, calibmods, truthmods, standardmods, clustermods
139 from JetRecConfig.JetRecConfig
import JetRecCfg
140 if 'AntiKt4TruthJets' not in flags.Input.Collections
and args.doMultiSliceDiJet:
141 cfg.merge(
JetRecCfg(flags, AntiKt4Truth))
142 if 'AntiKt4EMTopoJets' not in flags.Input.Collections:
143 from JetRecConfig.JetDefinition
import JetDefinition
144 from JetRecConfig.StandardJetConstits
import stdConstitDic
as cst
145 AntiKt4EMTopo = JetDefinition(
"AntiKt",0.4,cst.EMTopoOrigin,
146 ghostdefs = standardghosts+flavourghosts,
147 modifiers = calibmods+truthmods+standardmods+clustermods+(
"Filter_calibThreshold:15000",
"LArHVCorr",
"jetiso",),
149 cfg.merge(
JetRecCfg(flags, AntiKt4EMTopo))
159 cfg.printConfig(withDetails=
False)
161 sc = cfg.run(flags.Exec.MaxEvents)
162 sys.exit(0
if sc.isSuccess()
else 1)