ATLAS Offline Software
IParticleHandle_TrackParticle.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
7 // //
8 // Implementation of class IParticleHandle_TrackParticle //
9 // //
10 // //
12 
13 // Local
16 #include "AODSysCommonData.h"
18 
19 //VP1
20 #include "VP1Base/VP1Msg.h"
21 
22 //SoCoin
23 #include <Inventor/C/errors/debugerror.h>
24 #include <Inventor/nodes/SoLineSet.h>
25 #include <Inventor/nodes/SoPointSet.h>
26 #include <Inventor/nodes/SoVertexProperty.h>
27 #include <Inventor/nodes/SoMaterial.h>
28 #include <Inventor/nodes/SoCone.h>
29 #include <Inventor/nodes/SoSeparator.h>
30 #include <Inventor/nodes/SoTranslation.h>
31 #include <Inventor/nodes/SoRotationXYZ.h>
32 
33 #ifndef BUILDVP1LIGHT
35 #endif
36 
37 // System of units
38 #ifdef BUILDVP1LIGHT
39  #include "GeoModelKernel/Units.h"
40  #define SYSTEM_OF_UNITS GeoModelKernelUnits // --> 'GeoModelKernelUnits::cm'
41 #else
42  #include "GaudiKernel/SystemOfUnits.h"
43  #define SYSTEM_OF_UNITS Gaudi::Units // --> 'Gaudi::Units::cm'
44 #endif
45 
46 
47 //____________________________________________________________________
49 public:
53 
54  SoSeparator * sep = nullptr; // everything hangs from this.
55  SoLineSet * line = nullptr;//This represents the line(s) representing the trackparticle. Can be interpolated.
56  QList<std::pair<xAOD::ParameterPosition, Amg::Vector3D> > parametersAndPositions; // cache - do we really need this?
57  QList< Amg::Vector3D > positionsToWrite; // FIXME - this is just a quick hack so we can easily dump the points used in the lines to JSON
58 
59 };
60 
61 //____________________________________________________________________
63  : IParticleHandleBase(ch), m_d(new Imp)
64 {
65  m_d->theclass = this;
66  m_d->trackparticle = tp;
68  m_d->sep=0;
69  m_d->line=0;
70 }
71 
72 //____________________________________________________________________
74 {
75  if (m_d->line) m_d->line->unref();
76  if (m_d->sep) m_d->sep->unref();
77  delete m_d;
78 }
79 
81  return 0!=m_d->sep;
82 }
84  VP1Msg::messageVerbose("IParticleHandle_TrackParticle::clear3DObjects()");
85 
86  if (m_d->line) {
87  m_d->line->unref();
88  m_d->line=0;
89  }
90  if (m_d->sep) {
91  m_d->sep->unref();
92  m_d->sep=0;
93  }
94 
95  // Wipe caches
96  m_d->positionsToWrite.clear();
97  m_d->parametersAndPositions.clear();
98 }
99 
101  VP1Msg::messageVerbose("IParticleHandle_TrackParticle::nodes with d->sep="+VP1Msg::str(m_d->sep));
102 
103  if (m_d->sep) {
104  VP1Msg::messageVerbose("IParticleHandle_TrackParticle::nodes() - already have sep so not doing anything.");
105  return m_d->sep;
106  }
107  if (!m_d->sep) {
108  m_d->sep = new SoSeparator();
109  m_d->sep->ref();
110  }
111 
113 
114  if (fromTrack) {
116  } else {
117  #ifndef BUILDVP1LIGHT
119  #endif // BUILDVP1LIGHT
120  }
121 
124 
125  return m_d->sep;
126 }
127 
129  // Points:
130  SoPointSet* parameterPoints = 0;
131  SoVertexProperty * vertices2 = 0;
132 
133  // std::cout<<"showing parameters... have "<<m_d->trackparticle->numberOfParameters()+1<<" to draw"<<std::endl;
134 
135  // Okay. so let's make the containers to hold them...
136  parameterPoints = new SoPointSet;
137  vertices2 = new SoVertexProperty;
138 
139  int i = 0;
140  bool colourByParamType = m_d->collHandle->collSettingsButton().colourParametersByType();
141  QList<std::pair<xAOD::ParameterPosition, Amg::Vector3D> > parAndPoses = parametersAndPositions();
142 
143  for (std::pair<xAOD::ParameterPosition, Amg::Vector3D> parpos : parAndPoses ) {
144  Amg::Vector3D pos = parpos.second;
145 
146  if (colourByParamType) {
147  // Okay, so we treat each point separately & add materials as we go...
148  m_d->sep->addChild(m_d->collHandle->collSettingsButton().parameterMaterial(parpos.first));
149  vertices2->vertex.set1Value(0,pos.x(),pos.y(),pos.z());
150  parameterPoints->numPoints=1;
151  parameterPoints->vertexProperty = vertices2;
152  m_d->sep->addChild(parameterPoints);
153  parameterPoints = new SoPointSet; // reset for next point
154  vertices2 = new SoVertexProperty;
155  } else { // Not colouring by type
156  vertices2->vertex.set1Value(i++,pos.x(),pos.y(),pos.z());
157  }
158  }
159 
160  if (colourByParamType) {
161  // In this case, we don't need the last Nodes created in the loop.
162  parameterPoints->unref();
163  vertices2->unref();
164 
165  } else {
166  parameterPoints->numPoints=i;
167  parameterPoints->vertexProperty = vertices2;
168  m_d->sep->addChild(static_cast<const IParticleCollHandle_TrackParticle*>(collHandle())->collSettingsButton().defaultParameterMaterial());
169  m_d->sep->addChild(parameterPoints);
170  }
171 }
172 
174 
175  std::vector<Amg::Vector3D> positions, momenta;
176 
177 #if defined BUILDVP1LIGHT
178  positions.push_back(position());
179  momenta. push_back(momentum());
180 #else
181  const Trk::Perigee& peri = m_d->trackparticle->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ...
182 
183  positions.push_back(Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z()));
184  momenta. push_back(Amg::Vector3D(peri.momentum().x(),peri.momentum().y(),peri.momentum().z()));
185  // std::cout<<"i:"<<0<<"/"<<m_d->trackparticle->numberOfParameters()+1<<": ("<<peri.position().x()<<","<<peri.position().y()<<","<<peri.position().z()<<")"<<std::endl;
186 #endif // BUILDVP1LIGHT
187 
188 
189  VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_FromTrackParticle - has "+QString::number(m_d->trackparticle->numberOfParameters())+" extra parameters.");
190  for (unsigned int i=0; i<m_d->trackparticle->numberOfParameters() ; ++i){
191  // std::cout<<"i:"<<i+1<<"/"<<m_d->trackparticle->numberOfParameters()+1<<": ("<<m_d->trackparticle->parameterX(i)<<","<<m_d->trackparticle->parameterY(i)<<","<<m_d->trackparticle->parameterZ(i)<<")"<<std::endl;
192 
193  positions.push_back(Amg::Vector3D(m_d->trackparticle->parameterX(i),
196  momenta.push_back(Amg::Vector3D( m_d->trackparticle->parameterPX(i),
199 
200  } // end of loop.
201 
202  // if ( positions.size()<2 ) VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_FromTrackParticle - WARNING - not enough points to make a line.");
203 
204  fillLineFromSplineFit(positions, momenta);
205 
206  // std::cout<<"About to add "<<collHandleTrk->material()<<std::endl;
207  m_d->sep->addChild(m_d->collHandle->material());
208  // ^^ FIXME - should rearrange so we don't need to reset material
209 
210  m_d->sep->addChild(m_d->line);
211 }
212 
214  float x = a.x() + (b.x()-a.x())*t;
215  float y = a.y() + (b.y()-a.y())*t;
216  float z = a.z() + (b.z()-a.z())*t;
217  output = Amg::Vector3D(x,y,z);
218 }
219 
221  // DeCasteljau subdivision
222  Amg::Vector3D ab,bc,cd,abbc,bccd;
223  linear(ab, a,b,t); // point between a and b (green)
224  linear(bc, b,c,t); // point between b and c (green)
225  linear(cd, c,d,t); // point between c and d (green)
226  linear(abbc, ab,bc,t); // point between ab and bc (blue)
227  linear(bccd, bc,cd,t); // point between bc and cd (blue)
228  linear(output, abbc,bccd,t); // point on the bezier-curve (black)
229 }
230 
231 void IParticleHandle_TrackParticle::fillLineFromSplineFit(const std::vector<Amg::Vector3D>& positions, const std::vector<Amg::Vector3D>&momenta){
232  int iver(0);
233  unsigned int npointsused(0);
234  // Create new lineset etc
235  m_d->line = new SoLineSet();
236  m_d->line->ref();
237 
238  // For the moment, lets just draw the lines.
239  SoVertexProperty * vertices = new SoVertexProperty();
240 
241  // std::cout<<"About to loop over "<<positions.size()<<" points to make line"<<std::endl;
242  // for (unsigned int i=0; i<positions.size(); ++i){
243  // std::cout<<"i: "<<i<<" at ("<<positions[i].x()<<","<<positions[i].y()<<","<<positions[i].z()<<")"<<" \tmom = ("<<momenta[i].x()<<","<<momenta[i].y()<<","<<momenta[i].z()<<")"<<std::endl;
244  // }
245 
246  // std::cout<<"Now do interpolations."<<std::endl;
247 
248  bool useExistingParams = m_d->collHandle->collSettingsButton().useExistingParameters();
249 
250  for (unsigned int i=1; i<positions.size(); ++i){
251  // std::cout<<"i: "<<i<<" at ("<<positions[i].x()<<","<<positions[i].y()<<","<<positions[i].z()<<")"<<" \tmom = ("<<momenta[i].x()<<","<<momenta[i].y()<<","<<momenta[i].z()<<")"<<std::endl;
252 
253  if (useExistingParams){
254  float scale = ( (positions[i]-positions[i-1]).mag() )/3.0; // want to split curve into three parts
255  Amg::Vector3D p0(positions[i-1]); // first position
256  Amg::Vector3D p1(positions[i-1]+(scale * momenta[i-1].unit() ) ); // move 1/3 or the way towards next point, but following momentum direction
257  Amg::Vector3D p2(positions[i] -(scale * momenta[i].unit() ) ); // back 1/3 from second point, but following momentum direction
258  Amg::Vector3D p3(positions[i]);
259  // std::cout<<"p0: ("<<p0[0]<<", "<<p0[1]<<", "<<p0[2]<<") "<<std::endl;
260  // std::cout<<"p1: ("<<p1[0]<<", "<<p1[1]<<", "<<p1[2]<<") "<<std::endl;
261  // std::cout<<"p2: ("<<p2[0]<<", "<<p2[1]<<", "<<p2[2]<<") "<<std::endl;
262  // std::cout<<"p3: ("<<p3[0]<<", "<<p3[1]<<", "<<p3[2]<<") "<<std::endl;
263 
264  unsigned int maxCount=m_d->collHandle->collSettingsButton().numOfStepsForInterpolation();
265  for (unsigned int count=1; count<=maxCount;++count){
266  float t=static_cast<float>(count)/static_cast<float>(maxCount);
268  bezier(pos, p0, p1, p2, p3, t);
269  // std::cout<<"j: "<<count<<" \tat ("<<pos.x()<<","<<pos.y()<<","<<pos.z()<<")"<<std::endl;
270 
271  // pos = pos + momdelta;
272  vertices->vertex.set1Value(iver++,pos.x(),pos.y(),pos.z());
273  m_d->positionsToWrite.append(pos);
274 
275  npointsused++;
276  }
277  } else {
278  vertices->vertex.set1Value(iver++,positions[i].x(),positions[i].y(),positions[i].z());
279  m_d->positionsToWrite.append(positions[i]);
280  npointsused++;
281  }
282  }
283 
284  // Add final point.
285 
286 
287 
288  // Add to SoLine set
289  m_d->line->numVertices.set1Value(0,npointsused);
290  m_d->line->vertexProperty = vertices;
291 
292 }
293 
294 #ifndef BUILDVP1LIGHT
296  VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_Extrapolated().");
297 
298  const Trk::Perigee& peri = m_d->trackparticle->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ...
299 
300  Trk::CurvilinearParameters startParameters(peri.position(),peri.momentum(),peri.charge());
302  // ecc.addConfigurationMode(Trk::ExtrapolationMode::StopAtBoundary);
305 
306  // we want to extrapolate outwards only for muon tracks
307  if (getNMuonPrecisionLayers()==0 && getNMuonPhiLayers()==0 )
309 
310  // call the extrapolation engine
311  const Trk::IExtrapolationEngine * engine = collHandle()->common()->extrapolator();
312  if (!engine) {
313  VP1Msg::messageVerbose("No extrapolator engine available. Aborting.");
314  return;
315  }
316 
317  std::vector<Amg::Vector3D> positions;
318  std::vector<Amg::Vector3D> momenta;
319 
320  // Add start positions
321  positions.push_back(Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z()));
322  momenta. push_back(Amg::Vector3D(peri.momentum().x(),peri.momentum().y(),peri.momentum().z()));
323 
324 
325  Trk::ExtrapolationCode eCode = engine->extrapolate(ecc);
326 
327  // end the parameters if there
328  if (eCode.isSuccess()){
329  // loop over the collected information
330  for (auto& es : ecc.extrapolationSteps){
331 
332  // continue if we have parameters
333  const Trk::TrackParameters* parameters = es.parameters;
334  if (parameters){
335  // take what you need -> position etc
336 
337  // finally delete the parameters
338  Amg::Vector3D pos = parameters->position();
339  Amg::Vector3D mom = parameters->momentum();
340  positions.push_back(pos);
341  momenta.push_back(mom);
342 
343  delete parameters;
344  }
345  }//
346 
349  positions.push_back(pos);
350  momenta.push_back(mom);
351  // and delete the final parameter
352  delete ecc.endParameters;
353  } else {
354  VP1Msg::messageVerbose("IParticleHandle_TrackParticle::addLine_Extrapolated() - extrapolation failed.");
355  }
356  fillLineFromSplineFit(positions, momenta);
357  // std::cout<<"About to add "<<collHandleTrk->material()<<std::endl;
358  m_d->sep->addChild(m_d->collHandle->material());
359  // ^^ FIXME - should rearrange so we don't need to reset material
360 
361 
362  m_d->sep->addChild(m_d->line);
363 }
364 #endif // BUILDVP1LIGHT
365 
366 //____________________________________________________________________
368 {
369  QStringList l;
370  l << "TrackParticle:";
372  return l;
373 }
374 
375 //____________________________________________________________________
376 #if defined BUILDVP1LIGHT
378  {
379  double phi = m_d->trackparticle->phi0();
380  double theta = m_d->trackparticle->theta();
381 
382  // decide the sign of the charge
383  double qop = m_d->trackparticle->qOverP();
384  // if(qop < 0.)
385  // m_chargeDef->setCharge(-1.);
386  // else
387  // m_chargeDef->setCharge(1.);
388  static constexpr double INVALID_P(10e9);
389  static constexpr double INVALID_QOP(10e-9);
390 
391  // check qoverp is physical
392  double p = 0.;
393  if(qop != 0.)
394  p = fabs(1./qop);
395  else
396  {
397  // qop is unphysical. No momentum measurement.
398  p = INVALID_P;
399  qop = INVALID_QOP;
400  }
401 
403 
404  return mom;
405  }
406 #else
408  {
410  return p.momentum();
411  }
412 #endif // BUILDVP1LIGHT
413 
414 //____________________________________________________________________
415 // TODO: probably, we can move this function to the common base class for all trackparticles
416 #if defined BUILDVP1LIGHT
418  {
419  double d0 = m_d->trackparticle->d0();
420  double z0 = m_d->trackparticle->z0();
421  double phi = m_d->trackparticle->phi0();
422 
423  // glopos[Amg::x] = - locpos[Trk::d0]*sin(phi);
424  // glopos[Amg::y] = locpos[Trk::d0]*cos(phi);
425  // glopos[Amg::z] = locpos[Trk::z0];
426 
427 
428  const Amg::Vector3D pos = Amg::Vector3D(- d0*sin(phi), d0*cos(phi), z0);
429 
430  return pos;
431  }
432 #else
434  {
436  return p.position(); // TODO: check what this returns
437  }
438 #endif
439 
440 
441 //____________________________________________________________________
443 {
444  return *(m_d->trackparticle);
445 }
446 
447 //____________________________________________________________________
449 {
450  return m_d->trackparticle->charge();
451 }
452 
453 //____________________________________________________________________
455 {
456  uint8_t num = 0;
458  return num;
459  }
460  // else...
461  VP1Msg::message("IParticleHandle_TrackParticle::getSummaryValue - unable to retrieve the requested enum: "+VP1Msg::str(type));
462  return 999999;
463 }
464 
465 //____________________________________________________________________
467 {
469 }
470 
471 //____________________________________________________________________
473 {
475 }
476 //____________________________________________________________________
478 {
480 }
481 //____________________________________________________________________
483 {
485 }
486 //____________________________________________________________________
488 {
490 }
491 //____________________________________________________________________
493 {
495 }
496 //____________________________________________________________________
498 {
500 }
501 
503 {
504  QString l("");
505  //l+= "|P|="+VP1Msg::str(momentum().mag()/SYSTEM_OF_UNITS::GeV)+" [GeV], ";
506  l+= "Pix["+QString::number(getNPixelHits())+"], ";
507  l+= "SCT["+QString::number(getNSCTHits())+"], " ;
508  l+= "TRT["+QString::number(getNTRTHits())+"], ";
509  l+= "Muon prec. layers/holes [";
511  return l;
512 }
513 
514 void IParticleHandle_TrackParticle::fillObjectBrowser( QList<QTreeWidgetItem *>& listOfItems)
515 {
516  IParticleHandleBase::fillObjectBrowser(listOfItems); // Obligatory!
517 
518  QTreeWidgetItem* TSOSitem = new QTreeWidgetItem(browserTreeItem());
519  TSOSitem->setText(0, QString("Def. Parameters " ) );
520  QString dParameters("(");
521  dParameters+=QString::number(m_d->trackparticle->d0());
522  dParameters+=", ";
523  dParameters+=QString::number(m_d->trackparticle->z0());
524  dParameters+=", ";
525  dParameters+=QString::number(m_d->trackparticle->phi0());
526  dParameters+=", ";
527  dParameters+=QString::number(m_d->trackparticle->theta());
528  dParameters+=", ";
529  dParameters+=QString::number(m_d->trackparticle->qOverP());
530  dParameters+=")";
531  TSOSitem->setText(1, dParameters );
532 
533  for (unsigned int i=0; i<m_d->trackparticle->numberOfParameters() ; ++i){
534  QTreeWidgetItem* TSOSitem = new QTreeWidgetItem(browserTreeItem());
535  TSOSitem->setText(0, QString("Parameter "+QString::number( i+1 ) ) );
536  QString pos(", Position = (");
538  pos+=", ";
540  pos+=", ";
542  pos+=")";
543 
544  switch (m_d->trackparticle->parameterPosition(i)){
545  case xAOD::BeamLine:
546  TSOSitem->setText(1, QString("BeamLine" )+pos );
547  break;
549  TSOSitem->setText(1, QString("FirstMeasurement")+pos );
550  break;
551  case xAOD::LastMeasurement:
552  TSOSitem->setText(1, QString("LastMeasurement" )+pos );
553  break;
555  TSOSitem->setText(1, QString("CalorimeterEntrance")+pos );
556  break;
557  case xAOD::CalorimeterExit:
558  TSOSitem->setText(1, QString("CalorimeterExit" )+pos );
559  break;
561  TSOSitem->setText(1, QString("MuonSpectrometerEntrance")+pos );
562  break;
563  default:
564  TSOSitem->setText(1, QString("Undefined")+pos );
565  }
566  }
567 
568  // TODO - add more.
569 }
570 
571 const QList<std::pair<xAOD::ParameterPosition, Amg::Vector3D> >& IParticleHandle_TrackParticle::parametersAndPositions() const {
572  // 1st position
573  if (!m_d->parametersAndPositions.isEmpty())
574  return m_d->parametersAndPositions;
575 
576  typedef std::pair<xAOD::ParameterPosition, Amg::Vector3D> paramAndPos;
577 
578 #if defined BUILDVP1LIGHT
579  m_d->parametersAndPositions.append(paramAndPos(xAOD::BeamLine, position() ) );
580 #else
581  const Trk::Perigee& peri = m_d->trackparticle->perigeeParameters (); // FIXME - I'd quite like not to use anything which requires Athena ...
582  m_d->parametersAndPositions.append(paramAndPos(xAOD::BeamLine, Amg::Vector3D(peri.position().x(),peri.position().y(),peri.position().z()) ) );
583 #endif // BUILDVP1LIGHT
584 
585  float x,y,z;
586  for (unsigned int i=0; i<m_d->trackparticle->numberOfParameters() ; ++i){
590 
592  }
593  VP1Msg::messageVerbose("TrackParticle parametersAndPositions() - returning this many positions : "+VP1Msg::str(m_d->parametersAndPositions.size()) );
594  return m_d->parametersAndPositions;
595 }
596 
597 void IParticleHandle_TrackParticle::dumpToJSON( std::ofstream& str) const {
598  str << "\"chi2\":"<<m_d->trackparticle->chiSquared () <<", ";
599  str << "\"dof\":" <<m_d->trackparticle->numberDoF () <<", ";
600  str << "\"dparams\": ["
601  << m_d->trackparticle->d0() <<", "
602  << m_d->trackparticle->z0() <<", "
603  << m_d->trackparticle->phi0() <<", "
604  << m_d->trackparticle->theta() <<", "
605  << m_d->trackparticle->qOverP()
606  << "], \"pos\": [";
607  bool first = true;
608  for (auto pos: m_d->positionsToWrite){
609  if (first){
610  first = false;
611  } else {
612  str <<",";
613  }
614  str << "["<<pos.x()<<","<<pos.y()<<","<<pos.z()<<"]";
615  }
616  str << "] ";
617 }
618 
IParticleHandle_TrackParticle::getNMuonPrecisionHoleLayers
virtual unsigned getNMuonPrecisionHoleLayers() const
Definition: IParticleHandle_TrackParticle.cxx:487
IParticleHandle_TrackParticle.h
IParticleHandle_TrackParticle::dumpToJSON
virtual void dumpToJSON(std::ofstream &) const
Definition: IParticleHandle_TrackParticle.cxx:597
IParticleHandle_TrackParticle::position
virtual Amg::Vector3D position() const
Definition: IParticleHandle_TrackParticle.cxx:433
Trk::ExtrapolationMode::CollectPassive
@ CollectPassive
Definition: ExtrapolationCell.h:57
IParticleHandle_TrackParticle::Imp::collHandle
IParticleCollHandle_TrackParticle * collHandle
Definition: IParticleHandle_TrackParticle.cxx:52
IParticleCollHandle_TrackParticle
Definition: IParticleCollHandle_TrackParticle.h:25
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
Trk::ExtrapolationCell::extrapolationSteps
std::vector< ExtrapolationStep< T > > extrapolationSteps
parameters on sensitive detector elements
Definition: ExtrapolationCell.h:292
xAOD::CalorimeterExit
@ CalorimeterExit
Parameter defined at the exit of the calorimeter.
Definition: TrackingPrimitives.h:219
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
xAOD::numberOfPrecisionHoleLayers
@ numberOfPrecisionHoleLayers
layers with holes AND no hits [unit8_t].
Definition: TrackingPrimitives.h:289
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
VP1StdCollection::material
SoMaterial * material() const
Definition: VP1StdCollection.cxx:220
IParticleHandle_TrackParticle::charge
virtual double charge() const
Returns unknown() in case of trouble.
Definition: IParticleHandle_TrackParticle.cxx:448
IParticleHandle_TrackParticle::fillLineFromSplineFit
void fillLineFromSplineFit(const std::vector< Amg::Vector3D > &positions, const std::vector< Amg::Vector3D > &momenta)
Fill d->line with a SoLineSet made from a spline fit between the information in positions and momenta...
Definition: IParticleHandle_TrackParticle.cxx:231
IParticleHandle_TrackParticle::momentum
virtual Amg::Vector3D momentum() const
Definition: IParticleHandle_TrackParticle.cxx:407
Trk::ExtrapolationCell::addConfigurationMode
void addConfigurationMode(ExtrapolationMode::eMode em)
add a configuration mode
Definition: ExtrapolationCell.h:345
Trk::InvalidParam::INVALID_P
constexpr double INVALID_P(10e9)
xAOD::TrackParticle_v1::charge
float charge() const
Returns the charge.
Definition: TrackParticle_v1.cxx:150
IParticleHandle_TrackParticle::getNSCTHits
virtual unsigned getNSCTHits() const
Definition: IParticleHandle_TrackParticle.cxx:472
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
xAOD::BeamLine
@ BeamLine
Parameter defined at the Vertex/Beamline.
Definition: TrackingPrimitives.h:211
hist_file_dump.d
d
Definition: hist_file_dump.py:137
VP1Msg.h
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
xAOD::TrackParticle_v1::summaryValue
bool summaryValue(uint8_t &value, const SummaryType &information) const
Accessor for TrackSummary values.
Definition: TrackParticle_v1.cxx:736
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
xAOD::TrackParticle_v1::parameterPX
float parameterPX(unsigned int index) const
Returns the parameter x momentum component, for 'index'.
Definition: TrackParticle_v1.cxx:612
IParticleHandle_TrackParticle::~IParticleHandle_TrackParticle
virtual ~IParticleHandle_TrackParticle()
Definition: IParticleHandle_TrackParticle.cxx:73
xAOD::numberOfPhiHoleLayers
@ numberOfPhiHoleLayers
layers with trigger phi holes but no hits [unit8_t].
Definition: TrackingPrimitives.h:291
IParticleHandle_TrackParticle::Imp::trackparticle
const xAOD::TrackParticle * trackparticle
Definition: IParticleHandle_TrackParticle.cxx:51
xAOD::TrackParticle_v1::z0
float z0() const
Returns the parameter.
xAOD::TrackParticle_v1::chiSquared
float chiSquared() const
Returns the of the overall track fit.
TrackParticleCollectionSettingsButton::useExistingParameters
bool useExistingParameters() const
Definition: TrackParticleCollectionSettingsButton.cxx:322
ParticleTest.tp
tp
Definition: ParticleTest.py:25
IParticleHandle_TrackParticle::iParticle
const xAOD::IParticle & iParticle() const
Definition: IParticleHandle_TrackParticle.cxx:442
AODHandleBase::collHandle
const AODCollHandleBase * collHandle() const
Definition: AODHandleBase.h:55
AODHandleBase::fillObjectBrowser
virtual void fillObjectBrowser(QList< QTreeWidgetItem * > &list)
Create and fill the object browser QTreeWidgetItem.
Definition: AODHandleBase.cxx:288
UploadAMITag.l
list l
Definition: UploadAMITag.larcaf.py:158
xAOD::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
TrackParticleCollectionSettingsButton::numOfStepsForInterpolation
int numOfStepsForInterpolation() const
Returns true if the propagation should use the parameters already on the particle,...
Definition: TrackParticleCollectionSettingsButton.cxx:326
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
xAOD::CalorimeterEntrance
@ CalorimeterEntrance
Parameter defined at the entrance to the calorimeter.
Definition: TrackingPrimitives.h:217
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.cos
cos
Definition: drawFromPickle.py:36
xAOD::LastMeasurement
@ LastMeasurement
Parameter defined at the position of the last measurement.
Definition: TrackingPrimitives.h:215
xAOD::IParticle
Class providing the definition of the 4-vector interface.
Definition: Event/xAOD/xAODBase/xAODBase/IParticle.h:40
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
x
#define x
VP1String::str
static QString str(const QString &s)
Definition: VP1String.h:49
Trk::InvalidParam::INVALID_QOP
constexpr double INVALID_QOP(10e-9)
xAOD::TrackParticle_v1::d0
float d0() const
Returns the parameter.
XMLtoHeader.count
count
Definition: XMLtoHeader.py:85
IParticleHandle_TrackParticle::bezier
void bezier(Amg::Vector3D &output, Amg::Vector3D &a, Amg::Vector3D &b, Amg::Vector3D &c, Amg::Vector3D &d, float t)
Definition: IParticleHandle_TrackParticle.cxx:220
xAOD::TrackParticle_v1::parameterX
float parameterX(unsigned int index) const
Returns the parameter x position, for 'index'.
Definition: TrackParticle_v1.cxx:597
AODCollHandleBase::common
const AODSysCommonData * common() const
Definition: AODCollHandleBase.h:88
TrackParticleCollectionSettingsButton.h
ParticleJetTools::p3
Amg::Vector3D p3(const xAOD::TruthVertex *p)
Definition: ParticleJetLabelCommon.cxx:55
IParticleHandle_TrackParticle::addLine_FromTrackParticle
void addLine_FromTrackParticle()
Make the line, but only using information on the track (a spline fit will be done from the parameters...
Definition: IParticleHandle_TrackParticle.cxx:173
TrackParticleCollectionSettingsButton::colourParametersByType
bool colourParametersByType() const
Definition: TrackParticleCollectionSettingsButton.cxx:363
TrackParticleCollectionSettingsButton::showParameters
bool showParameters() const
Returns the number of steps to use when interpolating between paramters (0 is no interpolation....
Definition: TrackParticleCollectionSettingsButton.cxx:355
IParticleHandle_TrackParticle::fillObjectBrowser
void fillObjectBrowser(QList< QTreeWidgetItem * > &listOfItems)
Create and fill the object browser QTreeWidgetItem.
Definition: IParticleHandle_TrackParticle.cxx:514
xAOD::TrackParticle_v1::parameterY
float parameterY(unsigned int index) const
Returns the parameter y position, for 'index'.
Definition: TrackParticle_v1.cxx:602
xAOD::TrackParticle_v1::parameterPY
float parameterPY(unsigned int index) const
Returns the parameter y momentum component, for 'index'.
Definition: TrackParticle_v1.cxx:617
xAOD::TrackParticle_v1::perigeeParameters
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
Definition: TrackParticle_v1.cxx:485
IParticleCollHandle_TrackParticle::collSettingsButton
const TrackParticleCollectionSettingsButton & collSettingsButton() const
Definition: IParticleCollHandle_TrackParticle.cxx:166
xAOD::SummaryType
SummaryType
Enumerates the different types of information stored in Summary.
Definition: TrackingPrimitives.h:228
ParticleGun_EoverP_Config.mom
mom
Definition: ParticleGun_EoverP_Config.py:63
AODSysCommonData::extrapolator
const Trk::IExtrapolationEngine * extrapolator() const
Definition: AODSysCommonData.h:55
IParticleHandle_TrackParticle::IParticleHandle_TrackParticle
IParticleHandle_TrackParticle(IParticleCollHandleBase *, const xAOD::TrackParticle *)
Definition: IParticleHandle_TrackParticle.cxx:62
lumiFormat.i
int i
Definition: lumiFormat.py:92
z
#define z
xAOD::FirstMeasurement
@ FirstMeasurement
Parameter defined at the position of the 1st measurement.
Definition: TrackingPrimitives.h:213
IParticleHandleBase
Definition: IParticleHandleBase.h:42
IParticleHandle_TrackParticle::parametersAndPositions
const QList< std::pair< xAOD::ParameterPosition, Amg::Vector3D > > & parametersAndPositions() const
Definition: IParticleHandle_TrackParticle.cxx:571
Trk::ExtrapolationCode::isSuccess
bool isSuccess() const
return success
Definition: ExtrapolationCell.h:153
IParticleHandle_TrackParticle::Imp
Definition: IParticleHandle_TrackParticle.cxx:48
IParticleHandle_TrackParticle::linear
void linear(Amg::Vector3D &output, Amg::Vector3D &a, Amg::Vector3D &b, float t)
Definition: IParticleHandle_TrackParticle.cxx:213
Trk::ExtrapolationCode
Definition: ExtrapolationCell.h:105
TRT::Track::d0
@ d0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:62
Trk::ExtrapolationCell::endParameters
T * endParameters
by pointer - are newly created and can be optionally 0
Definition: ExtrapolationCell.h:238
IParticleHandle_TrackParticle::has3DObjects
virtual bool has3DObjects()
Returns true if the 3D objects have been created.
Definition: IParticleHandle_TrackParticle.cxx:80
IParticleHandle_TrackParticle::getNPixelHits
virtual unsigned getNPixelHits() const
Definition: IParticleHandle_TrackParticle.cxx:466
IParticleHandle_TrackParticle::clicked
virtual QStringList clicked() const
Called when user selects the node (stringlist is displayed in messagebox).
Definition: IParticleHandle_TrackParticle.cxx:367
IParticleHandle_TrackParticle::shortInfo
QString shortInfo() const
This returns the information shown about the object in the object browser.
Definition: IParticleHandle_TrackParticle.cxx:502
Trk::ExtrapolationMode::CollectSensitive
@ CollectSensitive
Definition: ExtrapolationCell.h:56
AODHandleBase::browserTreeItem
QTreeWidgetItem * browserTreeItem() const
Return the QTreeWidgetItem;.
Definition: AODHandleBase.cxx:311
Trk::ParametersBase
Definition: ParametersBase.h:55
Trk::CurvilinearParametersT
Definition: CurvilinearParametersT.h:48
xAOD::TrackParticle_v1::parameterPosition
xAOD::ParameterPosition parameterPosition(unsigned int index) const
Return the ParameterPosition of the parameters at 'index'.
Definition: TrackParticle_v1.cxx:647
TRT::Track::z0
@ z0
Definition: InnerDetector/InDetCalibEvent/TRT_CalibData/TRT_CalibData/TrackInfo.h:63
IParticleHandle_TrackParticle::getNMuonPrecisionLayers
virtual unsigned getNMuonPrecisionLayers() const
Definition: IParticleHandle_TrackParticle.cxx:482
IParticleHandle_TrackParticle::Imp::parametersAndPositions
QList< std::pair< xAOD::ParameterPosition, Amg::Vector3D > > parametersAndPositions
Definition: IParticleHandle_TrackParticle.cxx:56
AODSysCommonData.h
IParticleHandleBase::baseInfo
virtual QStringList baseInfo() const
Definition: IParticleHandleBase.cxx:85
merge.output
output
Definition: merge.py:17
trigbs_pickEvents.num
num
Definition: trigbs_pickEvents.py:76
xAOD::TrackParticle_v1::phi0
float phi0() const
Returns the parameter, which has range to .
Definition: TrackParticle_v1.cxx:158
IParticleHandle_TrackParticle::Imp::positionsToWrite
QList< Amg::Vector3D > positionsToWrite
Definition: IParticleHandle_TrackParticle.cxx:57
xAOD::TrackParticle_v1::qOverP
float qOverP() const
Returns the parameter.
python.selection.number
number
Definition: selection.py:20
xAOD::TrackParticle_v1::parameterPZ
float parameterPZ(unsigned int index) const
Returns the parameter z momentum component, for 'index'.
Definition: TrackParticle_v1.cxx:622
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
IParticleHandle_TrackParticle::getNMuonPhiHoleLayers
virtual unsigned getNMuonPhiHoleLayers() const
Definition: IParticleHandle_TrackParticle.cxx:497
IParticleHandle_TrackParticle::Imp::theclass
IParticleHandle_TrackParticle * theclass
Definition: IParticleHandle_TrackParticle.cxx:50
VP1Msg::messageVerbose
static void messageVerbose(const QString &)
Definition: VP1Msg.cxx:84
xAOD::TrackParticle_v1::numberOfParameters
size_t numberOfParameters() const
Returns the number of additional parameters stored in the TrackParticle.
Definition: TrackParticle_v1.cxx:553
IParticleHandle_TrackParticle
Definition: IParticleHandle_TrackParticle.h:27
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
IParticleHandle_TrackParticle::getNMuonPhiLayers
virtual unsigned getNMuonPhiLayers() const
Definition: IParticleHandle_TrackParticle.cxx:492
IParticleHandle_TrackParticle::getNTRTHits
virtual unsigned getNTRTHits() const
Definition: IParticleHandle_TrackParticle.cxx:477
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
IParticleHandle_TrackParticle::addLine_Extrapolated
void addLine_Extrapolated()
Extrapolate the initial track parameters to get the line (a spline fit is done between the extrapolat...
Definition: IParticleHandle_TrackParticle.cxx:295
Trk::IExtrapolationEngine::extrapolate
virtual ExtrapolationCode extrapolate(ExCellCharged &ecCharged, const Surface *sf=0, const BoundaryCheck &bcheck=true) const =0
charged extrapolation
Trk::ParametersBase::momentum
const Amg::Vector3D & momentum() const
Access method for the momentum.
Trk::ExtrapolationCell
Definition: ExtrapolationCell.h:231
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
a
TList * a
Definition: liststreamerinfos.cxx:10
Trk::IExtrapolationEngine
Definition: IExtrapolationEngine.h:36
y
#define y
VP1Msg::message
static void message(const QString &, IVP1System *sys=0)
Definition: VP1Msg.cxx:30
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
unit
const PlainObject unit() const
This is a plugin that makes Eigen look like CLHEP & defines some convenience methods.
Definition: AmgMatrixBasePlugin.h:20
IParticleCollHandle_TrackParticle.h
DeMoScan.first
bool first
Definition: DeMoScan.py:534
IParticleHandle_TrackParticle::addParameterShapes
void addParameterShapes()
Definition: IParticleHandle_TrackParticle.cxx:128
IParticleHandle_TrackParticle::m_d
Imp * m_d
Definition: IParticleHandle_TrackParticle.h:79
IParticleHandle_TrackParticle::Imp::sep
SoSeparator * sep
Definition: IParticleHandle_TrackParticle.cxx:54
calibdata.cd
cd
Definition: calibdata.py:51
physics_parameters.parameters
parameters
Definition: physics_parameters.py:144
xAOD::numberOfSCTHits
@ numberOfSCTHits
number of hits in SCT [unit8_t].
Definition: TrackingPrimitives.h:268
xAOD::MuonSpectrometerEntrance
@ MuonSpectrometerEntrance
Parameter defined at the entrance to the Muon Spectrometer.
Definition: TrackingPrimitives.h:221
IParticleHandle_TrackParticle::summaryValue
virtual unsigned summaryValue(xAOD::SummaryType type) const
Definition: IParticleHandle_TrackParticle.cxx:454
xAOD::TrackParticle_v1::parameterZ
float parameterZ(unsigned int index) const
Returns the parameter z position, for 'index'.
Definition: TrackParticle_v1.cxx:607
xAOD::TrackParticle_v1::numberDoF
float numberDoF() const
Returns the number of degrees of freedom of the overall track or vertex fit as float.
str
Definition: BTagTrackIpAccessor.cxx:11
TrackParticleCollectionSettingsButton::parameterMaterial
SoMaterial * parameterMaterial(xAOD::ParameterPosition) const
Definition: TrackParticleCollectionSettingsButton.cxx:333
IParticleHandle_TrackParticle::clear3DObjects
virtual void clear3DObjects()
Delete objects.
Definition: IParticleHandle_TrackParticle.cxx:83
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
drawFromPickle.sin
sin
Definition: drawFromPickle.py:36
IParticleHandle_TrackParticle::nodes
virtual SoNode * nodes()
Returns the 3Dobjects.
Definition: IParticleHandle_TrackParticle.cxx:100
Trk::ExtrapolationMode::StopAtBoundary
@ StopAtBoundary
Definition: ExtrapolationCell.h:55
IExtrapolationEngine.h
IParticleCollHandleBase
Base class for collections holding AOD objects of iParticle type Handles pt etc cuts Local data:
Definition: IParticleCollHandleBase.h:50
xAOD::numberOfPhiLayers
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].
Definition: TrackingPrimitives.h:290
xAOD::TrackParticle_v1::theta
float theta() const
Returns the parameter, which has range 0 to .
python.compressB64.c
def c
Definition: compressB64.py:93
IParticleHandle_TrackParticle::Imp::line
SoLineSet * line
Definition: IParticleHandle_TrackParticle.cxx:55
mag
Scalar mag() const
mag method
Definition: AmgMatrixBasePlugin.h:25
IParticleHandle_TrackParticle::type
virtual QString type() const
return very short word with type (maybe link with collection type?)
Definition: IParticleHandle_TrackParticle.h:65
xAOD::numberOfPrecisionLayers
@ numberOfPrecisionLayers
layers with at least 3 hits [unit8_t].
Definition: TrackingPrimitives.h:288