ATLAS Offline Software
Loading...
Searching...
No Matches
runL1TopoRates.py
Go to the documentation of this file.
1#!/usr/bin/env athena.py
2# Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3
4"""
5CA module to configure the (standalone) HLT for athena.
6"""
7from AthenaCommon.Constants import DEBUG
8
9# This entry point is only used when running in athena
10
11if __name__ == "__main__":
12 from AthenaConfiguration.AllConfigFlags import initConfigFlags
13 flags = initConfigFlags()
14 parser = flags.getArgumentParser()
15 # Add additional args
16 #
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')
23 #
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.')
29 #
30 parser.add_argument('--outputHist', default='RatesHistograms.root', type=str, help='Histogram output ROOT file')
31 #
32 parser.add_argument('--targetLuminosity', default=2e34, type=float)
33 #
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')
36 #
37 parser.add_argument('--maxEvents', type=int, help='Maximum number of events to process')
38 parser.add_argument('flags', nargs='*', help='Config flag overrides')
39
40 parser.add_argument('--ratesJson', type=str, help='Input JSON of triggers for rates')
41 args, _ = parser.parse_known_args()
42
43 if args.ratesJson:
44 import json
45 with open(args.ratesJson, 'r') as f:
46 triggers_data = json.load(f)
47 L1_items = triggers_data.get("L1_items", [])
48
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]
52 else:
53 L1_items = []
54 userDefinedNames = []
55 userDefinedDefinitions = []
56 # Act on additional args, e.g. run over ttbar if no --filesInput argument is specified
57 # Runs over Enhanced bias data
58 if not args.filesInput:
59 from TrigValTools.TrigValSteering import Input
60 flags.Input.Files = Input.load_input_json()['data']['paths']
61
62 # Set explicit flags
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
68
69 useBunchCrossingData = (args.doRatesVsPositionInTrain or args.vetoStartOfTrain > 0)
70
71 # Fill flags from command line
72 try:
73 flags.fillFromArgs(parser=parser)
74 except Exception as e:
75 print(f"Error filling flags: {e}")
76 import sys
77 sys.exit(1)
78 if (flags.Input.isMC):
79 flags.IOVDb.GlobalTag="OFLCOND-MC23-SDR-RUN3-05"
80
81 from TriggerJobOpts.runHLT import athenaCfg
82 acc = athenaCfg(flags,parser=parser)
83 from AthenaConfiguration.ComponentFactory import CompFactory
84
85 from TrigDecisionTool.TrigDecisionToolConfig import TrigDecisionToolCfg
86 tdt = acc.getPrimaryAndMerge(TrigDecisionToolCfg(flags))
87
88 from TrigConfxAOD.TrigConfxAODConfig import getxAODConfigSvc
89 cfgsvc = acc.getPrimaryAndMerge(getxAODConfigSvc(flags))
90
91 histSvc = CompFactory.THistSvc()
92 histSvc.Output += ["RATESTREAM DATAFILE='RatesHistograms.root' OPT='RECREATE'"]
93 acc.addService(histSvc)
94
95 # If the dataset name is in the input files path, then it will be fetched from there
96 # Note to enable autolookup, first run "lsetup pyami; voms-proxy-init -voms atlas" and enter your grid pass phrase
97 xsec = args.MCCrossSection
98 fEff = args.MCFilterEfficiency
99 dset = args.MCDatasetName
100 if flags.Input.isMC and xsec == 0: # If the input file is MC then make sure we have the needed info
101 from RatesAnalysis.GetCrossSectionAMITool import GetCrossSectionAMI
102 amiTool = GetCrossSectionAMI()
103 if dset == "": # Can we get the dataset name from the input file path?
104 dset = amiTool.getDatasetNameFromPath(flags.Input.Files[0])
105 amiTool.queryAmi(dset)
106 xsec = amiTool.crossSection
107 fEff = amiTool.filterEfficiency
108
109 ebw = CompFactory.EnhancedBiasWeighter('EnhancedBiasRatesTool')
110 ebw.RunNumber = flags.Input.RunNumbers[0]
111 ebw.UseBunchCrossingData = False
112 ebw.IsMC = flags.Input.isMC
113 # Assuming ttbar
114 #ebw.MCCrossSection = 0.73207
115 #ebw.MCFilterEfficiency = 4.385184E-01
116 # The following three are only needed if isMC == true
117 ebw.MCCrossSection = xsec
118 ebw.MCFilterEfficiency = fEff
119 ebw.MCKFactor = args.MCKFactor
120 ebw.MCIgnoreGeneratorWeights = args.MCIgnoreGeneratorWeights
121
122 acc.addPublicTool(ebw)
123
124 tdt = CompFactory.Trig.TrigDecisionTool('TrigDecisionTool')
125 tdt.TrigConfigSvc = cfgsvc
126 tdt.HLTSummary = "HLTNav_Summary_OnlineSlimmed"
127 tdt.NavigationFormat = "TrigComposite"
128 acc.addPublicTool(tdt)
129
130 rates = CompFactory.L1TopoRatesCalculator()
131 if L1_items:
132 try:
133 rates.m_L1_items_json = L1_items
134 except AttributeError:
135 print("Failed to set L1_items, method not found")
136
137 if userDefinedNames and userDefinedDefinitions:
138 rates.m_userDefinedNames = userDefinedNames
139 rates.m_userDefinedDefinitions = userDefinedDefinitions
140
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)
155
156 # Add aditional algorithms, e.g. the rates algorithm
157 #acc.addEventAlgo( ... )
158
159 import sys
160 sys.exit(acc.run().isFailure())
void print(char *figname, TCanvas *c1)