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