ATLAS Offline Software
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 
11 JetHistoTriggEfficiency::JetHistoTriggEfficiency( const std::string& type, const std::string & name ,const IInterface* 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 
37 StatusCode 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 
JetHistoTriggEfficiency.h
JetHistoTriggEfficiency::m_jetVar
ToolHandle< IJetHistoVarTool > m_jetVar
Definition: JetHistoTriggEfficiency.h:36
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
JetHistoTriggEfficiency::initialize
virtual StatusCode initialize()
Definition: JetHistoTriggEfficiency.cxx:24
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
JetHistoTriggEfficiency::processJetContainer
virtual StatusCode processJetContainer(const JetMonitoringAlg &parentAlg, const xAOD::JetContainer &jets, const EventContext &ctx) const
Definition: JetHistoTriggEfficiency.cxx:37
Conditions.h
GenericMonitoringTool.h
JetHistoTriggEfficiency::m_sortJets
Gaudi::Property< bool > m_sortJets
Definition: JetHistoTriggEfficiency.h:34
JetHistoTriggEfficiency::m_jetIndex
Gaudi::Property< size_t > m_jetIndex
Definition: JetHistoTriggEfficiency.h:33
doubleTestComp.j1
j1
Definition: doubleTestComp.py:21
JetHistoTriggEfficiency::m_group
Gaudi::Property< std::string > m_group
Definition: JetHistoTriggEfficiency.h:31
JetMonitoringAlg::isPassed
bool isPassed(const std::string &c) const
Definition: JetMonitoringAlg.cxx:103
JetHistoTriggEfficiency::m_probeTrigChain
Gaudi::Property< std::string > m_probeTrigChain
Definition: JetHistoTriggEfficiency.h:32
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
JetMonitoringAlg::isPassedBits
unsigned int isPassedBits(const std::string &c) const
Definition: JetMonitoringAlg.cxx:106
test_pyathena.parent
parent
Definition: test_pyathena.py:15
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthMonitorAlgorithm::fill
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.
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
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
JetHistoTriggEfficiency::JetHistoTriggEfficiency
JetHistoTriggEfficiency(const std::string &type, const std::string &name, const IInterface *parent)
Definition: JetHistoTriggEfficiency.cxx:11
JetMonitoringAlg
Definition: JetMonitoringAlg.h:26
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
JetMonitoringAlg.h
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
defineDB.jets
list jets
Definition: JetTagCalibration/share/defineDB.py:24
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
AthAlgTool
Definition: AthAlgTool.h:26
JetHistoTriggEfficiency::m_selectTool
ToolHandle< IJetSelector > m_selectTool
Definition: JetHistoTriggEfficiency.h:35
doubleTestComp.j2
j2
Definition: doubleTestComp.py:22