12 #include "GaudiKernel/ITHistSvc.h"
13 #include "GaudiKernel/ISvcLocator.h"
24 #include <TGraphAsymmErrors.h>
35 m_numberOfTreeEntries(0),
38 m_genParticleLinkIndex(
nullptr),
39 m_mc_trackToJetAngle(
nullptr),
40 m_mc_jetMultiplicity{},
46 declareInterface<IJetTruthNtupleTool>(
this);
49 declareProperty(
"NtupleFileName", m_ntupleFileName =
"TRKVAL/Validation",
"Ntuple file handle");
50 declareProperty(
"NtupleTreeName", m_ntupleTreeName =
"TruthJets",
"Name of the ntuple tree");
71 m_nt =
new TTree(TString(m_ntupleTreeName),
"Track Validation JetTruth");
73 std::string fullNtupleName =
"/"+m_ntupleFileName+
"/"+m_ntupleTreeName;
74 sc = tHistSvc->regTree(fullNtupleName, m_nt);
76 ATH_MSG_ERROR (
"Unable to register TTree : " << m_ntupleTreeName );
83 m_nt->Branch(
"RunNumber", &m_runNumber );
84 m_nt->Branch(
"EventNumber", &m_eventNumber );
86 m_nt->Branch(
"truth_jetMultiplicity", &m_mc_jetMultiplicity );
87 m_nt->Branch(
"truth_jetSphericity", &m_mc_jetSphericity );
88 m_nt->Branch(
"truth_jetThrust", &m_mc_jetThrust );
89 m_nt->Branch(
"truth_jetEnergy", &m_mc_jetEnergy );
90 m_nt->Branch(
"truth_jetMomentum", &m_mc_jetMomentum );
92 m_genParticleLinkIndex =
new std::vector<unsigned int>();
93 m_nt->Branch(
"GenParticleLinkIndex", &m_genParticleLinkIndex);
94 m_mc_trackToJetAngle =
new std::vector<float>();
95 m_nt->Branch(
"truth_trackToJetAngle", &m_mc_trackToJetAngle);
99 return StatusCode::SUCCESS;
110 delete m_genParticleLinkIndex;
111 delete m_mc_trackToJetAngle;
113 return StatusCode::SUCCESS;
120 const std::vector< Trk::GenParticleJet >&
jets,
121 const int& nTruthRecordsAtCurrentEvent
129 if (!
evt.isValid()) {
131 return StatusCode::FAILURE;
133 m_runNumber=
evt->runNumber();
134 m_eventNumber=
evt->eventNumber();
136 for (std::vector<Trk::GenParticleJet>::const_iterator itJet =
jets.begin();
137 itJet <
jets.end(); ++itJet ) {
139 m_mc_jetMultiplicity = itJet->getNumParticles();
140 m_mc_jetMomentum = itJet->getMomentum().mag();
141 m_mc_jetEnergy = itJet->getEnergy();
142 m_mc_jetSphericity = itJet->getSphericity();
143 m_mc_jetThrust = itJet->getThrust();
146 m_mc_trackToJetAngle->reserve(
particles.size());
147 m_genParticleLinkIndex->reserve(
particles.size());
148 std::vector<int>
indices = itJet->getIndicesInEvent();
150 m_genParticleLinkIndex->clear();
151 m_mc_trackToJetAngle->clear();
153 itPrt <
particles.end(); ++itPrt, ++itIdx) {
155 HepGeom::Vector3D<double> tempMomentum((*itPrt)->momentum().px(),
156 (*itPrt)->momentum().py(),
157 (*itPrt)->momentum().pz());
159 m_mc_trackToJetAngle->push_back((
float)tempMomentum.angle(itJet->getMomentum()));
160 m_genParticleLinkIndex->push_back(nTruthRecordsAtCurrentEvent+1+(
unsigned int)(*itIdx));
163 m_numberOfTreeEntries++;
165 return StatusCode::SUCCESS;
170 return m_numberOfTreeEntries;