diff --git a/Trigger/TrigAnalysis/TrigEgammaMatchingTool/Root/TrigEgammaMatchingToolMT.cxx b/Trigger/TrigAnalysis/TrigEgammaMatchingTool/Root/TrigEgammaMatchingToolMT.cxx index dda8ae6c3cb2a70e7ff46f25e2ad3a49df083ec0..f299f0a21a37c3fcb60bfe9a942eb36149d2df6d 100644 --- a/Trigger/TrigAnalysis/TrigEgammaMatchingTool/Root/TrigEgammaMatchingToolMT.cxx +++ b/Trigger/TrigAnalysis/TrigEgammaMatchingTool/Root/TrigEgammaMatchingToolMT.cxx @@ -11,7 +11,6 @@ #include <typeinfo> #include <string> - using namespace TrigCompositeUtils; using namespace Trig; @@ -65,6 +64,7 @@ std::string TrigEgammaMatchingToolMT::key( std::string key) const bool TrigEgammaMatchingToolMT::match(const xAOD::Egamma *eg,const std::string &trigger, const TrigCompositeUtils::Decision *&dec ) const { + ATH_MSG_DEBUG("Match decec with trigger " << trigger); if(xAOD::EgammaHelpers::isElectron(eg)){ const xAOD::Electron* el =static_cast<const xAOD::Electron*> (eg); @@ -87,6 +87,8 @@ bool TrigEgammaMatchingToolMT::match(const xAOD::Egamma *eg,const std::string &t const xAOD::Photon* ph =static_cast<const xAOD::Photon*> (eg); if( matchL2Photon(ph,trigger,dec) ) return true; } + + if( matchL2Calo(eg,trigger,dec) ) return true; if( matchL1(eg,trigger,dec) ) return true; ATH_MSG_DEBUG("match() failed!"); @@ -160,6 +162,7 @@ bool TrigEgammaMatchingToolMT::matchL1( const xAOD::Egamma* eg, const std::strin double deltaR=0.; auto initRois = tdt()->features<TrigRoiDescriptorCollection>(trigger,TrigDefs::includeFailedDecisions,"", TrigDefs::allFeaturesOfType,"initialRoI"); + if( initRois.size() < 1) return false; for( auto &initRoi: initRois ){ if( !initRoi.link.isValid() ) continue; diff --git a/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.h b/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.h index 6b7e759c1b3b152975463d54760ee3f2d55bddc2..0d08ee8f4346b78755e2c50b76041bd37253b31e 100644 --- a/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.h +++ b/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.h @@ -51,7 +51,9 @@ class TrigEgammaMatchingToolMT : public asg::AsgTool const xAOD::EmTauRoI* getL1Feature( const TrigCompositeUtils::Decision * ) const; - + + + private: bool matchHLTElectron(const xAOD::Electron *,const std::string &, const TrigCompositeUtils::Decision *&) const; diff --git a/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.icc b/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.icc index 4671ed79eb418c5c4850ca81b69070f4cbc04d08..511c457b6413af800161b9f1a64e1b59f8b48671 100644 --- a/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.icc +++ b/Trigger/TrigAnalysis/TrigEgammaMatchingTool/TrigEgammaMatchingTool/TrigEgammaMatchingToolMT.icc @@ -60,6 +60,8 @@ inline bool TrigEgammaMatchingToolMT::closestObject( const xAOD::Egamma *eg, con { double deltaR=0.; auto vec = tdt()->features<T>(trigger,TrigDefs::includeFailedDecisions ,key); + + for( auto &featLinkInfo : vec ){ if(! featLinkInfo.isValid() ) continue; const auto *feat = *(featLinkInfo.link); diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitorAlgorithm.py b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitorAlgorithm.py index 0964efc7e06d3851e9aee52c4150b13495f5591e..4795740792dc79f06235e975fa23516482229706 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitorAlgorithm.py +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitorAlgorithm.py @@ -24,7 +24,7 @@ def TrigEgammaMonConfig(inputFlags): helper = AthMonitorCfgHelper(inputFlags,'TrigEgammaAthMonitorCfg') # configure alg and ana tools from TrigEgammaMonitoring.TrigEgammaMonitoringMTConfig import TrigEgammaMonAlgBuilder - monAlgCfg = TrigEgammaMonAlgBuilder( helper, '2018', detailedHistogram=True ) # Using 2018 e/g tunings + monAlgCfg = TrigEgammaMonAlgBuilder( helper, '2018', detailedHistograms=True ) # Using 2018 e/g tunings # build monitor and book histograms monAlgCfg.configure() diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py index df57fba3030fe00f7d5ffb4bcbd923e688bb6e98..b199a1d8490e8e7007e2441afc690550a9320836 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/python/TrigEgammaMonitoringMTConfig.py @@ -106,7 +106,8 @@ class TrigEgammaMonAlgBuilder: self.activate_electron=True self.activate_photon=True - + + def configure(self): self.setProperties() self.configureMonitor() @@ -114,8 +115,6 @@ class TrigEgammaMonAlgBuilder: - - def get_monitoring_mode(self): # Implementation of https://its.cern.ch/jira/browse/ATR-13200 @@ -178,6 +177,7 @@ class TrigEgammaMonAlgBuilder: self.electronList = monitoring_electron self.photonList = monitoring_photon self.tpList = monitoringTP_electron + self.jpsiList = [] self.tagItems = [] #monitoring_tags self.jpsitagItems = [] #monitoring_jpsitags @@ -361,34 +361,77 @@ class TrigEgammaMonAlgBuilder: self.__logger.info( "Booking all histograms for alg: %s", monAlg.name ) for trigger in triggers: - self.bookL1CaloDistributions( monAlg, trigger ) - self.bookL2CaloDistributions( monAlg, trigger ) - self.bookL2ElectronDistributions( monAlg, trigger ) - self.bookEFCaloDistributions( monAlg, trigger ) - self.bookShowerShapesAndTrackingDistributions( monAlg, trigger, online=True ) - self.bookShowerShapesAndTrackingDistributions( monAlg, trigger, online=False ) - self.bookEfficiencies( monAlg, trigger, "L1Calo" ) - self.bookEfficiencies( monAlg, trigger, "L2Calo" ) - self.bookEfficiencies( monAlg, trigger, "L2" ) - self.bookEfficiencies( monAlg, trigger, "EFCalo" ) - self.bookEfficiencies( monAlg, trigger, "HLT" ) - - if self.detailedHistograms: - for pid in self.isemnames + self.lhnames: - self.bookEfficiencies( monAlg, trigger, "HLT", pid ) - self.bookEfficiencies( monAlg, trigger, "HLT", pid+"Iso" ) + + info = self.getTrigInfo(trigger) + + if info.isL1Item(): + self.bookL1CaloDistributions( monAlg, trigger ) + self.bookEfficiencies( monAlg, trigger, "L1Calo" ) + self.bookL1CaloResolutions( monAlg, trigger ) + self.bookL1CaloAbsResolutions( monAlg, trigger ) + + else: + # + # Distributions + # + self.bookL1CaloDistributions( monAlg, trigger ) + self.bookL2CaloDistributions( monAlg, trigger ) + self.bookEFCaloDistributions( monAlg, trigger ) + + self.bookL1CaloResolutions( monAlg, trigger ) + self.bookL1CaloAbsResolutions( monAlg, trigger ) + self.bookL2CaloResolutions( monAlg, trigger ) + self.bookHLTResolutions( monAlg, trigger ) + + if info.isElectron(): + self.bookL2ElectronDistributions( monAlg, trigger ) + # Offline and HLT + self.bookShowerShapesDistributions( monAlg, trigger, online=True ) + self.bookShowerShapesDistributions( monAlg, trigger, online=False ) + self.bookTrackingDistributions( monAlg, trigger, online=True ) + self.bookTrackingDistributions( monAlg, trigger, online=False ) + self.bookHLTElectronResolutions( monAlg, trigger, info.isIsolated() ) + + elif info.isPhoton(): + # Should we include L2 for photon in the future? + self.bookShowerShapesDistributions( monAlg, trigger, online=True ) + self.bookShowerShapesDistributions( monAlg, trigger, online=False ) + self.bookHLTPhotonResolutions( monAlg, trigger, info.isIsolated() ) + + + # + # Efficiecies + # + self.bookEfficiencies( monAlg, trigger, "L1Calo" ) + self.bookEfficiencies( monAlg, trigger, "L2Calo" ) + self.bookEfficiencies( monAlg, trigger, "L2" ) + self.bookEfficiencies( monAlg, trigger, "EFCalo" ) + self.bookEfficiencies( monAlg, trigger, "HLT" ) + + if self.detailedHistograms: + for pid in self.isemnames + self.lhnames: + self.bookEfficiencies( monAlg, trigger, "HLT", pid ) + self.bookEfficiencies( monAlg, trigger, "HLT", pid+"Iso" ) + + - + + def bookEvent(self, monAlg, analysis): - #cutLabels = ["Events","LAr","RetrieveElectrons","TwoElectrons","PassTrigger","EventWise","Success"] - #probeLabels=["Electrons","NotTag","OS","SS","ZMass","HasTrack","HasCluster","Eta","Et","IsGoodOQ","GoodPid","NearbyJet","Isolated"] + cutLabels = ["Events","LAr","RetrieveElectrons","TwoElectrons","PassTrigger","EventWise","Success"] + probeLabels=["Electrons","NotTag","OS","SS","ZMass","HasTrack","HasCluster","Eta","Et","IsGoodOQ","GoodPid","NearbyJet","Isolated"] + tagLabels=["Electrons","HasTrack","HasCluster","GoodPid","Et","Eta","IsGoodOQ","PassTrigger","MatchTrigger"] + # Create mon group. The group name should be the path name for map monGroup = self.addGroup( monAlg, 'Event', self.basePath+'/Expert/Event' ) - monGroup.defineHistogram(analysis+"_CutCounter", type='TH1I', path='/', title="Event Selection; Cut ; Count",xbins=6, xmin=0, xmax=6) - monGroup.defineHistogram(analysis+"_TagCutCounter", type='TH1F', path='', title="Number of Probes; Cut ; Count",xbins=12, xmin=0, xmax=12) - monGroup.defineHistogram(analysis+"_ProbeCutCounter", type='TH1F', path='', title="Number of Probes; Cut ; Count",xbins=12, xmin=0, xmax=12) + monGroup.defineHistogram(analysis+"_CutCounter", type='TH1I', path='/', title="Event Selection; Cut ; Count", + xbins=len(cutLabels), xmin=0, xmax=len(cutLabels), xlabels=cutLabels) + monGroup.defineHistogram(analysis+"_TagCutCounter", type='TH1F', path='', title="Number of Probes; Cut ; Count", + xbins=len(tagLabels), xmin=0, xmax=len(tagLabels), xlabels=tagLabels) + monGroup.defineHistogram(analysis+"_ProbeCutCounter", type='TH1F', path='', title="Number of Probes; Cut ; Count", + xbins=len(probeLabels), xmin=0, xmax=len(probeLabels), xlabels=probeLabels) monGroup.defineHistogram(analysis+"_Mee", type='TH1F', path='/', title="Offline M(ee); m_ee [GeV] ; Count",xbins=50, xmin=monAlg.ZeeLowerMass, xmax=monAlg.ZeeUpperMass) @@ -459,7 +502,7 @@ class TrigEgammaMonAlgBuilder: # # Book Shower shapes # - def bookShowerShapesAndTrackingDistributions( self, monAlg, trigger, online=True ): + def bookShowerShapesDistributions( self, monAlg, trigger, online=True ): from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F monGroup = self.addGroup( monAlg, trigger+'_Distributions_' + ("HLT" if online else "Offline"), @@ -486,6 +529,16 @@ class TrigEgammaMonAlgBuilder: self.addHistogram(monGroup, TH1F("topoetcone40_shift_rel", "(topoetcone40-2.45 GeV)/pt; (topoetcone40-2.45 GeV)/pt ; Count", 100, -0.5, 0.5)) + # + # Book Tracking + # + def bookTrackingDistributions( self, monAlg, trigger, online=True ): + + from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F + monGroup = self.addGroup( monAlg, trigger+'_Distributions_' + ("HLT" if online else "Offline"), + self.basePath+'/'+trigger+'/Distributions/' + ("HLT" if online else "Offline") ) + + # Tracking quantities self.addHistogram(monGroup, TH1F("deta1", "deta1; deta1 ; Count", 40, -0.01, 0.01)) self.addHistogram(monGroup, TH1F("deta1_EMECA", "deta1 EMEC-A; deta1 ; Count", 40, -0.01, 0.01)) @@ -518,8 +571,6 @@ class TrigEgammaMonAlgBuilder: monGroup = self.addGroup( monAlg, trigger+'_Efficiency_'+level+'_'+subgroup, self.basePath+'/'+trigger+'/Efficiency/'+level+'/'+subgroup ) else: monGroup = self.addGroup( monAlg, trigger+'_Efficiency_'+level, self.basePath+'/'+trigger+'/Efficiency/'+level ) - - # Numerator self.addHistogram(monGroup, TH1F("match_pt", "Trigger Matched Offline p_{T}; p_{T} [GeV] ; Count", self._nEtbins, self._etbins)) @@ -550,11 +601,276 @@ class TrigEgammaMonAlgBuilder: + def bookL1CaloResolutions(self, monAlg, trigger): + + from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F, TH2F + monGroup = self.addGroup( monAlg, trigger+'_Resolutions_L1Calo', self.basePath+'/'+trigger+'/Resolutions/L1Calo' ) + self.addHistogram(monGroup, TH1F("res_et", "E_{T} resolution; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("eta", "eta; eta ; Count", 50, -2.47, 2.47)) + + if self.detailedHistograms: + self.addHistogram(monGroup, TH2F("eta,res_et", "E_{T} resolution as function of #eta; #eta; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count",50, -2.47, 2.47,50, -0.1, 0.1)) + + + + def bookL1CaloAbsResolutions(self, monAlg, trigger): + + from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F, TH2F + monGroup = self.addGroup( monAlg, trigger+'_AbsResolutions_L1Calo', self.basePath+'/'+trigger+'/AbsResolutions/L1Calo' ) + self.addHistogram(monGroup, TH1F("eta", "#eta; #eta ; Count", 50, -2.47, 2.47)) + self.addHistogram(monGroup, TH1F("res_et", "E_{T} resolution; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 100, -0.1, 0.1)) + if self.detailedHistograms: + self.addHistogram(monGroup, TH2F("eta,res_et", "E_{T} resolution as function of #eta; #eta; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count",50, -2.47, 2.47,50, -0.1, 0.1)) + def bookL2CaloResolutions(self, monAlg, trigger): - # + from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F, TH2F + monGroup = self.addGroup( monAlg, trigger+'_Resolutions_L2Calo', self.basePath+'/'+trigger+'/Resolutions/L2Calo' ) + + # online values used to fill all 2d histograms + self.addHistogram(monGroup, TH1F("et", "E_{T}; E_{T}[GeV] ; Count", 50, 0.0, 100.)) + self.addHistogram(monGroup, TH1F("eta", "#eta; #eta ; Count", 50, -2.47, 2.47)) + + + self.addHistogram(monGroup, TH1F("res_et", "E_{T} resolution; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_eta", "#eta resolution; (#eta(on)-#eta(off))/#eta(off) ; Count", 40, -0.001, 0.001)) + self.addHistogram(monGroup, TH1F("res_phi", "#phi resolution; (#phi(on)-#phi(off))/#phi(off) ; Count", 40, -0.001, 0.001)) + self.addHistogram(monGroup, TH1F("res_ethad", "ethad resolution; (ethad(on)-ethad(off))/ethad(off) ; Count", 20, -5, 5)) + self.addHistogram(monGroup, TH1F("res_ethad1", "ethad1 resolution; (ethad1(on)-ethad1(off))/ethad1(off) ; Count", 20, -5, 5)) + self.addHistogram(monGroup, TH1F("res_Rhad", "Rhad resolution; (Rhad(on)-Rhad(off))/Rhad(off) ; Count", 20, -10., 10.)) + self.addHistogram(monGroup, TH1F("res_Rhad1", "Rhad1; Rhad1 resolution; (Rhad1(on)-Rhad1(off))/Rhad1(off)", 20, -10., 10.)) + self.addHistogram(monGroup, TH1F("res_Reta", "Reta resolution; (Reta(on)-Reta(off))/Reta(off) ; Count", 20, -0.01, 0.01)) + self.addHistogram(monGroup, TH1F("res_Rphi", "Rphi resolution; (Rphi(on)-Rphi(off))/Rphi(off) ; Count", 20, -0.01, 0.01)) + self.addHistogram(monGroup, TH1F("res_weta2", "weta2 resolution; (weta2(on)-weta2(off))/weta2(off) ; Count", 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH1F("res_f1", "f1 resolution; (f1(on)-f1(off))/f1(off) ; Count", 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH1F("res_f3", "f3 resolution; (f3(on)-f3(off))/f3(off) ; Count", 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH1F("res_eratio", "eratio resolution; (eratio(on)-eratio(off))/eratio(off) ; Count", 20, -0.001, 0.001)) + + if self.detailedHistograms: + # Book all 2D histograms + self.addHistogram(monGroup, TH2F("et,res_etVsEt", "E_{T} resolution as function of E_{T}; E_{T} [GeV]; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count", + 50, 0., 100., + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("eta,res_et", "E_{T} resolution as function of #eta; #eta; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count", + 50, -2.47, 2.47, + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("eta,res_f3", "L2Calo f3 resolution as function of #eta; #eta; (f3(on)-f3(off))/f3(off); Count", + 50, -2.47, 2.47, + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("et,res_f3", "L2Calo f3 resolution as function of E_{T}; E_{T} [GeV]; (f3(on)-f3(off))/f3(off); Count", + 50, 0., 100., + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("eta,res_f1", "L2Calo f1 resolution as function of #eta; #eta; (f1(on)-f1(off))/f1(off); Count", + 50, -2.47, 2.47, + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("et,res_f1", "L2Calo f1 resolution as function of E_{T}; E_{T} [GeV]; (f1(on)-f1(off))/f1(off); Count", + 50, 0., 100., + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("eta,res_weta2", "L2Calo weta2 resolution as function of #eta; #eta; (weta2(on)-weta2(off))/weta2(off); Count", + 50, -2.47, 2.47, + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("et,res_weta2", "L2Calo weta2 resolution as function of E_{T}; E_{T} [GeV]; (weta2(on)-weta2(off))/weta2(off); Count", + 50, 0., 100., + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("eta,res_Reta", "L2Calo Reta resolution as function of #eta; #eta; (Reta(on)-Reta(off))/Reta(off); Count", + 50, -2.47, 2.47, + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("et,res_Reta", "L2Calo Reta resolution as function of E_{T}; E_{T} [GeV]; (Reta(on)-Reta(off))/Reta(off); Count", + 50, 0., 100., + 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH2F("eta,res_Rhad1", "L2Calo E_{T} Rhad1 resolution as function of #eta; #eta; (Rhad1(on)-Rhad1(off))/Rhad1(off); Count", + 50, -2.47, 2.47, + 20, -10, 10)) + self.addHistogram(monGroup, TH2F("et,res_Rhad1", "L2Calo E_{T} RHad1 resolution as function of E_{T}; E_{T} [GeV]; (Rhad1(on)-Rhad1(off))/Rhad1(off); Count", + 50, 0., 100., + 20, -10, 10)) + self.addHistogram(monGroup, TH2F("eta,res_Rhad", "L2Calo E_{T} Rhad resolution as function of #eta; #eta; (Rhad(on)-Rhad(off))/Rhad(off); Count", + 50, -2.47, 2.47, + 20, -10, 10)) + self.addHistogram(monGroup, TH2F("et,res_Rhad", "L2Calo E_{T} RHad resolution as function of E_{T}; E_{T} [GeV]; (Rhad(on)-Rhad(off))/Rhad(off); Count", + 50, 0., 100., + 20, -10, 10)) + self.addHistogram(monGroup, TH2F("eta,res_ethad1", "L2Calo E_{T} Had1 resolution as function of #eta; #eta; (ethad1(on)-ethad1(off))/ethad1(off); Count", + 50, -2.47, 2.47, + 20, -0.5, 0.5)) + self.addHistogram(monGroup, TH2F("et,res_ethad1", "L2Calo E_{T} Had1 resolution as function of E_{T}; E_{T} [GeV]; (ethad1(on)-ethad1(off))/ethad1(off); Count", + 50, 0., 100., + 20, -0.5, 0.5)) + self.addHistogram(monGroup, TH2F("eta,res_ethad", "L2Calo E_{T} Had resolution as function of #eta; #eta; (ethad(on)-ethad(off))/ethad(off); Count", + 50, -2.47, 2.47, + 20, -0.5, 0.5)) + self.addHistogram(monGroup, TH2F("et,res_ethad", "L2Calo E_{T} Had resolution as function of E_{T}; E_{T} [GeV]; (ethad(on)-ethad(off))/ethad(off); Count", + 50, 0., 100., + 20, -0.5, 0.5)) + self.addHistogram(monGroup, TH2F("eta,res_eratio", "L2Calo eratio resolution as function of #eta; #eta; (eratio(on)-eratio(off))/eratio(off); Count", + 50, -2.47, 2.47, + 20, -0.001, 0.001)) + self.addHistogram(monGroup, TH2F("et,res_eratio", "L2Calo eratio resolution as function of E_{T}; E_{T} [GeV]; (eratio(on)-eratio(off))/eratio(off); Count", + 50, 0., 100., + 50, -0.001, 0.001)) + + + + + def bookHLTResolutions(self, monAlg, trigger): + + from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F, TH2F + monGroup = self.addGroup( monAlg, trigger+'_Resolutions_HLT', self.basePath+'/'+trigger+'/Resolutions/HLT' ) + + # online values used to fill all 2d histograms + self.addHistogram(monGroup, TH1F("et", "E_{T}; E_{T}[GeV] ; Count", 50, 0.0, 100.)) + self.addHistogram(monGroup, TH1F("eta", "#eta; #eta ; Count", 50, -2.47, 2.47)) + self.addHistogram(monGroup, TH1F("mu", "#mu; #mu ; Count", 50, 0, 100)) + + + self.addHistogram(monGroup, TH1F("res_et", "E_{T} resolution; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_eta", "#eta resolution; (#eta(on)-#eta(off))/#eta(off) ; Count", 40, -0.001, 0.001)) + self.addHistogram(monGroup, TH1F("res_phi", "#phi resolution; (#phi(on)-#phi(off))/#phi(off) ; Count", 40, -0.001, 0.001)) + self.addHistogram(monGroup, TH1F("res_ethad", "ethad resolution; (ethad(on)-ethad(off))/ethad(off) ; Count", 20, -5, 5)) + self.addHistogram(monGroup, TH1F("res_ethad1", "ethad1 resolution; (ethad1(on)-ethad1(off))/ethad1(off) ; Count", 20, -5, 5)) + self.addHistogram(monGroup, TH1F("res_Rhad", "Rhad resolution; (Rhad(on)-Rhad(off))/Rhad(off) ; Count", 20, -10., 10.)) + self.addHistogram(monGroup, TH1F("res_Rhad1", "Rhad1; Rhad1 resolution; (Rhad1(on)-Rhad1(off))/Rhad1(off)", 20, -10., 10.)) + self.addHistogram(monGroup, TH1F("res_Reta", "Reta resolution; (Reta(on)-Reta(off))/Reta(off) ; Count", 20, -0.01, 0.01)) + self.addHistogram(monGroup, TH1F("res_Rphi", "Rphi resolution; (Rphi(on)-Rphi(off))/Rphi(off) ; Count", 20, -0.01, 0.01)) + self.addHistogram(monGroup, TH1F("res_weta1", "weta1 resolution; (weta1(on)-weta1(off))/weta1(off) ; Count", 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH1F("res_weta2", "weta2 resolution; (weta2(on)-weta2(off))/weta2(off) ; Count", 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH1F("res_f1", "f1 resolution; (f1(on)-f1(off))/f1(off) ; Count", 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH1F("res_f3", "f3 resolution; (f3(on)-f3(off))/f3(off) ; Count", 20, -0.05, 0.05)) + self.addHistogram(monGroup, TH1F("res_eratio", "eratio resolution; (eratio(on)-eratio(off))/eratio(off) ; Count", 20, -0.001, 0.001)) + + + self.addHistogram(monGroup, TH1F("res_etInEta0", "HLT E_{T} resolution in #eta = [0#div1.37]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_etInEta1", "HLT E_{T} resolution in #eta = [1.37#div1.52]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_etInEta2", "HLT E_{T} resolution in #eta = [1.55#div1.8]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_etInEta3", "HLT E_{T} resolution in #eta = [1.8#div2.45]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + + if self.detailedHistograms: + self.addHistogram(monGroup, TH2F("eta,res_et", "E_{T} resolution as function of #eta; #eta; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count",50, -2.47, 2.47,100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("et,res_et", "E_{T} resolution as function of E_{T}; E_{T} [GeV]; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count",50, 0., 100.,100, -0.1, 0.1)) + + + + def bookHLTElectronResolutions(self, monAlg, trigger, isolated=False): + + + from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F, TH2F + monGroup = self.addGroup( monAlg, trigger+'_Resolutions_HLT', self.basePath+'/'+trigger+'/Resolutions/HLT' ) + + self.addHistogram(monGroup, TH1F("res_pt", "p_{T} resolution; (p_{T}(on)-p_{T}(off))/p_{T}(off) ; Count", 120, -1.5, 1.5)) + self.addHistogram(monGroup, TH1F("res_deta1", "deta1; deta1 ; (deta1(on)-deta1(off))/deta1(off)", 100, -1., 1.)) + self.addHistogram(monGroup, TH1F("res_deta2", "deta2; deta2 ; (deta2(on)-deta2(off))/deta2(off)", 100, -1., 1.)) + self.addHistogram(monGroup, TH1F("res_dphi2", "dphi2; dphi2 ; (dphi2(on)-dphi2(off))/dphi2(off)", 100, -1., 1.)) + self.addHistogram(monGroup, TH1F("res_dphiresc", "dphiresc; (dphires(on)-dphires(off))/dphires(off) ; Count", 100, -1., 1.)) + self.addHistogram(monGroup, TH1F("res_d0", "resolution d0; (d0(on)-d0(off)) ; Count", 100, -0.5, 0.5)) + self.addHistogram(monGroup, TH1F("res_d0sig", "resolution d0sig; (d0sig(on)-d0sig(off)) ; Count", 50, -10, 10)) + self.addHistogram(monGroup, TH1F("res_eprobht","resolution eProbHT; (eProbHT(on)-eProbHT(off)); Count",50, -1, 1)) + self.addHistogram(monGroup, TH1F("res_nscthits","resolution nSCTHit; (nSCTHits(on)-nSCTHits(off); Count",20, -10, 10)) + self.addHistogram(monGroup, TH1F("res_npixhits","resolution nPixHit; (nPixHits(on)-nPixHits(off)); Count",10, -5, 5)) + + self.addHistogram(monGroup, TH1F("pt", "online p_{T}; p_{T}; Count", 50, 0., 100.)) + + if self.detailedHistograms: + self.addHistogram(monGroup, TH2F("pt,res_eprobht", "eProbHT resolution as function of p_{T}; p_{T} [GeV]; (eprobHT(on)-eprobHT(off)); Count", + 50, 0., 100., + 50, -1., 1.)) + + + + if isolated: + self.addHistogram(monGroup, TH1F("res_ptcone20", "resolution ptcone20; ptcone20 (on-off)/off; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_ptcone20_rel", "resolution ptcone20/pt; ptcone20/pt (on-off)/off; Count", 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("eta,res_ptcone20_rel", "HLT ptcone20/pt resolution as function of #eta; #eta; (on-off)/off; Count", + 50, -2.47, 2.47, + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("et,res_ptcone20_rel", "HLT ptcone20/pt resolution as function of E_{T}; E_{T} [GeV]; (on-off)/off; Count", + 50, 0., 100., + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("mu,res_ptcone20", "HLT ptcone20 resolution as function of avg #mu; #mu; (on-off)/off; Count", + 50, 0, 100, + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("mu,res_ptcone20_rel", "HLT ptcone20/pt resolution as function of avg #mu; #mu; (on-off)/off; Count", + 50, 0, 100, + 100, -0.1, 0.1)) + + self.addHistogram(monGroup, TH1F("res_ptvarcone20", "resolution ptvarcone20; ptvarcone20 (on-off)/off; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_ptvarcone20_rel", "resolution ptvarcone20/pt; ptvarcone20/pt (on-off)/off; Count", 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("eta,res_ptvarcone20_rel", "HLT ptvarcone20/pt resolution as function of #eta; #eta; (on-off)/off; Count", + 50, -2.47, 2.47, + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("et,res_ptvarcone20_rel", "HLT ptvarcone20/pt resolution as function of E_{T}; E_{T} [GeV]; (on-off)/off; Count", + 50, 0., 100., + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("mu,res_ptvarcone20", "HLT ptvarcone20 resolution as function of avg #mu; #mu; (on-off)/off; Count", + 50, 0, 100, + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("mu,res_ptvarcone20_rel", "HLT ptvarcone20/pt resolution as function of avg #mu; #mu; (on-off)/off; Count", + 50, 0, 100, + 100, -0.1, 0.1)) + + + def bookHLTPhotonResolutions(self, monAlg, trigger, isolated=False): + + + from TrigEgammaMonitoring.TrigEgammaMonitorHelper import TH1F, TH2F + monGroup = self.addGroup( monAlg, trigger+'_Resolutions_HLT', self.basePath+'/'+trigger+'/Resolutions/HLT' ) + + self.addHistogram(monGroup, TH1F("res_et_cnv", "HLT E_{T} resolution for converted Photons; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_et_uncnv", "HLT E_{T} resolution for unconverted Photons; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_cnv_etInEta0", "HLT E_{T} resolution in #eta = [0#div1.37]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_cnv_etInEta1", "HLT E_{T} resolution in #eta = [1.37#div1.52]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_cnv_etInEta2", "HLT E_{T} resolution in #eta = [1.55#div1.8]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_cnv_etInEta3", "HLT E_{T} resolution in #eta = [1.8#div2.45]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_uncnv_etInEta0", "HLT E_{T} resolution in #eta = [0#div1.37]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_uncnv_etInEta1", "HLT E_{T} resolution in #eta = [1.37#div1.52]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_uncnv_etInEta2", "HLT E_{T} resolution in #eta = [1.55#div1.8]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_uncnv_etInEta3", "HLT E_{T} resolution in #eta = [1.8#div2.45]; (E_{T}(on)-E_{T}(off))/E_{T}(off) ; Count", 200, -0.1, 0.1)) + + if self.detailedHistograms: + self.addHistogram(monGroup, TH2F("eta,res_cnv_et", + "HLT E_{T} resolution as function of #eta for converted Photons; #eta; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count", + 50, -2.47, 2.47, + 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("et,res_cnv_et", + "HLT E_{T} resolution as function of E_{T} for converted Photons; E_{T} [GeV]; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count", + 50, 0., 100., + 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("eta,res_uncnv_et", + "HLT E_{T} resolution as function of #eta for unconverted Photons; #eta; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count", + 50, -2.47, 2.47, + 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("et,res_uncnv_et", + "HLT E_{T} resolution as function of E_{T} for unconverted Photons; E_{T} [GeV]; (E_{T}(on)-E_{T}(off))/E_{T}(off); Count", + 50, 0., 100., + 200, -0.1, 0.1)) + + if isolated: + + self.addHistogram(monGroup, TH1F("res_topoetcone20", "resolution topoetcone20; ptcone20 (on-off)/off; Count", 200, -0.1, 0.1)) + self.addHistogram(monGroup, TH1F("res_topoetcone20_rel", "resolution topoetcone20/pt; ptcone20/pt (on-off)/off; Count", 100, -0.1, 0.1)) + + if self.detailedHistograms: + self.addHistogram(monGroup, TH2F("eta,res_topoetcone20_rel", "HLT topoetcone20/pt resolution as function of #eta; #eta; (on-off)/off; Count", + 50, -2.47, 2.47, + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("et,res_topoetcone20_rel", "HLT topoetcone20/pt resolution as function of E_{T}; E_{T} [GeV]; (on-off)/off; Count", + 50, 0., 100., + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("mu,res_topoetcone20", "HLT topoetcone20 resolution as function of avg #mu; #mu; (on-off)/off; Count", + 50, 0, 100, + 100, -0.1, 0.1)) + self.addHistogram(monGroup, TH2F("mu,res_topoetcone20_rel", "HLT topoetcone20/pt resolution as function of avg #mu; #mu; (on-off)/off; Count", + 50, 0, 100, + 100, -0.1, 0.1)) + + + + + + + + # # Set binning # def setBinning(self, doJpsiee=False): @@ -632,5 +948,13 @@ class TrigEgammaMonAlgBuilder: def pidname(self): return self.chain().split('_')[2] + def isIsolated(self): + for part_name in ['iloose', 'ivarloose', 'icaloloose', 'icalovloose', 'icalotight']: + if part_name in self.chain(): + return True + return False + + + return TrigEgammaInfo(trigger) diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx index 6cf0aed54ff4e4904d53773377da72809864a4c8..19b477ba66ae40f91bd7329282d2f63c4e3fa2eb 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.cxx @@ -53,11 +53,11 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillEfficiencies( std::vector< std::pai if(pairObj.first->type()==xAOD::Type::Electron){ const xAOD::Electron* el = static_cast<const xAOD::Electron *> (pairObj.first); - float et = getEt(el)/1e3; + float et = getEt(el)/Gaudi::Units::GeV; if(et < info.trigThrHLT-5.0) continue; }else if(pairObj.first->type()==xAOD::Type::Photon){ - float et = getCluster_et(pairObj.first)/1e3; + float et = getCluster_et(pairObj.first)/Gaudi::Units::GeV; if(et < info.trigThrHLT-5.0) continue; if(boost::contains(info.trigName,"icalovloose")) { @@ -162,13 +162,13 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillEfficiency( const std::string &subg const xAOD::Electron* el =static_cast<const xAOD::Electron*> (eg); pid=el->auxdecor<bool>(pidword); ATH_MSG_DEBUG("Electron pid " << pid); - et = getEt(el)/1e3; + et = getEt(el)/Gaudi::Units::GeV; } - else et=eg->caloCluster()->et()/1e3; + else et=eg->caloCluster()->et()/Gaudi::Units::GeV; float eta = eg->caloCluster()->etaBE(2); float phi = eg->phi(); - float pt = eg->pt()/1e3; + float pt = eg->pt()/Gaudi::Units::GeV; float avgmu=lbAverageInteractionsPerCrossing( Gaudi::Hive::currentContext() ); float npvtx=0.0; @@ -428,10 +428,10 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillL1Calo( const std::string &trigger, if(!l1) continue; eta_vec.push_back( l1->eta() ); phi_vec.push_back( l1->phi() ); - energy_vec.push_back( l1->emClus()/1.e3 ); - roi_et_vec.push_back( l1->eT()/1.e3 ); - emIso_vec.push_back( l1->emIsol()/1.e3 ); - hadCore_vec.push_back( l1->hadCore()/1.e3 ); + energy_vec.push_back( l1->emClus()/Gaudi::Units::GeV ); + roi_et_vec.push_back( l1->eT()/Gaudi::Units::GeV ); + emIso_vec.push_back( l1->emIsol()/Gaudi::Units::GeV ); + hadCore_vec.push_back( l1->hadCore()/Gaudi::Units::GeV ); } fill( monGroup, eta_col, phi_col, energy_col, roi_et_col, emIso_col, hadCore_col ); @@ -455,7 +455,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillL2Calo(const std::string &trigger, for ( auto emCluster : emCluster_vec ) { if(!emCluster) continue; - et_vec.push_back( emCluster->et()/1.e3 ); + et_vec.push_back( emCluster->et()/Gaudi::Units::GeV ); eta_vec.push_back( emCluster->eta() ); phi_vec.push_back( emCluster->phi() ); } @@ -481,7 +481,7 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillL2Electron(const std::string &trigg for ( auto el : el_vec ) { if(!el) continue; - et_vec.push_back( el->pt()/1.e3 ); + et_vec.push_back( el->pt()/Gaudi::Units::GeV ); eta_vec.push_back( el->eta() ); phi_vec.push_back( el->phi() ); } @@ -520,12 +520,12 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillEFCalo(const std::string &trigger, if(!clus->retrieveMoment(xAOD::CaloCluster::PHICALOFRAME,tmpphi)) tmpphi=-999.; - energyBE0_vec.push_back( clus->energyBE(0)/1.e3 ); - energyBE1_vec.push_back( clus->energyBE(1)/1.e3 ); - energyBE2_vec.push_back( clus->energyBE(2)/1.e3 ); - energyBE3_vec.push_back( clus->energyBE(3)/1.e3 ); - energy_vec.push_back( clus->e()/1.e3 ); - et_vec.push_back( clus->et()/1.e3 ); + energyBE0_vec.push_back( clus->energyBE(0)/Gaudi::Units::GeV ); + energyBE1_vec.push_back( clus->energyBE(1)/Gaudi::Units::GeV ); + energyBE2_vec.push_back( clus->energyBE(2)/Gaudi::Units::GeV ); + energyBE3_vec.push_back( clus->energyBE(3)/Gaudi::Units::GeV ); + energy_vec.push_back( clus->e()/Gaudi::Units::GeV ); + et_vec.push_back( clus->et()/Gaudi::Units::GeV ); eta_vec.push_back( clus->eta() ); phi_vec.push_back( clus->phi() ); eta_calo_vec.push_back( tmpeta ); @@ -577,8 +577,8 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillShowerShapes(const std::string &tri if(!eg) continue; - ethad_vec.push_back( getShowerShape_ethad(eg)/1e3); - ethad1_vec.push_back( getShowerShape_ethad1(eg)/1e3); + ethad_vec.push_back( getShowerShape_ethad(eg)/Gaudi::Units::GeV); + ethad1_vec.push_back( getShowerShape_ethad1(eg)/Gaudi::Units::GeV); Rhad_vec.push_back( getShowerShape_Rhad(eg)); Rhad1_vec.push_back( getShowerShape_Rhad(eg)); Reta_vec.push_back( getShowerShape_Reta(eg)); @@ -588,12 +588,12 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillShowerShapes(const std::string &tri f1_vec.push_back( getShowerShape_f1(eg)); f3_vec.push_back( getShowerShape_f3(eg)); eratio_vec.push_back( getShowerShape_Eratio(eg)); - et_vec.push_back( eg->pt()/1e3); - highet_vec.push_back( eg->pt()/1e3); + et_vec.push_back( eg->pt()/Gaudi::Units::GeV); + highet_vec.push_back( eg->pt()/Gaudi::Units::GeV); eta_vec.push_back( eg->eta()); phi_vec.push_back( eg->phi()); - topoetcone20_vec.push_back( getIsolation_topoetcone20(eg)/1e3); - topoetcone40_shift_vec.push_back( (getIsolation_topoetcone40(eg)-2450)/1e3 ); + topoetcone20_vec.push_back( getIsolation_topoetcone20(eg)/Gaudi::Units::GeV); + topoetcone40_shift_vec.push_back( (getIsolation_topoetcone40(eg)-2450)/Gaudi::Units::GeV ); if (eg->pt() > 0) { topoetcone20_rel_vec.push_back( getIsolation_topoetcone20(eg)/eg->pt()); @@ -667,14 +667,14 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillTracking(const std::string &trigger npixhits_vec.push_back( getTrackSummary_numberOfPixelHits(eg)); nscthits_vec.push_back( getTrackSummary_numberOfSCTHits(eg)); charge_vec.push_back( eg->charge()); - ptcone20_vec.push_back( getIsolation_ptcone20(eg)/1e3); - ptvarcone20_vec.push_back( getIsolation_ptvarcone20(eg)/1e3); + ptcone20_vec.push_back( getIsolation_ptcone20(eg)/Gaudi::Units::GeV); + ptvarcone20_vec.push_back( getIsolation_ptvarcone20(eg)/Gaudi::Units::GeV); // Quantities directly from tracks ATH_MSG_DEBUG("Get track Quantities"); d0_vec.push_back( getTrack_d0(eg)); d0sig_vec.push_back(getD0sig(eg)); - pt_vec.push_back( getTrack_pt(eg)/1e3); + pt_vec.push_back( getTrack_pt(eg)/Gaudi::Units::GeV); if (eg->pt() > 0) { ptcone20_rel_vec.push_back( getIsolation_ptcone20(eg)/eg->pt()); @@ -687,9 +687,1000 @@ void TrigEgammaMonitorAnalysisAlgorithm::fillTracking(const std::string &trigger fill( monGroup, deta1_col, deta1_EMECA_col, deta1_EMECC_col, deta1_EMEBA_col, deta1_EMEBC_col, deta2_col, dphi2_col, dphiresc_col, eprobht_col, npixhits_col, nscthits_col, charge_col, ptcone20_col, ptvarcone20_col, d0_col, d0sig_col, pt_col, ptcone20_rel_col, ptvarcone20_rel_col); +} + + + +//!***********************************************************************************************************************8 +// +// + + +void TrigEgammaMonitorAnalysisAlgorithm::fillResolutions( std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs, + const TrigInfo info ) const +{ + + std::vector< std::pair< const xAOD::Egamma*, const xAOD::EmTauRoI * >> pair_l1_vec; + std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pair_eg_vec; + const std::string trigger = info.trigName; + bool filliso=false; + if(boost::contains(info.trigName,"iloose") || boost::contains(info.trigName,"ivarloose")) filliso=true; + if(boost::contains(info.trigName,"icaloloose") || boost::contains(info.trigName,"icalovloose") || boost::contains(info.trigName,"icalotight")) filliso=true; + + + for( auto pairObj : pairObjs ){ + + const xAOD::Egamma* eg = pairObj.first; + const auto *feat = pairObj.second; + + if (feat){ + if (info.trigL1){ + // Get l1 for all level one objects found for each off object + auto l1 = match()->getL1Feature( feat ); + if(l1){ + pair_l1_vec.push_back( std::make_pair(eg,l1) ); + } + }else{ + // + // Get only off and l1 where the offline object passed by the offline pid selector + // + auto l1 = match()->getL1Feature( feat ); + if(eg->type()==xAOD::Type::Electron){ + const xAOD::Electron* el = static_cast<const xAOD::Electron*>(eg); + float et = getEt(el)/Gaudi::Units::GeV; + if( et < info.trigThrHLT-5.0) continue; + if(!eg->auxdecor<bool>(info.trigPidDecorator)) continue; + pair_eg_vec.push_back(std::make_pair(el,feat)); + if(l1) pair_l1_vec.push_back( std::make_pair(eg,l1) ); + } + else if(eg->type()==xAOD::Type::Photon){ + float et = getCluster_et(eg)/Gaudi::Units::GeV; + if( et < info.trigThrHLT-5.0) continue; + pair_eg_vec.push_back(std::make_pair(eg,feat)); + if(l1) pair_l1_vec.push_back( std::make_pair(eg,l1) ); + } + } + + } + } + + + if (info.trigL1){ + fillL1CaloResolution( trigger, pair_l1_vec ); + fillL1CaloAbsResolution( trigger, pair_l1_vec ); + }else{ + + // Fill L1Calo for all level 1 objects found + fillL1CaloResolution( trigger, pair_l1_vec ); + fillL1CaloAbsResolution( trigger, pair_l1_vec ); + fillL2CaloResolution( trigger, pair_eg_vec ); + + // Fill HLT electron for all onl objects found + if ( info.trigType=="electron"){ + fillHLTElectronResolution( trigger, pair_eg_vec, filliso ); + } + + else if ( info.trigType=="photon"){ + fillHLTPhotonResolution( trigger, pair_eg_vec, filliso ); + } + + + } + +} + + + + +void TrigEgammaMonitorAnalysisAlgorithm::fillL1CaloResolution(const std::string &trigger, + std::vector< std::pair< const xAOD::Egamma*, const xAOD::EmTauRoI * >> pairObjs ) const +{ + auto monGroup = getGroup( trigger + "_Resolutions_L1Calo" ); + + std::vector<float> eta_vec, res_et_vec; + + auto eta_col = Monitored::Collection( "eta" , eta_vec ); + auto res_et_col = Monitored::Collection( "res_et" , res_et_vec ); + + + for (auto& pairObj : pairObjs){ + auto off = pairObj.first; + auto l1 = pairObj.second; + ATH_MSG_DEBUG("Fill L1CaloResolution"); + if(off->type()==xAOD::Type::Electron){ + const xAOD::Electron* eloff =static_cast<const xAOD::Electron*> (off); + eta_vec.push_back( l1->eta() ); + res_et_vec.push_back( (l1->emClus()-getEt(eloff))/getEt(eloff) ) ; + + } + } + + fill( monGroup, eta_col, res_et_col ); +} + + + + + +void TrigEgammaMonitorAnalysisAlgorithm::fillL1CaloAbsResolution(const std::string &trigger, + std::vector< std::pair< const xAOD::Egamma*, const xAOD::EmTauRoI * >> pairObjs ) const +{ + auto monGroup = getGroup( trigger + "_AbsResolutions_L1Calo" ); + + std::vector<float> eta_vec, res_et_vec; + + auto eta_col = Monitored::Collection( "eta" , eta_vec ); + auto res_et_col = Monitored::Collection( "res_et" , res_et_vec ); + + + for (auto& pairObj : pairObjs){ + auto off = pairObj.first; + auto l1 = pairObj.second; + ATH_MSG_DEBUG("Fill L1CaloAbsResolution"); + if(off->type()==xAOD::Type::Electron){ + const xAOD::Electron* eloff =static_cast<const xAOD::Electron*> (off); + eta_vec.push_back( l1->eta() ); + res_et_vec.push_back( (l1->emClus()-getEt(eloff))/Gaudi::Units::GeV ) ; + } + } + + fill( monGroup, eta_col, res_et_col ); +} + + + + +void TrigEgammaMonitorAnalysisAlgorithm::fillHLTElectronResolution(const std::string &trigger, + std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs, + bool filliso) const +{ + + auto monGroup = getGroup( trigger + "_Resolutions_HLT" ); + + std::vector<float> res_pt_vec, res_et_vec, res_phi_vec, res_eta_vec, res_deta1_vec, res_deta2_vec, res_dphi2_vec, res_dphiresc_vec, + res_d0_vec, res_d0sig_vec, res_eprobht_vec, res_npixhits_vec, res_nscthits_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec, + res_Rphi_vec, res_weta1_vec, res_weta2_vec, res_wtots1_vec, res_f1_vec, res_f3_vec, res_eratio_vec, res_ethad_vec, res_ethad1_vec, + et_vec, eta_vec, mu_vec; + std::vector<float> res_ptcone20_vec, res_ptcone20_rel_vec, res_ptvarcone20_vec, res_ptvarcone20_rel_vec; + std::vector<float> res_etInEta0_vec, res_etInEta1_vec, res_etInEta2_vec, res_etInEta3_vec; + + + auto et_col = Monitored::Collection( "et" , et_vec ); + auto eta_col = Monitored::Collection( "eta" , eta_vec ); + auto mu_col = Monitored::Collection( "mu" , mu_vec ); + + // For calo + auto res_et_col = Monitored::Collection( "res_et" , res_et_vec ); + auto res_eta_col = Monitored::Collection( "res_eta" , res_eta_vec ); + auto res_phi_col = Monitored::Collection( "res_phi" , res_phi_vec ); + auto res_ethad_col = Monitored::Collection( "res_ethad" , res_ethad_vec ); + auto res_ethad1_col = Monitored::Collection( "res_ethad1" , res_ethad1_vec ); + auto res_Rhad_col = Monitored::Collection( "res_Rhad" , res_Rhad_vec ); + auto res_Rhad1_col = Monitored::Collection( "res_Rhad1" , res_Rhad1_vec ); + auto res_Reta_col = Monitored::Collection( "res_Reta" , res_Reta_vec ); + auto res_Rphi_col = Monitored::Collection( "res_Rphi" , res_Rphi_vec ); + auto res_weta1_col = Monitored::Collection( "res_weta1" , res_weta1_vec ); + auto res_weta2_col = Monitored::Collection( "res_weta2" , res_weta2_vec ); + auto res_wtots1_col = Monitored::Collection( "res_wtots1" , res_wtots1_vec ); + auto res_f1_col = Monitored::Collection( "res_f1" , res_f1_vec ); + auto res_f3_col = Monitored::Collection( "res_f3" , res_f3_vec ); + auto res_eratio_col = Monitored::Collection( "res_eratio" , res_eratio_vec ); + + auto res_etInEta0_col = Monitored::Collection( "res_etInEta0" , res_etInEta0_vec ); + auto res_etInEta1_col = Monitored::Collection( "res_etInEta1" , res_etInEta1_vec ); + auto res_etInEta2_col = Monitored::Collection( "res_etInEta2" , res_etInEta2_vec ); + auto res_etInEta3_col = Monitored::Collection( "res_etInEta3" , res_etInEta3_vec ); + + // For electron + auto res_pt_col = Monitored::Collection( "res_pt" , res_pt_vec ); + auto res_deta1_col = Monitored::Collection( "res_deta1" , res_deta1_vec ); + auto res_deta2_col = Monitored::Collection( "res_deta2" , res_deta2_vec ); + auto res_dphi2_col = Monitored::Collection( "res_dphi2" , res_dphi2_vec ); + auto res_dphiresc_col = Monitored::Collection( "res_dphiresc" , res_dphiresc_vec ); + auto res_d0_col = Monitored::Collection( "res_d0" , res_d0_vec ); + auto res_d0sig_col = Monitored::Collection( "res_d0sig" , res_d0sig_vec ); + auto res_eprobht_col = Monitored::Collection( "res_eprobht" , res_eprobht_vec ); + auto res_npixhits_col = Monitored::Collection( "res_npixhits" , res_npixhits_vec ); + auto res_nscthits_col = Monitored::Collection( "res_nscthits" , res_nscthits_vec ); + auto res_ptcone20_col = Monitored::Collection( "res_ptcone20" , res_ptcone20_vec ); + auto res_ptcone20_rel_col = Monitored::Collection( "res_ptcone20_rel" , res_ptcone20_rel_vec ); + auto res_ptvarcone20_col = Monitored::Collection( "res_ptvarcone20" , res_ptvarcone20_vec ); + auto res_ptvarcone20_rel_col = Monitored::Collection( "res_ptvarcone20_rel" , res_ptvarcone20_rel_vec ); + + + + + // Check for zero before filling + ATH_MSG_DEBUG("Fill Resolution"); + + + + for ( auto& pairObj : pairObjs ){ + + const xAOD::Electron *off = static_cast<const xAOD::Electron*>(pairObj.first); + const xAOD::Electron *onl=nullptr; + + + { // Get the closest electron object from the trigger starting with deltaR = 0.15 + float maxDeltaR=0.05; + auto vec = tdt()->features<xAOD::ElectronContainer>(trigger,TrigDefs::Physics ,match()->key("Electron") ); + for(auto &featLinkInfo : vec ){ + if(! featLinkInfo.isValid() ) continue; + const auto *feat = *(featLinkInfo.link); + if(!feat) continue; + float deltaR = dR( off->eta(), off->phi(), feat->eta(), feat->phi() ); + if( deltaR < maxDeltaR){ + maxDeltaR=deltaR; + onl=feat; + } + } + } + + if(!onl) continue; + + float val_off=0.; + const float onl_eta=onl->eta(); + const float feta = abs(onl_eta); + const float onl_et = getEt(onl)/Gaudi::Units::GeV; + const float avgmu=lbAverageInteractionsPerCrossing( Gaudi::Hive::currentContext() ); + const float dummy=dummy; + + eta_vec.push_back( onl_eta ); + et_vec.push_back( onl_et ); + mu_vec.push_back( avgmu ); + + val_off=getTrack_pt(off); + if(val_off!=0.){ + res_pt_vec.push_back( (getTrack_pt(off)-val_off)/val_off ); + }else{ + } + + + val_off=getEt(off); + if(val_off!=0.){ + res_et_vec.push_back( (getEt(onl)-val_off)/val_off ); + if( feta < 1.37 ) + res_etInEta0_vec.push_back((getEt(onl)-val_off)/val_off); + else if( feta >=1.37 && feta <= 1.52 ) + res_etInEta1_vec.push_back((getEt(onl)-val_off)/val_off); + else if( feta >= 1.55 && feta < 1.8 ) + res_etInEta2_vec.push_back((getEt(onl)-val_off)/val_off); + else if( feta >= 1.8 && feta < 2.45 ) + res_etInEta3_vec.push_back((getEt(onl)-val_off)/val_off); + } + + val_off=off->eta(); + if(val_off!=0.){ + res_eta_vec.push_back( (onl_eta-val_off)/val_off ); + }else{ + res_eta_vec.push_back( dummy ); + } + + val_off=off->phi(); + if(val_off!=0.){ + res_phi_vec.push_back( (onl->phi()-val_off)/val_off ); + }else{ + res_phi_vec.push_back(dummy ); + } + + val_off=getShowerShape_ethad(off); + if(val_off!=0.) { + res_ethad_vec.push_back((getShowerShape_ethad(onl)-val_off)/val_off); + }else{ + res_ethad_vec.push_back( dummy ); + } + + val_off=getShowerShape_ethad1(off); + if(val_off!=0){ + res_ethad1_vec.push_back((getShowerShape_ethad1(onl)-val_off)/val_off); + }else{ + res_ethad1_vec.push_back( dummy); + } + + val_off=getShowerShape_Rhad(off); + if(val_off!=0.){ + res_Rhad_vec.push_back( (getShowerShape_Rhad(onl)-val_off)/val_off ); + }else{ + res_Rhad_vec.push_back( dummy ); + } + + val_off=getShowerShape_Rhad1(off); + if(val_off!=0.){ + res_Rhad1_vec.push_back( (getShowerShape_Rhad1(onl)-val_off)/val_off ); + }else{ + res_Rhad1_vec.push_back( dummy ); + } + + val_off=getShowerShape_Reta(off); + if(val_off!=0.){ + res_Reta_vec.push_back( (getShowerShape_Reta(onl)-val_off)/val_off ); + }else{ + res_Reta_vec.push_back( dummy ); + } + + val_off=getShowerShape_Rphi(off); + if(val_off!=0.){ + res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off ); + }else{ + res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off ); + } + + val_off=getShowerShape_weta1(off); + if(val_off!=0.){ + res_weta1_vec.push_back( (getShowerShape_weta1(onl)-val_off)/val_off ); + }else{ + res_weta1_vec.push_back( dummy ); + } + + val_off=getShowerShape_weta2(off); + if(val_off!=0.){ + res_weta2_vec.push_back( (getShowerShape_weta2(onl)-val_off)/val_off ); + }else{ + res_weta2_vec.push_back( dummy ); + } + + val_off=getShowerShape_wtots1(off); + if(val_off!=0.){ + res_wtots1_vec.push_back( (getShowerShape_wtots1(onl)-val_off)/val_off ); + }else{ + res_wtots1_vec.push_back( dummy ); + } + + val_off=getShowerShape_f1(off); + if(val_off!=0.){ + res_f1_vec.push_back( (getShowerShape_f1(onl)-val_off)/val_off ); + }else{ + res_f1_vec.push_back(dummy ); + } + + val_off=getShowerShape_f3(off); + if(val_off!=0.){ + res_f3_vec.push_back( (getShowerShape_f3(onl)-val_off)/val_off ); + }else{ + res_f3_vec.push_back( dummy ); + } + + val_off=getShowerShape_Eratio(off); + if(val_off!=0.){ + res_eratio_vec.push_back( (getShowerShape_Eratio(onl)-val_off)/val_off ); + }else{ + res_eratio_vec.push_back( dummy ); + } + + + // + // Track variables + // + + val_off=getTrack_pt(off); + if(val_off!=0.){ + res_pt_vec.push_back( (getTrack_pt(onl)-val_off)/val_off ); + }else{ + res_pt_vec.push_back( dummy ); + } + + val_off=getEt(off); + if(val_off!=0.) { + res_et_vec.push_back( (getEt(onl)-val_off)/val_off ); + }else{ + res_et_vec.push_back( dummy ); + } + + val_off=getCaloTrackMatch_deltaEta1(off); + if(val_off!=0.) { + res_deta1_vec.push_back( (getCaloTrackMatch_deltaEta1(onl)-val_off)/val_off ); + }else{ + res_deta1_vec.push_back( dummy ); + } + + val_off=getCaloTrackMatch_deltaEta2(off); + res_deta2_vec.push_back( (getCaloTrackMatch_deltaEta2(onl)-val_off)/val_off ); + val_off=getCaloTrackMatch_deltaPhi2(off); + if(val_off!=0.) { + res_dphi2_vec.push_back( (getCaloTrackMatch_deltaPhi2(onl)-val_off)/val_off ); + }else{ + res_dphi2_vec.push_back(dummy ); + } + + val_off=getCaloTrackMatch_deltaPhiRescaled2(off); + res_dphiresc_vec.push_back( (getCaloTrackMatch_deltaPhiRescaled2(onl)-val_off)/val_off ); + // Absolute resolution for impact parameter + val_off=getTrack_d0(off); + if(val_off!=0.) { + res_d0_vec.push_back( getTrack_d0(onl)-val_off ); + }else{ + res_d0_vec.push_back( dummy ); + } + + val_off=getD0sig(off); + if(val_off!=0.) { + res_d0sig_vec.push_back( getD0sig(onl)-val_off ); + }else{ + res_d0sig_vec.push_back( dummy ); + } + + // Absolute resolution on track summary ints/floats + val_off=getTrackSummaryFloat_eProbabilityHT(off); + res_eprobht_vec.push_back( (getTrackSummaryFloat_eProbabilityHT(onl)-val_off) ); + res_npixhits_vec.push_back( getTrackSummary_numberOfPixelHits(onl)-getTrackSummary_numberOfPixelHits(onl) ); + res_nscthits_vec.push_back( getTrackSummary_numberOfSCTHits(onl)-getTrackSummary_numberOfSCTHits(onl) ); + + + + + if(filliso){ + + float val_off=getIsolation_ptcone20(off); + if (val_off > 0.) { + res_ptcone20_vec.push_back((getIsolation_ptcone20(onl)-val_off)/val_off); + if (getEt(onl) > 0. && getEt(off) > 0.) { + const float reliso_onl=getIsolation_ptcone20(onl)/getEt(onl); + const float reliso_off=getIsolation_ptcone20(off)/getEt(off); + res_ptcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off); + }else{ + res_ptcone20_rel_vec.push_back(dummy); + } + }else{ + res_ptcone20_vec.push_back(dummy); + res_ptcone20_rel_vec.push_back(dummy); + } + + // ptvarcone20 isolation + val_off=getIsolation_ptvarcone20(off); + if (val_off > 0.) { + if (getEt(onl) > 0. && getEt(off) > 0.) { + res_ptvarcone20_vec.push_back((getIsolation_ptvarcone20(onl)-val_off)/val_off); + const float reliso_onl=getIsolation_ptvarcone20(onl)/getEt(onl); + const float reliso_off=getIsolation_ptvarcone20(off)/getEt(off); + res_ptvarcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off); + }else{ + res_ptvarcone20_rel_vec.push_back(dummy); + } + }else{ + res_ptvarcone20_vec.push_back(dummy); + res_ptvarcone20_rel_vec.push_back(dummy); + } + + } + + + + + + } // Loop over all offline objects + + // Fill everything + fill( monGroup , + et_col , + eta_col , + mu_col , + res_pt_col , + res_et_col , + res_eta_col , + res_phi_col , + res_deta1_col , + res_deta2_col , + res_dphi2_col , + res_dphiresc_col, + res_d0_col , + res_d0sig_col , + res_eprobht_col , + res_npixhits_col, + res_nscthits_col, + res_ethad_col , + res_ethad1_col , + res_Rhad_col , + res_Rhad1_col , + res_Reta_col , + res_Rphi_col , + res_weta1_col , + res_weta2_col , + res_wtots1_col , + res_f1_col , + res_f3_col , + res_eratio_col , + res_ptcone20_col , + res_ptcone20_rel_col , + res_ptvarcone20_col , + res_ptvarcone20_rel_col , + res_etInEta0_col, + res_etInEta1_col, + res_etInEta2_col, + res_etInEta3_col ); + + + +} + + + + + +void TrigEgammaMonitorAnalysisAlgorithm::fillHLTPhotonResolution(const std::string &trigger, + std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs, + bool filliso) const +{ + + auto monGroup = getGroup( trigger + "_Resolutions_HLT" ); + + std::vector<float> res_phi_vec, res_eta_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec, res_ethad_vec, res_ethad1_vec, + res_Rphi_vec, res_weta1_vec, res_weta2_vec, res_wtots1_vec, res_f1_vec, res_f3_vec, res_eratio_vec, et_vec, eta_vec, mu_vec; + + std::vector<float> res_et_vec, res_et_cnv_vec, res_et_uncnv_vec; + std::vector<float> res_etInEta0_vec, res_etInEta1_vec, res_etInEta2_vec, res_etInEta3_vec; + std::vector<float> res_cnv_etInEta0_vec, res_cnv_etInEta1_vec, res_cnv_etInEta2_vec, res_cnv_etInEta3_vec; + std::vector<float> res_uncnv_etInEta0_vec, res_uncnv_etInEta1_vec, res_uncnv_etInEta2_vec, res_uncnv_etInEta3_vec; + + + + std::vector<float> res_topoetcone20_vec, res_topoetcone20_rel_vec; + + auto et_col = Monitored::Collection( "et" , et_vec ); + auto eta_col = Monitored::Collection( "eta" , eta_vec ); + auto mu_col = Monitored::Collection( "mu" , mu_vec ); + + // For calo + auto res_eta_col = Monitored::Collection( "res_eta" , res_eta_vec ); + auto res_phi_col = Monitored::Collection( "res_phi" , res_phi_vec ); + auto res_ethad_col = Monitored::Collection( "res_ethad" , res_ethad_vec ); + auto res_ethad1_col = Monitored::Collection( "res_ethad1" , res_ethad1_vec ); + auto res_Rhad_col = Monitored::Collection( "res_Rhad" , res_Rhad_vec ); + auto res_Rhad1_col = Monitored::Collection( "res_Rhad1" , res_Rhad1_vec ); + auto res_Reta_col = Monitored::Collection( "res_Reta" , res_Reta_vec ); + auto res_Rphi_col = Monitored::Collection( "res_Rphi" , res_Rphi_vec ); + auto res_weta1_col = Monitored::Collection( "res_weta1" , res_weta1_vec ); + auto res_weta2_col = Monitored::Collection( "res_weta2" , res_weta2_vec ); + auto res_wtots1_col = Monitored::Collection( "res_wtots1" , res_wtots1_vec ); + auto res_f1_col = Monitored::Collection( "res_f1" , res_f1_vec ); + auto res_f3_col = Monitored::Collection( "res_f3" , res_f3_vec ); + auto res_eratio_col = Monitored::Collection( "res_eratio" , res_eratio_vec ); + + + auto res_et_col = Monitored::Collection( "res_et" , res_et_vec ); + auto res_et_cnv_col = Monitored::Collection( "res_et_cnv" , res_et_cnv_vec ); + auto res_et_uncnv_col = Monitored::Collection( "res_et_uncnv" , res_et_uncnv_vec ); + auto res_etInEta0_col = Monitored::Collection( "res_etInEta0" , res_etInEta0_vec ); + auto res_etInEta1_col = Monitored::Collection( "res_etInEta1" , res_etInEta1_vec ); + auto res_etInEta2_col = Monitored::Collection( "res_etInEta2" , res_etInEta2_vec ); + auto res_etInEta3_col = Monitored::Collection( "res_etInEta3" , res_etInEta3_vec ); + auto res_cnv_etInEta0_col = Monitored::Collection( "res_cnv_etInEta0" , res_cnv_etInEta0_vec ); + auto res_cnv_etInEta1_col = Monitored::Collection( "res_cnv_etInEta1" , res_cnv_etInEta1_vec ); + auto res_cnv_etInEta2_col = Monitored::Collection( "res_cnv_etInEta2" , res_cnv_etInEta2_vec ); + auto res_cnv_etInEta3_col = Monitored::Collection( "res_cnv_etInEta3" , res_cnv_etInEta3_vec ); + auto res_uncnv_etInEta0_col = Monitored::Collection( "res_uncnv_etInEta0" , res_uncnv_etInEta0_vec); + auto res_uncnv_etInEta1_col = Monitored::Collection( "res_uncnv_etInEta1" , res_uncnv_etInEta1_vec); + auto res_uncnv_etInEta2_col = Monitored::Collection( "res_uncnv_etInEta2" , res_uncnv_etInEta2_vec); + auto res_uncnv_etInEta3_col = Monitored::Collection( "res_uncnv_etInEta3" , res_uncnv_etInEta3_vec); + + // For photon + auto res_topoetcone20_col = Monitored::Collection( "res_topoetcone20" , res_topoetcone20_vec ); + auto res_topoetcone20_rel_col = Monitored::Collection( "res_topoetcone20_rel" , res_topoetcone20_rel_vec ); + + + + + // Check for zero before filling + ATH_MSG_DEBUG("Fill Resolution"); + + + + for ( auto& pairObj : pairObjs ){ + + const xAOD::Photon *off = static_cast<const xAOD::Photon*>(pairObj.first); + const xAOD::Photon *onl=nullptr; + + + { // Get the closest electron object from the trigger starting with deltaR = 0.15 + float maxDeltaR=0.05; + auto vec = tdt()->features<xAOD::PhotonContainer>(trigger,TrigDefs::Physics ,match()->key("Photon") ); + for(auto &featLinkInfo : vec ){ + if(! featLinkInfo.isValid() ) continue; + const auto *feat = *(featLinkInfo.link); + if(!feat) continue; + float deltaR = dR( off->eta(), off->phi(), feat->eta(), feat->phi() ); + if( deltaR < maxDeltaR){ + maxDeltaR=deltaR; + onl=feat; + } + } + } + + // If not found, skip this off object! + if(!onl) continue; + + float val_off=0.; + const float onl_eta=onl->eta(); + const float feta = abs(onl_eta); + const float onl_et = getCluster_et(onl)/Gaudi::Units::GeV; + const float dummy=dummy; + + const float avgmu=lbAverageInteractionsPerCrossing( Gaudi::Hive::currentContext() ); + et_vec.push_back( onl_et ); + eta_vec.push_back( onl_eta ); + mu_vec.push_back( avgmu ); + + + val_off=getCluster_et(off); + if(val_off!=0.){ + res_et_vec.push_back( (getCluster_et(onl)-val_off)/val_off ); + if( feta < 1.37 ) + res_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >=1.37 && feta <= 1.52 ) + res_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >= 1.55 && feta < 1.8 ) + res_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >= 1.8 && feta < 2.45 ) + res_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off); + + if(xAOD::EgammaHelpers::isConvertedPhoton(off)){ + res_et_cnv_vec.push_back((getCluster_et(onl)-val_off)/val_off); + if( feta < 1.37 ) + res_cnv_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >=1.37 && feta <= 1.52 ) + res_cnv_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >= 1.55 && feta < 1.8 ) + res_cnv_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >= 1.8 && feta < 2.45 ) + res_cnv_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off); + }else{ + res_et_uncnv_vec.push_back((getCluster_et(onl)-val_off)/val_off); + if( feta < 1.37 ) + res_uncnv_etInEta0_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >=1.37 && feta <= 1.52 ) + res_uncnv_etInEta1_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >= 1.55 && feta < 1.8 ) + res_uncnv_etInEta2_vec.push_back((getCluster_et(onl)-val_off)/val_off); + else if( feta >= 1.8 && feta < 2.45 ) + res_uncnv_etInEta3_vec.push_back((getCluster_et(onl)-val_off)/val_off); + } + } + + val_off=off->eta(); + if(val_off!=0.){ + res_eta_vec.push_back( (onl_eta-val_off)/val_off ) ; + }else{ + res_eta_vec.push_back( dummy ) ; + } + + val_off=off->phi(); + if(val_off!=0.){ + res_phi_vec.push_back( (onl->phi()-val_off)/val_off ); + }else{ + res_phi_vec.push_back(dummy ); + } + + val_off=getShowerShape_ethad(off); + if(val_off!=0.) { + res_ethad_vec.push_back((getShowerShape_ethad(onl)-val_off)/val_off); + }else{ + res_ethad_vec.push_back(dummy); + } + + val_off=getShowerShape_ethad1(off); + if(val_off!=0){ + res_ethad1_vec.push_back((getShowerShape_ethad1(onl)-val_off)/val_off); + }else{ + res_ethad1_vec.push_back(dummy); + } + + val_off=getShowerShape_Rhad(off); + if(val_off!=0.){ + res_Rhad_vec.push_back( (getShowerShape_Rhad(onl)-val_off)/val_off ); + }else{ + res_Rhad_vec.push_back(dummy ); + } + + val_off=getShowerShape_Rhad1(off); + if(val_off!=0.){ + res_Rhad1_vec.push_back( (getShowerShape_Rhad1(onl)-val_off)/val_off ); + }else{ + res_Rhad1_vec.push_back(dummy ); + } + + val_off=getShowerShape_Reta(off); + if(val_off!=0.){ + res_Reta_vec.push_back( (getShowerShape_Reta(onl)-val_off)/val_off ); + }else{ + res_Reta_vec.push_back( dummy ); + } + + val_off=getShowerShape_Rphi(off); + if(val_off!=0.){ + res_Rphi_vec.push_back( (getShowerShape_Rphi(onl)-val_off)/val_off ); + }else{ + res_Rphi_vec.push_back(dummy ); + } + + val_off=getShowerShape_weta1(off); + if(val_off!=0.){ + res_weta1_vec.push_back( (getShowerShape_weta1(onl)-val_off)/val_off ); + }else{ + res_weta1_vec.push_back( dummy ); + } + + val_off=getShowerShape_weta2(off); + if(val_off!=0.){ + res_weta2_vec.push_back( (getShowerShape_weta2(onl)-val_off)/val_off ); + }else{ + res_weta2_vec.push_back(dummy); + } + + val_off=getShowerShape_wtots1(off); + if(val_off!=0.){ + res_wtots1_vec.push_back( (getShowerShape_wtots1(onl)-val_off)/val_off ); + }else{ + res_wtots1_vec.push_back( dummy ); + } + + val_off=getShowerShape_f1(off); + if(val_off!=0.){ + res_f1_vec.push_back( (getShowerShape_f1(onl)-val_off)/val_off ); + }else{ + res_f1_vec.push_back( dummy ); + } + + val_off=getShowerShape_f3(off); + if(val_off!=0.){ + res_f3_vec.push_back( (getShowerShape_f3(onl)-val_off)/val_off ); + }else{ + res_f3_vec.push_back( dummy ); + } + + val_off=getShowerShape_Eratio(off); + if(val_off!=0.){ + res_eratio_vec.push_back( (getShowerShape_Eratio(onl)-val_off)/val_off); + }else{ + res_eratio_vec.push_back( dummy); + } + + if( filliso ){ + // topoetcone20 isolation + float val_off=getIsolation_topoetcone20(off); + float etonl=onl->pt(); + float etoff=off->pt(); + if (val_off > 0.) { + res_topoetcone20_vec.push_back((getIsolation_topoetcone20(onl)-val_off)/val_off); + if (etonl > 0. && etoff > 0.) { + const float reliso_onl=getIsolation_topoetcone20(onl)/etonl; + const float reliso_off=getIsolation_topoetcone20(off)/etoff; + res_topoetcone20_rel_vec.push_back((reliso_onl-reliso_off)/reliso_off); + }else{ + res_topoetcone20_rel_vec.push_back(dummy); + } + }else{ + res_topoetcone20_vec.push_back(dummy); + res_topoetcone20_rel_vec.push_back(dummy); + } + } + + + + } // Loop over all offline objects + + // Fill everything + fill( monGroup , + et_col , + eta_col , + mu_col , + res_et_col , + res_eta_col , + res_phi_col , + res_ethad_col , + res_ethad1_col , + res_Rhad_col , + res_Rhad1_col , + res_Reta_col , + res_Rphi_col , + res_weta1_col , + res_weta2_col , + res_wtots1_col , + res_f1_col , + res_f3_col , + res_eratio_col , + res_topoetcone20_col , + res_topoetcone20_rel_col , + res_etInEta0_col, + res_etInEta1_col, + res_etInEta2_col, + res_etInEta3_col, + res_et_uncnv_col, + res_cnv_etInEta0_col, + res_cnv_etInEta1_col, + res_cnv_etInEta2_col, + res_cnv_etInEta3_col, + res_et_cnv_col, + res_uncnv_etInEta0_col, + res_uncnv_etInEta1_col, + res_uncnv_etInEta2_col, + res_uncnv_etInEta3_col + ); + } +void TrigEgammaMonitorAnalysisAlgorithm::fillL2CaloResolution(const std::string &trigger, + std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs ) const + +{ + ATH_MSG_DEBUG("Fill L2Calo Resolution"); + + auto monGroup = getGroup( trigger + "_Resolutions_L2Calo" ); + + std::vector<float> res_et_vec, res_phi_vec, res_eta_vec, res_Rhad_vec, res_Rhad1_vec, res_Reta_vec, res_ethad_vec, res_ethad1_vec, + res_Rphi_vec, res_weta2_vec, res_f1_vec, res_f3_vec, res_eratio_vec, et_vec, eta_vec; + + + auto et_col = Monitored::Collection( "et" , et_vec ); + auto eta_col = Monitored::Collection( "eta" , eta_vec ); + auto res_et_col = Monitored::Collection( "res_et" , res_et_vec ); + auto res_eta_col = Monitored::Collection( "res_eta" , res_eta_vec ); + auto res_phi_col = Monitored::Collection( "res_phi" , res_phi_vec ); + auto res_ethad_col = Monitored::Collection( "res_ethad" , res_ethad_vec ); + auto res_ethad1_col = Monitored::Collection( "res_ethad1" , res_ethad1_vec ); + auto res_Rhad_col = Monitored::Collection( "res_Rhad" , res_Rhad_vec ); + auto res_Rhad1_col = Monitored::Collection( "res_Rhad1" , res_Rhad1_vec ); + auto res_Reta_col = Monitored::Collection( "res_Reta" , res_Reta_vec ); + auto res_Rphi_col = Monitored::Collection( "res_Rphi" , res_Rphi_vec ); + auto res_weta2_col = Monitored::Collection( "res_weta2" , res_weta2_vec ); + auto res_f1_col = Monitored::Collection( "res_f1" , res_f1_vec ); + auto res_f3_col = Monitored::Collection( "res_f3" , res_f3_vec ); + auto res_eratio_col = Monitored::Collection( "res_eratio" , res_eratio_vec ); + + + for ( auto& pairObj : pairObjs ){ + + + const xAOD::Egamma *off = pairObj.first; + const xAOD::TrigEMCluster *onl=nullptr; + + { // Get the closest electron object from the trigger starting with deltaR = 0.15 + float maxDeltaR=0.05; + auto vec = tdt()->features<xAOD::TrigEMClusterContainer>(trigger,TrigDefs::Physics ,match()->key("L2Calo") ); + for(auto &featLinkInfo : vec ){ + if(! featLinkInfo.isValid() ) continue; + const auto *feat = *(featLinkInfo.link); + if(!feat) continue; + float deltaR = dR( off->eta(), off->phi(), feat->eta(), feat->phi() ); + if( deltaR < maxDeltaR){ + maxDeltaR=deltaR; + onl=feat; + } + } + } + + if(!onl) continue; + + et_vec.push_back(onl->et()*1e-3); + eta_vec.push_back(onl->eta()); + const float dummy=-999; + + float val_off=0.; + + val_off=off->caloCluster()->et(); + if(val_off!=0.){ + res_et_vec.push_back(((onl->et())-val_off)/val_off); + }else{ + res_et_vec.push_back(dummy); + } + + val_off=off->caloCluster()->eta(); + if(val_off!=0.){ + res_eta_vec.push_back((onl->eta()-val_off)/val_off); + }else{ + res_eta_vec.push_back(dummy); + } + + val_off=off->caloCluster()->phi(); + if(val_off!=0.){ + res_phi_vec.push_back((onl->phi()-val_off)/val_off); + }else{ + res_phi_vec.push_back((onl->phi()-val_off)/val_off); + } + + float elonl_ethad = onl->energy( CaloSampling::HEC0 ); elonl_ethad += onl->energy( CaloSampling::HEC1 ); + elonl_ethad += onl->energy( CaloSampling::HEC2 ); elonl_ethad += onl->energy( CaloSampling::HEC3 ); + elonl_ethad += onl->energy( CaloSampling::TileBar0 ); elonl_ethad += onl->energy( CaloSampling::TileExt0 ); + elonl_ethad += onl->energy( CaloSampling::TileBar1 ); elonl_ethad += onl->energy( CaloSampling::TileExt1 ); + elonl_ethad += onl->energy( CaloSampling::TileBar2 ); elonl_ethad += onl->energy( CaloSampling::TileExt2 ); + elonl_ethad /= TMath::CosH(onl->eta() ); + val_off=getShowerShape_ethad(off); + if(val_off!=0.){ + res_ethad_vec.push_back((elonl_ethad-val_off)/val_off); + }else{ + res_ethad_vec.push_back(dummy); + } + + val_off=getShowerShape_ethad1(off); + if(val_off!=0.){ + res_ethad1_vec.push_back(( (onl->ehad1()/TMath::Abs(onl->eta()) )-val_off)/val_off); + }else{ + res_ethad1_vec.push_back(dummy); + } + + float elonl_Rhad = elonl_ethad / onl->energy() ; + val_off=getShowerShape_Rhad(off); + if(val_off!=0.){ + res_Rhad_vec.push_back(( elonl_Rhad-val_off)/val_off); + }else{ + res_Rhad_vec.push_back(dummy); + } + + float elonl_Rhad1 = onl->ehad1() / onl->energy() ; + val_off=getShowerShape_Rhad1(off); + if(val_off!=0.){ + res_Rhad1_vec.push_back(( elonl_Rhad1-val_off)/val_off); + }else{ + res_Rhad1_vec.push_back(dummy); + } + + float onl_reta= 999.0; + if ( fabsf ( onl->e277() ) > 0.01 ) onl_reta = onl->e237() / onl->e277(); + val_off=getShowerShape_Reta(off); + if(val_off!=0.){ + res_Reta_vec.push_back( (onl_reta -val_off)/val_off); + }else{ + res_Reta_vec.push_back(dummy); + } + + val_off=getShowerShape_weta2(off); + if(val_off!=0.){ + res_weta2_vec.push_back(( (onl->weta2())-val_off)/val_off); + }else{ + res_weta2_vec.push_back(dummy); + } + + float onl_f1 = onl->energy(CaloSampling::EMB1)+onl->energy(CaloSampling::EME1); + onl_f1 /= onl->energy(); + val_off=getShowerShape_f1(off); + if(val_off!=0.){ + res_f1_vec.push_back(( (onl_f1)-val_off)/val_off); + }else{ + res_f1_vec.push_back(dummy); + } + + float onl_f3 = onl->energy(CaloSampling::EMB3)+onl->energy(CaloSampling::EME3); + onl_f3 /= onl->energy(); + val_off=getShowerShape_f3(off); + if(val_off!=0.){ + res_f3_vec.push_back(( (onl_f3)-val_off)/val_off); + }else{ + res_f3_vec.push_back(dummy); + } + + float onl_eratio = 999.0; + if ( fabsf(onl->emaxs1() + onl->e2tsts1()) > 0.01 ) + onl_eratio = (onl->emaxs1() - onl->e2tsts1()) / (onl->emaxs1() + onl->e2tsts1()); + val_off=getShowerShape_Eratio(off); + if(val_off!=0.){ + res_eratio_vec.push_back(( (onl_eratio)-val_off)/val_off); + }else{ + res_eratio_vec.push_back(dummy); + } + + }// Loop over all pair objects + + + // Fill everything + fill( monGroup , + et_col , + eta_col , + res_et_col , + res_eta_col , + res_phi_col , + res_ethad_col , + res_ethad1_col , + res_Rhad_col , + res_Rhad1_col , + res_Reta_col , + res_Rphi_col , + res_weta2_col , + res_f1_col , + res_f3_col , + res_eratio_col + ); + +} + diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.h b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.h index 20e465d1187471ed3fab68fb93c7fb060fe414fe..67b3711d3076f722191ee7548a1ba91b770d9342 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.h +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorAnalysisAlgorithm.h @@ -21,15 +21,19 @@ class TrigEgammaMonitorAnalysisAlgorithm: public TrigEgammaMonitorBaseAlgorithm protected: void fillLabel( const ToolHandle<GenericMonitoringTool>& groupHandle, const std::string &histname, const std::string &label ) const; + void fillEfficiencies( std::vector< std::pair<const xAOD::Egamma*, const TrigCompositeUtils::Decision*> > , TrigInfo ) const; + void fillDistributions( std::vector< std::pair<const xAOD::Egamma*, const TrigCompositeUtils::Decision*> > , TrigInfo ) const; + void fillResolutions( std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs, const TrigInfo info ) const; + + private: // Efficiency monitoring - void fillEfficiencies( std::vector< std::pair<const xAOD::Egamma*, const TrigCompositeUtils::Decision*> > , TrigInfo ) const; void fillEfficiency( const std::string &subgroup, const std::string &level, const std::string &pidword, const TrigInfo info, std::vector< std::pair< const xAOD::Egamma *, const TrigCompositeUtils::Decision* >> pairObjs) const; - void fillDistributions( std::vector< std::pair<const xAOD::Egamma*, const TrigCompositeUtils::Decision*> > , TrigInfo ) const; + // Disribution monitoring void fillL1Calo( const std::string &trigger, std::vector< const xAOD::EmTauRoI* > l1_vec ) const; void fillL2Calo(const std::string &trigger, std::vector< const xAOD::TrigEMCluster*> emCluster_vec ) const; void fillL2Electron(const std::string &trigger, std::vector<const xAOD::TrigElectron*> el_vec) const; @@ -38,6 +42,13 @@ class TrigEgammaMonitorAnalysisAlgorithm: public TrigEgammaMonitorBaseAlgorithm void fillTracking(const std::string &trigger, std::vector<const xAOD::Electron *> eg_vec, bool online ) const; + // Resolution monitoring + void fillL1CaloResolution(const std::string &trigger, std::vector< std::pair< const xAOD::Egamma*, const xAOD::EmTauRoI * >> pairObjs ) const; + void fillL1CaloAbsResolution(const std::string &trigger, std::vector< std::pair< const xAOD::Egamma*, const xAOD::EmTauRoI * >> pairObjs ) const; + void fillL2CaloResolution(const std::string &trigger, std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs ) const; + void fillHLTElectronResolution(const std::string &trigger, std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs , bool) const; + void fillHLTPhotonResolution(const std::string &trigger, std::vector< std::pair< const xAOD::Egamma*, const TrigCompositeUtils::Decision * >> pairObjs , bool) const; + }; #endif diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx index 3e4b5b5e088bc8763daf9081d68f2f98ee8b4cfa..a3b0cffeca07b72352ec71f21abbde3153655dca 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorBaseAlgorithm.cxx @@ -143,7 +143,7 @@ asg::AcceptData TrigEgammaMonitorBaseAlgorithm::setAccept( const TrigCompositeUt for(const auto cut:m_trigLevel) accept.addCut(cut,cut); asg::AcceptData acceptData (&accept); - + bool passedL1Calo=false; bool passedL2Calo=false; bool passedEFCalo=false; @@ -151,6 +151,8 @@ asg::AcceptData TrigEgammaMonitorBaseAlgorithm::setAccept( const TrigCompositeUt bool passedEFTrk=false; bool passedEF=false; + + auto trigger = info.trigName; passedL1Calo = match()->ancestorPassed<TrigRoiDescriptorCollection>( dec , trigger , "initialRois"); diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorElectronAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorElectronAlgorithm.cxx index 52b9dae1a9cabf735ed75dcd25561fbe8402a86b..914408c551b37eaa315a37f5b7e4d20704e3508b 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorElectronAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorElectronAlgorithm.cxx @@ -4,7 +4,6 @@ #include "TrigEgammaMonitorElectronAlgorithm.h" - using namespace Trig; @@ -61,7 +60,6 @@ StatusCode TrigEgammaMonitorElectronAlgorithm::fillHistograms( const EventContex std::vector< std::pair<const xAOD::Egamma*, const TrigCompositeUtils::Decision*>> pairObjs; - if ( executeNavigation( ctx, info.trigName,info.trigThrHLT,info.trigPidType, pairObjs).isFailure() ) { ATH_MSG_WARNING("executeNavigation Fails"); @@ -70,15 +68,14 @@ StatusCode TrigEgammaMonitorElectronAlgorithm::fillHistograms( const EventContex - fillDistributions( pairObjs, info ); fillEfficiencies( pairObjs, info ); + fillResolutions( pairObjs, info ); ATH_MSG_DEBUG("End Chain Analysis ============================= " << trigger); } // End loop over trigger list - return StatusCode::SUCCESS; } diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorPhotonAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorPhotonAlgorithm.cxx index cee8d2319df122c632b21dd772bf11ca4dfb916c..78f5a2655640cc1b796af7781352dd60590e1fd5 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorPhotonAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorPhotonAlgorithm.cxx @@ -69,6 +69,7 @@ StatusCode TrigEgammaMonitorPhotonAlgorithm::fillHistograms( const EventContext& fillDistributions( pairObjs, info ); fillEfficiencies( pairObjs, info ); + fillResolutions( pairObjs, info ); ATH_MSG_DEBUG("End Chain Analysis ============================= " << trigger); diff --git a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorTagAndProbeAlgorithm.cxx b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorTagAndProbeAlgorithm.cxx index 165c25862711f6f28ce435e3d11ddf4f4912b5d7..732925f052bfd5d65afa0ac6ed769957608f05a8 100644 --- a/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorTagAndProbeAlgorithm.cxx +++ b/Trigger/TrigMonitoring/TrigEgammaMonitoring/src/TrigEgammaMonitorTagAndProbeAlgorithm.cxx @@ -114,6 +114,7 @@ StatusCode TrigEgammaMonitorTagAndProbeAlgorithm::fillHistograms( const EventCon fillDistributions( pairObjs, info ); fillEfficiencies( pairObjs, info ); + fillResolutions( pairObjs, info ); @@ -265,7 +266,7 @@ bool TrigEgammaMonitorTagAndProbeAlgorithm::executeTandP( const EventContext& ct probeElectrons.push_back(selProbe); - auto mon_count_probe= Monitored::Scalar<std::string>(m_anatype+"_PorbeCutCounter","GoodProbe"); + auto mon_count_probe= Monitored::Scalar<std::string>(m_anatype+"_ProbeCutCounter","GoodProbe"); auto mon_mee = Monitored::Scalar<float>(m_anatype+"_Mee" , tpPairMass/1.e3 ); fill( monGroup , mon_count_probe, mon_mee ); }