ATLAS Offline Software
Loading...
Searching...
No Matches
PlotValNtuple.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "PlotValNtuple.h"
6#include <iostream>
7#include <math.h>
8
11 //m_rioNtupleEntry(0),
12 m_trackNtuple(trackNtuple),
13 m_rioNtuple(rioNtuple),
14 m_mode(mode) {
15 //std::cout<<"calling cstr from PlotValNtuple"<< std::endl;
16 // init the ntuples to avoid problems
17 //(*m_trackNtuple.Init();
19 if (m_rioNtuple)
20 m_rioNtuple->GetEntry(0);
21}
22
23void PlotValNtuple::setNextTrack(int& eventNumber, int& trackNumber, int& InterationNumber){
24 // in case of troubles: set numbers to current entry
25 eventNumber = int(m_trackNtuple.EventNumber);
26 trackNumber = int(m_trackNtuple.TrackID);
27 InterationNumber = int(m_trackNtuple.IterationIndex);
28
29 Long64_t nentries = m_trackNtuple.fChain->GetEntriesFast();
30 if (m_trackNtupleEntry+1 >= nentries)
31 return;
32
33 // get the entry:
34 if (m_trackNtuple.GetEntry(m_trackNtupleEntry++)==0){
36 return;
37 }
38 // clear the track objects:
39 m_barrelXY.clearTrackGraphics();
40 m_barrelXY.clearCompetingROTsGraphics();
41 m_endcapPhiZ.clearTrackGraphics();
42 m_endcapPhiZ.clearCompetingROTsGraphics();
43 // get the new track graphics
44 plotTrack();
45 // do we have a new event?
46 if (eventNumber != int(m_trackNtuple.EventNumber)){
47 // clear also the RIO graphics
48 //m_barrelXY.clearRIOGraphics();
49 plotRIOs(int(m_trackNtuple.EventNumber));
50
51 }
52 // set the numbers to the new values:
53 eventNumber = int(m_trackNtuple.EventNumber);
54 trackNumber = int(m_trackNtuple.TrackID);
55 InterationNumber = int(m_trackNtuple.IterationIndex);
56}
57
58void PlotValNtuple::setPrevTrack(int& eventNumber, int& trackNumber, int& InterationNumber){
59 // in case of troubles: set numbers to current entry
60 eventNumber = int(m_trackNtuple.EventNumber);
61 trackNumber = int(m_trackNtuple.TrackID);
62 InterationNumber = int(m_trackNtuple.IterationIndex);
63
64 if (m_trackNtupleEntry <= 0)
65 return;
66
67 // get the entry:
68 if (m_trackNtuple.GetEntry(m_trackNtupleEntry--)==0){
70 return;
71 }
72 // clear the track objects:
73 m_barrelXY.clearTrackGraphics();
74 m_barrelXY.clearCompetingROTsGraphics();
75 m_endcapPhiZ.clearTrackGraphics();
76 m_endcapPhiZ.clearCompetingROTsGraphics();
77 // get the new track graphics
78 plotTrack();
79 // do we have a new event?
80 if (eventNumber != int(m_trackNtuple.EventNumber)){
81 // clear also the RIO graphics
82 //m_barrelXY.clearRIOGraphics();
83 plotRIOs(int(m_trackNtuple.EventNumber));
84
85 }
86 // set the numbers to the new values:
87 eventNumber = int(m_trackNtuple.EventNumber);
88 trackNumber = int(m_trackNtuple.TrackID);
89 InterationNumber = int(m_trackNtuple.IterationIndex);
90}
91
92void PlotValNtuple::setNextEvent(int& eventNumber){
93 // in case of troubles: set numbers to current entry
94 eventNumber = int(m_trackNtuple.EventNumber);
95 //InterationNumber = int(m_trackNtuple.IterationIndex);
96
97 Long64_t nentries = m_trackNtuple.fChain->GetEntriesFast();
98 if (m_trackNtupleEntry+1 >= nentries)
99 return;
100
101 // get the first entry of the event:
102 if (m_trackNtuple.GetEntry(++m_trackNtupleEntry)==0){
104 return;
105 }
106 // get the eventNumber
107 eventNumber = int(m_trackNtuple.EventNumber);
108 //InterationNumber = int(m_trackNtuple.IterationIndex);
109
110 // clear the track and rio objects:
111 m_barrelXY.clearTrackGraphics();
112 m_barrelXY.clearCompetingROTsGraphics();
113 m_endcapPhiZ.clearTrackGraphics();
114 m_endcapPhiZ.clearCompetingROTsGraphics();
115 //m_barrelXY.clearRIOGraphics();
116 // get the new RIO graphics
117 plotRIOs(eventNumber);
118 // get the new track graphics
119 for (; m_trackNtupleEntry < nentries; m_trackNtupleEntry++) {
121 std::cout << "Entry " << m_trackNtupleEntry << " has eventNumber " << m_trackNtuple.EventNumber<< std::endl;
122 if (int(m_trackNtuple.EventNumber) != eventNumber) break;
123 plotTrack();
124 }
125 // set entry number to last entry of the event
128}
129
130void PlotValNtuple::setPrevEvent(int& eventNumber){
131 // in case of troubles: set numbers to current entry
132 eventNumber = int(m_trackNtuple.EventNumber);
133 //InterationNumber = int(m_trackNtuple.IterationIndex);
134
135 if (m_trackNtupleEntry <= 0)
136 return;
137
138 // get the last entry of the previous event:
139 for (; m_trackNtupleEntry >= 0; m_trackNtupleEntry--) {
141 std::cout << "Entry " << m_trackNtupleEntry << " has eventNumber " << m_trackNtuple.EventNumber<< std::endl;
142 if (int(m_trackNtuple.EventNumber) != eventNumber) break;
143 }
144 if (int(m_trackNtuple.EventNumber) == eventNumber)
145 return;
146 Long64_t lastEntryOfEvent = m_trackNtupleEntry;
147
148 // get the eventNumber
149 eventNumber = int(m_trackNtuple.EventNumber);
150 //InterationNumber = int(m_trackNtuple.IterationIndex);
151
152 // clear the track and rio objects:
153 m_barrelXY.clearTrackGraphics();
154 m_barrelXY.clearCompetingROTsGraphics();
155 m_endcapPhiZ.clearTrackGraphics();
156 m_endcapPhiZ.clearCompetingROTsGraphics();
157 //m_barrelXY.clearRIOGraphics();
158 // get the new RIO graphics
159 plotRIOs(eventNumber);
160 // get the new track graphics
163 std::cout << "Entry " << m_trackNtupleEntry << " has eventNumber " << m_trackNtuple.EventNumber<< std::endl;
164 if (int(m_trackNtuple.EventNumber) != eventNumber) break;
165 plotTrack();
166 }
167 // set entry number to last entry of the event
168 m_trackNtupleEntry = lastEntryOfEvent;
170}
171
172void PlotValNtuple::setEvent(int eventNumber, int InterationNumber){}
173void PlotValNtuple::setTrack(int eventNumber, int trackNumber, int InterationNumber){}
174
175
176// std::vector<TObject*>& PlotValNtuple::plotBarrelXY_SingleTrack(TrackDataNtupleTree &trackNtuple, Long64_t entry) {
177// // clear the vector of graphic objects
178// m_barrelXY.clear();
179// // check for number of entries
180// Long64_t nentries = trackNtuple.fChain->GetEntriesFast();
181// if (entry > nentries)
182// return m_barrelXY.getTrackGraphics();
183//
184// // get the entry:
185// if (trackNtuple.GetEntry(entry)==0)
186// return m_barrelXY.getTrackGraphics();
187//
188// plotBarrelXY_Track(trackNtuple);
189// return m_barrelXY.getTrackGraphics();
190// }
191
192
194
195
196
197 std::cout << "*** Track: Processing run " << m_trackNtuple.RunNumber
198 << ", event " << m_trackNtuple.EventNumber
199 << ", track " << m_trackNtuple.TrackID
200 << ", iteration " << m_trackNtuple.IterationIndex << std::endl;
201
202
203 // determine the range of the track
204 //GlobalPosition lowerLeft;
205 //GlobalPosition upperRight;
206 //getBarrelXY_Range(trackNtuple, lowerLeft, upperRight);
207
208 // get the display for barrel in xy projection
209 //displayBarrelXY* barrelDisplay = new displayBarrelXY(lowerLeft, upperRight);
210 //displayBarrelXY barrelDisplay;
211
212 // loop over the track states
213 std::cout << "Entry has " << m_trackNtuple.nHits << " track states "<< std::endl;
214 for( int i=1; i<m_trackNtuple.nHits; ++i) {
215 // distinguish barrel and endcap modules:
216 bool barrel = true;
217 if (fabs( (*m_trackNtuple.HitZ)[i] )>800.) {
218 // end cap!
219 barrel = false;
220 }
221
222/* if (fabs(trackNtuple.DetectorType)[i])!=3)
223 continue; */
224 // draw the track states
225 GlobalPosition trkPos((*m_trackNtuple.TrackX)[i], (*m_trackNtuple.TrackY)[i], (*m_trackNtuple.TrackZ)[i]);
226 GlobalDirection trkMom((*m_trackNtuple.TrackMomentumX)[i], (*m_trackNtuple.TrackMomentumY)[i], (*m_trackNtuple.TrackMomentumZ)[i]);
227 GlobalDirection trkDir(trkMom.Unit());
228// std::cout << " Track state with global position " << trkPos << " and direction "<< trkDir<< std::endl;
229// WL m_barrelXY.displayTrackState(trkPos, trkMom);
230 // draw the measurements
231 GlobalPosition *measPos=0;
232 //std::cout << " detector type: " << (*m_trackNtuple.DetectorType)[i] << std::endl;
233 switch ((*m_trackNtuple.DetectorType)[i]) {
234 case 1:
235 case 2:
236 // Pixel or SCT hit
237 measPos = new GlobalPosition((*m_trackNtuple.HitX)[i], (*m_trackNtuple.HitY)[i], (*m_trackNtuple.HitZ)[i]);
238 //std::cout << " silicon measurement at " << *measPos << std::endl;
239 m_barrelXY.displaySiliconMeasurement(*measPos, true);
240 m_endcapPhiZ.displaySiliconMeasurement(*measPos, true);
241 break;
242 case 3:
243 measPos = new GlobalPosition((*m_trackNtuple.HitSurfaceX)[i], (*m_trackNtuple.HitSurfaceY)[i], (*m_trackNtuple.HitSurfaceZ)[i]);
244 //std::cout << " TRT measurement at " << *measPos << " with driftradius "<< (*m_trackNtuple.HitLocal1)[i] << std::endl;
245 // if ((*m_trackNtuple.outlierFlag)[i] > 0) std::cout << " ## outlier on ntuple." << std::endl;
246 if (barrel) {
247 m_barrelXY.displayTRT_MeasurementOnTrack(*measPos,
248 (*m_trackNtuple.HitLocal1)[i],
249 trkDir,
250 ((*m_trackNtuple.outlierFlag)[i] > 0));
251 }else{
252 m_endcapPhiZ.displayTRT_MeasurementOnTrack(*measPos,
253 (*m_trackNtuple.HitLocal1)[i],
254 trkDir,
255 ((*m_trackNtuple.outlierFlag)[i] > 0), trkPos.Perp());
256 }
257 //std::cout << "Track Pos: (X, Y, Z)=(" << trkPos.x() << "," << trkPos.y() << "," << trkPos.z() << ") => (R, Phi) = (" << trkPos.Perp() << "," << trkPos.Phi() << "), driftradius: " << (*m_trackNtuple.HitLocal1)[i] << std::endl;
258 //std::cout << "straw Pos: (X, Y, Z)=(" << measPos->x() << "," << measPos->y() << "," << measPos->z() << ") => (R, Phi) = (" << measPos->Perp() << "," << measPos->Phi() << ")" << std::endl;
259 //std::cout << "Track Dir: (X, Y, Z)=(" << trkDir.x() << "," << trkDir.y() << "," << trkDir.z() << ") => (R, Phi) = (" << trkDir.Perp() << "," << trkDir.Phi() << ")" << std::endl;
260 // do we have competing ROT info?
261 //std::cout << " containes " << (*m_trackNtuple.CompROTnContainedROTs)[i] << " ROTs" << std::endl;
262 if (m_trackNtuple.CompROTnContainedROTs && (*m_trackNtuple.CompROTnContainedROTs)[i] > 0) {
263 std::vector<GlobalPosition> strawPositions;
264 std::vector<double> driftRadii;
265 std::vector<double> assgnProbs;
266 //std::cout << " containes " << (*m_trackNtuple.CompROTnContainedROTs << " ROTs "<< std::endl;
267/* for( int rotIndex=0; rotIndex<(*m_trackNtuple.CompROTnContainedROTs)[i]; ++rotIndex) {
268 GlobalPosition measPos((*m_trackNtuple.CompROTcontainedROTsHitSurfaceX)[i][rotIndex], (*m_trackNtuple.CompROTcontainedROTsHitSurfaceY)[i][rotIndex], (*m_trackNtuple.CompROTcontainedROTsHitSurfaceZ)[i][rotIndex]);
269 // std::cout << " TRT measurement at " << *measPos << " with driftradius "<< trackNtuple.HitLocal1)[i] << std::endl;
270 strawPositions.push_back(measPos);
271 driftRadii.push_back((*m_trackNtuple.CompROTcontainedROTsHitLocal1)[i][rotIndex]);
272 assgnProbs.push_back((*m_trackNtuple.CompROTcontainedROTsAssgnProbs)[i][rotIndex]);
273 }*/
274 if (barrel){
275 m_barrelXY.displayCompetingTRT_ROT( strawPositions, driftRadii, assgnProbs, trkDir);
276 }else{
277 m_endcapPhiZ.displayCompetingTRT_ROT( strawPositions, driftRadii, assgnProbs, trkDir);
278 }
279 }
280 break;
281 }
282 m_barrelXY.displayTrackState(trkPos, trkDir);
283 m_endcapPhiZ.displayTrackState(trkPos, trkDir);
284 delete measPos;
285 }
286 //barrelDisplay->draw();
287
288 //return barrelDisplay.getGraphicObjects();
289}
290
291// std::vector<TObject*>& PlotValNtuple::plotBarrelXY_Event(TrackDataNtupleTree& tree,
292// Long64_t entry,
293// Long64_t &lastEntryOfEvent) {
294// // clear the vector of graphic objects
295// m_barrelXY.clear();
296// // check for number of entries
297// Long64_t nentries = tree.fChain->GetEntriesFast();
298// if (entry > nentries)
299// return m_barrelXY.getTrackGraphics();
300//
301// // get the first entry
302// if (tree.GetEntry(entry)==0)
303// return m_barrelXY.getTrackGraphics();
304// // plot the first entry:
305// plotBarrelXY_Track(tree);
306//
307// Int_t eventNumber = tree.EventNumber;
308// Long64_t i = entry+1;
309// for (; i < nentries; i++) {
310// tree.GetEntry(i);
311// if (tree.EventNumber != eventNumber) break;
312// plotBarrelXY_Track(tree);
313// }
314// // jump back to first entry of the event
315// tree.GetEntry(entry);
316// lastEntryOfEvent = i-1;
317//
318// return m_barrelXY.getTrackGraphics();
319// }
320
321void PlotValNtuple::plotRIOs(int eventNumber){
322 if (!m_rioNtuple) return;
323
324 // clear the vector of graphic objects
325 m_barrelXY.clearRIOGraphics();
326 m_endcapPhiZ.clearRIOGraphics();
327 // check for number of entries
328 Long64_t nentries = m_rioNtuple->fChain->GetEntriesFast();
329
330 // get the entry with the eventNumber
331
332 for (int i=0; i < nentries; i++) {
333 m_rioNtuple->GetEntry(i);
334 if (int(m_rioNtuple->TRT_EventNumber) != eventNumber) continue;
335 std::cout << "Entry has " << m_rioNtuple->TRT_nRIOs << " RIOs "<< std::endl;
336 for( int rioIndex=0; rioIndex<m_rioNtuple->TRT_nRIOs; ++rioIndex) {
337 // cut for barrel modules:
338 if (fabs((*m_rioNtuple->TRT_SurfaceZ)[rioIndex])>800.) {
339 // endcap:
340 GlobalPosition strawPos((*m_rioNtuple->TRT_SurfaceX)[rioIndex], (*m_rioNtuple->TRT_SurfaceY)[rioIndex], (*m_rioNtuple->TRT_SurfaceZ)[rioIndex]);
341 m_endcapPhiZ.displayTRT_Measurement( strawPos, (*m_rioNtuple->TRT_DriftRadius)[rioIndex], false, false);
342 }else {
343 // barrel:
344 //std::cout << "Z: " << tree.TRT_SurfaceZ[rioIndex]<< std::endl;
345 GlobalPosition strawPos((*m_rioNtuple->TRT_SurfaceX)[rioIndex], (*m_rioNtuple->TRT_SurfaceY)[rioIndex], (*m_rioNtuple->TRT_SurfaceZ)[rioIndex]);
346 m_barrelXY.displayTRT_Measurement( strawPos, (*m_rioNtuple->TRT_DriftRadius)[rioIndex], false, false);
347 }
348 }
349
350 }
351 //std::cout << "return RIO graphic objects"<< std::endl;
352 //return m_barrelXY_RIOs.getRIOGraphics();
353}
354
355// std::vector<TObject*>& PlotValNtuple::plotBarrelXY_SingleTrackCompROTs(TrackDataNtupleTree&, Long64_t entry){
356//
357// }
358//
359// std::vector<TObject*>& PlotValNtuple::plotBarrelXY_EventCompROTs(TrackDataNtupleTree&, Long64_t entry, Long64_t &lastEntryOfEvent){
360//
361// }
362
363// void PlotValNtuple::plotBarrelXY_Track(TrackDataNtupleTree &trackNtuple) {
364//
365//
366//
367// std::cout << "*** BarrelXY_CompetingROTs: Processing run " << trackNtuple.RunNumber
368// << ", event " << trackNtuple.EventNumber
369// << ", track " << trackNtuple.TrackID
370// << ", iteration " << trackNtuple.IterationIndex << std::endl;
371//
372//
373// // loop over the track states
374// std::cout << "Entry has " << trackNtuple.nHits << " track states "<< std::endl;
375// for( int i=1; i<trackNtuple.nHits; ++i) {
376// // cut for barrel modules:
377// if (fabs(trackNtuple.TrackZ)[i])>800.)
378// continue;
379// /* if (fabs(trackNtuple.DetectorType)[i])!=3)
380// continue; */
381// // draw the track states
382// GlobalPosition trkPos(trackNtuple.TrackX)[i], trackNtuple.TrackY)[i], trackNtuple.TrackZ)[i]);
383// GlobalDirection trkMom(trackNtuple.TrackMomentumX)[i], trackNtuple.TrackMomentumY)[i], trackNtuple.TrackMomentumZ)[i]);
384// // GlobalDirection trkDir(trkMom.Unit());
385// // std::cout << " Track state with global position " << trkPos << " and direction "<< trkDir<< std::endl;
386// m_barrelXY.displayTrackState(trkPos, trkMom);
387// // draw the measurements
388// GlobalPosition *measPos=0;
389// // std::cout << " detector type: " << trackNtuple.DetectorType)[i] << std::endl;
390// switch (trackNtuple.DetectorType)[i]) {
391// case 1:
392// case 2:
393// measPos = new GlobalPosition(trackNtuple.HitX)[i], trackNtuple.HitY)[i], trackNtuple.HitZ)[i]);
394// // std::cout << " silicon measurement at " << *measPos << std::endl;
395// m_barrelXY.displaySiliconMeasurement(*measPos);
396// break;
397// case 3:
398// measPos = new GlobalPosition(trackNtuple.HitSurfaceX)[i], trackNtuple.HitSurfaceY)[i], trackNtuple.HitSurfaceZ)[i]);
399// // std::cout << " TRT measurement at " << *measPos << " with driftradius "<< trackNtuple.HitLocal1)[i] << std::endl;
400// m_barrelXY.displayTRT_MeasurementOnTrack(*measPos,
401// trackNtuple.HitLocal1)[i],
402// trkMom);
403// break;
404// }
405// delete measPos;
406// }
407// //barrelDisplay->draw();
408//
409// //return barrelDisplay.getGraphicObjects();
410// }
411
412
413// void PlotValNtuple::getBarrelXY_Range(TrackDataNtupleTree& ntupleTree, GlobalPosition& lowerLeft, GlobalPosition& upperRight) {
414// // void display_track::calculateRange( const std::vector<GlobalPosition>& tp, GlobalPosition& ll,
415// // GlobalPosition& rh){
416// //
417// // loop over hits find min and max
418// double minx = 2000.;
419// double miny = 2000.;
420// double maxx = -2000.;
421// double maxy = -2000.;
422//
423// for( int i=0; i<ntupleTree.nHits; ++i) {
424// // cut for barrel modules:
425// if (fabs(ntupleTree.TrackZ)[i])>800.)
426// continue;
427// if (ntupleTree.DetectorType)[i] != 3)
428// continue;
429// if( ntupleTree.TrackX)[i] < minx )
430// minx = ntupleTree.TrackX)[i];
431// if( ntupleTree.TrackY)[i] < miny )
432// miny = ntupleTree.TrackY)[i];
433// if( ntupleTree.TrackX)[i] > maxx )
434// maxx = ntupleTree.TrackX)[i];
435// if( ntupleTree.TrackY)[i] > maxy )
436// maxy = ntupleTree.TrackY)[i];
437// }
438//
439// double offset = 10.;
440// // lower left
441// lowerLeft.setX(minx-offset);
442// lowerLeft.setY(miny-offset);
443//
444// // upper right
445// upperRight.setX(maxx+offset);
446// upperRight.setY(maxy+offset);
447//
448// // std::cout << " calculated range " << lowerLeft << " " << upperRight << std::endl;
449//
450// }
DisplayMode
void setTrack(int eventNumber, int trackNumber, int InterationNumber)
void setNextTrack(int &eventNumber, int &trackNumber, int &InterationNumber)
void plotRIOs(int eventNumber)
void setPrevTrack(int &eventNumber, int &trackNumber, int &InterationNumber)
displayEndcapPhiZ m_endcapPhiZ
TrackDataNtupleTree & m_trackNtuple
DisplayMode m_mode
void plotTrack()
plot one track
void setNextEvent(int &eventNumber)
PlotValNtuple(TrackDataNtupleTree &trackNtuple, TrkValidationNtupleRIOs *rioNtuple, DisplayMode mode=BarrelXY)
Long64_t m_trackNtupleEntry
get the range of the track
displayBarrelXY m_barrelXY
TrkValidationNtupleRIOs * m_rioNtuple
void setEvent(int eventNumber, int InterationNumber)
void setPrevEvent(int &eventNumber)
this class inherites from the automatically created TrkValidationNtupleOutputTrack to have independen...
TVector3 GlobalPosition
TVector3 GlobalDirection