ATLAS Offline Software
IDvarCalculator.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 
9 #include "fastjet/PseudoJet.hh"
10 
12  const std::string& name,
13  const IInterface * parent) :
15  m_useCells(true)
16 {
17  declareInterface<DiTauToolBase > (this);
18  declareProperty("useCells", m_useCells);
19 }
20 
21 
23 
24 
26 
27  return StatusCode::SUCCESS;
28 }
29 
30 
32  const EventContext& /*ctx*/) const {
33 
34  ATH_MSG_DEBUG("execute IDVarCalculator...");
35 
36  // get ditau elements
37 
38  // ditau
39  xAOD::DiTauJet* pDiTau = data->xAODDiTau;
40  if (!pDiTau) {
41  ATH_MSG_ERROR("no di-tau candidate given");
42  return StatusCode::FAILURE;
43  }
44 
45  // seed jet
46  const xAOD::Jet* pSeed = data->seed;
47  if (!pSeed) {
48  ATH_MSG_WARNING("No jet seed given.");
49  return StatusCode::FAILURE;
50  }
51 
52  // subjets
53  std::vector<fastjet::PseudoJet> vSubjets = data->subjets;
54  if (vSubjets.empty()) {
55  ATH_MSG_WARNING("No subjets given. Continue without ID variable calculation.");
56  return StatusCode::SUCCESS;
57  }
58 
59  // cells if available
60  bool useCells = m_useCells;;
61  std::vector<const CaloCell*> vSubjetCells = data->subjetCells;
62  if (vSubjetCells.empty()) {
63  ATH_MSG_DEBUG("No cell information available.");
64  useCells = false;
65  }
66 
67  // write subjets
68  for (unsigned int i = 0; i < vSubjets.size(); i++) {
69  const fastjet::PseudoJet& subjet = vSubjets.at(i);
70  pDiTau->setSubjetPtEtaPhiE(i, subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.e());
71  ATH_MSG_DEBUG("subjet " << i << " pt: " << subjet.pt() << " eta: " << subjet.eta() << " phi: " << subjet.phi_std() << " e: " << subjet.e());
72  }
73 
74  // write f_core
75  if (!useCells) {
76  ATH_MSG_DEBUG("no cells are used for ID variable calculation. Continue.");
77  return StatusCode::SUCCESS;
78  }
79 
80  float f_core;
81  for (unsigned int i = 0; i < vSubjets.size(); i++) {
82  const fastjet::PseudoJet& subjet = vSubjets.at(i);
83  float ptAll = 0.;
84  float ptCore = 0.;
85 
86  TLorentzVector temp_sub_p4;
87  temp_sub_p4.SetPtEtaPhiM(subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.m());
88 
89  for (const auto& cc : vSubjetCells) {
90 
91  TLorentzVector temp_cc_p4;
92  temp_cc_p4.SetPtEtaPhiM(cc->pt(), cc->eta(), cc->phi(), cc->m());
93 
94  if (temp_cc_p4.DeltaR(temp_sub_p4) < data->Rsubjet) {
95  ptAll += cc->pt();
96  }
97 
98  if (temp_cc_p4.DeltaR(temp_sub_p4) < data->Rcore) {
99  ptCore += cc->pt();
100  }
101  }
102 
103  if (ptAll != 0.)
104  f_core = ptCore/ptAll;
105  else
106  f_core = -999.;
107 
108  ATH_MSG_DEBUG("subjet "<< i << ": f_core=" << f_core);
109  pDiTau->setfCore(i, f_core);
110  }
111 
112  return StatusCode::SUCCESS;
113 }
data
char data[hepevt_bytes_allocation_ATLAS]
Definition: HepEvt.cxx:11
FlavorTagDiscriminants::hbb_key::subjet
const std::string subjet
Definition: HbbConstants.h:18
DiTauToolBase.h
IDVarCalculator::~IDVarCalculator
virtual ~IDVarCalculator()
Destructor.
IDVarCalculator::m_useCells
bool m_useCells
Definition: IDVarCalculator.h:35
IDVarCalculator::initialize
virtual StatusCode initialize() override
Tool initializer.
Definition: IDvarCalculator.cxx:25
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
DiTauCandidateData.h
IDVarCalculator.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
lumiFormat.i
int i
Definition: lumiFormat.py:92
IDVarCalculator::execute
virtual StatusCode execute(DiTauCandidateData *data, const EventContext &ctx) const override
Execute - called for each Ditau candidate.
Definition: IDvarCalculator.cxx:31
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
test_pyathena.parent
parent
Definition: test_pyathena.py:15
xAOD::DiTauJet_v1::setfCore
void setfCore(unsigned int numSubjet, float fCore)
Definition: DiTauJet_v1.cxx:178
IDVarCalculator::IDVarCalculator
IDVarCalculator(const std::string &type, const std::string &name, const IInterface *parent)
Constructor.
Definition: IDvarCalculator.cxx:11
xAOD::DiTauJet_v1::setSubjetPtEtaPhiE
void setSubjetPtEtaPhiE(unsigned int numSubjet, float pt, float eta, float phi, float e)
Definition: DiTauJet_v1.cxx:139
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
DiTauToolBase
The base class for all tau tools.
Definition: DiTauToolBase.h:20
xAOD::Jet_v1
Class describing a jet.
Definition: Jet_v1.h:57
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
xAOD::DiTauJet_v1
Definition: DiTauJet_v1.h:31
DiTauCandidateData
Definition: DiTauCandidateData.h:15
python.handimod.cc
int cc
Definition: handimod.py:523