ATLAS Offline Software
RatesAnalysisFullMenu.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 #
3 # Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
4 #
5 
6 if __name__=='__main__':
7  import sys
8  from argparse import ArgumentParser
9  parser = ArgumentParser()
10  parser.add_argument('--disableHistograms', action='store_false', help='Turn off histograming')
11  parser.add_argument('--disableGlobalGroups', action='store_false', help='Turn off global groups')
12  parser.add_argument('--disableTriggerGroups', action='store_false', help='Turn off per-trigger groups')
13  parser.add_argument('--disableExpressGroup', action='store_false', help='Turn off express stream rates')
14  parser.add_argument('--disableUniqueRates', action='store_false', help='Turn off unique rates (much faster!)')
15  parser.add_argument('--disableLumiExtrapolation', action='store_false', help='Turn off luminosity extrapolation')
16  #
17  parser.add_argument('--doRatesVsPositionInTrain', action='store_true', help='Study rates vs BCID position in bunch train')
18  parser.add_argument('--vetoStartOfTrain', default=0, type=int, help='Number of BCIDs at the start of the train to veto, implies doRatesVsPositionInTrain')
19  #
20  parser.add_argument('--outputHist', default='RatesHistograms.root', type=str, help='Histogram output ROOT file')
21  parser.add_argument('--inputPrescalesHLTJSON', default='', type=str, help='JSON of HLT prescales to simulate applying when computing rates')
22  parser.add_argument('--inputPrescalesL1JSON', default='', type=str, help='JSON of L1 prescales to simulate applying when computing rates')
23  parser.add_argument('--ebWeightsDirectory', default='', type=str, help='Path to directory with local EB xml files')
24  #
25  parser.add_argument('--targetLuminosity', default=2e34, type=float)
26  #
27  parser.add_argument('--MCDatasetName', default='', type=str, help='For MC input: Name of the dataset, can be used instead of MCCrossSection, MCFilterEfficiency')
28  parser.add_argument('--MCCrossSection', default=0.0, type=float, help='For MC input: Cross section of process in nb')
29  parser.add_argument('--MCFilterEfficiency', default=1.0, type=float, help='For MC input: Filter efficiency of any MC filter (0.0 - 1.0)')
30  parser.add_argument('--MCKFactor', default=1.0, type=float, help='For MC input: Additional multiplicitive fudge-factor to the supplied cross section.')
31  parser.add_argument('--MCIgnoreGeneratorWeights', action='store_true', help='For MC input: Flag to disregard any generator weights.')
32  #
33  parser.add_argument('--maxEvents', type=int, help='Maximum number of events to process')
34  parser.add_argument('--loglevel', type=int, default=3, help='Verbosity level')
35  parser.add_argument('flags', nargs='*', help='Config flag overrides')
36  args = parser.parse_args()
37 
38  # Set the Athena configuration flags
39  from AthenaConfiguration.AllConfigFlags import initConfigFlags
40  flags = initConfigFlags()
41  flags.Exec.OutputLevel = args.loglevel
42  flags.Exec.EventPrintoutInterval = 1000
43  flags.fillFromArgs(args.flags)
44  useBunchCrossingData = (args.doRatesVsPositionInTrain or args.vetoStartOfTrain > 0)
45 
46  flags.lock()
47 
48  # Initialize configuration object, add accumulator, merge, and run.
49  from AthenaConfiguration.MainServicesConfig import MainServicesCfg
50  from AthenaConfiguration.ComponentFactory import CompFactory
51 
52  from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg
53  cfg = MainServicesCfg(flags)
54  cfg.merge(PoolReadCfg(flags))
55 
56  histSvc = CompFactory.THistSvc()
57  histSvc.Output += ["RATESTREAM DATAFILE='" + args.outputHist + "' OPT='RECREATE'"]
58  cfg.addService(histSvc)
59 
60  # Minimal config needed to read metadata: MetaDataSvc & ProxyProviderSvc
61  from AthenaServices.MetaDataSvcConfig import MetaDataSvcCfg
62  cfg.merge(MetaDataSvcCfg(flags))
63 
64  cfgsvc = CompFactory.TrigConf.xAODConfigSvc('xAODConfigSvc')
65  cfg.addService(cfgsvc)
66 
67  tdt = CompFactory.Trig.TrigDecisionTool('TrigDecisionTool')
68  tdt.TrigConfigSvc = cfgsvc
69  tdt.NavigationFormat = "TrigComposite"
70  cfg.addPublicTool(tdt)
71 
72  # If the dataset name is in the input files path, then it will be fetched from there
73  # Note to enable autolookup, first run "lsetup pyami; voms-proxy-init -voms atlas" and enter your grid pass phrase
74  xsec = args.MCCrossSection
75  fEff = args.MCFilterEfficiency
76  dset = args.MCDatasetName
77  if flags.Input.isMC and xsec == 0: # If the input file is MC then make sure we have the needed info
78  from RatesAnalysis.GetCrossSectionAMITool import GetCrossSectionAMI
79  amiTool = GetCrossSectionAMI()
80  if dset == "": # Can we get the dataset name from the input file path?
81  dset = amiTool.getDatasetNameFromPath(flags.Input.Files[0])
82  amiTool.queryAmi(dset)
83  xsec = amiTool.crossSection
84  fEff = amiTool.filterEfficiency
85 
86  ebw = CompFactory.EnhancedBiasWeighter('EnhancedBiasRatesTool')
87  ebw.RunNumber = flags.Input.RunNumbers[0]
88  ebw.UseBunchCrossingData = useBunchCrossingData
89  ebw.IsMC = flags.Input.isMC
90  # The following three are only needed if isMC == true
91  ebw.MCCrossSection = xsec
92  ebw.MCFilterEfficiency = fEff
93  ebw.MCKFactor = args.MCKFactor
94  ebw.MCIgnoreGeneratorWeights = args.MCIgnoreGeneratorWeights
95  ebw.EBWeightsDirectory = args.ebWeightsDirectory if args.ebWeightsDirectory else ""
96  cfg.addPublicTool(ebw)
97 
98  rates = CompFactory.FullMenu()
99  #rates.PrescalesJSON = args.inputPrescalesJSON
100  rates.DoTriggerGroups = args.disableTriggerGroups
101  rates.DoGlobalGroups = args.disableGlobalGroups
102  rates.DoExpressRates = args.disableExpressGroup
103  rates.DoUniqueRates = args.disableUniqueRates
104  rates.DoHistograms = args.disableHistograms
105  rates.UseBunchCrossingData = useBunchCrossingData
106  rates.TargetLuminosity = args.targetLuminosity
107  rates.VetoStartOfTrain = args.vetoStartOfTrain
108  rates.EnableLumiExtrapolation = args.disableLumiExtrapolation
109  rates.EnhancedBiasRatesTool = ebw
110  rates.TrigDecisionTool = tdt
111  rates.TrigConfigSvc = cfgsvc
112 
113  """Return all of the HLT items, and their lower chains
114  in a JSON menu
115  """
116  import json
117  from collections import OrderedDict as odict
118 
119  prescales = {}
120  #ESprescalesHLT = {} #TVS: to be done
121 
122  inputFilePSL1JSON=args.inputPrescalesL1JSON
123  inputFilePSHLTJSON=args.inputPrescalesHLTJSON
124 
125  if (inputFilePSL1JSON!="" and inputFilePSHLTJSON!=""):
126  with open(inputFilePSL1JSON,'r') as fh:
127  l1ps_json_file = json.load(fh, object_pairs_hook = odict)
128 
129  with open(inputFilePSHLTJSON,'r') as fh:
130  hltps_json_file = json.load(fh, object_pairs_hook = odict)
131 
132  for chain_name, ch in l1ps_json_file['cutValues'].items():
133  prescaleL1_input = ch['info'].split()[1]
134  p = {'prescale': float(prescaleL1_input)}
135  prescales[chain_name] = p
136 
137  for chain_name, ch in hltps_json_file['prescales'].items():
138  prescaleHLT_input = ch['prescale']
139  prescaleExpressHLT_input = ch['prescale_express'] if 'prescale_express' in ch else -1
140 
141  p = {
142  'prescale': float(prescaleHLT_input),
143  'prescale_express': float(prescaleExpressHLT_input)
144  }
145  prescales[chain_name] = p
146 
147 
148  rates.PrescalesJSON = prescales
149 
150 
151  cfg.addEventAlgo(rates)
152 
153  # Setup for accessing bunchgroup data from the DB
154  if useBunchCrossingData:
155  from LumiBlockComps.BunchCrossingCondAlgConfig import BunchCrossingCondAlgCfg
156  cfg.merge(BunchCrossingCondAlgCfg(flags))
157 
158  # If you want to turn on more detailed messages ...
159  # exampleMonitorAcc.getEventAlgo('ExampleMonAlg').OutputLevel = 2 # DEBUG
160  cfg.printConfig(withDetails=False) # set True for exhaustive info
161 
162  sc = cfg.run(args.maxEvents)
163  sys.exit(0 if sc.isSuccess() else 1)
python.BunchCrossingCondAlgConfig.BunchCrossingCondAlgCfg
def BunchCrossingCondAlgCfg(flags)
Definition: BunchCrossingCondAlgConfig.py:8
python.MainServicesConfig.MainServicesCfg
def MainServicesCfg(flags, LoopMgr='AthenaEventLoopMgr')
Definition: MainServicesConfig.py:252
TrigJetMonitorAlgorithm.items
items
Definition: TrigJetMonitorAlgorithm.py:79
Trk::open
@ open
Definition: BinningType.h:40
python.MetaDataSvcConfig.MetaDataSvcCfg
def MetaDataSvcCfg(flags, toolNames=[], tools=[])
Definition: MetaDataSvcConfig.py:6
python.AllConfigFlags.initConfigFlags
def initConfigFlags()
Definition: AllConfigFlags.py:19
python.PoolReadConfig.PoolReadCfg
def PoolReadCfg(flags)
Definition: PoolReadConfig.py:69
RatesAnalysisFullMenu.float
float
Definition: RatesAnalysisFullMenu.py:28
Trk::split
@ split
Definition: LayerMaterialProperties.h:38