ATLAS Offline Software
Loading...
Searching...
No Matches
JetHistoTriggEfficiency.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3*/
6
9
10
11JetHistoTriggEfficiency::JetHistoTriggEfficiency( const std::string& type, const std::string & name ,const IInterface* parent):
12 AthAlgTool( type, name, parent )
13 , m_selectTool(this)
14 , m_jetVar(this)
15{
16 declareInterface<IJetHistoFiller>(this);
17
18 declareProperty("Selector",m_selectTool);
20
21}
22
23
25 ATH_MSG_INFO(" initialize " );
26
27 if(m_selectTool.isEnabled()){
28 ATH_CHECK(m_selectTool.retrieve());
29 ATH_MSG_INFO( " pre-select jets with "<< m_selectTool->name() );
30 } else {m_selectTool.disable();}
31
32 ATH_CHECK(m_jetVar.retrieve());
33
34 return StatusCode::SUCCESS;
35}
36
37StatusCode JetHistoTriggEfficiency::processJetContainer(const JetMonitoringAlg& parentAlg, const xAOD::JetContainer & jets, const EventContext& ctx) const {
38 if(jets.empty()) return StatusCode::SUCCESS;
39
40 // we assume this tool is invoked in an alg selecting a reference trigger.
41 ATH_MSG_DEBUG(" working on "<< m_probeTrigChain);
42 // check our probe trigger is enabled
43 static const SG::AuxElement::ConstAccessor< std::vector< std::string > > acc_disabledTriggers("disabledTriggers");
44 auto eventInfo = parentAlg.GetEventInfo(ctx);
45 if( acc_disabledTriggers.isAvailable( *eventInfo ) ) {
46 const std::vector<std::string> & disabledTriggers = acc_disabledTriggers( *eventInfo );
47 for( const std::string & s: disabledTriggers ) if (s==m_probeTrigChain) return StatusCode::SUCCESS;
48 }
49
50 // check trigger bits
51 const unsigned int probeBits = parentAlg.isPassedBits(m_probeTrigChain);
52
53
54 // disable the L1 test for probe chains with 'noalg' in the chain name
55 // such chains have no HLT cuts, so requiring L1 to pass results in 100% efficiency.
56 std::string sprob = m_probeTrigChain;
57 bool noalg = sprob.find("noalg") != std::string::npos;
58
59 if(!(probeBits & TrigDefs::L1_isPassedAfterVeto) and !noalg) return StatusCode::SUCCESS;
60 if( (probeBits & TrigDefs::EF_prescaled) ) return StatusCode::SUCCESS;
61
62
63 // Find the probe jet.
64 // --> choose the nth jet passing the pre-selection (where n=m_jetIndex)
65 const xAOD::Jet* probeJet = nullptr;
66 size_t npassed=0;
67 bool doJetSelect = m_selectTool.isEnabled();
68 if (!m_sortJets) {
69 for(const xAOD::Jet* j: jets){
70 if( doJetSelect && !m_selectTool->keep(*j) ) continue;
71 if(npassed==m_jetIndex) {probeJet = j; break; } // found !
72 npassed++;
73 }
74 } else { //first sort jets according to variable passed, then select the nth jet from the sorted container
75 std::list<const xAOD::Jet*> tmpList;
76 for(const xAOD::Jet* j: jets){
77 if( doJetSelect && !m_selectTool->keep(*j) ) continue;
78 tmpList.push_back(j);
79 }
80 auto sort = [this] (const xAOD::Jet * j1, const xAOD::Jet * j2) {return m_jetVar->value(*j1) > m_jetVar->value(*j2); } ;
81 tmpList.sort( sort );
82 for(const xAOD::Jet* j : tmpList ) {
83 if(npassed==m_jetIndex) {probeJet = j; break; } // found !
84 npassed++;
85 }
86 }
87
88 if(probeJet ==nullptr) return StatusCode::SUCCESS;
89
90 // trigger passed ?
91
92 bool trigPassed = parentAlg.isPassed(m_probeTrigChain);
93 ATH_MSG_DEBUG( " trigPassed "<< trigPassed << " " << m_jetVar->value(*probeJet) );
94 // ask the framework to fill our TEfficiency
95 auto trigpassS= Monitored::Scalar<bool>("trigPassed",trigPassed);
96
97 auto jetVarS= Monitored::Scalar<float>("jetVar",
98 m_jetVar->value(*probeJet) );
99
100 parentAlg.fill(m_group,trigpassS, jetVarS );
101
102 return StatusCode::SUCCESS;
103}
104
105
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Gaudi::Property< std::string > m_probeTrigChain
ToolHandle< IJetSelector > m_selectTool
Gaudi::Property< bool > m_sortJets
virtual StatusCode processJetContainer(const JetMonitoringAlg &parentAlg, const xAOD::JetContainer &jets, const EventContext &ctx) const
ToolHandle< IJetHistoVarTool > m_jetVar
Gaudi::Property< std::string > m_group
Gaudi::Property< size_t > m_jetIndex
JetHistoTriggEfficiency(const std::string &type, const std::string &name, const IInterface *parent)
A monitoring algorithm in charge of filling histogram for a JetContainer.
unsigned int isPassedBits(const std::string &c) const
bool isPassed(const std::string &c) const
Declare a monitored scalar variable.
SG::ConstAccessor< T, ALLOC > ConstAccessor
Definition AuxElement.h:569
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
Fills a vector of variables to a group by reference.
Jet_v1 Jet
Definition of the current "jet version".
JetContainer_v1 JetContainer
Definition of the current "jet container version".