ATLAS Offline Software
Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
7 // Header include
13 #include "CxxUtils/sincos.h"
14 //-------------------------------------------------
17 #include "TrkGeometry/Layer.h"
19  // Other stuff
20 #include <cmath>
21 
22 
23 namespace Rec{
24 
25 
26  void NewVrtSecInclusiveTool::printWrkSet(const std::vector<WrkVrt> *WrkVrtSet, const std::string &name) const {
27  int nGoodV=0;
28  if(msgLvl(MSG::INFO)){
29  for(int iv=0; iv<(int)WrkVrtSet->size(); iv++) {
30  msg(MSG::INFO)<<name
31  <<"= "<<(*WrkVrtSet)[iv].vertex[0]
32  <<", "<<(*WrkVrtSet)[iv].vertex[1]
33  <<", "<<(*WrkVrtSet)[iv].vertex[2]
34  <<" NTrk="<<(*WrkVrtSet)[iv].selTrk.size()
35  <<" is good="<<std::boolalpha<<(*WrkVrtSet)[iv].Good<<std::noboolalpha
36  <<" Chi2="<<(*WrkVrtSet)[iv].chi2
37  <<" Mass="<<(*WrkVrtSet)[iv].vertexMom.M()
38  <<" detached="<<(*WrkVrtSet)[iv].detachedTrack
39  <<" proj.dist="<<(*WrkVrtSet)[iv].projectedVrt
40  <<" trk=";
41  for(int kk=0; kk<(int)(*WrkVrtSet)[iv].selTrk.size(); kk++) {
42  msg(MSG::INFO)<<", "<<(*WrkVrtSet)[iv].selTrk[kk];}
43  for(int kk=0; kk<(int)(*WrkVrtSet)[iv].selTrk.size(); kk++) {
44  msg(MSG::INFO)<<", "<<momAtVrt((*WrkVrtSet)[iv].trkAtVrt[kk]).Perp();}
45  msg(MSG::INFO)<<endmsg;
46  if((*WrkVrtSet)[iv].Good)nGoodV++;
47  }
48  msg(MSG::INFO)<<name<<" N="<<nGoodV<<endmsg;
49  }
50  }
51 
52  /* Technicalities */
53  double NewVrtSecInclusiveTool::projSV_PV(const Amg::Vector3D & SV, const xAOD::Vertex & PV, const TLorentzVector & Direction)
54  {
55  TVector3 SV_PV( SV.x()-PV.x(), SV.y()-PV.y(), SV.z()-PV.z() );
56  return Direction.Vect().Unit()*SV_PV.Unit();
57  }
58 
59  double NewVrtSecInclusiveTool::vrtVrtDist(const xAOD::Vertex & primVrt, const Amg::Vector3D & secVrt,
60  const std::vector<double>& secVrtErr, double& signif)
61 
62  {
63  double distx = primVrt.x()- secVrt.x();
64  double disty = primVrt.y()- secVrt.y();
65  double distz = primVrt.z()- secVrt.z();
66 
67 
68  AmgSymMatrix(3) primCovMtx=primVrt.covariancePosition(); //Create
69  primCovMtx(0,0) += secVrtErr[0];
70  primCovMtx(0,1) += secVrtErr[1];
71  primCovMtx(1,0) += secVrtErr[1];
72  primCovMtx(1,1) += secVrtErr[2];
73  primCovMtx(0,2) += secVrtErr[3];
74  primCovMtx(2,0) += secVrtErr[3];
75  primCovMtx(1,2) += secVrtErr[4];
76  primCovMtx(2,1) += secVrtErr[4];
77  primCovMtx(2,2) += secVrtErr[5];
78 
79  AmgSymMatrix(3) wgtMtx = primCovMtx.inverse();
80 
81  signif = distx*wgtMtx(0,0)*distx
82  +disty*wgtMtx(1,1)*disty
83  +distz*wgtMtx(2,2)*distz
84  +2.*distx*wgtMtx(0,1)*disty
85  +2.*distx*wgtMtx(0,2)*distz
86  +2.*disty*wgtMtx(1,2)*distz;
87  signif=std::sqrt(std::abs(signif));
88  if( signif!=signif ) signif = 0.;
89  return std::sqrt(distx*distx+disty*disty+distz*distz);
90  }
91 
92  double NewVrtSecInclusiveTool::vrtVrtDist2D(const xAOD::Vertex & primVrt, const Amg::Vector3D & secVrt,
93  const std::vector<double>& secVrtErr, double& signif)
94 
95  {
96  double distx = primVrt.x()- secVrt.x();
97  double disty = primVrt.y()- secVrt.y();
98 
99 
100  AmgSymMatrix(3) primCovMtx=primVrt.covariancePosition(); //Create
101  AmgSymMatrix(2) covMtx;
102  covMtx(0,0) = primCovMtx(0,0) + secVrtErr[0];
103  covMtx(0,1) = primCovMtx(0,1) + secVrtErr[1];
104  covMtx(1,0) = primCovMtx(1,0) + secVrtErr[1];
105  covMtx(1,1) = primCovMtx(1,1) + secVrtErr[2];
106 
107  AmgSymMatrix(2) wgtMtx = covMtx.inverse();
108 
109  signif = distx*wgtMtx(0,0)*distx
110  +disty*wgtMtx(1,1)*disty
111  +2.*distx*wgtMtx(0,1)*disty;
112  signif=std::sqrt(std::abs(signif));
113  if( signif!=signif ) signif = 0.;
114  return std::sqrt(distx*distx+disty*disty);
115  }
116 
117 
118  double NewVrtSecInclusiveTool::vrtVrtDist(const Amg::Vector3D & vrt1, const std::vector<double> & vrtErr1,
119  const Amg::Vector3D & vrt2, const std::vector<double> & vrtErr2)
120 
121  {
122  double distx = vrt1.x()- vrt2.x();
123  double disty = vrt1.y()- vrt2.y();
124  double distz = vrt1.z()- vrt2.z();
125 
126  AmgSymMatrix(3) primCovMtx; //Create
127  primCovMtx(0,0) = vrtErr1[0]+vrtErr2[0];
128  primCovMtx(0,1) = primCovMtx(1,0) = vrtErr1[1]+vrtErr2[1];
129  primCovMtx(1,1) = vrtErr1[2]+vrtErr2[2];
130  primCovMtx(0,2) = primCovMtx(2,0) = vrtErr1[3]+vrtErr2[3];
131  primCovMtx(1,2) = primCovMtx(2,1) = vrtErr1[4]+vrtErr2[4];
132  primCovMtx(2,2) = vrtErr1[5]+vrtErr2[5];
133 
134  AmgSymMatrix(3) wgtMtx = primCovMtx.inverse();
135 
136  double signif =
137  distx*wgtMtx(0,0)*distx
138  +disty*wgtMtx(1,1)*disty
139  +distz*wgtMtx(2,2)*distz
140  +2.*distx*wgtMtx(0,1)*disty
141  +2.*distx*wgtMtx(0,2)*distz
142  +2.*disty*wgtMtx(1,2)*distz;
143  signif=std::sqrt(std::abs(signif));
144  if(signif != signif) signif = 0.;
145  return signif;
146  }
147 //
149  {
150  double dx = Vrt1.x()- Vrt2.x();
151  double dy = Vrt1.y()- Vrt2.y();
152  double dz = Vrt1.z()- Vrt2.z();
153  return std::sqrt(dx*dx+dy*dy*dz*dz);
154  }
155 
156 //----------------------------
157 // Vertex error along radius
158 //----------------------------
159  double NewVrtSecInclusiveTool::vrtRadiusError(const Amg::Vector3D & SecVrt, const std::vector<double> & VrtErr)
160  {
161  double DirX=SecVrt.x(), DirY=SecVrt.y();
162  double Covar = DirX*VrtErr[0]*DirX
163  +2.*DirX*VrtErr[1]*DirY
164  +DirY*VrtErr[2]*DirY;
165  Covar /= DirX*DirX + DirY*DirY;
166  Covar=std::sqrt(std::abs(Covar));
167  if(Covar != Covar) Covar = 0.;
168  return Covar;
169  }
170 
171 
172  /* Invariant mass calculation for V0 decays*/
173  /* Gives correct mass assignment in case of nonequal masses*/
174 
175 
176  double NewVrtSecInclusiveTool::massV0(const std::vector< std::vector<double> >& TrkAtVrt,
177  double massP, double massPi )
178 
179  {
180  double ap1i=std::abs(TrkAtVrt[0][2]); double ap2i=std::abs(TrkAtVrt[1][2]);
181  CxxUtils::sincos phi1(TrkAtVrt[0][0]);
182  CxxUtils::sincos theta1(TrkAtVrt[0][1]);
183  CxxUtils::sincos phi2(TrkAtVrt[1][0]);
184  CxxUtils::sincos theta2(TrkAtVrt[1][1]);
185  double px = phi1.cs * theta1.sn * ap1i
186  + phi2.cs * theta2.sn * ap2i;
187  double py = phi1.sn * theta1.sn * ap1i
188  + phi2.sn * theta2.sn * ap2i;
189  double pz = theta1.cs * ap1i
190  + theta2.cs * ap2i;
191  double ee= (ap1i > ap2i) ?
192  (std::sqrt(ap1i*ap1i+massP*massP)+std::sqrt(ap2i*ap2i+massPi*massPi)):
193  (std::sqrt(ap2i*ap2i+massP*massP)+std::sqrt(ap1i*ap1i+massPi*massPi));
194  double test=(ee-pz)*(ee+pz)-px*px-py*py;
195  return test>0 ? std::sqrt(test) : 0.;
196  }
197 
198 
199 
200  TLorentzVector NewVrtSecInclusiveTool::momAtVrt(const std::vector< double >& inpTrk)
201  const
202  {
203  double api=1./std::abs(inpTrk[2]);
204  CxxUtils::sincos phi(inpTrk[0]);
205  CxxUtils::sincos theta(inpTrk[1]);
206  double px = phi.cs * theta.sn * api;
207  double py = phi.sn * theta.sn * api;
208  double pz = theta.cs * api;
209  double ee = std::sqrt( px*px + py*py + pz*pz + m_massPi*m_massPi);
210  return {px,py,pz,ee};
211  }
212 
213 
214 /*************************************************************************************************************/
216  {
217  uint8_t IBLhit,IBLexp;
218  if(!Part->summaryValue( IBLexp, xAOD::expectInnermostPixelLayerHit) ) IBLexp = 0;
219  if( IBLexp==0 ) return -1;
220  if(!Part->summaryValue( IBLhit, xAOD::numberOfInnermostPixelLayerHits) ) IBLhit = 0;
221  if(IBLhit) return 1;
222  else return 0;
223  }
225  {
226  uint8_t BLhit,BLexp;
227  if(!Part->summaryValue( BLexp, xAOD::expectNextToInnermostPixelLayerHit) ) BLexp = 0;
228  if( BLexp==0 ) return -1;
229  if(!Part->summaryValue( BLhit, xAOD::numberOfNextToInnermostPixelLayerHits) ) BLhit = 0;
230  if(BLhit) return 1;
231  else return 0;
232  }
233 
234  void NewVrtSecInclusiveTool::getPixelDiscs(const xAOD::TrackParticle* Part, int &d0Hit, int &d1Hit, int &d2Hit)
235  {
236  uint32_t HitPattern=Part->hitPattern();
237  d0Hit=0; if( HitPattern&((1<<Trk::pixelEndCap0)) ) d0Hit=1;
238  d1Hit=0; if( HitPattern&((1<<Trk::pixelEndCap1)) ) d1Hit=1;
239  d2Hit=0; if( HitPattern&((1<<Trk::pixelEndCap2)) ) d2Hit=1;
240  }
241 /*************************************************************************************************************/
242 
245  truthParticleLinkAcc ( "truthParticleLink");
246  if( truthParticleLinkAcc.isAvailable(*TP) ) {
248  truthParticleLinkAcc(*TP);
249  if( !tplink.isValid() ) return 0;
250  static const SG::ConstAccessor< float >
251  truthMatchProbabilityAcc ( "truthMatchProbability" );
252  if( truthMatchProbabilityAcc( *TP ) < 0.75 ) return 0;
253  if( HepMC::is_simulation_particle((*tplink))) return 0;
254  if( (*tplink)->hasProdVtx()){
255  if( (*tplink)->prodVtx()->nIncomingParticles()==1){
256  int PDGID1=0, PDGID2=0, PDGID3=0;
257  const xAOD::TruthParticle * parTP1=getPreviousParent(*tplink, PDGID1);
258  const xAOD::TruthParticle * parTP2=nullptr;
259  int noBC1=notFromBC(PDGID1);
260  if(noBC1) parTP2 = getPreviousParent(parTP1, PDGID2);
261  int noBC2=notFromBC(PDGID2);
262  if(noBC2 && parTP2) getPreviousParent(parTP2, PDGID3);
263  int noBC3=notFromBC(PDGID3);
264  if((*tplink)->prodVtx()->perp()>1.)return 1.; //For SUSY studies
265  if(noBC1 && noBC2 && noBC3)return 0;
266  return 1; //This is a reconstructed track from B/C decays
267  } } }
268  return 0;
269  }
270 
272  int noBC=0;
273  if(PDGID<=0)return 1;
274  if(PDGID>600 && PDGID<4000)noBC=1;
275  if(PDGID<400 || PDGID>5600)noBC=1;
276  if(PDGID==513 || PDGID==523 || PDGID==533 || PDGID==543)noBC=1; //Remove tracks from B* (they are in PV)
277  if(PDGID==5114 || PDGID==5214 || PDGID==5224 || PDGID==5314 || PDGID==5324)noBC=1; //Remove tracks from B_Barions* (they are in PV)
278  //if(PDGID==413 || PDGID==423 || PDGID==433 )continue; //Keep tracks from D* (they are from B vertex)
279  //if(PDGID==4114 || PDGID==4214 || PDGID==4224 || PDGID==4314 || PDGID==4324)continue;
280  return noBC;
281  }
283  ParentPDG=0;
284  if( child->hasProdVtx() ){
285  if( child->prodVtx()->nIncomingParticles()==1 ){
286  ParentPDG = std::abs((*(child->prodVtx()->incomingParticleLinks())[0])->pdgId());
287  return *(child->prodVtx()->incomingParticleLinks())[0];
288  }
289  }
290  return nullptr;
291  }
292 
293 
296  truthParticleLinkAcc ( "truthParticleLink");
297  if( truthParticleLinkAcc.isAvailable( *TP ) ) {
299  truthParticleLinkAcc( *TP );
300  if( tplink.isValid() && HepMC::is_simulation_particle((*tplink))) return 1;
301  }
302  return 0;
303  }
306  truthParticleLinkAcc ( "truthParticleLink");
307  if( truthParticleLinkAcc.isAvailable( *TP ) ) {
309  truthParticleLinkAcc( *TP );
310  if( !tplink.isValid() ) return 1;
311  } else { return 1; }
312  return 0;
313  }
314 
316  {
317  const EventContext& ctx = Gaudi::Hive::currentContext();
318  if(Vrt.fitVertex.perp()<20.) return 1.e9;
319  double normP=1./Vrt.momentum.P();
320  Amg::Vector3D momentumP(Vrt.momentum.Px()*normP,Vrt.momentum.Py()*normP,Vrt.momentum.Pz()*normP);
321  Amg::Vector3D momentumN=-momentumP;
322 
323  const Trk::Layer * someLayer = nullptr;
324  const Trk::Layer * nextLayerP = nullptr;
325  const Trk::Layer * nextLayerN = nullptr;
326  const auto *volume = m_extrapolator->trackingGeometry()->lowestTrackingVolume(Vrt.fitVertex);
327  someLayer = volume->associatedLayer(Vrt.fitVertex);
328  const auto *material = someLayer->layerMaterialProperties();
329  if(material){
330  nextLayerP=someLayer;
331  } else {
332  nextLayerP = someLayer->nextLayer(Vrt.fitVertex,momentumP);
333  if(nextLayerP){ if(!nextLayerP->layerMaterialProperties())nextLayerP=nullptr; }
334  nextLayerN = someLayer->nextLayer(Vrt.fitVertex,momentumN);
335  if(nextLayerN){ if(!nextLayerN->layerMaterialProperties())nextLayerN=nullptr; }
336  }
337  momentumP *= 1.e5; //100GeV to have straight trajectory
338  double charge = 1.;
339  const Trk::Perigee pseudoVrtPart(Vrt.fitVertex, momentumP, charge, Vrt.fitVertex);
340 
341  const Trk::TrackParameters * extrapParP=nullptr; //along momentum
342  const Trk::TrackParameters * extrapParN=nullptr; //backward
343  if(nextLayerP){ extrapParP = m_extrapolator->extrapolate(ctx, pseudoVrtPart,
344  nextLayerP->surfaceRepresentation(), Trk::anyDirection, false, Trk::nonInteractingMuon).release();}
345  if(nextLayerN){ extrapParN = m_extrapolator->extrapolate(ctx, pseudoVrtPart,
346  nextLayerN->surfaceRepresentation(), Trk::anyDirection, false, Trk::nonInteractingMuon).release();}
347 
348  float distanceP=1.e9, distanceN=1.e9;
349  if(extrapParP)distanceP=PntPntDist(extrapParP->position(), Vrt.fitVertex);
350  if(extrapParN)distanceN=PntPntDist(extrapParN->position(), Vrt.fitVertex);
351  if(distanceP==1.e9 && distanceN==1.e9) return 1.e9;
352 
353  //std::pair<const Trk::TrackParameters*,const Trk::Layer*> next=
354  // m_extrapolator->extrapolateToNextActiveLayer(pseudoVrtPart,Trk::anyDirection,true,Trk::pion) ;
355 
356  double signif=1.e9;
357  std::vector<double> pntCovar={1.e-2,0.,1.e-2,0.,0.,4.e-2};
358  if(distanceP<distanceN)signif=vrtVrtDist(Vrt.fitVertex, Vrt.errorMatrix, extrapParP->position(), pntCovar);
359  else signif=vrtVrtDist(Vrt.fitVertex, Vrt.errorMatrix, extrapParN->position(), pntCovar);
360  delete extrapParP;
361  delete extrapParN;
362  return signif;
363  }
364 
365  std::vector<double> NewVrtSecInclusiveTool::estimVrtPos( int nTrk, std::deque<long int> &selTrk, std::map<long int, std::vector<double>> & vrt)
366  {
367  std::vector<double> estimation(3,0.);
368  int ntsel=selTrk.size();
369  for( int i=0; i<ntsel-1; i++){
370  for( int j=i+1; j<ntsel; j++){
371  int k = selTrk[i]<selTrk[j] ? selTrk[i]*nTrk+selTrk[j] : selTrk[j]*nTrk+selTrk[i];
372  estimation[0]+=vrt.at(k)[0];
373  estimation[1]+=vrt[k][1];
374  estimation[2]+=vrt[k][2];
375  } }
376  estimation[0] /= ntsel*(ntsel-1)/2;
377  estimation[1] /= ntsel*(ntsel-1)/2;
378  estimation[2] /= ntsel*(ntsel-1)/2;
379  return estimation;
380  }
381 
382 } //end namespace
Trk::pixelEndCap2
@ pixelEndCap2
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:239
Trk::anyDirection
@ anyDirection
Definition: PropDirection.h:22
Rec::NewVrtSecInclusiveTool::getIdHF
int getIdHF(const xAOD::TrackParticle *TP) const
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:243
Rec::NewVrtSecInclusiveTool::vrtVrtDist2D
static double vrtVrtDist2D(const xAOD::Vertex &primVrt, const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr, double &signif)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:92
Rec::NewVrtSecInclusiveTool::notFromBC
static int notFromBC(int PDGID)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:271
xAOD::Vertex_v1::x
float x() const
Returns the x position.
Rec::NewVrtSecInclusiveTool::getIBLHit
static int getIBLHit(const xAOD::TrackParticle *Part)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:215
Rec::NewVrtSecInclusiveTool::getBLHit
static int getBLHit(const xAOD::TrackParticle *Part)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:224
test_pyathena.px
px
Definition: test_pyathena.py:18
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
Trk::ParametersBase::position
const Amg::Vector3D & position() const
Access method for the position.
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
sincos.h
Helper to simultaneously calculate sin and cos of the same angle.
AthCommonMsg< AlgTool >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
Layer.h
Rec::NewVrtSecInclusiveTool::getPixelDiscs
static void getPixelDiscs(const xAOD::TrackParticle *Part, int &d0Hit, int &d1Hit, int &d2Hit)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:234
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:236
NeutralParameters.h
SG::ConstAccessor
Helper class to provide constant type-safe access to aux data.
Definition: ConstAccessor.h:54
TrigInDetValidation_Base.test
test
Definition: TrigInDetValidation_Base.py:144
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
Rec::NewVrtSecInclusiveTool::Vrt2Tr
Definition: NewVrtSecInclusiveTool.h:265
Rec::NewVrtSecInclusiveTool::massV0
static double massV0(const std::vector< std::vector< double > > &TrkAtVrt, double massP, double massPi)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:176
TrkVKalVrtFitter.h
Rec::NewVrtSecInclusiveTool::estimVrtPos
static std::vector< double > estimVrtPos(int nTrk, std::deque< long int > &selTrk, std::map< long int, std::vector< double >> &vrt)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:365
Rec::NewVrtSecInclusiveTool::Vrt2Tr::fitVertex
Amg::Vector3D fitVertex
Definition: NewVrtSecInclusiveTool.h:266
Trk::pixelEndCap0
@ pixelEndCap0
three pixel discs (on each side)
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:237
python.changerun.kk
list kk
Definition: changerun.py:41
Rec::NewVrtSecInclusiveTool::getMCPileup
static int getMCPileup(const xAOD::TrackParticle *TP)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:304
xAOD::expectNextToInnermostPixelLayerHit
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
Definition: TrackingPrimitives.h:247
Trk::Layer::surfaceRepresentation
virtual const Surface & surfaceRepresentation() const =0
Transforms the layer into a Surface representation for extrapolation.
CxxUtils::sincos::cs
double cs
Definition: sincos.h:95
HepMC::is_simulation_particle
bool is_simulation_particle(const T &p)
Method to establish if a particle (or barcode) was created during the simulation (TODO update to be s...
Definition: MagicNumbers.h:299
lumiFormat.i
int i
Definition: lumiFormat.py:92
Rec
Name: MuonSpContainer.h Package : offline/Reconstruction/MuonIdentification/muonEvent.
Definition: FakeTrackBuilder.h:10
Trk::pixelEndCap1
@ pixelEndCap1
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:238
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
Rec::NewVrtSecInclusiveTool::m_massPi
double m_massPi
Definition: NewVrtSecInclusiveTool.h:183
xAOD::TruthParticle_v1::hasProdVtx
bool hasProdVtx() const
Check for a production vertex on this particle.
Definition: TruthParticle_v1.cxx:74
Amg::pz
@ pz
Definition: GeoPrimitives.h:40
Trk::Layer::nextLayer
const Layer * nextLayer(const Amg::Vector3D &gp, const Amg::Vector3D &udir) const
getting the next/previous Layer if registered - unit for direction vector required
Definition: Layer.cxx:175
TrackSummary.h
Trk::ParametersBase
Definition: ParametersBase.h:55
xAOD::Vertex_v1::z
float z() const
Returns the z position.
xAOD::TruthParticle_v1::prodVtx
const TruthVertex_v1 * prodVtx() const
The production vertex of this particle.
Definition: TruthParticle_v1.cxx:80
Rec::NewVrtSecInclusiveTool::momAtVrt
TLorentzVector momAtVrt(const std::vector< double > &inpTrk) const
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:200
Amg::py
@ py
Definition: GeoPrimitives.h:39
xAOD::numberOfNextToInnermostPixelLayerHits
@ numberOfNextToInnermostPixelLayerHits
these are the hits in the 1st pixel barrel layer
Definition: TrackingPrimitives.h:248
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:192
MagicNumbers.h
charge
double charge(const T &p)
Definition: AtlasPID.h:494
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
CxxUtils::sincos::sn
double sn
Definition: sincos.h:92
NewVrtSecInclusiveTool.h
makeTRTBarrelCans.dy
tuple dy
Definition: makeTRTBarrelCans.py:21
TrackingVolume.h
Rec::NewVrtSecInclusiveTool::Vrt2Tr::errorMatrix
std::vector< double > errorMatrix
Definition: NewVrtSecInclusiveTool.h:269
Rec::NewVrtSecInclusiveTool::m_extrapolator
ToolHandle< Trk::IExtrapolator > m_extrapolator
Definition: NewVrtSecInclusiveTool.h:179
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
Rec::NewVrtSecInclusiveTool::vrtVrtDist
static double vrtVrtDist(const xAOD::Vertex &primVrt, const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr, double &signif)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:59
xAOD::TruthVertex_v1::nIncomingParticles
size_t nIncomingParticles() const
Get the number of incoming particles.
Definition: TruthVertex_v1.cxx:49
makeTRTBarrelCans.dx
tuple dx
Definition: makeTRTBarrelCans.py:20
xAOD::Vertex_v1::y
float y() const
Returns the y position.
Rec::NewVrtSecInclusiveTool::getPreviousParent
static const xAOD::TruthParticle * getPreviousParent(const xAOD::TruthParticle *child, int &ParentPDG)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:282
AthCommonMsg< AlgTool >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
DetType::Part
Part
Definition: DetType.h:14
Trk::Layer::layerMaterialProperties
const LayerMaterialProperties * layerMaterialProperties() const
getting the LayerMaterialProperties including full/pre/post update
Rec::NewVrtSecInclusiveTool::getG4Inter
static int getG4Inter(const xAOD::TrackParticle *TP)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:294
CxxUtils::sincos
Helper to simultaneously calculate sin and cos of the same angle.
Definition: sincos.h:76
Rec::NewVrtSecInclusiveTool::distToMatLayerSignificance
double distToMatLayerSignificance(Vrt2Tr &Vrt) const
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:315
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
TrackingGeometry.h
Rec::NewVrtSecInclusiveTool::projSV_PV
static double projSV_PV(const Amg::Vector3D &SV, const xAOD::Vertex &PV, const TLorentzVector &Direction)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:53
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
Trk::nonInteractingMuon
@ nonInteractingMuon
Definition: ParticleHypothesis.h:36
ConstAccessor.h
Helper class to provide constant type-safe access to aux data.
Rec::NewVrtSecInclusiveTool::vrtRadiusError
static double vrtRadiusError(const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:159
Rec::NewVrtSecInclusiveTool::printWrkSet
void printWrkSet(const std::vector< WrkVrt > *WrkSet, const std::string &name) const
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:26
Rec::NewVrtSecInclusiveTool::Vrt2Tr::momentum
TLorentzVector momentum
Definition: NewVrtSecInclusiveTool.h:267
fitman.k
k
Definition: fitman.py:528
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
Trk::Layer
Definition: Layer.h:73
xAOD::TruthVertex_v1::incomingParticleLinks
const TPLinks_t & incomingParticleLinks() const
Get all the incoming particles.
Rec::NewVrtSecInclusiveTool::PntPntDist
static double PntPntDist(const Amg::Vector3D &Vrt1, const Amg::Vector3D &Vrt2)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:148