ATLAS Offline Software
TrigEgammaMonitorPhotonAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
9 
10 
11 using namespace Trig;
12 
13 
14 TrigEgammaMonitorPhotonAlgorithm::TrigEgammaMonitorPhotonAlgorithm( const std::string& name, ISvcLocator* pSvcLocator ):
16 {
17 }
18 
20 {}
21 
22 
23 
25 {
26 
28 
29  ATH_CHECK(m_offPhotonKey.initialize());
30  ATH_CHECK(m_offPhotonIsolationKeys.initialize());
31  ATH_CHECK( m_eventInfoDecorKey.initialize() );
32 
33  for(auto& trigName : m_trigInputList)
34  {
35  if(getTrigInfoMap().count(trigName) != 0){
36  ATH_MSG_DEBUG("Trigger already booked, removing from trigger list " << trigName);
37  }else {
38  m_trigList.push_back(trigName);
39  setTrigInfo(trigName);
40  }
41  }
42 
43  return StatusCode::SUCCESS;
44 }
45 
46 
48 {
49  ATH_MSG_DEBUG("Executing TrigEgammaMonitorPhotonAlgorithm");
50 
51 
52  if(isHLTTruncated()){
53  ATH_MSG_DEBUG("HLTResult truncated, skip trigger analysis");
54  return StatusCode::SUCCESS;
55  }
56 
57  // Noise burst protection
59  ATH_CHECK(thisEvent.isValid());
61  ATH_MSG_DEBUG("LAr Noise Burst Veto, skip trigger analysis");
62  return StatusCode::SUCCESS;
63  }
64 
65  ATH_MSG_DEBUG("Chains for Analysis " << m_trigList);
66 
67  for(const auto& trigger : m_trigList){
68 
69  const TrigInfo info = getTrigInfo(trigger);
70  ATH_MSG_DEBUG("Start Chain Analysis ============================= " << trigger << " " << info.trigger);
71 
72  // Check if this trigger is in the bootstrap map
73  auto it = m_BSTrigMap.find(trigger);
74 
75  if ( it != m_BSTrigMap.end() ) {
76 
77  ATH_MSG_DEBUG( trigger << " is a bootstrapped trigger");
78 
79  std::string bootstrap = it->second;
80  ATH_MSG_DEBUG( "Bootstrapping " << trigger << " from " << bootstrap );
81 
82 
83  if (!tdt()->isPassed(bootstrap)){
84  ATH_MSG_DEBUG("Not passed BS trigger. Skipping! ========================== " << trigger);
85  continue;
86  } else {
87  ATH_MSG_DEBUG("BS trigger passed!");
88  }
89 
90  }
91 
92  std::vector< std::pair<std::shared_ptr<const xAOD::Egamma>, const TrigCompositeUtils::Decision * >> pairObjs;
93 
94  if ( executeNavigation( ctx,info,pairObjs).isFailure() )
95  {
96  ATH_MSG_DEBUG("executeNavigation Fails");
97  return StatusCode::SUCCESS;
98  }
99 
100  std::vector< std::pair<const xAOD::Egamma*, const TrigCompositeUtils::Decision*>> pairObjsRaw;
101  pairObjsRaw.reserve(pairObjs.size());
102  for (const auto& itr : pairObjs) {
103  pairObjsRaw.emplace_back(itr.first.get(), itr.second);
104  }
105 
106  fillDistributions( pairObjsRaw, info );
107  fillEfficiencies( pairObjsRaw, info, m_onlyHLT );
108  fillResolutions( pairObjsRaw, info );
109 
110 
111  ATH_MSG_DEBUG("End Chain Analysis ============================= " << trigger);
112  } // End loop over trigger list
113 
114 
115  return StatusCode::SUCCESS;
116 }
117 
118 
119 
120 
121 
123  std::vector<std::pair<std::shared_ptr<const xAOD::Egamma>, const TrigCompositeUtils::Decision * >> &pairObjs)
124  const
125 {
126  ATH_MSG_DEBUG("Apply navigation selection for Photons");
127 
129 
130  if(!offPhotons.isValid())
131  {
132  ATH_MSG_DEBUG("Failed to retrieve offline photons ");
133  return StatusCode::FAILURE;
134  }
135  const std::string trigItem = info.trigger;
136  const float etthr = info.etthr;
137  const std::string pidName = info.pidname;
138  const std::string decorName="is"+pidName;
139 
140  for(const auto *const eg : *offPhotons ){
141  const TrigCompositeUtils::Decision *dec=nullptr;
142  if(!eg->caloCluster()){
143  ATH_MSG_DEBUG("No caloCluster");
144  continue;
145  }
146  if( !(getCluster_et(eg) > (etthr-5.)*Gaudi::Units::GeV)) continue; //Take 5 GeV below threshold
147  if(!info.etcut){
148  if(!eg->passSelection(m_photonPid)) {
149  ATH_MSG_DEBUG("Fails PhotonID: " << m_photonPid);
150  continue; // reject offline photons reproved by tight requiriment
151  }
152  }
154  if(!ApplyPhotonPid(eg,pidName)){
155  ATH_MSG_DEBUG("Fails PhotonID: "<< pidName << " Trigger: " << trigItem);
156  continue;
157  }
158  ATH_MSG_DEBUG("Passes PhotonID "<< pidName);
159  }
160  // default is false: if true, skip converted photons
161  if(m_doUnconverted){
162  if (eg->vertex()){
163  ATH_MSG_DEBUG("Removing converted photons, continuing...");
164  continue;
165  }
166  }
167  const auto ph = std::make_shared<const xAOD::Photon>(*eg);
168  SG::Decorator<bool> decor (decorName);
169  decor(*ph)=static_cast<bool>(true);
170  match()->match(ph.get(), trigItem, dec, TrigDefs::includeFailedDecisions);
171  //match()->match(ph, trigItem, dec);
172  pairObjs.emplace_back(ph, dec);
173  // }
174 
175  }
176 
177  ATH_MSG_DEBUG("BaseToolMT::Photon TEs " << pairObjs.size() << " found.");
178  return StatusCode::SUCCESS;
179 }
TrigEgammaMonitorPhotonAlgorithm::m_eventInfoDecorKey
SG::ReadDecorHandleKey< xAOD::EventInfo > m_eventInfoDecorKey
Definition: TrigEgammaMonitorPhotonAlgorithm.h:60
GeV
#define GeV
Definition: PhysicsAnalysis/TauID/TauAnalysisTools/Root/HelperFunctions.cxx:18
TrigEgammaMonitorPhotonAlgorithm::m_offPhotonKey
SG::ReadHandleKey< xAOD::PhotonContainer > m_offPhotonKey
Event Wise offline PhotonContainer Access and end iterator.
Definition: TrigEgammaMonitorPhotonAlgorithm.h:57
TrigEgammaMonitorPhotonAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TrigEgammaMonitorPhotonAlgorithm.cxx:24
TrigEgammaMonitorBaseAlgorithm::getTrigInfoMap
const std::map< std::string, TrigInfo > & getTrigInfoMap()
Helper methods.
Definition: TrigEgammaMonitorBaseAlgorithm.h:130
ParticleTest.eg
eg
Definition: ParticleTest.py:29
TrigEgammaMonitorPhotonAlgorithm::m_photonPid
Gaudi::Property< std::string > m_photonPid
Photon pid word.
Definition: TrigEgammaMonitorPhotonAlgorithm.h:39
_triginfo
Definition: TrigEgammaMonitorBaseAlgorithm.h:42
Trig
The common trigger namespace for trigger analysis tools.
Definition: LArCellMonAlg.h:33
TrigEgammaMonitorPhotonAlgorithm::m_trigList
std::vector< std::string > m_trigList
List of triggers to study.
Definition: TrigEgammaMonitorPhotonAlgorithm.h:37
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:67
TrigEgammaMonitorBaseAlgorithm::ApplyPhotonPid
bool ApplyPhotonPid(const xAOD::Photon *eg, const std::string &) const
Get offline electron decision.
Definition: TrigEgammaMonitorBaseAlgorithm.cxx:97
TrigEgammaMonitorPhotonAlgorithm::m_forcePidSelection
Gaudi::Property< bool > m_forcePidSelection
force pid selection into photon navigation
Definition: TrigEgammaMonitorPhotonAlgorithm.h:51
TrigEgammaMonitorAnalysisAlgorithm::fillDistributions
void fillDistributions(const std::vector< std::pair< const xAOD::Egamma *, const TrigCompositeUtils::Decision * > > &, const TrigInfo &) const
Definition: TrigEgammaMonitorAnalysisAlgorithm.cxx:420
skel.it
it
Definition: skel.GENtoEVGEN.py:407
TrigEgammaMonitorPhotonAlgorithm::executeNavigation
StatusCode executeNavigation(const EventContext &ctx, const TrigInfo &info, std::vector< std::pair< std::shared_ptr< const xAOD::Egamma >, const TrigCompositeUtils::Decision * >> &) const
navigation method called by executeNavigation
Definition: TrigEgammaMonitorPhotonAlgorithm.cxx:122
TrigEgammaMonitorPhotonAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TrigEgammaMonitorPhotonAlgorithm.cxx:47
TrigEgammaMonitorBaseAlgorithm::tdt
const ToolHandle< Trig::TrigDecisionTool > & tdt() const
Get the TDT
Definition: TrigEgammaMonitorBaseAlgorithm.h:136
TrigEgammaMonitorPhotonAlgorithm::m_doUnconverted
Gaudi::Property< bool > m_doUnconverted
doUnconverted analysis
Definition: TrigEgammaMonitorPhotonAlgorithm.h:41
xAOD::EventInfo_v1::LAr
@ LAr
The LAr calorimeter.
Definition: EventInfo_v1.h:335
XMLtoHeader.count
count
Definition: XMLtoHeader.py:84
LArEventBitInfo.h
TrigEgammaMonitorAnalysisAlgorithm::fillResolutions
void fillResolutions(const std::vector< std::pair< const xAOD::Egamma *, const TrigCompositeUtils::Decision * >> &pairObjs, const TrigInfo &info) const
*****************************************************************************************************...
Definition: TrigEgammaMonitorAnalysisAlgorithm.cxx:935
TrigEgammaMonitorPhotonAlgorithm::~TrigEgammaMonitorPhotonAlgorithm
virtual ~TrigEgammaMonitorPhotonAlgorithm() override
Definition: TrigEgammaMonitorPhotonAlgorithm.cxx:19
TrigEgammaMonitorBaseAlgorithm::isHLTTruncated
bool isHLTTruncated() const
Definition: TrigEgammaMonitorBaseAlgorithm.cxx:763
LArEventBitInfo::NOISEBURSTVETO
@ NOISEBURSTVETO
Definition: LArEventBitInfo.h:13
TrigEgammaMonitorBaseAlgorithm::getTrigInfo
TrigInfo getTrigInfo(const std::string &) const
Get the trigger info parsed from the chain name (only single lepton triggers)
Definition: TrigEgammaMonitorBaseAlgorithm.cxx:609
SG::Decorator< bool >
TrigEgammaMonitorBaseAlgorithm::setTrigInfo
void setTrigInfo(const std::string &)
Set the trigger info parsed from the chain name.
Definition: TrigEgammaMonitorBaseAlgorithm.cxx:617
TrigEgammaMonitorAnalysisAlgorithm::fillEfficiencies
void fillEfficiencies(const std::vector< std::pair< const xAOD::Egamma *, const TrigCompositeUtils::Decision * > > &, const TrigInfo &, const bool) const
Definition: TrigEgammaMonitorAnalysisAlgorithm.cxx:42
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
xAOD::TrigComposite_v1
Class used to describe composite objects in the HLT.
Definition: TrigComposite_v1.h:49
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TrigEgammaMonitorPhotonAlgorithm::m_BSTrigMap
Gaudi::Property< std::map< std::string, std::string > > m_BSTrigMap
Definition: TrigEgammaMonitorPhotonAlgorithm.h:47
TrigEgammaMonitorAnalysisAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TrigEgammaMonitorAnalysisAlgorithm.cxx:17
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
TrigEgammaMonitorPhotonAlgorithm::TrigEgammaMonitorPhotonAlgorithm
TrigEgammaMonitorPhotonAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TrigEgammaMonitorPhotonAlgorithm.cxx:14
TrigEgammaMonitorBaseAlgorithm::match
const ToolHandle< TrigEgammaMatchingToolMT > & match() const
Get the e/g match tool.
Definition: TrigEgammaMonitorBaseAlgorithm.h:138
TrigEgammaMonitorPhotonAlgorithm.h
TrigEgammaMonitorPhotonAlgorithm::m_offPhotonIsolationKeys
SG::ReadDecorHandleKeyArray< xAOD::PhotonContainer > m_offPhotonIsolationKeys
Ensure offline photon isolation decoration is retrieved after being created.
Definition: TrigEgammaMonitorPhotonAlgorithm.h:59
xAOD::EventInfo_v1::isEventFlagBitSet
bool isEventFlagBitSet(EventFlagSubDet subDet, size_t bit) const
Check one particular bit of one particular sub-detector.
Definition: EventInfo_v1.cxx:703
ReadDecorHandle.h
Handle class for reading a decoration on an object.
TrigEgammaMonitorPhotonAlgorithm::m_onlyHLT
Gaudi::Property< bool > m_onlyHLT
Compute only final HLT decision.
Definition: TrigEgammaMonitorPhotonAlgorithm.h:53
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
TrigEgammaMonitorAnalysisAlgorithm
Definition: TrigEgammaMonitorAnalysisAlgorithm.h:11
python.ParticleTypeUtil.info
def info
Definition: ParticleTypeUtil.py:87
TrigEgammaMonitorPhotonAlgorithm::m_trigInputList
Gaudi::Property< std::vector< std::string > > m_trigInputList
List of triggers from menu.
Definition: TrigEgammaMonitorPhotonAlgorithm.h:43