6from AthenaConfiguration.ComponentFactory
import CompFactory
7from AthenaConfiguration.ComponentAccumulator
import ComponentAccumulator
8from AthenaCommon.Logging
import logging
9log = logging.getLogger(
'RunTrigCostAnalysis.py')
15 acc = ComponentAccumulator()
17 if len(flags.Input.RunNumbers) > 1:
18 log.error(
'Multiple run numbers from metadata! Only one expected per cost processing')
21 enhancedBiasWeighter = CompFactory.EnhancedBiasWeighter()
22 enhancedBiasWeighter.RunNumber = flags.Input.RunNumbers[0]
23 enhancedBiasWeighter.UseBunchCrossingData =
False
24 enhancedBiasWeighter.IsMC = flags.Input.isMC
27 enhancedBiasWeighter.MCCrossSection = MCpayload.get(
'MCCrossSection')
28 enhancedBiasWeighter.MCFilterEfficiency = MCpayload.get(
'MCFilterEfficiency')
29 enhancedBiasWeighter.MCKFactor = MCpayload.get(
'MCKFactor')
30 enhancedBiasWeighter.MCIgnoreGeneratorWeights = MCpayload.get(
'MCIgnoreGeneratorWeights')
32 trigCostAnalysis = CompFactory.TrigCostAnalysis()
33 trigCostAnalysis.OutputLevel = flags.Exec.OutputLevel
34 trigCostAnalysis.BaseEventWeight = args.baseWeight
35 trigCostAnalysis.EnhancedBiasTool = enhancedBiasWeighter
36 trigCostAnalysis.AlgToChainTool = CompFactory.getComp(
"TrigCompositeUtils::AlgToChainTool")()
37 trigCostAnalysis.UseEBWeights = args.useEBWeights
38 trigCostAnalysis.MaxFullEventDumps = 100
39 trigCostAnalysis.FullEventDumpProbability = 1
40 trigCostAnalysis.UseSingleTimeRange = flags.Input.isMC
or args.useEBWeights
41 trigCostAnalysis.DoMonitorChainAlgorithm = args.monitorChainAlgorithm
42 if args.excludeAlgsFromChainTime:
43 trigCostAnalysis.ExcludeAlgsFromChainTime = args.excludeAlgsFromChainTime.split(
',')
45 if not flags.Input.isMC:
46 trigCostAnalysis.AdditionalHashList =
readHashesFromHLTJO(args.joFile, args.smk, args.dbAlias)
48 log.debug(
"Hashes from the HLTJO won't be retrieved for MC job")
49 trigCostAnalysis.AdditionalHashList = list()
51 acc.addEventAlgo(trigCostAnalysis)
59 payload[
'MCCrossSection'] = args.MCCrossSection
60 payload[
'MCFilterEfficiency'] = args.MCFilterEfficiency
61 payload[
'MCKFactor'] = args.MCKFactor
62 payload[
'MCIgnoreGeneratorWeights'] = args.MCIgnoreGeneratorWeights
64 dset = args.MCDatasetName
65 if payload[
'MCCrossSection'] == 0:
66 from RatesAnalysis.GetCrossSectionAMITool
import GetCrossSectionAMI
67 amiTool = GetCrossSectionAMI()
69 dset = amiTool.getDatasetNameFromPath(flags.Input.Files[0])
70 amiTool.queryAmi(dset)
71 payload[
'MCCrossSection'] = amiTool.crossSection
72 payload[
'MCFilterEfficiency'] = amiTool.filterEfficiency
81 log.debug(
"Reading HLTJobOptions from file {0}".format(joFileName))
82 with open(joFileName,
"r")
as joFile:
84 joData = json.load(joFile)
86 log.debug(
"Reading HLTJobOptions from database {0} {1}".format(smk, dbAlias))
87 from TrigConfIO.HLTTriggerConfigAccess
import HLTJobOptionsAccess
88 joData = HLTJobOptionsAccess(dbalias = dbAlias, smkey = smk)
90 log.debug(
"Additional collections' names from HLTJobOptions file are not available")
92 except Exception
as err:
93 log.warning(
"Retrieving additional names fron HLTJO failed: {0}".format(err))
97 for entry
in joData[
"properties"]:
98 namesList.add(entry.split(
'.')[0])
101 entryObj = joData[
"properties"][entry]
102 if "Members" in entryObj:
104 namesList.update(membersList)
107 log.info(
"Retrieved {0} additional names from HLT JO file".format(len(namesList)))
108 return list(namesList)
113 from AthenaCommon.CFElements
import seqAND
114 from TrigEDMConfig
import DataScoutingInfo
116 acc = ComponentAccumulator()
118 acc.addSequence(seqAND(
"Decoding"))
119 acc.addEventAlgo(CompFactory.HLTResultMTByteStreamDecoderAlg(),
"Decoding")
121 costDataDeserialiser = CompFactory.TriggerEDMDeserialiserAlg(
"CostDataTrigDeserialiser")
122 costDataDeserialiser.ModuleID = DataScoutingInfo.getDataScoutingResultID(
"CostMonDS")
123 acc.addEventAlgo(costDataDeserialiser,
"Decoding")
130 acc = ComponentAccumulator()
132 hltConfigSvc = CompFactory.getComp(
"TrigConf::HLTConfigSvc")(
"HLTConfigSvc")
137 log.debug(
"Reading HLTMenu from file {0}".format(menuFile))
139 hltConfigSvc.InputType =
"FILE"
140 hltConfigSvc.HLTJsonFileName = menuFile
141 elif smk
and dbAlias:
142 log.debug(
"Reading HLTMenu from database {0} {1}".format(smk, dbAlias))
144 hltConfigSvc.InputType =
"DB"
145 hltConfigSvc.HLTJsonFileName =
""
146 hltConfigSvc.TriggerDB = dbAlias
147 hltConfigSvc.SMK = smk
149 log.error(
"Cannot read the HLTMenu! Provide file or relevant keys.")
151 acc.addService(hltConfigSvc,
False,
True)
158 from TrigConfStorage.TriggerCoolUtil
import TriggerCoolUtil
159 dbconn = TriggerCoolUtil.GetConnection(
"CONDBR2")
160 runNumber = flags.Input.RunNumbers[0]
161 configKeys = TriggerCoolUtil.getHLTConfigKeys(dbconn, [[runNumber, runNumber]])
163 log.debug(
"Getting keys from COOL for run {0}".format(runNumber))
164 if configKeys
and runNumber
in configKeys.keys():
166 smk = configKeys[runNumber][
'SMK']
169 dbAlias = configKeys[runNumber][
'DB']
171 log.debug(
"Config keys are SMK: {0} DB alias: {1}".format(smk, dbAlias))
174 log.debug(
"Configuration keys for run {0} not found!".format(runNumber))
175 dbAlias =
None if not dbAlias
else dbAlias
176 smk =
None if not smk
else smk
178 return (smk, dbAlias)
184 menuFileName =
'HLTMenu_.*json'
187 r = re.compile(menuFileName)
188 menuFiles = list(filter(r.match, os.listdir(
'.')))
190 if len(menuFiles) > 1:
191 log.info(
"Found more than one menu file! Saving first match %s", menuFiles[0])
193 return menuFiles[0]
if len(menuFiles) > 0
else ""
196if __name__==
'__main__':
198 from AthenaConfiguration.AllConfigFlags
import initConfigFlags
199 flags = initConfigFlags()
202 parser = flags.getArgumentParser()
203 parser.add_argument(
'--outputHist', type=str, default=
'TrigCostRoot_Results.root', help=
'Histogram output ROOT file')
204 parser.add_argument(
'--monitorChainAlgorithm', action=
'store_true', help=
'Turn on Chain Algorithm monitoring')
205 parser.add_argument(
'--baseWeight', type=float, default=1.0, help=
'Base events weight')
206 parser.add_argument(
'--useEBWeights', type=bool, default=
False, help=
'Apply Enhanced Bias weights')
207 parser.add_argument(
'--joFile', type=str, help=
'Optional HLTJobOptions file to add more hashes')
209 parser.add_argument(
'--smk', type=int, help=
'SuperMasterKey to retrieve menu file')
210 parser.add_argument(
'--dbAlias', type=str, help=
'Database alias to retrieve menu file')
212 parser.add_argument(
'--MCDatasetName', default=
'', type=str, help=
'For MC input: Name of the dataset, can be used instead of MCCrossSection, MCFilterEfficiency')
213 parser.add_argument(
'--MCCrossSection', default=0.0, type=float, help=
'For MC input: Cross section of process in nb')
214 parser.add_argument(
'--MCFilterEfficiency', default=1.0, type=float, help=
'For MC input: Filter efficiency of any MC filter (0.0 - 1.0)')
215 parser.add_argument(
'--MCKFactor', default=1.0, type=float, help=
'For MC input: Additional multiplicitive fudge-factor to the supplied cross section.')
216 parser.add_argument(
'--MCIgnoreGeneratorWeights', action=
'store_true', help=
'For MC input: Flag to disregard any generator weights.')
218 parser.add_argument(
'--excludeAlgsFromChainTime', help=
'comma separated list of algorithms to exclude from chain time calculation')
220 args = flags.fillFromArgs(parser=parser)
224 from AthenaConfiguration.MainServicesConfig
import MainServicesCfg
225 cfg = MainServicesCfg(flags)
228 from AthenaPoolCnvSvc.PoolReadConfig
import PoolReadCfg
229 cfg.merge(PoolReadCfg(flags))
231 from ByteStreamCnvSvc.ByteStreamConfig
import ByteStreamReadCfg
232 cfg.merge(ByteStreamReadCfg(flags))
235 histSvc = CompFactory.THistSvc()
236 histSvc.Output += [
"COSTSTREAM DATAFILE='" + args.outputHist +
"' OPT='RECREATE'"]
237 cfg.addService(histSvc)
240 if not flags.Input.isMC
and (
not args.smk
or not args.dbAlias):
248 cfg.printConfig(withDetails=
False)
249 sc = cfg.run(flags.Exec.MaxEvents)
251 sys.exit(0
if sc.isSuccess()
else 1)
std::string replace(std::string s, const std::string &s2, const std::string &s3)
std::vector< std::string > split(const std::string &s, const std::string &t=":")
trigCostAnalysisCfg(flags, args)
readHashesFromHLTJO(joFileName="", smk=0, dbAlias="")
readConfigFromCool(flags, smk, dbAlias)
hltConfigSvcCfg(flags, smk, dbAlias)