diff --git a/Trigger/TrigCost/TrigCostAnalysis/share/RunTrigCostAnalysis.py b/Trigger/TrigCost/TrigCostAnalysis/share/RunTrigCostAnalysis.py index 2363c3c7a9c852f085f51d35e1158d652d2271c7..c092a896702960d66e00820becbaa416f3e47956 100755 --- a/Trigger/TrigCost/TrigCostAnalysis/share/RunTrigCostAnalysis.py +++ b/Trigger/TrigCost/TrigCostAnalysis/share/RunTrigCostAnalysis.py @@ -10,7 +10,7 @@ log = logging.getLogger('RunTrigCostAnalysis.py') # Configure Cost Analysis algorithm -def trigCostAnalysisCfg(flags, baseWeight=1.0, useEBWeights=False): +def trigCostAnalysisCfg(flags, baseWeight=1.0, useEBWeights=False, isMC=False, MCpayload={}): from TrigCostAnalysis.ROSToROB import ROSToROBMap from Gaudi.Configuration import DEBUG @@ -27,6 +27,12 @@ def trigCostAnalysisCfg(flags, baseWeight=1.0, useEBWeights=False): enhancedBiasWeighter = CompFactory.EnhancedBiasWeighter() enhancedBiasWeighter.RunNumber = runNumbers[0] enhancedBiasWeighter.UseBunchCrossingTool = False + enhancedBiasWeighter.IsMC = isMC + if isMC: + enhancedBiasWeighter.MCCrossSection = MCpayload.get('MCCrossSection') + enhancedBiasWeighter.MCFilterEfficiency = MCpayload.get('MCFilterEfficiency') + enhancedBiasWeighter.MCKFactor = MCpayload.get('MCKFactor') + enhancedBiasWeighter.MCIgnoreGeneratorWeights = MCpayload.get('MCIgnoreGeneratorWeights') trigCostAnalysis = CompFactory.TrigCostAnalysis() trigCostAnalysis.OutputLevel = DEBUG @@ -36,12 +42,24 @@ def trigCostAnalysisCfg(flags, baseWeight=1.0, useEBWeights=False): trigCostAnalysis.UseEBWeights = useEBWeights trigCostAnalysis.MaxFullEventDumps = 100 trigCostAnalysis.FullEventDumpProbability = 1 # X. Where probability is 1 in X + trigCostAnalysis.UseSingleTimeRange = isMC trigCostAnalysis.ROSToROBMap = ROSToROBMap().get_mapping() acc.addEventAlgo(trigCostAnalysis) return acc +# Prepare dictionary with MC parameters read from arguments +def readMCpayload(args): + payload = {} + + payload['MCCrossSection'] = args.MCCrossSection + payload['MCFilterEfficiency'] = args.MCFilterEfficiency + payload['MCKFactor'] = args.MCKFactor + payload['MCIgnoreGeneratorWeights'] = args.MCIgnoreGeneratorWeights + + return payload + # Configure deserialisation def decodingCfg(flags): @@ -102,6 +120,12 @@ if __name__=='__main__': parser.add_argument('--outputHist', type=str, default='TrigCostRoot_Results.root', help='Histogram output ROOT file') parser.add_argument('--baseWeight', type=float, default=1.0, help='Base events weight') parser.add_argument('--useEBWeights', type=bool, default=False, help='Apply Enhanced Bias weights') + + parser.add_argument('--MCCrossSection', default=0.0, type=float, help='For MC input: Cross section of process in nb') + parser.add_argument('--MCFilterEfficiency', default=1.0, type=float, help='For MC input: Filter efficiency of any MC filter (0.0 - 1.0)') + parser.add_argument('--MCKFactor', default=1.0, type=float, help='For MC input: Additional multiplicitive fudge-factor to the supplied cross section.') + parser.add_argument('--MCIgnoreGeneratorWeights', action='store_true', help='For MC input: Flag to disregard any generator weights.') + parser.add_argument('--maxEvents', type=int, help='Maximum number of events to process') parser.add_argument('--skipEvents",type=int, help="Number of events to skip') parser.add_argument('--loglevel', type=int, default=3, help='Verbosity level') @@ -121,16 +145,20 @@ if __name__=='__main__': from AthenaConfiguration.MainServicesConfig import MainServicesCfg cfg = MainServicesCfg(ConfigFlags) - from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg - cfg.merge(ByteStreamReadCfg(ConfigFlags)) + if ConfigFlags.Input.isMC: + from AthenaPoolCnvSvc.PoolReadConfig import PoolReadCfg + cfg.merge(PoolReadCfg(ConfigFlags)) + else: + from ByteStreamCnvSvc.ByteStreamConfig import ByteStreamReadCfg + cfg.merge(ByteStreamReadCfg(ConfigFlags)) + cfg.merge(decodingCfg(ConfigFlags)) histSvc = CompFactory.THistSvc() histSvc.Output += ["COSTSTREAM DATAFILE='" + args.outputHist + "' OPT='RECREATE'"] cfg.addService(histSvc) - cfg.merge(decodingCfg(ConfigFlags)) cfg.merge(hltConfigSvcCfg(ConfigFlags)) - cfg.merge(trigCostAnalysisCfg(ConfigFlags, args.baseWeight, args.useEBWeights)) + cfg.merge(trigCostAnalysisCfg(ConfigFlags, args.baseWeight, args.useEBWeights, ConfigFlags.Input.isMC, readMCpayload(args))) # If you want to turn on more detailed messages ... # exampleMonitorAcc.getEventAlgo('ExampleMonAlg').OutputLevel = 2 # DEBUG diff --git a/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx b/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx index c3863ab59eb0799d95e61785ce4b11efe2a15768..979bef814aafd44627bd009c7a221d6f2796ff91 100644 --- a/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx +++ b/Trigger/TrigCost/TrigCostAnalysis/src/TrigCostAnalysis.cxx @@ -155,7 +155,7 @@ StatusCode TrigCostAnalysis::execute() { costData.setRosToRobMap(m_rosToRob); costData.setLb( context.eventID().lumi_block() ); costData.setTypeMap( m_algTypeMap ); - if (!m_enhancedBiasTool.name().empty()) { + if (!m_enhancedBiasTool.name().empty() && !m_enhancedBiasTool->isMC()) { double liveTime = m_enhancedBiasTool->getEBLiveTime(context); bool liveTimeIsPerEvent = true; if (liveTime == 0.0) { // Note: This comes from a direct "return 0.", hence no delta diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py index 27cca2bb495336a897ed2a1bcefed77f2cd939c4..8ad7691ef99bbd4a8dde8fcf2593cca18beca60f 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/PhysicsP1_pp_run3_v1.py @@ -148,8 +148,7 @@ def addP1Signatures(): ] TriggerFlags.MonitorSlice.signatures = TriggerFlags.MonitorSlice.signatures() + [ - ChainProp(name='HLT_costmonitor_CostMonDS_L1All', l1SeedThresholds=['FSNOSEED'], stream=['CostMonitoring'], groups=['RATE:Monitoring','BW:Other']), - ChainProp(name='HLT_timeburner_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['PS:Online','RATE:DISCARD','BW:DISCARD']), + ChainProp(name='HLT_timeburner_L1All', l1SeedThresholds=['FSNOSEED'], stream=['DISCARD'], groups=['PS:Online','RATE:DISCARD','BW:DISCARD']), ] diff --git a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py index 2ee2aed4fa9d4c6e18059a877fa510f3767dd5a0..236ad665a532cef5dbdd7e65bad7a45407e94d1c 100644 --- a/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py +++ b/Trigger/TriggerCommon/TriggerMenuMT/python/HLTMenuConfig/Menu/Physics_pp_run3_v1.py @@ -170,6 +170,7 @@ def setupMenu(): TriggerFlags.StreamingSlice.signatures = [ ] TriggerFlags.MonitorSlice.signatures = [ + ChainProp(name='HLT_costmonitor_CostMonDS_L1All', l1SeedThresholds=['FSNOSEED'], stream=['CostMonitoring'], groups=['RATE:Monitoring','BW:Other']), ] # Random Seeded EB chains which select at the HLT based on L1 TBP bits