ATLAS Offline Software
InDetAlignFillTrack.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3  */
4 
6 // ================================================
7 // InDetAlignFillTrack
8 // ================================================
9 //
10 // InDetAlignFillTrack.cxx
11 // Source file for InDetAlignFillTrack
12 //
13 // Carlos Escobar, started 27/12/2007
14 //
15 // AlgTool to fill track information (including truth) in a ntuple
16 
17 
18 #include "GaudiKernel/NTuple.h"
19 #include "GaudiKernel/INTupleSvc.h"
20 #include "GaudiKernel/SmartDataPtr.h"
21 
22 #include "GaudiKernel/IPartPropSvc.h"
23 
25 
26 #include "TrkTrack/Track.h"
27 
30 
32 
35 
36 
42 #include "CLHEP/GenericFunctions/CumulativeChiSquare.hh"
43 #include "CLHEP/Geometry/Point3D.h"
44 #include "CLHEP/Units/SystemOfUnits.h"
45 
47 #include "AtlasHepMC/GenParticle.h"
48 #include "AtlasHepMC/GenVertex.h"
49 
50 #include <string>
51 
52 static const int maxTracks = 10000; // maximal number of tracks per event
53 
54 //=====================================================================
55 // InDetAlignFillTrack()
56 //=====================================================================
58  const std::string& name,
59  const IInterface* parent)
61  m_ntupleSvc(nullptr),
62  m_totaltrks(0),
63  m_totalhits(0),
64  m_totalPixhits(0),
65  m_totalSCThits(0),
66  m_totalTRThits(0),
67  m_totalUptrks(0),
68  m_totalUphits(0),
69  m_totalUpPixhits(0),
70  m_totalUpSCThits(0),
71  m_totalUpTRThits(0),
72  m_totalLowtrks(0),
73  m_totalLowhits(0),
74  m_totalLowPixhits(0),
75  m_totalLowSCThits(0),
76  m_totalLowTRThits(0),
77  m_events(0),
78  m_truthToTrack("Trk::TruthToTrack", this),
79  m_extrapolator("Trk::Extrapolator/CosmicsExtrapolator", this),
80  m_particleCreator("Trk::TrackParticleCreatorTool/TrackParticleCreatorTool", this) {
81  declareInterface<IInDetAlignFillTrack>(this);
82  declareProperty("InputTrkCol", m_inputCol = "Tracks");
83  declareProperty("InputUpTrkCol", m_inputUpCol = "");
84  declareProperty("InputLowTrkCol", m_inputLowCol = "");
85 
86  // cosmic segments matching
87  declareProperty("doMatching", m_doMatching = true);
88  declareProperty("dRCut", m_matchedRcut = 100.);
89  declareProperty("minimumdR", m_mindR = 10000.);
90 
91  // Truth information
92  declareProperty("doTruth", m_doTruth = false);
93  declareProperty("TruthTrkCol", m_TruthTrkCol = "TrackTruthCollection");
94 
95  // Ntuple
96  declareProperty("NtupleName", m_ntupleName = "/NTUPLES/GLOBFILE");
97 
98  // Tools
99  declareProperty("TruthToTrackTool", m_truthToTrack,
100  "tool to produce perigee track parameters from generated parameters");
101  declareProperty("ExtrapolationTool", m_extrapolator,
102  "tool to extrapolate tracks");
103  declareProperty("TrackParticleCreatorTool", m_particleCreator,
104  "tool to build TrackParticle");
105 }
106 
107 //=====================================================================
108 // ~FillTrack()
109 //=====================================================================
111 
112 
113 //=====================================================================
114 // initialize()
115 //=====================================================================
117  ATH_MSG_DEBUG("Initialize() of FillTrack");
118  // retrieve the NTuple Service
119  ATH_CHECK(service("NTupleSvc", m_ntupleSvc));
120  // get TrackParticleCreatorTool
121  ATH_CHECK(m_particleCreator.retrieve());
122  // if Truth...
123  if (m_doTruth) {
124  // Get TruthToTrack
125  ATH_CHECK(m_truthToTrack.retrieve());
126  // Get Extrapolator Tool
127  ATH_CHECK(m_extrapolator.retrieve());
128  // retrieve the PartPropSvc service (need for Cosmics)
129  IPartPropSvc* p_PartPropSvc;
130  static const bool CREATEIFNOTTHERE(true);
131  ATH_CHECK(svcLoc()->service("PartPropSvc", p_PartPropSvc, CREATEIFNOTTHERE));
132  }
133  // Book Ntuple
134  bookNtuple();
135  if (m_inputUpCol != "") bookUpNtuple();
136  if (m_inputLowCol != "") bookLowNtuple();
138  ATH_MSG_DEBUG("Initialize() of FillTrack successful");
139  return StatusCode::SUCCESS;
140 }
141 
142 //=====================================================================
143 // finalize()
144 //=====================================================================
146  if (msgLvl(MSG::DEBUG)) {
147  msg(MSG::DEBUG) << "Finalize() of FillTrack" << endmsg;
148 
149  msg(MSG::DEBUG) << "________________________________________________________" << endmsg;
150  msg(MSG::DEBUG) << endmsg;
151  msg(MSG::DEBUG) << " InDetAlignFillTrack Summary: " << endmsg;
152  msg(MSG::DEBUG) << " - " << m_events << " events" << endmsg;
153  msg(MSG::DEBUG) << " - " << m_totaltrks << " tracks" << endmsg;
154  msg(MSG::DEBUG) << " - " << m_totalhits << " hits" << endmsg;
155  msg(MSG::DEBUG) << " - " << m_totalPixhits << " Pixel hits" << endmsg;
156  msg(MSG::DEBUG) << " - " << m_totalSCThits << " SCT hits" << endmsg;
157  msg(MSG::DEBUG) << " - " << m_totalTRThits << " TRT hits" << endmsg;
158  msg(MSG::DEBUG) << "________________________________________________________" << endmsg;
159 
160  if (m_inputUpCol != "") {
161  msg(MSG::DEBUG) << " Up Track Summary: " << endmsg;
162  msg(MSG::DEBUG) << " - " << m_totalUptrks << " tracks" << endmsg;
163  msg(MSG::DEBUG) << " - " << m_totalUphits << " hits" << endmsg;
164  msg(MSG::DEBUG) << " - " << m_totalUpPixhits << " Pixel hits" << endmsg;
165  msg(MSG::DEBUG) << " - " << m_totalUpSCThits << " SCT hits" << endmsg;
166  msg(MSG::DEBUG) << " - " << m_totalUpTRThits << " TRT hits" << endmsg;
167  msg(MSG::DEBUG) << "________________________________________________________" << endmsg;
168  }
169 
170  if (m_inputLowCol != "") {
171  msg(MSG::DEBUG) << " Low Track Summary: " << endmsg;
172  msg(MSG::DEBUG) << " - " << m_totalLowtrks << " tracks" << endmsg;
173  msg(MSG::DEBUG) << " - " << m_totalLowhits << " hits" << endmsg;
174  msg(MSG::DEBUG) << " - " << m_totalLowPixhits << " Pixel hits" << endmsg;
175  msg(MSG::DEBUG) << " - " << m_totalLowSCThits << " SCT hits" << endmsg;
176  msg(MSG::DEBUG) << " - " << m_totalLowTRThits << " TRT hits" << endmsg;
177  msg(MSG::DEBUG) << "________________________________________________________" << endmsg;
178  }
179 
180  msg(MSG::DEBUG) << endmsg;
181  }
182 
183  return StatusCode::SUCCESS;
184 }
185 
186 //=====================================================================
187 // FillTrack()
188 //=====================================================================
190  ATH_MSG_DEBUG("In FillTrack()");
191  ATH_MSG_DEBUG(" event " << m_events);
192  StatusCode sc;
193 
194  const EventContext& ctx = Gaudi::Hive::currentContext();
195  const TrackCollection* tracks;// = new TrackCollection;
196  const TrackCollection* Uptracks;// = new TrackCollection;
197  const TrackCollection* Lowtracks;// = new TrackCollection;
198 
199  // retrieve all tracks from TDS
200  ATH_CHECK(evtStore()->retrieve(tracks, m_inputCol));
201 
202  // retrieve all Up tracks from TDS
203  if (m_inputUpCol != "") {
204  ATH_CHECK(evtStore()->retrieve(Uptracks, m_inputUpCol));
205  }
206 
207  // retrieve all Low tracks from TDS
208  if (m_inputLowCol != "") {
209  ATH_CHECK(evtStore()->retrieve(Lowtracks, m_inputLowCol));
210  }
211 
212  m_nt_ntracks = tracks->size();
213  ATH_MSG_DEBUG("Retrieved Track Collection size: " << tracks->size());
214 
215  if (m_inputUpCol != "") {
216  m_nt_nUptracks = Uptracks->size();
217  ATH_MSG_DEBUG("Retrieved Up Track Collection size: " << Uptracks->size());
218  }
219 
220  if (m_inputLowCol != "") {
221  m_nt_nLowtracks = Lowtracks->size();
222  ATH_MSG_DEBUG("Retrieved Low Track Collection size: " << Lowtracks->size());
223  }
224 
225  ATH_MSG_DEBUG("Printing input track collection");
226  m_totaltrks += dumpTrackCol(tracks);
227  if (m_inputUpCol != "") m_totalUptrks += dumpTrackCol(Uptracks, "Up");
228  if (m_inputLowCol != "") m_totalLowtrks += dumpTrackCol(Lowtracks, "Low");
229 
230  // matching
231  if (m_doMatching && m_inputUpCol != "" && m_inputLowCol != "")
232  if (StatusCode::SUCCESS != dumpMatching(Uptracks, Lowtracks)) {
233  ATH_MSG_ERROR("dumpMatching failure");
234  return StatusCode::FAILURE;
235  }
236 
237 
238  // if truth is available...
239  if (m_doTruth) {
240  int nTracks = 0;
241 
242  const TrackTruthCollection* truthCol = nullptr;
243 
244  // retrieve all track truth collection from TDS
245  if (StatusCode::SUCCESS != evtStore()->retrieve(truthCol, m_TruthTrkCol)) {
246  ATH_MSG_ERROR("Cannot find " << m_inputCol);
247  return StatusCode::FAILURE;
248  } else {
249  if (!truthCol) {
250  ATH_MSG_ERROR( "Failure retrieving " << m_TruthTrkCol );
251  return StatusCode::FAILURE;
252  }
253 
254  if (msgLvl(MSG::DEBUG)) {
255  msg(MSG::DEBUG) << "Collection with name " << m_TruthTrkCol << " found in StoreGate" << endmsg;
256  msg(MSG::DEBUG) << "Retrieved " << truthCol->size() << " truth tracks from StoreGate" << endmsg;
257  }
258 
259  m_nt_nmctracks = truthCol->size();
260 
261  TrackCollection::const_iterator trackItr = tracks->begin();
262  TrackCollection::const_iterator trackItrE = tracks->end();
263 
264  //looping over tracks
265  for (; trackItr != trackItrE && nTracks < maxTracks; ++trackItr) {
266  const Trk::Track* track = *trackItr;
267  if (track == nullptr) {
268  ATH_MSG_WARNING("No associated Trk::Track object found for track "
269  << nTracks);
270  continue;
271  }
272  //Coverity fix: 14309: useless check. Commented out
273  //if (truthCol) {
274 
275  // the key for the truth std::map is an ElementLink<TrackCollection> object
276  // comprises a pointer to the track and reconstructed track collection
278  trackLink.setElement(const_cast<Trk::Track*>(track));
279  trackLink.setStorableObject(*tracks);
280  const ElementLink<TrackCollection> trackLink2 = trackLink;
281 
282  // trying to find the std::map entry for this reconstructed track
283  TrackTruthCollection::const_iterator found = truthCol->find(trackLink2);
284 
285  if (found != truthCol->end()) {
286  // getting the TrackTruth object - the map element
287  TrackTruth trkTruth = found->second;
288  ATH_MSG_DEBUG("got trkTruth");
289 
290  // probability of the reco<->truth match
291  float trkTruthProb = trkTruth.probability();
292 
293  const HepMcParticleLink& HMPL = trkTruth.particleLink();
294 
295  if (HMPL.isValid()) {
296 #ifdef HEPMC3
297  HepMC::ConstGenParticlePtr genParticle = HMPL.scptr();
298 #else
299  const HepMC::GenParticle* genParticle = HMPL.cptr();
300 #endif
301 
302  double charge = 1.0;
303  if (genParticle->pdg_id() < 0) charge = -charge;
304 
305  Amg::Vector3D productionVertex(genParticle->production_vertex()->position().x(),
306  genParticle->production_vertex()->position().y(),
307  genParticle->production_vertex()->position().z());
308 
309  if (msgLvl(MSG::DEBUG)) {
310  msg(MSG::DEBUG) << nTracks << ". Generated Particle " << endmsg;
311  msg(MSG::DEBUG) << " * PDG " << genParticle->pdg_id()
312  << ", Status " << genParticle->status()
313  << ", mass " << genParticle->momentum().m() << " CLHEP::MeV/c"
314  << endmsg;
315  }
316 
317  float genPt = std::sqrt((genParticle->momentum().x()) * (genParticle->momentum().x())
318  + (genParticle->momentum().y()) * (genParticle->momentum().y()));
319 
320  ATH_MSG_DEBUG(" * pt " << genPt / CLHEP::GeV << " CLHEP::GeV/c"
321  << ", p " << genParticle->momentum().e() / CLHEP::GeV << " CLHEP::GeV/c"
322  << ", eta " << genParticle->momentum().eta()
323  << ", phi " << genParticle->momentum().phi() << " CLHEP::rad");
324 
325  m_nt_mc_trkistruth[nTracks] = 1;
326  m_nt_mc_Trk_pdg[nTracks] = genParticle->pdg_id();
327  m_nt_mc_Trk_prob[nTracks] = trkTruthProb;
328  float pX = genParticle->momentum().px();
329  float pY = genParticle->momentum().py();
330  float genParticlePt = std::sqrt((pX * pX) + (pY * pY));
331  m_nt_mc_Trk_genParticlePt[nTracks] = genParticlePt;
332  m_nt_mc_Trk_genParticleEta[nTracks] = genParticle->momentum().eta();
333  m_nt_mc_Trk_genParticlePhi[nTracks] = genParticle->momentum().phi();
334 
335  if (genParticle->pdg_id() == 0) ATH_MSG_WARNING("Particle with PDG 0!");
336  else if (!genParticle->production_vertex()) ATH_MSG_WARNING(
337  "No GenVertex (generator level) production vertex found!");
338  else {
339  // currently cannot configure the TruthToTrack tool properly
340 
341  const Trk::TrackParameters* generatedTrackPerigee = nullptr;
342 
343  //using a tool to produce perigee track parameters from generated parameters
344  generatedTrackPerigee = m_truthToTrack->makePerigeeParameters(genParticle);
345 
346  if (!generatedTrackPerigee) {
347  if (msgLvl(MSG::DEBUG)) {
348  msg(MSG::DEBUG) << "Unable to extrapolate genParticle to perigee!" << endmsg;
349  msg(MSG::DEBUG) << "Trying to extrapolate directly to exclude material effects!" << endmsg;
350  }
351 
352  const TrackRecordCollection* recordCollection = nullptr;
353 
354  sc = evtStore()->retrieve(recordCollection, "CaloEntryLayer");
355  if (sc == StatusCode::FAILURE) {
356  ATH_MSG_ERROR("Could not get track record!");
357  return sc;
358  }
359  ATH_MSG_DEBUG("reading from track record, size = "
360  << recordCollection->size());
361 
362  int nmctracks = 0;
363 
364  for (TrackRecordCollection::const_iterator record = recordCollection->begin();
365  record != recordCollection->end(); ++record) {
366  if (std::abs((*record).GetPDGCode()) != 13) continue;
367  HepGeom::Point3D<double> productionVertex = (*record).GetPosition();
368  double charge = (*record).GetPDGCode() > 0 ? -1.0 : 1.0;
369 
370 
371  Amg::Vector3D direction((*record).GetMomentum().x(),
372  (*record).GetMomentum().y(),
373  (*record).GetMomentum().z());
374 
375  double momentum = direction.mag();
376  if (momentum < 500) continue;
377  double genPar_qOverP = 1. / direction.mag();
378  direction *= genPar_qOverP;
379  if (charge < 0) genPar_qOverP = -genPar_qOverP;
380 
381 
382  double genPar_phi = direction.phi();
383  if (genPar_phi < 0.) genPar_phi = genPar_phi + 2.0*M_PI;
384 
385  ATH_MSG_DEBUG("Production vertex (x,y,z): ("
386  << productionVertex.x() << ", "
387  << productionVertex.y() << ", "
388  << productionVertex.z() << ")");
389 
390  double genPar_theta = direction.theta();
391 
392  // Create a planar surface and transform the vertex information to a TrackParameters object
393  Amg::Transform3D globalSurfaceCentre;
394  globalSurfaceCentre.setIdentity();
395  globalSurfaceCentre *= Amg::Translation3D(productionVertex.x(),
396  productionVertex.y(), productionVertex.z());
397 
398  Trk::PlaneSurface planeSurface(globalSurfaceCentre, 5., 5.);
399 
400  const Amg::Vector3D productionVertexAsGlobalPosition(productionVertex.x(),
401  productionVertex.y(),
402  productionVertex.z());
403 
404  const Trk::AtaPlane* productionVertexTrackParams
405  = new Trk::AtaPlane(productionVertexAsGlobalPosition,
406  genPar_phi, genPar_theta, genPar_qOverP,
407  planeSurface);
408 
409  // Create a new perigee surface
410  Trk::PerigeeSurface perigeeSurface;
411 
412  if (!tracks->empty()) perigeeSurface = ((**tracks->begin()).perigeeParameters()->associatedSurface());
413 
414 
415  const Amg::Vector3D& perigeeGlobalPosition = perigeeSurface.center();
416 
417  ATH_MSG_DEBUG("Surface global centre (x,y,z): ("
418  << perigeeGlobalPosition.x() << ", "
419  << perigeeGlobalPosition.y() << ", "
420  << perigeeGlobalPosition.z() << ")");
421 
422  // Extrapolate the TrackParameters object to the perigee
423 
424  // ( Establish the distance between perigee and generated vertex.
425  // If less than tolerance don't bother with the propagation )
426  const Amg::Vector3D difference = productionVertexAsGlobalPosition - perigeeGlobalPosition;
427 
428  double distance = std::sqrt(difference.x() * difference.x() + difference.y() * difference.y());
429  ATH_MSG_DEBUG("Distance between perigee point and generated vertex: "
430  << distance / CLHEP::m << " m");
431 
432  const Trk::TrackParameters* generatedTrackPerigee = nullptr;
433 
434  // Extrapolate directly to exclude material effects!
435  if (distance > 1.e-4) {
436  ATH_MSG_DEBUG("Distance between perigee and generated vertex exceeds tolerance ("
437  << 1.e-4 << " mm)... Extrapolating!");
438 
439  generatedTrackPerigee = m_extrapolator->extrapolateDirectly(ctx,
440  *productionVertexTrackParams,
441  perigeeSurface,
443  false,
444  Trk::nonInteracting).release();
445  if (!generatedTrackPerigee) continue;
446  } else {
447  ATH_MSG_DEBUG("Distance between perigee and generated vertex is less than tolerance ("
448  << 1.e-4 << " CLHEP::mm)... " << "No propagation to perigee required");
449 
450  // Clone the parameters from the AtaPlane object on to perigee
451  generatedTrackPerigee = new Trk::Perigee(0., 0.,
452  genPar_phi, genPar_theta, genPar_qOverP,
453  Trk::PerigeeSurface(productionVertexAsGlobalPosition));
454  }
455 
456  dumpPerigee(generatedTrackPerigee, nmctracks);
457  m_nt_mc_Trk_vtxX[nmctracks] = productionVertex.x();
458  m_nt_mc_Trk_vtxY[nmctracks] = productionVertex.y();
459  m_nt_mc_Trk_vtxZ[nmctracks] = productionVertex.z();
460 
461  delete productionVertexTrackParams;
462  delete generatedTrackPerigee;
463 
464  nmctracks++;
465  }
466  }
467 
468  if (generatedTrackPerigee) {
469  dumpPerigee(generatedTrackPerigee, nTracks);
470  m_nt_mc_Trk_vtxX[nTracks] = genParticle->production_vertex()->position().x();
471  m_nt_mc_Trk_vtxY[nTracks] = genParticle->production_vertex()->position().y();
472  m_nt_mc_Trk_vtxZ[nTracks] = genParticle->production_vertex()->position().z();
473 
474  delete generatedTrackPerigee;
475  }
476  }
477  }
478  m_nt_mc_trkistruth[nTracks] = 0;
479  }
480  //} // if (truthCol) commented out for coverity 14309
481 
482  nTracks++;
483  }
484  }
485  } // end if m_doTruth
486 
487  // Store TrkTrack branch
488  std::string nt0id = m_ntupleName + "/TrkTrack";
489  sc = m_ntupleSvc->writeRecord(nt0id);
490  if (sc.isFailure()) ATH_MSG_ERROR("Could not write " << nt0id << "!");
491 
492  if (m_inputUpCol != "") {
493  // Store TrkTrack_Up branch
494  std::string nt1id = m_ntupleName + "/TrkTrack_Up";
495  sc = m_ntupleSvc->writeRecord(nt1id);
496  if (sc.isFailure()) ATH_MSG_ERROR("Could not write " << nt1id << "!");
497  }
498 
499  if (m_inputLowCol != "") {
500  // Store TrkTrack_Low branch
501  std::string nt2id = m_ntupleName + "/TrkTrack_Low";
502  sc = m_ntupleSvc->writeRecord(nt2id);
503  if (sc.isFailure()) ATH_MSG_ERROR("Could not write " << nt2id << "!");
504  }
505 
506  if (m_doMatching && m_inputUpCol != "" && m_inputLowCol != "") {
507  // Store Matching Up/Low TrkTracks branch
508  std::string nt3id = m_ntupleName + "/TrkTrack_Matching";
509  sc = m_ntupleSvc->writeRecord(nt3id);
510  if (sc.isFailure()) ATH_MSG_ERROR("Could not write " << nt3id << "!");
511  }
512 
513 
514  m_events++;
515 
516  // check for negative values
517  if (m_totaltrks < 0) m_totaltrks = 0;
518  if (m_totalhits < 0) m_totalhits = 0;
519  if (m_totalPixhits < 0) m_totalPixhits = 0;
520  if (m_totalSCThits < 0) m_totalSCThits = 0;
521  if (m_totalTRThits < 0) m_totalTRThits = 0;
522 
523  if (m_inputUpCol != "") {
524  if (m_totalUptrks < 0) m_totalUptrks = 0;
525  if (m_totalUphits < 0) m_totalUphits = 0;
526  if (m_totalUpPixhits < 0) m_totalUpPixhits = 0;
527  if (m_totalUpSCThits < 0) m_totalUpSCThits = 0;
528  if (m_totalUpTRThits < 0) m_totalUpTRThits = 0;
529  }
530 
531  if (m_inputLowCol != "") {
532  if (m_totalLowtrks < 0) m_totalLowtrks = 0;
533  if (m_totalLowhits < 0) m_totalLowhits = 0;
537  }
538 
539  if (m_events < 0) m_events = 0;
540  // no deletion because StoreGate owns these pointers.
541  //delete tracks;
542  //delete Uptracks;
543  //delete Lowtracks;
544  return StatusCode::SUCCESS;
545 }
546 
547 //=====================================================================
548 // bookNtuple()
549 //=====================================================================
551  ATH_MSG_DEBUG("Booking Trk::Track Info...");
552 
553  NTupleFilePtr file1(m_ntupleSvc, m_ntupleName);
554  std::string nt0id = m_ntupleName + "/TrkTrack";
555  std::string comments = "Trk::Track Information";
556 
557  NTuplePtr nt0(m_ntupleSvc, nt0id);
558  if (nt0) {
559  ATH_MSG_DEBUG("Ntuple is already booked");
560  } else {
561  ATH_MSG_DEBUG("Attempting to book general ntuple");
562  nt0 = m_ntupleSvc->book(nt0id, CLID_ColumnWiseTuple, comments);
563 
564  if (nt0) {
565  StatusCode sc;
566  // nt0->addItem("event", m_nt_event); // event number
567  sc = nt0->addItem("nTracks", m_nt_ntracks, 0, maxTracks); // number of tracks
568  if (m_doTruth) sc = nt0->addItem("mc_nTracks", m_nt_nmctracks, 0, maxTracks); // number of mc tracks
569 
570  // ----------------------------------------------------------------------
571  // Trk::Track parameters
572  sc = nt0->addItem("Trk_d0", m_nt_ntracks, m_nt_Trk_d0);
573  sc = nt0->addItem("Trk_z0", m_nt_ntracks, m_nt_Trk_z0);
574  sc = nt0->addItem("Trk_phi0", m_nt_ntracks, m_nt_Trk_phi0);
575  sc = nt0->addItem("Trk_theta0", m_nt_ntracks, m_nt_Trk_theta0);
576  sc = nt0->addItem("Trk_qoverp", m_nt_ntracks, m_nt_Trk_qoverp);
577  sc = nt0->addItem("Trk_pt", m_nt_ntracks, m_nt_Trk_pt);
578  // ----------------------------------------------------------------------
579 
580  // ----------------------------------------------------------------------
581  // Trk::Track hits...
582  sc = nt0->addItem("Trk_nHits", m_nt_ntracks, m_nt_Trk_nHits);
583  sc = nt0->addItem("Trk_nhitsPixels", m_nt_ntracks, m_nt_Trk_nhitspix);
584  sc = nt0->addItem("Trk_nhitsSCT", m_nt_ntracks, m_nt_Trk_nhitssct);
585  sc = nt0->addItem("Trk_nhitsTRT", m_nt_ntracks, m_nt_Trk_nhitstrt);
586 
587  sc = nt0->addItem("Trk_nsharedPixels", m_nt_ntracks, m_nt_Trk_nsharedPixels);
588  sc = nt0->addItem("Trk_nsharedSCT", m_nt_ntracks, m_nt_Trk_nsharedSCT);
589  sc = nt0->addItem("Trk_nshared", m_nt_ntracks, m_nt_Trk_nshared);
590 
591  sc = nt0->addItem("Trk_nholesPixels", m_nt_ntracks, m_nt_Trk_nholesPixels);
592  sc = nt0->addItem("Trk_nholesSCT", m_nt_ntracks, m_nt_Trk_nholesSCT);
593  sc = nt0->addItem("Trk_nholes", m_nt_ntracks, m_nt_Trk_nholes);
594 
595  sc = nt0->addItem("Trk_chi2", m_nt_ntracks, m_nt_Trk_chi2);
596  sc = nt0->addItem("Trk_ndof", m_nt_ntracks, m_nt_Trk_ndof);
597  sc = nt0->addItem("Trk_chi2Prob", m_nt_ntracks, m_nt_Trk_chi2Prob);
598  // ----------------------------------------------------------------------
599 
600  if (m_doTruth) {
601  // ----------------------------------------------------------------------
602  sc = nt0->addItem("mc_TrkIsTruth", m_nt_ntracks, m_nt_mc_trkistruth);
603 
604  // generated particle parameters
605  sc = nt0->addItem("mc_Trk_genParticlePt", m_nt_ntracks, m_nt_mc_Trk_genParticlePt);
606  sc = nt0->addItem("mc_Trk_genParticleEta", m_nt_ntracks, m_nt_mc_Trk_genParticleEta);
607  sc = nt0->addItem("mc_Trk_genParticlePhi", m_nt_ntracks, m_nt_mc_Trk_genParticlePhi);
608 
609  // MonteCarlo Track parameters
610  sc = nt0->addItem("mc_Trk_d0", m_nt_ntracks, m_nt_mc_Trk_d0);
611  sc = nt0->addItem("mc_Trk_z0", m_nt_ntracks, m_nt_mc_Trk_z0);
612  sc = nt0->addItem("mc_Trk_phi0", m_nt_ntracks, m_nt_mc_Trk_phi0);
613  sc = nt0->addItem("mc_Trk_theta", m_nt_ntracks, m_nt_mc_Trk_theta0);
614  sc = nt0->addItem("mc_Trk_eta", m_nt_ntracks, m_nt_mc_Trk_eta);
615  sc = nt0->addItem("mc_Trk_qoverp", m_nt_ntracks, m_nt_mc_Trk_qoverp);
616  sc = nt0->addItem("mc_Trk_qoverpt", m_nt_ntracks, m_nt_mc_Trk_qoverpt);
617  sc = nt0->addItem("mc_Trk_pt", m_nt_ntracks, m_nt_mc_Trk_pt);
618  sc = nt0->addItem("mc_Trk_charge", m_nt_ntracks, m_nt_mc_Trk_charge);
619  sc = nt0->addItem("mc_Trk_prob", m_nt_ntracks, m_nt_mc_Trk_prob);
620  sc = nt0->addItem("mc_Trk_pdg", m_nt_ntracks, m_nt_mc_Trk_pdg);
621 
622  sc = nt0->addItem("mc_Trk_vtxX", m_nt_ntracks, m_nt_mc_Trk_vtxX);
623  sc = nt0->addItem("mc_Trk_vtxY", m_nt_ntracks, m_nt_mc_Trk_vtxY);
624  sc = nt0->addItem("mc_Trk_vtxZ", m_nt_ntracks, m_nt_mc_Trk_vtxZ);
625  // ----------------------------------------------------------------------
626  }
627 
628  if (sc.isFailure()) ATH_MSG_FATAL("Failed ntupleSvc()");
629  else ATH_MSG_DEBUG("Ntuple " << nt0id << " has been booked successfully! ");
630  } else {
631  ATH_MSG_ERROR("Error booking ntuple");
632  }
633  }
634 
635  // return;
636 }
637 
638 //=====================================================================
639 // bookUpNtuple()
640 //=====================================================================
642  ATH_MSG_DEBUG("Booking Up Trk::Track Info...");
643 
644  std::string nt1id = m_ntupleName + "/TrkTrack_Up";
645  std::string comments = "Trk::UpTrack Information";
646 
647  NTuplePtr nt1(m_ntupleSvc, nt1id);
648  if (nt1) {
649  ATH_MSG_DEBUG("Ntuple is already booked");
650  } else {
651  ATH_MSG_DEBUG("Attempting to book general ntuple");
652  nt1 = m_ntupleSvc->book(nt1id, CLID_ColumnWiseTuple, comments);
653 
654  if (nt1) {
655  StatusCode sc;
656  // nt1->addItem("event", m_nt_event); // event number
657  sc = nt1->addItem("nTracks_Up", m_nt_nUptracks, 0, maxTracks); // number of tracks
658 
659  // ----------------------------------------------------------------------
660  // Trk::Track parameters
661  sc = nt1->addItem("Trk_d0_Up", m_nt_nUptracks, m_nt_Trk_d0_Up);
662  sc = nt1->addItem("Trk_z0_Up", m_nt_nUptracks, m_nt_Trk_z0_Up);
663  sc = nt1->addItem("Trk_phi0_Up", m_nt_nUptracks, m_nt_Trk_phi0_Up);
664  sc = nt1->addItem("Trk_theta0_Up", m_nt_nUptracks, m_nt_Trk_theta0_Up);
665  sc = nt1->addItem("Trk_qoverp_Up", m_nt_nUptracks, m_nt_Trk_qoverp_Up);
666  sc = nt1->addItem("Trk_pt_Up", m_nt_nUptracks, m_nt_Trk_pt_Up);
667  // ----------------------------------------------------------------------
668 
669  // ----------------------------------------------------------------------
670  // Trk::Track hits...
671  sc = nt1->addItem("Trk_nHits_Up", m_nt_nUptracks, m_nt_Trk_nHits_Up);
672  sc = nt1->addItem("Trk_nhitsPixels_Up", m_nt_nUptracks, m_nt_Trk_nhitspix_Up);
673  sc = nt1->addItem("Trk_nhitsSCT_Up", m_nt_nUptracks, m_nt_Trk_nhitssct_Up);
674  sc = nt1->addItem("Trk_nhitsTRT_Up", m_nt_nUptracks, m_nt_Trk_nhitstrt_Up);
675 
676  sc = nt1->addItem("Trk_nsharedPixels_Up", m_nt_nUptracks, m_nt_Trk_nsharedPixels_Up);
677  sc = nt1->addItem("Trk_nsharedSCT_Up", m_nt_nUptracks, m_nt_Trk_nsharedSCT_Up);
678  sc = nt1->addItem("Trk_nshared_Up", m_nt_nUptracks, m_nt_Trk_nshared_Up);
679 
680  sc = nt1->addItem("Trk_nholesPixels_Up", m_nt_nUptracks, m_nt_Trk_nholesPixels_Up);
681  sc = nt1->addItem("Trk_nholesSCT_Up", m_nt_nUptracks, m_nt_Trk_nholesSCT_Up);
682  sc = nt1->addItem("Trk_nholes_Up", m_nt_nUptracks, m_nt_Trk_nholes_Up);
683 
684  sc = nt1->addItem("Trk_chi2_Up", m_nt_nUptracks, m_nt_Trk_chi2_Up);
685  sc = nt1->addItem("Trk_ndof_Up", m_nt_nUptracks, m_nt_Trk_ndof_Up);
686  sc = nt1->addItem("Trk_chi2Prob_Up", m_nt_nUptracks, m_nt_Trk_chi2Prob_Up);
687  // ----------------------------------------------------------------------
688 
689  if (sc.isFailure()) ATH_MSG_FATAL("Failed ntupleSvc()");
690  else ATH_MSG_DEBUG("Ntuple " << nt1id << " has been booked successfully! ");
691  } else {
692  ATH_MSG_ERROR("Error booking ntuple");
693  }
694  }
695 }
696 
697 //=====================================================================
698 // bookLowNtuple()
699 //=====================================================================
701  ATH_MSG_DEBUG("Booking Low Trk::Track Info...");
702 
703  std::string nt2id = m_ntupleName + "/TrkTrack_Low";
704  std::string comments = "Trk::LowTrack Information";
705 
706  NTuplePtr nt2(m_ntupleSvc, nt2id);
707  if (nt2) {
708  ATH_MSG_DEBUG("Ntuple is already booked");
709  } else {
710  ATH_MSG_DEBUG("Attempting to book general ntuple");
711  nt2 = m_ntupleSvc->book(nt2id, CLID_ColumnWiseTuple, comments);
712 
713  if (nt2) {
714  StatusCode sc;
715  // sc = nt2->addItem("event", m_nt_event); // event number
716  sc = nt2->addItem("nTracks_Low", m_nt_nLowtracks, 0, maxTracks); // number of tracks
717 
718  // ----------------------------------------------------------------------
719  // Trk::Track parameters
720  sc = nt2->addItem("Trk_d0_Low", m_nt_nLowtracks, m_nt_Trk_d0_Low);
721  sc = nt2->addItem("Trk_z0_Low", m_nt_nLowtracks, m_nt_Trk_z0_Low);
722  sc = nt2->addItem("Trk_phi0_Low", m_nt_nLowtracks, m_nt_Trk_phi0_Low);
723  sc = nt2->addItem("Trk_theta0_Low", m_nt_nLowtracks, m_nt_Trk_theta0_Low);
724  sc = nt2->addItem("Trk_qoverp_Low", m_nt_nLowtracks, m_nt_Trk_qoverp_Low);
725  sc = nt2->addItem("Trk_pt_Low", m_nt_nLowtracks, m_nt_Trk_pt_Low);
726  // ----------------------------------------------------------------------
727 
728  // ----------------------------------------------------------------------
729  // Trk::Track hits...
730  sc = nt2->addItem("Trk_nHits_Low", m_nt_nLowtracks, m_nt_Trk_nHits_Low);
731  sc = nt2->addItem("Trk_nhitsPixels_Low", m_nt_nLowtracks, m_nt_Trk_nhitspix_Low);
732  sc = nt2->addItem("Trk_nhitsSCT_Low", m_nt_nLowtracks, m_nt_Trk_nhitssct_Low);
733  sc = nt2->addItem("Trk_nhitsTRT_Low", m_nt_nLowtracks, m_nt_Trk_nhitstrt_Low);
734 
735  sc = nt2->addItem("Trk_nsharedPixels_Low", m_nt_nLowtracks, m_nt_Trk_nsharedPixels_Low);
736  sc = nt2->addItem("Trk_nsharedSCT_Low", m_nt_nLowtracks, m_nt_Trk_nsharedSCT_Low);
737  sc = nt2->addItem("Trk_nshared_Low", m_nt_nLowtracks, m_nt_Trk_nshared_Low);
738 
739  sc = nt2->addItem("Trk_nholesPixels_Low", m_nt_nLowtracks, m_nt_Trk_nholesPixels_Low);
740  sc = nt2->addItem("Trk_nholesSCT_Low", m_nt_nLowtracks, m_nt_Trk_nholesSCT_Low);
741  sc = nt2->addItem("Trk_nholes_Low", m_nt_nLowtracks, m_nt_Trk_nholes_Low);
742 
743  sc = nt2->addItem("Trk_chi2_Low", m_nt_nLowtracks, m_nt_Trk_chi2_Low);
744  sc = nt2->addItem("Trk_ndof_Low", m_nt_nLowtracks, m_nt_Trk_ndof_Low);
745  sc = nt2->addItem("Trk_chi2Prob_Low", m_nt_nLowtracks, m_nt_Trk_chi2Prob_Low);
746  // ----------------------------------------------------------------------
747  if (sc.isFailure()) msg(MSG::FATAL) << "Failed ntupleSvc()" << endmsg;
748  else msg(MSG::DEBUG) << "Ntuple " << nt2id << " has been booked successfully! " << endmsg;
749  } else {
750  ATH_MSG_ERROR("Error booking ntuple");
751  }
752  }
753 }
754 
755 //=====================================================================
756 // bookMatchingNtuple()
757 //=====================================================================
759  ATH_MSG_DEBUG("Booking Matching between Up and Low Trk::Track Collections...");
760 
761  std::string nt3id = m_ntupleName + "/TrkTrack_Matching";
762  std::string comments = "Matching between Up and Low Trk::Track Collections";
763 
764  NTuplePtr nt3(m_ntupleSvc, nt3id);
765  if (nt3) {
766  ATH_MSG_DEBUG("Ntuple is already booked");
767  } else {
768  ATH_MSG_DEBUG("Attempting to book general ntuple");
769  m_ntupleSvc->book(nt3id, CLID_ColumnWiseTuple, comments);
770 
771  if (nt3) {
772  StatusCode sc;
773  // sc = nt3->addItem("event", m_nt_event); // event number
774 
775  sc = nt3->addItem("nTracks_Match", m_nt_matchingTrk, 0, maxTracks); // number of tracks
776 
777  // ----------------------------------------------------------------------
778  // Matching for the usual Trk::Track parameters
779  sc = nt3->addItem("Trk_delta_d0", m_nt_matchingTrk, m_nt_Trk_delta_d0);
780  sc = nt3->addItem("Trk_delta_phi0", m_nt_matchingTrk, m_nt_Trk_delta_phi0);
781  sc = nt3->addItem("Trk_delta_theta0", m_nt_matchingTrk, m_nt_Trk_delta_theta0);
782  sc = nt3->addItem("Trk_delta_eta", m_nt_matchingTrk, m_nt_Trk_delta_eta);
783  sc = nt3->addItem("Trk_delta_z0", m_nt_matchingTrk, m_nt_Trk_delta_z0);
784  sc = nt3->addItem("Trk_delta_qoverpt", m_nt_matchingTrk, m_nt_Trk_delta_qoverpt);
785  sc = nt3->addItem("Trk_delta_pt", m_nt_matchingTrk, m_nt_Trk_delta_pt);
786  sc = nt3->addItem("Trk_delta_charge", m_nt_matchingTrk, m_nt_Trk_delta_charge);
787  // ----------------------------------------------------------------------
788 
789  if (sc.isFailure()) msg(MSG::FATAL) << "Failed ntupleSvc()" << endmsg;
790  else msg(MSG::DEBUG) << "Ntuple " << nt3id << " has been booked successfully! " << endmsg;
791  } else {
792  if (msgLvl(MSG::ERROR)) msg(MSG::DEBUG) << "Error booking ntuple" << endmsg;
793  }
794  }
795 
796  return;
797 }
798 
799 //=====================================================================
800 // InDetAlignFillTrack::dumpTrackCol()
801 //=====================================================================
803  return dumpTrackCol(tracks, "");
804 }
805 
806 //=====================================================================
807 // InDetAlignFillTrack::dumpTrackCol()
808 //=====================================================================
810  const std::string& TrkColName) {
811  ATH_MSG_DEBUG("In dump" << TrkColName << "TrackCol()");
812 
813  int itrk = 0;
814 
815  TrackCollection::const_iterator trackItr = tracks->begin();
816  TrackCollection::const_iterator trackItrE = tracks->end();
817 
818  //looping over tracks
819  for (; trackItr != trackItrE && itrk < maxTracks; ++trackItr) {
820  if (*trackItr != nullptr) dumpTrack(itrk, (*trackItr), TrkColName);
821 
822  itrk++;
823  }
824 
825  return itrk;
826 }
827 
828 //=====================================================================
829 // InDetAlignFillTrack::dumpTrack()
830 //=====================================================================
831 void InDetAlignFillTrack::dumpTrack(int itrk, const Trk::Track* trk,
832  const std::string& TrkColName) {
833  ATH_MSG_VERBOSE("In dump" << TrkColName << "Track()");
834 
835  const Trk::Perigee* aMeasPer = trk->perigeeParameters();
836 
837  if (aMeasPer == nullptr) {
838  ATH_MSG_ERROR("Could not get Trk::MeasuredPerigee");
839  } else {
840  double d0 = aMeasPer->parameters()[Trk::d0];
841  double z0 = aMeasPer->parameters()[Trk::z0];
842  double phi0 = aMeasPer->parameters()[Trk::phi0];
843  double theta = aMeasPer->parameters()[Trk::theta];
844  double qOverP = aMeasPer->parameters()[Trk::qOverP];
845 
846  if (msgLvl(MSG::DEBUG)) {
847  msg(MSG::DEBUG) << itrk << ". " << TrkColName
848  << " Track Parameters (d0, z0, phi0, theta, q/p)" << endmsg;
849  msg(MSG::DEBUG) << " " << d0 << ", " << z0 << ", "
850  << phi0 << ", " << theta << ", " << qOverP << endmsg;
851  }
852 
853  float transverseMomentum = std::sqrt((aMeasPer->momentum().x()) * (aMeasPer->momentum().x())
854  + (aMeasPer->momentum().y()) * (aMeasPer->momentum().y()));
855 
856  ATH_MSG_DEBUG(" p = " << aMeasPer->momentum().mag() / CLHEP::GeV << " CLHEP::GeV/c, "
857  << " pT = " << transverseMomentum / CLHEP::GeV << " CLHEP::GeV/c");
858 
859  // number of hits
860  int nHits = (*trk).measurementsOnTrack()->size();
861  ATH_MSG_DEBUG(" - number of hits : " << nHits);
862  if (nHits != 0) {
863  if (TrkColName == "Up") m_totalUphits += nHits;
864  else if (TrkColName == "Low") m_totalLowhits += nHits;
865  else m_totalhits += nHits;
866  }
867 
868  // number of hits, shared hits and holes
869  int nhitspix = 0, nhitssct = 0, nhitstrt = 0;
870  int nshared = 0, nshpix = 0, nshsct = 0;
871  int nholes = 0, nhpix = 0, nhsct = 0;
872 
873  xAOD::TrackParticle* trackPart = m_particleCreator->createParticle(*trk);
874  uint8_t iSummaryValue(0); // Dummy counter to retrieve summary values
875 
876  if (not trackPart) ATH_MSG_ERROR("Could not get xAOD::TrackParticle");
877 
878  else {
879  // hits
880  nhitspix = trackPart->summaryValue(iSummaryValue, xAOD::numberOfPixelHits) ? iSummaryValue : 0;
881  nhitssct = trackPart->summaryValue(iSummaryValue, xAOD::numberOfSCTHits) ? iSummaryValue : 0;
882  nhitstrt = trackPart->summaryValue(iSummaryValue, xAOD::numberOfTRTHits) ? iSummaryValue : 0;
883 
884  if (msgLvl(MSG::DEBUG)) {
885  msg(MSG::DEBUG) << " -- number of Pixel hits : " << nhitspix << endmsg;
886  msg(MSG::DEBUG) << " -- number of SCT hits : " << nhitssct << endmsg;
887  msg(MSG::DEBUG) << " -- number of TRT hits : " << nhitstrt << endmsg;
888  }
889 
890  if (nhitspix != 0) {
891  if (TrkColName == "Up") m_totalUpPixhits += nhitspix;
892  else if (TrkColName == "Low") m_totalLowPixhits += nhitspix;
893  else m_totalPixhits += nhitspix;
894  }
895  if (nhitssct != 0) {
896  if (TrkColName == "Up") m_totalUpSCThits += nhitssct;
897  else if (TrkColName == "Low") m_totalLowSCThits += nhitssct;
898  else m_totalSCThits += nhitssct;
899  }
900  if (nhitstrt != 0) {
901  if (TrkColName == "Up") m_totalUpTRThits += nhitstrt;
902  else if (TrkColName == "Low") m_totalLowTRThits += nhitstrt;
903  else m_totalTRThits += nhitstrt;
904  }
905 
906  // shared hits
907  nshpix = trackPart->summaryValue(iSummaryValue, xAOD::numberOfPixelSharedHits) ? iSummaryValue : 0;
908  nshsct = trackPart->summaryValue(iSummaryValue, xAOD::numberOfSCTSharedHits) ? iSummaryValue : 0;
909  nshared = nshpix + nshsct;
910 
911  if (nshpix < 0) nshpix = 0;
912  if (nshsct < 0) nshsct = 0;
913  if (nshared < 0) nshared = 0;
914 
915  if (msgLvl(MSG::DEBUG)) {
916  msg(MSG::DEBUG) << " - number of shared hits : " << nshared << endmsg;
917  msg(MSG::DEBUG) << " -- number of Pixel shared hits : " << nshpix << endmsg;
918  msg(MSG::DEBUG) << " -- number of SCT shared hits : " << nshsct << endmsg;
919  }
920 
921  // holes
922  nhpix = trackPart->summaryValue(iSummaryValue, xAOD::numberOfPixelHoles) ? iSummaryValue : 0;
923  nhsct = trackPart->summaryValue(iSummaryValue, xAOD::numberOfSCTHoles) ? iSummaryValue : 0;
924  nholes = nhpix + nhsct;
925 
926  if (nhpix < 0) nhpix = 0;
927  if (nhsct < 0) nhsct = 0;
928  if (nholes < 0) nholes = 0;
929 
930  if (msgLvl(MSG::DEBUG)) {
931  msg(MSG::DEBUG) << " - number of Pixel holes : " << nhpix << endmsg;
932  msg(MSG::DEBUG) << " -- number of SCT holes : " << nhsct << endmsg;
933  msg(MSG::DEBUG) << " -- number of holes : " << nholes << endmsg;
934  }
935  }
936 
937  // get fit quality and chi2 probability of track
938  // chi2Prob = TMath::Prob(chi2,DoF) ROOT function
939  double chi2Prob = 0.;
940  const Trk::FitQuality* fitQual = (*trk).fitQuality();
941  if (fitQual == nullptr) {
942  ATH_MSG_ERROR("No fit quality assigned to the track");
943  chi2Prob = -1e12; // return big value
944  } else {
945  if (fitQual->chiSquared() > 0. && fitQual->numberDoF() > 0) {
946  Genfun::CumulativeChiSquare probabilityFunction(fitQual->numberDoF());
947  chi2Prob = 1 - probabilityFunction(fitQual->chiSquared());
948 
949  if (msgLvl(MSG::DEBUG)) {
950  msg(MSG::DEBUG) << " - chi2 : " << fitQual->chiSquared() << endmsg;
951  msg(MSG::DEBUG) << " - ndof : " << fitQual->numberDoF() << endmsg;
952  msg(MSG::DEBUG) << " - chi2 propability : " << chi2Prob << endmsg;
953  }
954  }
955  }
956  // Fill ntuple
957  if (TrkColName == "Up") {
958  m_nt_Trk_d0_Up[itrk] = d0;
959  m_nt_Trk_z0_Up[itrk] = z0;
960  m_nt_Trk_phi0_Up[itrk] = phi0;
961  m_nt_Trk_theta0_Up[itrk] = theta;
962  m_nt_Trk_qoverp_Up[itrk] = qOverP;
963  m_nt_Trk_pt_Up[itrk] = transverseMomentum;
964 
965  m_nt_Trk_nHits_Up[itrk] = nHits;
966  m_nt_Trk_nhitspix_Up[itrk] = nhitspix;
967  m_nt_Trk_nhitssct_Up[itrk] = nhitssct;
968  m_nt_Trk_nhitstrt_Up[itrk] = nhitstrt;
969 
970  m_nt_Trk_nsharedPixels_Up[itrk] = nshpix;
971  m_nt_Trk_nsharedSCT_Up[itrk] = nshsct;
972  m_nt_Trk_nshared_Up[itrk] = nshared;
973 
974  m_nt_Trk_nholesPixels_Up[itrk] = nhpix;
975  m_nt_Trk_nholesSCT_Up[itrk] = nhsct;
976  m_nt_Trk_nholes_Up[itrk] = nholes;
977  if (fitQual) {
978  m_nt_Trk_chi2_Up[itrk] = fitQual->chiSquared();
979  m_nt_Trk_ndof_Up[itrk] = fitQual->numberDoF();
980  } else {
981  m_nt_Trk_chi2_Up[itrk] = 0;
982  m_nt_Trk_ndof_Up[itrk] = 0;
983  }
984  m_nt_Trk_chi2Prob_Up[itrk] = chi2Prob;
985  } else if (TrkColName == "Low") {
986  m_nt_Trk_d0_Low[itrk] = d0;
987  m_nt_Trk_z0_Low[itrk] = z0;
988  m_nt_Trk_phi0_Low[itrk] = phi0;
989  m_nt_Trk_theta0_Low[itrk] = theta;
990  m_nt_Trk_qoverp_Low[itrk] = qOverP;
991  m_nt_Trk_pt_Low[itrk] = transverseMomentum;
992 
993  m_nt_Trk_nHits_Low[itrk] = nHits;
994  m_nt_Trk_nhitspix_Low[itrk] = nhitspix;
995  m_nt_Trk_nhitssct_Low[itrk] = nhitssct;
996  m_nt_Trk_nhitstrt_Low[itrk] = nhitstrt;
997 
998  m_nt_Trk_nsharedPixels_Low[itrk] = nshpix;
999  m_nt_Trk_nsharedSCT_Low[itrk] = nshsct;
1000  m_nt_Trk_nshared_Low[itrk] = nshared;
1001 
1002  m_nt_Trk_nholesPixels_Low[itrk] = nhpix;
1003  m_nt_Trk_nholesSCT_Low[itrk] = nhsct;
1004  m_nt_Trk_nholes_Low[itrk] = nholes;
1005  if (fitQual) {
1006  m_nt_Trk_chi2_Low[itrk] = fitQual->chiSquared();
1007  m_nt_Trk_ndof_Low[itrk] = fitQual->numberDoF();
1008  } else {
1009  m_nt_Trk_chi2_Low[itrk] = 0;
1010  m_nt_Trk_ndof_Low[itrk] = 0;
1011  }
1012  m_nt_Trk_chi2Prob_Low[itrk] = chi2Prob;
1013  } else {
1014  m_nt_Trk_d0[itrk] = d0;
1015  m_nt_Trk_z0[itrk] = z0;
1016  m_nt_Trk_phi0[itrk] = phi0;
1017  m_nt_Trk_theta0[itrk] = theta;
1018  m_nt_Trk_qoverp[itrk] = qOverP;
1019  m_nt_Trk_pt[itrk] = transverseMomentum;
1020 
1021  m_nt_Trk_nHits[itrk] = nHits;
1022  m_nt_Trk_nhitspix[itrk] = nhitspix;
1023  m_nt_Trk_nhitssct[itrk] = nhitssct;
1024  m_nt_Trk_nhitstrt[itrk] = nhitstrt;
1025 
1026  m_nt_Trk_nsharedPixels[itrk] = nshpix;
1027  m_nt_Trk_nsharedSCT[itrk] = nshsct;
1028  m_nt_Trk_nshared[itrk] = nshared;
1029 
1030  m_nt_Trk_nholesPixels[itrk] = nhpix;
1031  m_nt_Trk_nholesSCT[itrk] = nhsct;
1032  m_nt_Trk_nholes[itrk] = nholes;
1033  if (fitQual) {
1034  m_nt_Trk_chi2[itrk] = fitQual->chiSquared();
1035  m_nt_Trk_ndof[itrk] = fitQual->numberDoF();
1036  } else {
1037  m_nt_Trk_chi2[itrk] = 0;
1038  m_nt_Trk_ndof[itrk] = 0;
1039  }
1040  m_nt_Trk_chi2Prob[itrk] = chi2Prob;
1041  }
1042  }
1043 
1044  return;
1045 }
1046 
1047 //=====================================================================
1048 // InDetAlignFillTrack::dumpPerigee()
1049 //=====================================================================
1050 void InDetAlignFillTrack::dumpPerigee(const Trk::TrackParameters* generatedTrackPerigee,
1051  int index) {
1052  ATH_MSG_VERBOSE( "In dumpPerigee()" );
1053 
1054  float d0 = generatedTrackPerigee->parameters()[Trk::d0];
1055  float z0 = generatedTrackPerigee->parameters()[Trk::z0];
1056  float phi0 = generatedTrackPerigee->parameters()[Trk::phi0];
1057  float theta = generatedTrackPerigee->parameters()[Trk::theta];
1058  float eta = generatedTrackPerigee->eta();
1059  float charge = generatedTrackPerigee->charge();
1060  float qoverp = generatedTrackPerigee->parameters()[Trk::qOverP];
1061  float qoverpt = generatedTrackPerigee->parameters()[Trk::qOverP] / (std::sin(theta));
1062  float pt = (1 / qoverpt) * (charge);
1063  // int pdg = genParticle->pdg_id();
1064 
1065  if (msgLvl(MSG::DEBUG)) {
1066  msg(MSG::DEBUG) << " - Extrapolated genParticle perigee parameters "
1067  << "(d0, z0, phi0, theta, q/p)" << endmsg;
1068  msg(MSG::DEBUG) << " " << d0 << ", " << z0 << ", "
1069  << phi0 << ", " << theta << ", " << qoverp << endmsg;
1070 
1071  msg(MSG::DEBUG) << " p = " << std::abs(1.0 / qoverp) / CLHEP::GeV << " CLHEP::GeV/c, "
1072  << " pT = " << pt / CLHEP::GeV << " CLHEP::GeV/c" << endmsg;
1073  }
1074 
1075  m_nt_mc_Trk_d0[index] = d0;
1076  m_nt_mc_Trk_z0[index] = z0;
1080  m_nt_mc_Trk_qoverp[index] = qoverp;
1081  m_nt_mc_Trk_qoverpt[index] = qoverpt;
1082  m_nt_mc_Trk_pt[index] = pt;
1084 
1085  return;
1086 }
1087 
1088 //=====================================================================
1089 // InDetAlignFillTrack::dumpMatching()
1090 //=====================================================================
1092  const TrackCollection* tracksLower) {
1093  ATH_MSG_DEBUG("In dumpMatching()");
1094 
1095  int nTracksUpper = 0;
1096 
1097  // looping over the upper barrel tracks
1098  TrackCollection::const_iterator trackItrUpper = tracksUpper->begin();
1099  TrackCollection::const_iterator trackItrUpperE = tracksUpper->end();
1100  for (; trackItrUpper != trackItrUpperE; ++trackItrUpper) {
1101  const Trk::Track* trackUpper = *trackItrUpper;
1102  if (trackUpper == nullptr) {
1103  ATH_MSG_DEBUG("No associated Trk::Track object found for track " << nTracksUpper);
1104  continue;
1105  }
1106 
1107  const Trk::Perigee* measUpperPer = trackUpper->perigeeParameters();
1108 
1109  // Get the track parameters from the Upper Track
1110  float d0Up = measUpperPer->parameters()[Trk::d0];
1111  float phi0Up = measUpperPer->parameters()[Trk::phi0];
1112  float eta0Up = measUpperPer->eta();
1113  float z0Up = measUpperPer->parameters()[Trk::z0];
1114  float thetaUp = measUpperPer->parameters()[Trk::theta];
1115  float qOverPtUp = measUpperPer->parameters()[Trk::qOverP] * 1000 / std::sin(thetaUp);
1116  float chargeUp = measUpperPer->charge();
1117  float ptUp = measUpperPer->pT() / 1000.;
1118 
1119  if (msgLvl(MSG::DEBUG)) {
1120  msg(MSG::DEBUG) << nTracksUpper << ". UpTrack -> Track Parameters:" << endmsg;
1121  msg(MSG::DEBUG) << " d0, z0, phi0, theta, q/p" << d0Up << ", " << z0Up << ", "
1122  << phi0Up << ", " << thetaUp << ", " << qOverPtUp << endmsg;
1123  }
1124 
1125  int nTracksLower = 0;
1126 
1127  bool matchFound = false;
1128  float Matched_Low_d0 = -999;
1129  float Matched_Low_phi0 = -999;
1130  //**
1131  float Matched_Low_theta = -999;
1132  float Matched_Low_eta0 = -999;
1133  float Matched_Low_z0 = -999;
1134  float Matched_Low_qOverPt = -999;
1135  float Matched_Low_charge = -999;
1136  float Matched_Low_pt = -999;
1137 
1138  // looping over the lower barrel tracks
1139  DataVector<Trk::Track>::const_iterator trackItrLower = tracksLower->begin();
1140  DataVector<Trk::Track>::const_iterator trackItrLowerE = tracksLower->end();
1141  for (; trackItrLower != trackItrLowerE; ++trackItrLower) { //looping over Lower tracks
1142  const Trk::Track* trackLower = *trackItrLower;
1143  if (trackLower == nullptr) {
1144  ATH_MSG_DEBUG("No associated Trk::Track object found for track " << nTracksLower);
1145  continue;
1146  }
1147 
1148  const Trk::Perigee* measLowerPer = trackLower->perigeeParameters();
1149 
1150  float d0Low = measLowerPer->parameters()[Trk::d0];
1151  float phi0Low = measLowerPer->parameters()[Trk::phi0];
1152  float eta0Low = measLowerPer->eta();
1153  float z0Low = measLowerPer->parameters()[Trk::z0];
1154  float thetaLow = measLowerPer->parameters()[Trk::theta];
1155  float qOverPtLow = measLowerPer->parameters()[Trk::qOverP] * 1000 / std::sin(thetaLow);
1156  float chargeLow = measLowerPer->charge();
1157  float ptLow = measLowerPer->pT() / 1000.;
1158 
1159  //selecting Lower track that is closest to Upper in eta-phi
1160  float dphi2 = (phi0Up - phi0Low) * (phi0Up - phi0Low);
1161 
1162  //For TRT only tracks we will ignore the delta eta
1163  // and just require a delta phi match
1164  float deta2 = (eta0Up - eta0Low) * (eta0Up - eta0Low);
1165 
1166  // look for a matching track within a cone
1167  float dR = std::sqrt(dphi2 + deta2);
1168  ATH_MSG_DEBUG("dR (sqrt(dphi+deta2): " << dR);
1169  ATH_MSG_DEBUG("minmdR (sqrt(dphi+deta2): " << m_mindR);
1170  if (dR < m_mindR) {
1171  // m_mindR = dR;
1172  Matched_Low_d0 = d0Low;
1173  Matched_Low_phi0 = phi0Low;
1174  //**
1175  Matched_Low_theta = thetaLow;
1176  Matched_Low_eta0 = eta0Low;
1177  Matched_Low_z0 = z0Low;
1178  Matched_Low_qOverPt = qOverPtLow;
1179  Matched_Low_charge = chargeLow;
1180  Matched_Low_pt = ptLow;
1181 
1182  if (dR < m_matchedRcut) {
1183  if (msgLvl(MSG::DEBUG)) {
1184  msg(MSG::DEBUG) << nTracksLower << ". LowTrack -> Track Parameters:" << endmsg;
1185  msg(MSG::DEBUG) << " d0, z0, phi0, theta, q/p: " << d0Low << ", " << z0Low << ", "
1186  << phi0Low << ", " << thetaLow << ", " << qOverPtLow << endmsg;
1187  }
1188 
1189  matchFound = true;
1190  }
1191  } else {
1192  ATH_MSG_DEBUG("No matching low track found!!");
1193  }
1194  nTracksLower++;
1195  } //looping over lower tracks
1196 
1197  if (matchFound) {
1198  ATH_MSG_DEBUG("Match found!");
1199  m_nt_matchingTrk = 1;
1200  m_nt_Trk_delta_d0[nTracksUpper] = d0Up - Matched_Low_d0;
1201  m_nt_Trk_delta_phi0[nTracksUpper] = phi0Up - Matched_Low_phi0;
1202  //**
1203  m_nt_Trk_delta_theta0[nTracksUpper] = thetaUp - Matched_Low_theta;
1204  m_nt_Trk_delta_eta[nTracksUpper] = eta0Up - Matched_Low_eta0;
1205  m_nt_Trk_delta_z0[nTracksUpper] = z0Up - Matched_Low_z0;
1206  m_nt_Trk_delta_qoverpt[nTracksUpper] = qOverPtUp - Matched_Low_qOverPt;
1207  m_nt_Trk_delta_pt[nTracksUpper] = ptUp - Matched_Low_pt;
1208  m_nt_Trk_delta_charge[nTracksUpper] = chargeUp - Matched_Low_charge;
1209  } // end match found
1210 
1211 
1212  nTracksUpper++;
1213  } //looping over upper tracks
1214 
1215  return StatusCode::SUCCESS;
1216 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
InDetAlignFillTrack::m_nt_Trk_phi0_Up
NTuple::Array< float > m_nt_Trk_phi0_Up
phi0 parameter (Up track)
Definition: InDetAlignFillTrack.h:142
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
xAOD::numberOfPixelHoles
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
Definition: TrackingPrimitives.h:261
InDetAlignFillTrack::m_nt_Trk_chi2_Low
NTuple::Array< float > m_nt_Trk_chi2_Low
number of chi2 (Low track)
Definition: InDetAlignFillTrack.h:191
InDetAlignFillTrack::m_doTruth
bool m_doTruth
switch on/off the truth information
Definition: InDetAlignFillTrack.h:72
InDetAlignFillTrack::m_nt_mc_Trk_genParticleEta
NTuple::Array< float > m_nt_mc_Trk_genParticleEta
generated eta
Definition: InDetAlignFillTrack.h:201
InDetAlignFillTrack::m_nt_Trk_d0_Up
NTuple::Array< float > m_nt_Trk_d0_Up
d0 parameter (Up track)
Definition: InDetAlignFillTrack.h:140
InDetAlignFillTrack::m_nt_Trk_phi0
NTuple::Array< float > m_nt_Trk_phi0
phi0 parameter
Definition: InDetAlignFillTrack.h:113
WriteBchToCool.comments
comments
Definition: WriteBchToCool.py:297
ATH_MSG_FATAL
#define ATH_MSG_FATAL(x)
Definition: AthMsgStreamMacros.h:34
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
InDetAlignFillTrack::bookNtuple
void bookNtuple()
Definition: InDetAlignFillTrack.cxx:550
InDetAlignFillTrack::m_nt_Trk_d0_Low
NTuple::Array< float > m_nt_Trk_d0_Low
d0 parameter (Low track)
Definition: InDetAlignFillTrack.h:169
InDetAlignFillTrack::bookMatchingNtuple
void bookMatchingNtuple()
Definition: InDetAlignFillTrack.cxx:758
InDetAlignFillTrack::m_nt_mc_Trk_theta0
NTuple::Array< float > m_nt_mc_Trk_theta0
MonteCarlo theta0 parameter.
Definition: InDetAlignFillTrack.h:208
InDetAlignFillTrack::m_nt_mc_Trk_qoverpt
NTuple::Array< float > m_nt_mc_Trk_qoverpt
MonteCarlo q/pt parameter.
Definition: InDetAlignFillTrack.h:211
python.SystemOfUnits.m
int m
Definition: SystemOfUnits.py:91
InDetAlignFillTrack::m_totalUpSCThits
int m_totalUpSCThits
Definition: InDetAlignFillTrack.h:88
TrackParameters.h
xAOD::numberOfSCTSharedHits
@ numberOfSCTSharedHits
number of SCT hits shared by several tracks [unit8_t].
Definition: TrackingPrimitives.h:272
InDetAlignFillTrack::m_nt_mc_Trk_genParticlePt
NTuple::Array< float > m_nt_mc_Trk_genParticlePt
generated pt
Definition: InDetAlignFillTrack.h:200
python.Constants.FATAL
int FATAL
Definition: Control/AthenaCommon/python/Constants.py:19
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
InDetAlignFillTrack::dumpTrack
void dumpTrack(int, const Trk::Track *, const std::string &)
Definition: InDetAlignFillTrack.cxx:831
Trk::ParametersBase::charge
double charge() const
Returns the charge.
InDetAlignFillTrack::m_nt_Trk_theta0
NTuple::Array< float > m_nt_Trk_theta0
theta0 parameter
Definition: InDetAlignFillTrack.h:114
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
Trk::PerigeeSurface
Definition: PerigeeSurface.h:43
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
InDetAlignFillTrack::m_ntupleName
std::string m_ntupleName
ntuple name
Definition: InDetAlignFillTrack.h:78
index
Definition: index.py:1
AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
InDetAlignFillTrack::m_nt_Trk_pt
NTuple::Array< float > m_nt_Trk_pt
pt parameter
Definition: InDetAlignFillTrack.h:116
InDetAlignFillTrack::m_nt_Trk_nsharedPixels_Up
NTuple::Array< long > m_nt_Trk_nsharedPixels_Up
number of Pixel shared hits (Up track)
Definition: InDetAlignFillTrack.h:154
InDetAlignFillTrack::m_nt_mc_Trk_phi0
NTuple::Array< float > m_nt_mc_Trk_phi0
MonteCarlo phi0 parameter.
Definition: InDetAlignFillTrack.h:207
InDetAccessor::phi0
@ phi0
Definition: InDetAccessor.h:33
InDetAlignFillTrack::m_ntupleSvc
INTupleSvc * m_ntupleSvc
Definition: InDetAlignFillTrack.h:57
GenVertex.h
InDetAlignFillTrack::m_totalUphits
int m_totalUphits
Definition: InDetAlignFillTrack.h:86
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
InDetAlignFillTrack::m_nt_Trk_nshared_Low
NTuple::Array< long > m_nt_Trk_nshared_Low
number of shared hits (Low track)
Definition: InDetAlignFillTrack.h:185
InDetAlignFillTrack::m_nt_Trk_nholes_Low
NTuple::Array< long > m_nt_Trk_nholes_Low
number of holes (Low track)
Definition: InDetAlignFillTrack.h:189
AtlasHitsVector
Definition: AtlasHitsVector.h:33
ITrackParticleCreatorTool.h
InDetAlignFillTrack::m_nt_Trk_z0_Low
NTuple::Array< float > m_nt_Trk_z0_Low
z0 parameter (Low track)
Definition: InDetAlignFillTrack.h:170
InDetAlignFillTrack::m_nt_Trk_nholes
NTuple::Array< long > m_nt_Trk_nholes
number of holes
Definition: InDetAlignFillTrack.h:131
test_pyathena.pt
pt
Definition: test_pyathena.py:11
M_PI
#define M_PI
Definition: ActiveFraction.h:11
Trk::Perigee
ParametersT< 5, Charged, PerigeeSurface > Perigee
Definition: Tracking/TrkEvent/TrkParameters/TrkParameters/TrackParameters.h:29
Trk::z0
@ z0
Definition: ParamDefs.h:70
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
InDetAlignFillTrack::m_nt_Trk_chi2Prob_Low
NTuple::Array< float > m_nt_Trk_chi2Prob_Low
number of chi2 probability (Low track)
Definition: InDetAlignFillTrack.h:193
InDetAlignFillTrack::m_nt_mc_trkistruth
NTuple::Array< float > m_nt_mc_trkistruth
Has the Track an associated truth track?
Definition: InDetAlignFillTrack.h:197
IExtrapolator.h
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
InDetAlignFillTrack::m_nt_Trk_delta_z0
NTuple::Array< float > m_nt_Trk_delta_z0
z0 parameter
Definition: InDetAlignFillTrack.h:227
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
InDetAlignFillTrack::m_totalhits
int m_totalhits
Definition: InDetAlignFillTrack.h:81
InDetAlignFillTrack::m_particleCreator
ToolHandle< Trk::ITrackParticleCreatorTool > m_particleCreator
Pointer to track particle creator tool.
Definition: InDetAlignFillTrack.h:102
InDetAlignFillTrack::m_matchedRcut
float m_matchedRcut
Definition: InDetAlignFillTrack.h:97
InDetAlignFillTrack::m_totalLowhits
int m_totalLowhits
Definition: InDetAlignFillTrack.h:91
InDetAlignFillTrack::m_nt_mc_Trk_charge
NTuple::Array< float > m_nt_mc_Trk_charge
MonteCarlo charge parameter.
Definition: InDetAlignFillTrack.h:214
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
InDetAlignFillTrack::m_nt_Trk_pt_Low
NTuple::Array< float > m_nt_Trk_pt_Low
pt parameter (Low track)
Definition: InDetAlignFillTrack.h:174
InDetAccessor::qOverP
@ qOverP
perigee
Definition: InDetAccessor.h:35
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
InDetAlignFillTrack::~InDetAlignFillTrack
virtual ~InDetAlignFillTrack()
Definition: InDetAlignFillTrack.cxx:110
InDetAlignFillTrack::m_nt_nmctracks
NTuple::Item< long > m_nt_nmctracks
number of mc tracks
Definition: InDetAlignFillTrack.h:107
InDetAlignFillTrack::m_inputUpCol
std::string m_inputUpCol
Definition: InDetAlignFillTrack.h:75
AtlasHitsVector::begin
const_iterator begin() const
Definition: AtlasHitsVector.h:131
InDetAlignFillTrack::m_nt_Trk_nhitstrt
NTuple::Array< long > m_nt_Trk_nhitstrt
number of TRT hits
Definition: InDetAlignFillTrack.h:123
InDetAlignFillTrack::dumpTrackCol
int dumpTrackCol(const TrackCollection *)
Definition: InDetAlignFillTrack.cxx:802
InDetAlignFillTrack::m_nt_Trk_delta_eta
NTuple::Array< float > m_nt_Trk_delta_eta
eta parameter
Definition: InDetAlignFillTrack.h:231
InDetAlignFillTrack::m_nt_Trk_delta_qoverpt
NTuple::Array< float > m_nt_Trk_delta_qoverpt
q/pt parameter
Definition: InDetAlignFillTrack.h:232
InDetAlignFillTrack::m_nt_Trk_nhitstrt_Up
NTuple::Array< long > m_nt_Trk_nhitstrt_Up
number of TRT hits (Up track)
Definition: InDetAlignFillTrack.h:152
GenParticle.h
InDetAlignFillTrack::m_nt_Trk_qoverp_Low
NTuple::Array< float > m_nt_Trk_qoverp_Low
q/p parameter (Low track)
Definition: InDetAlignFillTrack.h:173
InDetAlignFillTrack::initialize
virtual StatusCode initialize()
Definition: InDetAlignFillTrack.cxx:116
AtlasHitsVector::const_iterator
CONT::const_iterator const_iterator
Definition: AtlasHitsVector.h:43
InDetAlignFillTrack::m_nt_Trk_nholesPixels_Low
NTuple::Array< long > m_nt_Trk_nholesPixels_Low
number of Pixel holes (Low track)
Definition: InDetAlignFillTrack.h:187
InDetAlignFillTrack::m_TruthTrkCol
std::string m_TruthTrkCol
Definition: InDetAlignFillTrack.h:77
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
InDetAlignFillTrack::m_nt_Trk_nHits_Up
NTuple::Array< long > m_nt_Trk_nHits_Up
number of hits (Up track)
Definition: InDetAlignFillTrack.h:149
InDetAlignFillTrack::dumpPerigee
void dumpPerigee(const Trk::TrackParameters *, int)
Definition: InDetAlignFillTrack.cxx:1050
InDetAlignFillTrack::m_nt_Trk_pt_Up
NTuple::Array< float > m_nt_Trk_pt_Up
pt parameter (Up track)
Definition: InDetAlignFillTrack.h:145
InDetAlignFillTrack::m_nt_mc_Trk_prob
NTuple::Array< float > m_nt_mc_Trk_prob
MonteCarlo prob parameter.
Definition: InDetAlignFillTrack.h:215
InDetAlignFillTrack::m_nt_Trk_nholes_Up
NTuple::Array< long > m_nt_Trk_nholes_Up
number of holes (Up track)
Definition: InDetAlignFillTrack.h:160
Track.h
InDetAlignFillTrack::bookLowNtuple
void bookLowNtuple()
Definition: InDetAlignFillTrack.cxx:700
InDetAlignFillTrack::m_inputLowCol
std::string m_inputLowCol
Definition: InDetAlignFillTrack.h:76
AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore
ServiceHandle< StoreGateSvc > & evtStore()
The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:85
xAOD::numberOfPixelSharedHits
@ numberOfPixelSharedHits
number of Pixel all-layer hits shared by several tracks [unit8_t].
Definition: TrackingPrimitives.h:262
TrackTruthCollection
Definition: TrackTruthCollection.h:21
InDetAlignFillTrack::m_nt_Trk_z0_Up
NTuple::Array< float > m_nt_Trk_z0_Up
z0 parameter (Up track)
Definition: InDetAlignFillTrack.h:141
InDetAlignFillTrack::FillTrack
virtual StatusCode FillTrack()
Definition: InDetAlignFillTrack.cxx:189
InDetAlignFillTrack::m_nt_Trk_nhitssct_Low
NTuple::Array< long > m_nt_Trk_nhitssct_Low
number of SCT hits (Low track)
Definition: InDetAlignFillTrack.h:180
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
ParticleGun_EoverP_Config.momentum
momentum
Definition: ParticleGun_EoverP_Config.py:63
InDetAlignFillTrack::m_nt_Trk_ndof_Low
NTuple::Array< long > m_nt_Trk_ndof_Low
number of ndof (Low track)
Definition: InDetAlignFillTrack.h:192
TrackTruthCollection.h
InDetAlignFillTrack::m_nt_Trk_nholesSCT_Up
NTuple::Array< long > m_nt_Trk_nholesSCT_Up
number of SCT holes (Up track)
Definition: InDetAlignFillTrack.h:159
InDetAlignFillTrack::m_nt_Trk_nsharedSCT_Up
NTuple::Array< long > m_nt_Trk_nsharedSCT_Up
number of SCT shared hits (Up track)
Definition: InDetAlignFillTrack.h:155
InDetAlignFillTrack::m_nt_nLowtracks
NTuple::Item< long > m_nt_nLowtracks
number of Low tracks
Definition: InDetAlignFillTrack.h:106
Trk::theta
@ theta
Definition: ParamDefs.h:72
InDetAlignFillTrack::m_nt_ntracks
NTuple::Item< long > m_nt_ntracks
number of tracks
Definition: InDetAlignFillTrack.h:104
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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
InDetAlignFillTrack::m_totalLowTRThits
int m_totalLowTRThits
Definition: InDetAlignFillTrack.h:94
InDetAlignFillTrack::m_nt_Trk_nholesSCT
NTuple::Array< long > m_nt_Trk_nholesSCT
number of SCT holes
Definition: InDetAlignFillTrack.h:130
InDetAlignFillTrack::m_nt_Trk_qoverp
NTuple::Array< float > m_nt_Trk_qoverp
q/p parameter
Definition: InDetAlignFillTrack.h:115
InDetAlignFillTrack::m_nt_Trk_nholesSCT_Low
NTuple::Array< long > m_nt_Trk_nholesSCT_Low
number of SCT holes (Low track)
Definition: InDetAlignFillTrack.h:188
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
InDetAlignFillTrack::m_nt_Trk_phi0_Low
NTuple::Array< float > m_nt_Trk_phi0_Low
phi0 parameter (Low track)
Definition: InDetAlignFillTrack.h:171
InDetAlignFillTrack::m_nt_Trk_chi2_Up
NTuple::Array< float > m_nt_Trk_chi2_Up
number of chi2 (Up track)
Definition: InDetAlignFillTrack.h:162
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
InDetAlignFillTrack::m_totalUpTRThits
int m_totalUpTRThits
Definition: InDetAlignFillTrack.h:89
InDetAlignFillTrack::m_nt_Trk_d0
NTuple::Array< float > m_nt_Trk_d0
d0 parameter
Definition: InDetAlignFillTrack.h:111
test_pyathena.parent
parent
Definition: test_pyathena.py:15
InDetAlignFillTrack::m_totalLowPixhits
int m_totalLowPixhits
Definition: InDetAlignFillTrack.h:92
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
InDetAlignFillTrack::m_totalLowSCThits
int m_totalLowSCThits
Definition: InDetAlignFillTrack.h:93
InDetAlignFillTrack::m_events
int m_events
Definition: InDetAlignFillTrack.h:95
InDetAlignFillTrack::m_nt_Trk_nhitspix_Low
NTuple::Array< long > m_nt_Trk_nhitspix_Low
number of Pixel hits (Low track)
Definition: InDetAlignFillTrack.h:179
Trk::FitQuality
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
Definition: FitQuality.h:97
Trk::ParametersBase
Definition: ParametersBase.h:55
InDetAlignFillTrack::m_nt_nUptracks
NTuple::Item< long > m_nt_nUptracks
number of Up tracks
Definition: InDetAlignFillTrack.h:105
InDetAlignFillTrack::m_nt_Trk_nhitssct_Up
NTuple::Array< long > m_nt_Trk_nhitssct_Up
number of SCT hits (Up track)
Definition: InDetAlignFillTrack.h:151
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
InDetAlignFillTrack::m_nt_Trk_nhitspix_Up
NTuple::Array< long > m_nt_Trk_nhitspix_Up
number of Pixel hits (Up track)
Definition: InDetAlignFillTrack.h:150
xAOD::numberOfSCTHoles
@ numberOfSCTHoles
number of SCT holes [unit8_t].
Definition: TrackingPrimitives.h:270
InDetAlignFillTrack::m_nt_Trk_delta_pt
NTuple::Array< float > m_nt_Trk_delta_pt
pt parameter
Definition: InDetAlignFillTrack.h:233
InDetAlignFillTrack::m_nt_Trk_nsharedSCT_Low
NTuple::Array< long > m_nt_Trk_nsharedSCT_Low
number of SCT shared hits (Low track)
Definition: InDetAlignFillTrack.h:184
InDetAlignFillTrack::m_nt_Trk_nhitstrt_Low
NTuple::Array< long > m_nt_Trk_nhitstrt_Low
number of TRT hits (Low track)
Definition: InDetAlignFillTrack.h:181
DataVector< Trk::Track >
TrackTruth::particleLink
const HepMcParticleLink & particleLink() const
Definition: TrackTruth.h:26
InDetAlignFillTrack::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Pointer to IExtrapolator.
Definition: InDetAlignFillTrack.h:101
InDetAlignFillTrack::m_nt_Trk_chi2
NTuple::Array< float > m_nt_Trk_chi2
number of chi2
Definition: InDetAlignFillTrack.h:133
InDetAlignFillTrack::m_inputCol
std::string m_inputCol
Definition: InDetAlignFillTrack.h:74
InDetAlignFillTrack::m_nt_Trk_chi2Prob_Up
NTuple::Array< float > m_nt_Trk_chi2Prob_Up
number of chi2 probability (Up track)
Definition: InDetAlignFillTrack.h:164
TrackRecord.h
Trk::Track::perigeeParameters
const Perigee * perigeeParameters() const
return Perigee.
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:163
HepMC::ConstGenParticlePtr
const GenParticle * ConstGenParticlePtr
Definition: GenParticle.h:38
TrackTruth.h
InDetAlignFillTrack::m_nt_Trk_nHits_Low
NTuple::Array< long > m_nt_Trk_nHits_Low
number of hits (Low track)
Definition: InDetAlignFillTrack.h:178
InDetAlignFillTrack.h
InDetAlignFillTrack::m_totalLowtrks
int m_totalLowtrks
Definition: InDetAlignFillTrack.h:90
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
Trk::d0
@ d0
Definition: ParamDefs.h:69
Trk::perigeeParameters
@ perigeeParameters
Definition: MeasurementType.h:19
InDetAlignFillTrack::m_nt_Trk_delta_theta0
NTuple::Array< float > m_nt_Trk_delta_theta0
theta parameter
Definition: InDetAlignFillTrack.h:230
InDetAlignFillTrack::m_totalSCThits
int m_totalSCThits
Definition: InDetAlignFillTrack.h:83
Trk::nonInteracting
@ nonInteracting
Definition: ParticleHypothesis.h:25
TrackRecordCollection.h
charge
double charge(const T &p)
Definition: AtlasPID.h:494
InDetAlignFillTrack::m_nt_mc_Trk_qoverp
NTuple::Array< float > m_nt_mc_Trk_qoverp
MonteCarlo q/p parameter.
Definition: InDetAlignFillTrack.h:210
InDetAlignFillTrack::finalize
virtual StatusCode finalize()
Definition: InDetAlignFillTrack.cxx:145
InDetAlignFillTrack::m_nt_Trk_nsharedPixels
NTuple::Array< long > m_nt_Trk_nsharedPixels
number of Pixel shared hits
Definition: InDetAlignFillTrack.h:125
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
InDetAlignFillTrack::m_nt_Trk_nholesPixels_Up
NTuple::Array< long > m_nt_Trk_nholesPixels_Up
number of Pixel holes (Up track)
Definition: InDetAlignFillTrack.h:158
InDetAlignFillTrack::m_nt_Trk_z0
NTuple::Array< float > m_nt_Trk_z0
z0 parameter
Definition: InDetAlignFillTrack.h:112
InDetAlignFillTrack::m_nt_mc_Trk_eta
NTuple::Array< float > m_nt_mc_Trk_eta
MonteCarlo eta parameter.
Definition: InDetAlignFillTrack.h:209
InDetAlignFillTrack::m_nt_Trk_chi2Prob
NTuple::Array< float > m_nt_Trk_chi2Prob
number of chi2 probability
Definition: InDetAlignFillTrack.h:135
InDetAlignFillTrack::m_nt_mc_Trk_vtxX
NTuple::Array< float > m_nt_mc_Trk_vtxX
MonteCarlo Vertex.X parameter.
Definition: InDetAlignFillTrack.h:218
InDetAlignFillTrack::m_nt_mc_Trk_genParticlePhi
NTuple::Array< float > m_nt_mc_Trk_genParticlePhi
generated phi
Definition: InDetAlignFillTrack.h:202
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
InDetAlignFillTrack::m_nt_Trk_delta_charge
NTuple::Array< float > m_nt_Trk_delta_charge
charge parameter
Definition: InDetAlignFillTrack.h:234
TrackParticle.h
Trk::AtaPlane
ParametersT< 5, Charged, PlaneSurface > AtaPlane
Definition: Tracking/TrkEvent/TrkParameters/TrkParameters/TrackParameters.h:30
DataVector.h
An STL vector of pointers that by default owns its pointed-to elements.
DeMoScan.index
string index
Definition: DeMoScan.py:362
TrackTruth
MC particle associated with a reco track + the quality of match.
Definition: TrackTruth.h:14
InDetAlignFillTrack::m_nt_Trk_nsharedSCT
NTuple::Array< long > m_nt_Trk_nsharedSCT
number of SCT shared hits
Definition: InDetAlignFillTrack.h:126
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
InDetAlignFillTrack::m_nt_Trk_nshared
NTuple::Array< long > m_nt_Trk_nshared
number of shared hits
Definition: InDetAlignFillTrack.h:127
InDetAlignFillTrack::m_nt_Trk_nholesPixels
NTuple::Array< long > m_nt_Trk_nholesPixels
number of Pixel holes
Definition: InDetAlignFillTrack.h:129
InDetAlignFillTrack::m_nt_Trk_delta_phi0
NTuple::Array< float > m_nt_Trk_delta_phi0
phi0 parameter
Definition: InDetAlignFillTrack.h:228
CondAlgsOpts.found
int found
Definition: CondAlgsOpts.py:101
ITruthToTrack.h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
InDetAlignFillTrack::m_nt_Trk_nHits
NTuple::Array< long > m_nt_Trk_nHits
number of hits
Definition: InDetAlignFillTrack.h:120
InDetAlignFillTrack::m_nt_Trk_ndof
NTuple::Array< long > m_nt_Trk_ndof
number of ndof
Definition: InDetAlignFillTrack.h:134
Trk::PlaneSurface
Definition: PlaneSurface.h:64
AtlasHitsVector::end
const_iterator end() const
Definition: AtlasHitsVector.h:134
TrackTruth::probability
float probability() const
Definition: TrackTruth.h:28
InDetAlignFillTrack::m_totalUpPixhits
int m_totalUpPixhits
Definition: InDetAlignFillTrack.h:87
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
InDetAlignFillTrack::bookUpNtuple
void bookUpNtuple()
Definition: InDetAlignFillTrack.cxx:641
DEBUG
#define DEBUG
Definition: page_access.h:11
InDetAlignFillTrack::m_nt_Trk_theta0_Low
NTuple::Array< float > m_nt_Trk_theta0_Low
theta0 parameter (Low track)
Definition: InDetAlignFillTrack.h:172
InDetAlignFillTrack::InDetAlignFillTrack
InDetAlignFillTrack(const std::string &type, const std::string &name, const IInterface *parent)
Definition: InDetAlignFillTrack.cxx:57
Amg::Translation3D
Eigen::Translation< double, 3 > Translation3D
Definition: GeoPrimitives.h:44
InDetAlignFillTrack::m_truthToTrack
ToolHandle< Trk::ITruthToTrack > m_truthToTrack
Pointer to TruthToTrack.
Definition: InDetAlignFillTrack.h:100
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
Trk::qOverP
@ qOverP
perigee
Definition: ParamDefs.h:73
InDetAlignFillTrack::m_nt_Trk_delta_d0
NTuple::Array< float > m_nt_Trk_delta_d0
d0 parameter
Definition: InDetAlignFillTrack.h:226
InDetAlignFillTrack::m_nt_Trk_qoverp_Up
NTuple::Array< float > m_nt_Trk_qoverp_Up
q/p parameter (Up track)
Definition: InDetAlignFillTrack.h:144
InDetAlignFillTrack::m_nt_Trk_nhitssct
NTuple::Array< long > m_nt_Trk_nhitssct
number of SCT hits
Definition: InDetAlignFillTrack.h:122
AtlasHitsVector::size
size_type size() const
Definition: AtlasHitsVector.h:143
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
Trk::FitQuality::chiSquared
double chiSquared() const
returns the of the overall track fit
Definition: FitQuality.h:56
Trk::ParametersBase::eta
double eta() const
Access method for pseudorapidity - from momentum.
InDetAlignFillTrack::m_totaltrks
int m_totaltrks
Definition: InDetAlignFillTrack.h:80
InDetAlignFillTrack::dumpMatching
StatusCode dumpMatching(const TrackCollection *, const TrackCollection *)
Definition: InDetAlignFillTrack.cxx:1091
Trk::FitQuality::numberDoF
int numberDoF() const
returns the number of degrees of freedom of the overall track or vertex fit as integer
Definition: FitQuality.h:60
InDetAlignFillTrack::m_nt_Trk_nhitspix
NTuple::Array< long > m_nt_Trk_nhitspix
number of Pixel hits
Definition: InDetAlignFillTrack.h:121
InDetAlignFillTrack::m_nt_mc_Trk_pdg
NTuple::Array< float > m_nt_mc_Trk_pdg
MonteCarlo pdg parameter.
Definition: InDetAlignFillTrack.h:216
xAOD::track
@ track
Definition: TrackingPrimitives.h:512
InDetAlignFillTrack::m_nt_mc_Trk_vtxY
NTuple::Array< float > m_nt_mc_Trk_vtxY
MonteCarlo Vertex.Y parameter.
Definition: InDetAlignFillTrack.h:219
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
AthAlgTool
Definition: AthAlgTool.h:26
FitQuality.h
InDetAlignFillTrack::m_nt_mc_Trk_pt
NTuple::Array< float > m_nt_mc_Trk_pt
MonteCarlo pt parameter.
Definition: InDetAlignFillTrack.h:213
InDetAlignFillTrack::m_nt_mc_Trk_z0
NTuple::Array< float > m_nt_mc_Trk_z0
MonteCarlo z0 parameter.
Definition: InDetAlignFillTrack.h:206
InDetAlignFillTrack::m_doMatching
bool m_doMatching
switch on/off the matching information
Definition: InDetAlignFillTrack.h:71
InDetAlignFillTrack::m_totalUptrks
int m_totalUptrks
Definition: InDetAlignFillTrack.h:85
InDetAlignFillTrack::m_totalTRThits
int m_totalTRThits
Definition: InDetAlignFillTrack.h:84
GeV
#define GeV
Definition: CaloTransverseBalanceVecMon.cxx:30
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
InDetAlignFillTrack::m_totalPixhits
int m_totalPixhits
Definition: InDetAlignFillTrack.h:82
InDetAlignFillTrack::m_nt_Trk_nshared_Up
NTuple::Array< long > m_nt_Trk_nshared_Up
number of shared hits (Up track)
Definition: InDetAlignFillTrack.h:156
InDetAlignFillTrack::m_nt_Trk_nsharedPixels_Low
NTuple::Array< long > m_nt_Trk_nsharedPixels_Low
number of Pixel shared hits (Low track)
Definition: InDetAlignFillTrack.h:183
DataVector::empty
bool empty() const noexcept
Returns true if the collection is empty.
Trk::phi0
@ phi0
Definition: ParamDefs.h:71
InDetAlignFillTrack::m_nt_mc_Trk_vtxZ
NTuple::Array< float > m_nt_mc_Trk_vtxZ
MonteCarlo Vertex.Z parameter.
Definition: InDetAlignFillTrack.h:220
InDetAlignFillTrack::m_mindR
float m_mindR
Definition: InDetAlignFillTrack.h:98
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
GenParticle
@ GenParticle
Definition: TruthClasses.h:30
InDetAlignFillTrack::m_nt_matchingTrk
NTuple::Item< long > m_nt_matchingTrk
matching tracks
Definition: InDetAlignFillTrack.h:108
InDetAlignFillTrack::m_nt_Trk_theta0_Up
NTuple::Array< float > m_nt_Trk_theta0_Up
theta0 parameter (Up track)
Definition: InDetAlignFillTrack.h:143
InDetAlignFillTrack::m_nt_mc_Trk_d0
NTuple::Array< float > m_nt_mc_Trk_d0
MonteCarlo d0 parameter.
Definition: InDetAlignFillTrack.h:205
InDetAlignFillTrack::m_nt_Trk_ndof_Up
NTuple::Array< long > m_nt_Trk_ndof_Up
number of ndof (Up track)
Definition: InDetAlignFillTrack.h:163