diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx index 2971c3c3e9aab9bbaca402ee199354cb2a1bc55b..9c089e3231cd46dd753e1616ff3019af586b12b0 100644 --- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx +++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/EfficiencyTool.cxx @@ -5,6 +5,7 @@ /********************************************************************** **********************************************************************/ #include "TrigEgammaAnalysisTools/EfficiencyTool.h" +#include "TrigEgammaAnalysisTools/ValidationException.h" #include "xAODEventInfo/EventInfo.h" @@ -48,17 +49,30 @@ bool EfficiencyTool::analyseIsEMLH(const xAOD::Electron *eg, const std::string p const std::string fail = "Fail" + pidword; const std::string ineff = "Ineff" + pidword; - unsigned int isem = eg->selectionisEM(pidword); - - bool failIsEMLH = false; - for (int ii = 0; ii < 11; ii++) { - if ((isem >> ii) & 0x1) { - failIsEMLH = true; - hist1(fail)->Fill(ii + 0.5); - hist1(ineff)->Fill(ii + 3.5, 1); - } + bool failIsEMLH = true; + unsigned int isem = 9999; + try{ + ATH_MSG_DEBUG("Running selectionisEM("<<pidword<<")"); + isem = eg->selectionisEM(pidword); + + failIsEMLH = false; + for (int ii = 0; ii < 11; ii++) { + if ((isem >> ii) & 0x1) { + failIsEMLH = true; + hist1(fail)->Fill(ii + 0.5); + hist1(ineff)->Fill(ii + 3.5, 1); + } + } + } catch (const ValidationException &e) { + ATH_MSG_WARNING("Exception thrown: " << e.msg() ); + ATH_MSG_WARNING("Is " << pidword << " is a valid one? returning failed...."); + failIsEMLH = true; + } catch(...) { + ATH_MSG_WARNING("Unknown exception caught in analyseIsEMLH ... Is " << pidword << " is a valid one? returning failed...."); + failIsEMLH = true; } return failIsEMLH; + } bool EfficiencyTool::analyseIsEM(const xAOD::Electron *eg, const std::string pid) @@ -76,7 +90,18 @@ bool EfficiencyTool::analyseIsEM(const xAOD::Electron *eg, const std::string pid bool failtrt = false; bool failisem = false; - unsigned int isem = eg->selectionisEM(pidword); + unsigned int isem = 9999; + try{ + isem = eg->selectionisEM(pidword); + } catch (const ValidationException &eg) { + ATH_MSG_WARNING("Exception thrown: " << eg.msg() ); + ATH_MSG_WARNING("Is " << pidword << " is a valid one? returning failed...."); + return(true); + } catch(...) { + ATH_MSG_WARNING("Unknown exception caught in analyseIsEMLH ... Is " << pidword << " is a valid one? returning failed...."); + return(true); + } + for (int ii = 0; ii < 29; ii++) { if ((isem >> ii) & 0x1) { @@ -438,7 +463,7 @@ void EfficiencyTool::fillEfficiency(const std::string dir,bool isPassed,const fl float eta = eg->caloCluster()->etaBE(2); float phi = eg->phi(); - float pt = eg->pt(); + float pt = eg->pt()/1e3; float avgmu=getAvgMu(); float npvtx=getNPVtx(); ATH_MSG_DEBUG("Mu " << avgmu << " " << getAvgOnlineMu() << " " << getAvgOfflineMu()); @@ -533,6 +558,12 @@ StatusCode EfficiencyTool::toolExecute(const std::string basePath,const TrigInfo else if(pairObj.first->type()==xAOD::Type::Photon){ float et = getCluster_et(pairObj.first)/1e3; if(et < info.trigThrHLT-5.0) continue; // return StatusCode::SUCCESS; + if(boost::contains(info.trigName,"icalovloose")) { + if (getIsolation_topoetcone20(pairObj.first)/getCluster_et(pairObj.first) >= 0.065) continue; // pass FixedCutLoose offline isolation + } + else { + if ((getIsolation_topoetcone40(pairObj.first)-2450.0)/getCluster_et(pairObj.first) >= 0.022) continue; // pass FixedCutTightCaloOnly offline isolation + } } // Offline photon diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx index 95a8cfd5eb2e666432b8bf5626e405ca86d8e667..1d7145df0c8220c53e37a7ac3b59479cc698f2e2 100644 --- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx +++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaAnalysisBaseTool.cxx @@ -237,8 +237,8 @@ StatusCode TrigEgammaAnalysisBaseTool::execute() { return StatusCode::FAILURE; } catch(...) { sc.ignore(); - ATH_MSG_ERROR("Unknown exception caught, while filling histograms"); - return StatusCode::FAILURE; + ATH_MSG_WARNING("Unknown exception caught, while filling histograms"); + return StatusCode::SUCCESS; } return sc; } @@ -411,7 +411,14 @@ void TrigEgammaAnalysisBaseTool::parseTriggerName(const std::string trigger, std pidname = defaultPid; etcut=true; } - else pidname = getProbePid(strs.at(1)); + else { + if (type == "electron" && boost::contains(trigger, "ion")){ + ATH_MSG_DEBUG("Heavy ion electron chain being used. Using LHMediumHI tune for offline."); + pidname="LHMediumHI"; + } else { + pidname = getProbePid(strs.at(1)); + } + } //Get the L1 information diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx index 0439ae6eb2bb8cb6bcb8101aa605a4eac43b2d76..8ae71d4a14294113e1e0674b4cb7019fe87ff3ea 100644 --- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx +++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavBaseTool.cxx @@ -132,6 +132,7 @@ bool TrigEgammaNavBaseTool::EventWiseSelection( ){ if(ApplyElectronPid(eg,"LHLoose")) hist1(m_anatype+"_electrons")->AddBinContent(4); if(ApplyElectronPid(eg,"LHMedium")) hist1(m_anatype+"_electrons")->AddBinContent(5); if(ApplyElectronPid(eg,"LHTight")) hist1(m_anatype+"_electrons")->AddBinContent(6); + if(ApplyElectronPid(eg,"LHMediumHI")) hist1(m_anatype+"_electrons")->AddBinContent(7); } //Calculate number of vertex @@ -154,6 +155,7 @@ StatusCode TrigEgammaNavBaseTool::executeNavigation( const TrigInfo info ){ bool TrigEgammaNavBaseTool::ApplyElectronPid(const xAOD::Electron *eg, const std::string pidname){ + ATH_MSG_DEBUG("Applying Electron PID with pidname = " << pidname); if (pidname == "Tight"){ bool accept = (bool) m_electronIsEMTool[0]->accept(eg); return static_cast<bool>(accept); @@ -178,6 +180,10 @@ bool TrigEgammaNavBaseTool::ApplyElectronPid(const xAOD::Electron *eg, const std bool accept = (bool) m_electronLHTool[2]->accept(eg); return static_cast<bool>(accept); } + else if (pidname == "LHMediumHI"){ + bool accept = (bool) m_electronLHTool[3]->accept(eg); + return static_cast<bool>(accept); + } else ATH_MSG_DEBUG("No Pid tool, continue without PID"); return false; } @@ -189,6 +195,7 @@ StatusCode TrigEgammaNavBaseTool::executeElectronNavigation( std::string trigIte ATH_MSG_DEBUG("Apply navigation selection "); + const std::string decor="is"+pidname; for(const auto& eg : *m_offElectrons ){ const HLT::TriggerElement *te = nullptr; @@ -210,7 +217,11 @@ StatusCode TrigEgammaNavBaseTool::executeElectronNavigation( std::string trigIte } if(m_forcePidSelection){///default is true - if(!ApplyElectronPid(eg,pidname)) continue; + if(!ApplyElectronPid(eg,pidname)){ + ATH_MSG_DEBUG("Fails ElectronID "<< pidname); + continue; + } + ATH_MSG_DEBUG("Passes ElectronID "<< pidname); } if (m_forceProbeIsolation) {///default is false diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx index 839ea908cc332e542d208dc00d5d0e2157c2be70..4dac467c9006890f13a19afe2a7ef296c5b30d36 100644 --- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx +++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/Root/TrigEgammaNavTPBaseTool.cxx @@ -380,7 +380,7 @@ void TrigEgammaNavTPBaseTool::DressPid(const xAOD::Electron *eg){ const std::string pidname="is"+m_isemname[ipid]; eg->auxdecor<bool>(pidname)=static_cast<bool>(accept); } - for(int ipid=0;ipid<3;ipid++){ + for(int ipid=0;ipid<2;ipid++){ bool accept = (bool) m_electronLHTool[ipid]->accept(eg); const std::string pidname="is"+m_lhname[ipid]; eg->auxdecor<bool>(pidname)=static_cast<bool>(accept); @@ -414,6 +414,10 @@ bool TrigEgammaNavTPBaseTool::ApplyElectronPid(const xAOD::Electron *eg, const s bool accept = (bool) m_electronLHTool[2]->accept(eg); return static_cast<bool>(accept); } + else if (pidname == "LHMediumHI"){ + bool accept = (bool) m_electronLHTool[3]->accept(eg); + return static_cast<bool>(accept); + } else ATH_MSG_DEBUG("No Pid tool, continue without PID"); return false; } diff --git a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py index d9ba5f06a2e63ccb1f91045af892cc51234e22ae..2159a9dd78156d32bf3c67810a0ee605bc4ddf7b 100644 --- a/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py +++ b/Trigger/TrigAnalysis/TrigEgammaAnalysisTools/python/TrigEgammaAnalysisToolsConfig.py @@ -29,18 +29,21 @@ MediumElectronSelector = CfgMgr.AsgElectronIsEMSelector("T0HLTMediumE TightElectronSelector = CfgMgr.AsgElectronIsEMSelector("T0HLTTightElectronSelector") LooseLHSelector = CfgMgr.AsgElectronLikelihoodTool("T0HLTLooseLHSelector") MediumLHSelector = CfgMgr.AsgElectronLikelihoodTool("T0HLTMediumLHSelector") +MediumLHHISelector = CfgMgr.AsgElectronLikelihoodTool("T0HLTMediumLHHISelector") TightLHSelector = CfgMgr.AsgElectronLikelihoodTool("T0HLTTightLHSelector") LooseElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMLooseSelectorCutDefs.conf" MediumElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMMediumSelectorCutDefs.conf" TightElectronSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20150712/ElectronIsEMTightSelectorCutDefs.conf" LooseLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodLooseOfflineConfig2017_CutBL_Smooth.conf" MediumLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodMediumOfflineConfig2017_Smooth.conf" +MediumLHHISelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc15_20160907_HI/ElectronLikelihoodMediumOfflineConfig2016_HI.conf" TightLHSelector.ConfigFile = "ElectronPhotonSelectorTools/offline/mc16_20170828/ElectronLikelihoodTightOfflineConfig2017_Smooth.conf" ToolSvc+=LooseElectronSelector ToolSvc+=MediumElectronSelector ToolSvc+=TightElectronSelector ToolSvc+=LooseLHSelector ToolSvc+=MediumLHSelector +ToolSvc+=MediumLHHISelector ToolSvc+=TightLHSelector @@ -181,7 +184,7 @@ TrigEgammaNavTPJpsieeAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.Trig isEMResultNames=["Tight","Medium","Loose"], LHResultNames=["LHTight","LHMedium","LHLoose"], ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector], - ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], + ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector, MediumLHHISelector], ZeeLowerMass=2, ZeeUpperMass=5, OfflineTagSelector='Tight', # 1=tight, 2=medium, 3=loose @@ -209,7 +212,7 @@ TrigEgammaNavAnalysisTool = ToolFactory(TrigEgammaAnalysisToolsConf.TrigEgammaNa #EmulationTool=EmulationTool, Tools=[EfficiencyTool,ResolutionTool,DistTool], ElectronIsEMSelector =[TightElectronSelector,MediumElectronSelector,LooseElectronSelector], - ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector], + ElectronLikelihoodTool =[TightLHSelector,MediumLHSelector,LooseLHSelector,MediumLHHISelector], IsEMLabels=IneffLabels, TriggerList=monitoring_electron + monitoring_photon, ForcePidSelection=True,