20   from argparse 
import ArgumentParser
 
   21   parser = ArgumentParser()
 
   22   parser.add_argument(
'--file', default=
'RatesHistograms.root', 
 
   23                       help=
'Input ROOT file to generate output from, run hadd first if you have more than one')
 
   24   parser.add_argument(
'--outputTag', default=
'LOCAL', 
 
   25                       help=
'Tag identifying this processing to be used in the output folder name (any underscores will be removed)')
 
   26   parser.add_argument(
'--outputJSONFile', default=
'rates.json', 
 
   27                       help=
'JSON file of rates for use with the RuleBook')
 
   28   parser.add_argument(
'--outputROOTFile', default=
'scanTriggers.root', 
 
   29                       help=
'ROOT file of normalised scan-triggers')
 
   30   parser.add_argument(
'--userDetails',
 
   31                       help=
'User supplied metadata string giving any extra details about this run.')    
 
   32   parser.add_argument(
'--jira', 
 
   33                       help=
'Related jira ticket number')
 
   34   parser.add_argument(
'--amiTag', 
 
   35                       help=
'AMI tag used for data reprocessing')   
 
   36   parser.add_argument(
'--doBinomialCorrection', action=
'store_true',
 
   37                       help=
'apply binomial correction to trigger rates when using Monte Carlo JZ slices.')  
 
   40   args = parser.parse_args()
 
   41   log = logging.getLogger(
'RatesPostProcessing')
 
   43   inputFile = ROOT.TFile(args.file, 
'READ')
 
   49   if len(normdict)==0 
or metadata 
is None:
 
   50     log.error(
'Cannot locate normHist, or metadata in top level of ntuple.')
 
   53   for suffix, normHist 
in normdict.items():
 
   54     metadata[
'normalisation'+suffix] = normHist.GetBinContent(1)
 
   55     metadata[
'n_evts'+suffix] = normHist.GetBinContent(2)
 
   56     metadata[
'n_evts_weighted'+suffix] = normHist.GetBinContent(3)
 
   58   metadata[
'details'] = args.userDetails
 
   59   metadata[
'JIRA'] = args.jira
 
   60   metadata[
'amiTag'] = args.amiTag
 
   61   metadata[
'doBinomialCorrection'] = args.doBinomialCorrection 
 
   67   HLTTriggers = 
populateTriggers(inputFile, metadata, HLTGlobalGroup, 
'ChainHLT')
 
   68   AllGlobalGroups = 
populateTriggers(inputFile, metadata, HLTGlobalGroup, 
'Group')
 
   73   if not scanTriggers 
and (
not L1Triggers 
or not HLTTriggers 
or not AllGlobalGroups):
 
   74     log.error(
"Failed to populate triggers")
 
   81   log.info(
"Exporting " + args.outputJSONFile)
 
   82   toJson(args.outputJSONFile, metadata, L1Triggers, HLTTriggers)
 
   83   log.info(
"Exporting " + HLTTable)
 
   84   toCSV(HLTTable, metadata, HLTTriggers)
 
   85   log.info(
"Exporting " + L1Table)
 
   86   toCSV(L1Table, metadata, L1Triggers)
 
   87   log.info(
"Exporting " + GroupTable)
 
   88   toCSV(GroupTable, metadata, AllGlobalGroups)
 
   89   log.info(
"Exporting scan triggers")
 
   90   toROOT(args.outputROOTFile, scanTriggers)