14 #include "GaudiKernel/ITHistSvc.h"
19 m_treeName(
"PositionMomentumWriter"),
20 m_treeFolder(
"/val/"),
21 m_treeDescription(
"Position Momentum Writer"),
44 declareInterface<Trk::IPositionMomentumWriter>(
this);
46 declareProperty(
"TreeName", m_treeName);
47 declareProperty(
"TreeFolder", m_treeFolder);
48 declareProperty(
"TreeDescription", m_treeDescription);
58 m_tree =
new TTree(m_treeName.c_str(), m_treeDescription.c_str());
61 m_tree->Branch(
"StartEta", &m_pEta);
62 m_tree->Branch(
"StartPhi", &m_pPhi);
63 m_tree->Branch(
"StartEnergy", &m_pE);
64 m_tree->Branch(
"EndEta", &m_eEta);
65 m_tree->Branch(
"EndPhi", &m_ePhi);
66 m_tree->Branch(
"EndEnergy", &m_eE);
67 m_tree->Branch(
"Pdg", &m_pPdg);
68 m_tree->Branch(
"Mass", &m_pM);
70 m_pPositionX =
new std::vector<float>;
71 m_pPositionY =
new std::vector<float>;
72 m_pPositionZ =
new std::vector<float>;
73 m_pPositionR =
new std::vector<float>;
74 m_pMomentumX =
new std::vector<float>;
75 m_pMomentumY =
new std::vector<float>;
76 m_pMomentumZ =
new std::vector<float>;
77 m_pMomentumMag =
new std::vector<float>;
78 m_pMomentumEta =
new std::vector<float>;
79 m_pMomentumPhi =
new std::vector<float>;
81 m_tree->Branch(
"PositionX", m_pPositionX);
82 m_tree->Branch(
"PositionY", m_pPositionY);
83 m_tree->Branch(
"PositionZ", m_pPositionZ);
84 m_tree->Branch(
"PositionR", m_pPositionR);
85 m_tree->Branch(
"MomentumX", m_pMomentumX);
86 m_tree->Branch(
"MomentumY", m_pMomentumY);
87 m_tree->Branch(
"MomentumZ", m_pMomentumZ);
88 m_tree->Branch(
"MomentumMag", m_pMomentumMag);
89 m_tree->Branch(
"MomentumEta", m_pMomentumEta);
90 m_tree->Branch(
"MomentumPhi", m_pMomentumPhi);
93 SmartIF<ITHistSvc> tHistSvc{service(
"THistSvc")};
95 ATH_MSG_ERROR(
"initialize() Could not find Hist Service -> Switching Tree output off !" );
96 delete m_pPositionX; m_pPositionX =
nullptr;
97 delete m_pPositionY; m_pPositionY =
nullptr;
98 delete m_pPositionZ; m_pPositionZ =
nullptr;
99 delete m_pPositionR; m_pPositionR =
nullptr;
100 delete m_pMomentumX; m_pMomentumX =
nullptr;
101 delete m_pMomentumY; m_pMomentumY =
nullptr;
102 delete m_pMomentumZ; m_pMomentumZ =
nullptr;
103 delete m_pMomentumMag; m_pMomentumMag =
nullptr;
104 delete m_pMomentumEta; m_pMomentumEta =
nullptr;
105 delete m_pMomentumPhi; m_pMomentumPhi =
nullptr;
106 delete m_tree; m_tree =
nullptr;
108 if (tHistSvc && ((tHistSvc->regTree(m_treeFolder+m_treeName, m_tree)).isFailure()) ) {
109 ATH_MSG_ERROR(
"initialize() Could not register the validation Tree -> Switching Tree output off !" );
110 delete m_tree; m_tree =
nullptr;
111 delete m_pPositionX; m_pPositionX =
nullptr;
112 delete m_pPositionY; m_pPositionY =
nullptr;
113 delete m_pPositionZ; m_pPositionZ =
nullptr;
114 delete m_pPositionR; m_pPositionR =
nullptr;
115 delete m_pMomentumX; m_pMomentumX =
nullptr;
116 delete m_pMomentumY; m_pMomentumY =
nullptr;
117 delete m_pMomentumZ; m_pMomentumZ =
nullptr;
118 delete m_pMomentumMag; m_pMomentumMag =
nullptr;
119 delete m_pMomentumEta; m_pMomentumEta =
nullptr;
120 delete m_pMomentumPhi; m_pMomentumPhi =
nullptr;
123 return StatusCode::SUCCESS;
130 delete m_pPositionX; m_pPositionX =
nullptr;
131 delete m_pPositionY; m_pPositionY =
nullptr;
132 delete m_pPositionZ; m_pPositionZ =
nullptr;
133 delete m_pPositionR; m_pPositionR =
nullptr;
134 delete m_pMomentumX; m_pMomentumX =
nullptr;
135 delete m_pMomentumY; m_pMomentumY =
nullptr;
136 delete m_pMomentumZ; m_pMomentumZ =
nullptr;
137 delete m_pMomentumMag; m_pMomentumMag =
nullptr;
138 delete m_pMomentumEta; m_pMomentumEta =
nullptr;
139 delete m_pMomentumPhi; m_pMomentumPhi =
nullptr;
141 return StatusCode::SUCCESS;
154 m_pE = sqrt(
mom.mag()*
mom.mag()+
m*
m);
157 m_pPositionX->push_back(
pos.x());
158 m_pPositionY->push_back(
pos.y());
159 m_pPositionZ->push_back(
pos.z());
160 m_pPositionR->push_back(
pos.perp());
161 m_pMomentumX->push_back(
mom.x());
162 m_pMomentumY->push_back(
mom.y());
163 m_pMomentumZ->push_back(
mom.z());
164 m_pMomentumMag->push_back(
mom.mag());
165 m_pMomentumEta->push_back(
mom.eta());
166 m_pMomentumPhi->push_back(
mom.phi());
175 m_pPositionX->push_back(
pos.x());
176 m_pPositionY->push_back(
pos.y());
177 m_pPositionZ->push_back(
pos.z());
178 m_pPositionR->push_back(
pos.perp());
179 m_pMomentumX->push_back(
mom.x());
180 m_pMomentumY->push_back(
mom.y());
181 m_pMomentumZ->push_back(
mom.z());
182 m_pMomentumMag->push_back(
mom.mag());
183 m_pMomentumEta->push_back(
mom.eta());
184 m_pMomentumPhi->push_back(
mom.phi());
192 if (!m_pMomentumX->empty()){
194 size_t lIndex = size_t(m_pMomentumX->size()-1);
196 m_pMomentumY->at(lIndex),
197 m_pMomentumZ->at(lIndex));
199 m_eE = sqrt(lastMom.mag()*lastMom.mag()+m_pM*m_pM);
200 m_eEta = lastMom.eta();
201 m_ePhi = lastMom.phi();
216 m_pPositionX->clear();
217 m_pPositionY->clear();
218 m_pPositionZ->clear();
219 m_pPositionR->clear();
220 m_pMomentumX->clear();
221 m_pMomentumY->clear();
222 m_pMomentumZ->clear();
223 m_pMomentumMag->clear();
224 m_pMomentumEta->clear();
225 m_pMomentumPhi->clear();