ATLAS Offline Software
ClusterFinder.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
9 #include "CaloEvent/CaloClusterContainer.h"
10 #include "fastjet/PseudoJet.hh"
11 
13  const std::string& name,
14  const IInterface * parent) :
16  m_ClusterContainerName("CaloCalTopoClusters"),
17  m_Rsubjet(0.2)
18 {
19  declareInterface<DiTauToolBase > (this);
20  declareProperty("ClusterContainer", m_ClusterContainerName);
21  declareProperty("Rsubjet", m_Rsubjet);
22 }
23 
24 
26 
27 
29 
30  return StatusCode::SUCCESS;
31 }
32 
33 
35  const EventContext& /*ctx*/) const {
36 
37  ATH_MSG_DEBUG("execute ClusterFinder...");
38 
39  // get ditau and its seed jet
40 
41  xAOD::DiTauJet* pDiTau = data->xAODDiTau;
42  if (!pDiTau) {
43  ATH_MSG_ERROR("no di-tau candidate given");
44  return StatusCode::FAILURE;
45  }
46 
47  const xAOD::Jet* pSeed = data->seed;
48  if (!pSeed) {
49  ATH_MSG_WARNING("No jet seed given.");
50  return StatusCode::FAILURE;
51  }
52 
53  std::vector<fastjet::PseudoJet> vSubjets = data->subjets;
54  if (vSubjets.empty()) {
55  ATH_MSG_WARNING("No subjets given. Continue without cluster information.");
56  return StatusCode::SUCCESS;
57  }
58 
59  std::vector<const xAOD::CaloCluster*> subjetClusters;
60  // loop over seed jet constituents
61  for (const auto *const seedConst: pSeed->getConstituents()) {
62 
63  // cast jet constituent to cluster object
64  const xAOD::CaloCluster* cluster = dynamic_cast<const xAOD::CaloCluster*>( seedConst->rawConstituent() );
65  if(cluster == NULL) continue;
66 
67  for (const auto& subjet : vSubjets) {
68  TLorentzVector temp_sub_p4;
69  temp_sub_p4.SetPtEtaPhiM(subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.m());
70  if (cluster->p4().DeltaR(temp_sub_p4) < m_Rsubjet) {
71  subjetClusters.push_back(cluster);
72  }
73  }
74  }
75 
76  ATH_MSG_DEBUG("subjetCluster.size()=" << subjetClusters.size());
77 
78  std::vector<float> vec_f_core(vSubjets.size(), 0);
79  for (unsigned int i = 0; i < vSubjets.size(); i++) {
80  const fastjet::PseudoJet& subjet = vSubjets.at(i);
81  float ptAll = 0.;
82  float ptCore = 0.;
83  float f_core = 0.;
84 
85  TLorentzVector temp_sub_p4;
86  temp_sub_p4.SetPtEtaPhiM(subjet.pt(), subjet.eta(), subjet.phi_std(), subjet.m());
87 
88  for (const auto& cc : subjetClusters) {
89 
90  if (cc->p4().DeltaR(temp_sub_p4) < data->Rsubjet) {
91  ptAll += cc->pt();
92  }
93 
94  if (cc->p4().DeltaR(temp_sub_p4) < data->Rcore) {
95  ptCore += cc->pt();
96  }
97  }
98 
99  if (ptAll != 0.)
100  f_core = ptCore/ptAll;
101  else
102  f_core = -999.;
103 
104  ATH_MSG_DEBUG("subjet "<< i << ": f_cluster_core=" << f_core);
105  vec_f_core.at(i) = f_core;
106  }
107 
108  const static SG::AuxElement::Decorator<std::vector<float>> mDecor("f_cluster_core");
109  mDecor(*pDiTau) = std::move(vec_f_core);
110 
111  return StatusCode::SUCCESS;
112 }
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
ClusterFinder::ClusterFinder
ClusterFinder(const std::string &type, const std::string &name, const IInterface *parent)
Definition: ClusterFinder.cxx:12
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
DiTauCandidateData.h
xAOD::Jet_v1::getConstituents
JetConstituentVector getConstituents() const
Return a vector of consituents. The object behaves like vector<const IParticle*>. See JetConstituentV...
Definition: Jet_v1.cxx:147
ClusterFinder::m_ClusterContainerName
std::string m_ClusterContainerName
Definition: ClusterFinder.h:28
xAOD::CaloCluster_v1
Description of a calorimeter cluster.
Definition: CaloCluster_v1.h:59
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ClusterFinder::m_Rsubjet
float m_Rsubjet
Definition: ClusterFinder.h:29
SG::Decorator
Helper class to provide type-safe access to aux data.
Definition: Decorator.h:58
lumiFormat.i
int i
Definition: lumiFormat.py:92
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
ClusterFinder.h
ClusterFinder::initialize
virtual StatusCode initialize() override
Tool initializer.
Definition: ClusterFinder.cxx:28
xAOD::CaloCluster_v1::p4
virtual FourMom_t p4() const
The full 4-momentum of the particle.
Definition: CaloCluster_v1.cxx:465
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
ClusterFinder::execute
virtual StatusCode execute(DiTauCandidateData *data, const EventContext &ctx) const override
Execute - called for each Ditau candidate.
Definition: ClusterFinder.cxx:34
DiTauCandidateData
Definition: DiTauCandidateData.h:15
ClusterFinder::~ClusterFinder
virtual ~ClusterFinder()
python.handimod.cc
int cc
Definition: handimod.py:523