ATLAS Offline Software
InnerDetector/InDetRecTools/InDetVKalVxInJetTool/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 */
4 // Author: Vadim Kostyukhin (vadim.kostyukhin@cern.ch)
5 
6 // Header include
11 #include "CxxUtils/sincos.h"
14 //-------------------------------------------------
15 // Other stuff
16 #include <cmath>
17 
18 
19 namespace InDet{
20 
21  double InDetVKalVxInJetTool::rankBTrk(double TrkPt, double JetPt, double Signif) const
22  {
23  double p_prob=0.;
24  double s_prob=0.;
25  if(TrkPt > 0. && JetPt > 0.){
26  double coeffPt=10.;
27  double pfrac=(TrkPt-m_cutPt)/std::sqrt(JetPt);
28  p_prob= pfrac/(coeffPt+pfrac); // Old probability to be b-track
29  if (Signif == 0.) return p_prob; //should be less than some epsilon?
30  }
31  if( Signif != 0.) {
32  double coeffSig=1.0;
33  s_prob=(Signif-coeffSig)/Signif; // Old probability to be b-track
34  if(TrkPt + JetPt == 0.) return s_prob;
35  }
36  //----------------------------------Initial definition of selective variable
37  double contrib=0.4;
38  return (1.+contrib)*std::max(s_prob,0.)+(1.-contrib)*p_prob;
39  }
40 
41 
43  const xAOD::TrackParticle* trk2,
44  const xAOD::Vertex & PrimVrt,
46  const
47  { // B hadron flight direction based on 2 separate tracks and PV. Calculated via plane-plane crossing
48  Amg::Vector3D PVRT(PrimVrt.x(),PrimVrt.y(),PrimVrt.z());
49 //----------------------------------------------------------------------------
50  Amg::Vector3D pnt1=trk1->perigeeParameters().position()-PVRT;
51  Amg::Vector3D mom1((trk1->p4()).Px(),(trk1->p4()).Py(),(trk1->p4()).Pz());
52  Amg::Vector3D pnt2=trk2->perigeeParameters().position()-PVRT;
53  Amg::Vector3D mom2((trk2->p4()).Px(),(trk2->p4()).Py(),(trk2->p4()).Pz());
54  pnt1.normalize(); pnt2.normalize(); mom1.normalize(); mom2.normalize();
55 //------------------------------------------------------------------------
56  const double dRLim=m_coneForTag;
57  Amg::Vector3D norm1=pnt1.cross(mom1);
58  Amg::Vector3D norm2=pnt2.cross(mom2);
59  Amg::Vector3D t=norm1.cross(norm2); t.normalize(); if(t.dot(mom1+mom2)<0.) t*=-1.;
60  double aveP=(trk1->p4()+trk2->p4()).P()/2.;
61  TLorentzVector tl; tl.SetXYZM(t.x()*aveP,t.y()*aveP,t.z()*aveP,139.57); //Crossing line of 2 planes
62  if( tl.DeltaR(trk1->p4()) >dRLim || tl.DeltaR(trk2->p4()) >dRLim ) {V1*=0.; V2*=0.; return tl;}//Too big dR between tracks and found "B line"
63 //------------------------------------------------------------------------
64  double X;
65  pnt1=trk1->perigeeParameters().position()-PVRT;
66  pnt2=trk2->perigeeParameters().position()-PVRT;
67  std::abs(mom1[1]*t[2]-mom1[2]*t[1])>std::abs(mom1[0]*t[2]-mom1[2]*t[0]) ? X=(t[1]*pnt1[2]-t[2]*pnt1[1])/(mom1[1]*t[2]-mom1[2]*t[1])
68  : X=(t[0]*pnt1[2]-t[2]*pnt1[0])/(mom1[0]*t[2]-mom1[2]*t[0]);
69  V1=pnt1+mom1*X; // First particle vertex
70  std::abs(mom2[1]*t[2]-mom2[2]*t[1])>std::abs(mom2[0]*t[2]-mom2[2]*t[0]) ? X=(t[1]*pnt2[2]-t[2]*pnt2[1])/(mom2[1]*t[2]-mom2[2]*t[1])
71  : X=(t[0]*pnt2[2]-t[2]*pnt2[0])/(mom2[0]*t[2]-mom2[2]*t[0]);
72  V2=pnt2+mom2*X; // Second particle vertex
73 //------------------------------------------------------------------------
74  if(V1.dot(t)<0. && V2.dot(t)<0.) {V1*=0.;V2*=0.;} // Check correctness of topology
75  else {V1+=PVRT; V2+=PVRT;} // Transform to detector frame
76 //------------------------------------------------------------------------
77  return tl;
78  }
79 
80  void InDetVKalVxInJetTool::printWrkSet(const std::vector<WrkVrt> *wrkVrtSet, const std::string& name) const {
81  int nGoodV=0;
82  for(const auto & iv : *wrkVrtSet) {
83  std::ostringstream ostr1,ostr2;
84  for(long kk : iv.selTrk) {ostr1<<kk<<", ";}
85  for(int kk=0; kk<(int)iv.selTrk.size(); kk++) {ostr2<<momAtVrt(iv.trkAtVrt[kk]).Perp()<<", ";}
87  <<"= "<<iv.vertex[0]
88  <<", "<<iv.vertex[1]
89  <<", "<<iv.vertex[2]
90  <<" NTrk="<<iv.selTrk.size()
91  <<" is good="<<std::boolalpha<<iv.Good<<std::noboolalpha
92  <<" Chi2="<<iv.chi2
93  <<" Mass="<<iv.vertexMom.M()
94  <<" detached="<<iv.detachedTrack
95  <<" proj.dist="<<iv.projectedVrt
96  <<" trk="<<ostr1.str()<<" trk Pt="<<ostr2.str());
97  if(iv.Good)nGoodV++;
98  }
99  ATH_MSG_DEBUG(name<<" N="<<nGoodV);
100  }
101 
102  /* Technicalities */
103  double InDetVKalVxInJetTool::projSV_PV(const Amg::Vector3D & SV, const xAOD::Vertex & PV, const TLorentzVector & Jet)
104  {
105  TVector3 SV_PV( SV.x()-PV.x(), SV.y()-PV.y(), SV.z()-PV.z() );
106  return Jet.Vect().Unit()*SV_PV.Unit();
107  }
108 
109  bool InDetVKalVxInJetTool::insideMatLayer(float xvt,float yvt) const
110  {
111  float R = std::hypot(xvt, yvt);
112  if(m_existIBL){ // 4-layer pixel detector
113  if( std::abs(R-m_beampipeR)< 1.0) return true; // Beam Pipe removal
114  if( std::abs(R-m_rLayerB) < 2.5) return true;
115  if( std::abs(R-m_rLayer1) < 3.0) return true;
116  if( std::abs(R-m_rLayer2) < 3.0) return true;
117  }else{ // 3-layer pixel detector
118  if( std::abs(R-m_beampipeR)< 1.5) return true; // Beam Pipe removal
119  if( std::abs(R-m_rLayerB) < 3.5) return true;
120  if( std::abs(R-m_rLayer1) < 4.0) return true;
121  if( std::abs(R-m_rLayer2) < 5.0) return true;
122  }
123  return false;
124  }
125 
126  double InDetVKalVxInJetTool::vrtVrtDist(const xAOD::Vertex & PrimVrt, const Amg::Vector3D & SecVrt,
127  const std::vector<double>& SecVrtErr, double& Signif)
128  const
129  {
130 
131  Amg::Vector3D SVPV(PrimVrt.x()- SecVrt.x(),PrimVrt.y()- SecVrt.y(),PrimVrt.z()- SecVrt.z());
132 
133  AmgSymMatrix(3) PrimCovMtx=PrimVrt.covariancePosition(); //Create
134  PrimCovMtx(0,0) += SecVrtErr[0];
135  PrimCovMtx(0,1) += SecVrtErr[1];
136  PrimCovMtx(1,0) += SecVrtErr[1];
137  PrimCovMtx(1,1) += SecVrtErr[2];
138  PrimCovMtx(0,2) += SecVrtErr[3];
139  PrimCovMtx(2,0) += SecVrtErr[3];
140  PrimCovMtx(1,2) += SecVrtErr[4];
141  PrimCovMtx(2,1) += SecVrtErr[4];
142  PrimCovMtx(2,2) += SecVrtErr[5];
143 
144  bool success=true;
145  AmgSymMatrix(3) WgtMtx;
146  PrimCovMtx.computeInverseWithCheck(WgtMtx, success);
147  if( !success || WgtMtx(0,0)<=0. || WgtMtx(1,1)<=0. || WgtMtx(2,2)<=0. ){
148  ATH_MSG_DEBUG(" Cov.matrix inversion failure in vertex distance significane");
149  return 1.e10;
150  }
151 
152  Signif=SVPV.transpose()*WgtMtx*SVPV;
153 
154  if(Signif<=0.)return 1.e10; //Something is wrong in distance significance.
155  Signif=std::sqrt(Signif);
156  if( Signif!=Signif ) Signif = 0.;
157  return SVPV.norm();
158  }
159 
160  double InDetVKalVxInJetTool::vrtVrtDist2D(const xAOD::Vertex & PrimVrt, const Amg::Vector3D & SecVrt,
161  const std::vector<double>& SecVrtErr, double& Signif)
162  const
163  {
164  Amg::Vector2D SVPV(PrimVrt.x()- SecVrt.x(),PrimVrt.y()- SecVrt.y());
165 
166  AmgSymMatrix(3) PrimCovMtx=PrimVrt.covariancePosition(); //Create
167  AmgSymMatrix(2) CovMtx;
168  CovMtx(0,0) = PrimCovMtx(0,0) + SecVrtErr[0];
169  CovMtx(0,1) = PrimCovMtx(0,1) + SecVrtErr[1];
170  CovMtx(1,0) = PrimCovMtx(1,0) + SecVrtErr[1];
171  CovMtx(1,1) = PrimCovMtx(1,1) + SecVrtErr[2];
172 
173  bool success=true;
174  AmgSymMatrix(2) WgtMtx;
175  CovMtx.computeInverseWithCheck(WgtMtx, success);
176  if( !success || WgtMtx(0,0)<=0. || WgtMtx(1,1)<=0. ){
177  ATH_MSG_DEBUG(" Cov.matrix inversion failure in vertex distance significane");
178  return 1.e10;
179  }
180 
181  Signif=SVPV.transpose()*WgtMtx*SVPV;
182 
183  if(Signif<=0.)return 1.e10; //Something is wrong in distance significance.
184  Signif=std::sqrt(Signif);
185  if( Signif!=Signif ) Signif = 0.;
186  return SVPV.norm();
187  }
188 
189 //--------------------------------------------------
190 // Significance along jet direction
191 //--------------------------------------------------
192  double InDetVKalVxInJetTool::vrtVrtDist(const xAOD::Vertex & PrimVrt, const Amg::Vector3D & SecVrt,
193  const std::vector<double>& SecVrtErr, const TLorentzVector & JetDir)
194  const
195  {
196  Amg::Vector3D jetDir(JetDir.Vect().Unit().X(), JetDir.Vect().Unit().Y(), JetDir.Vect().Unit().Z());
197  double projDist=(SecVrt-PrimVrt.position()).dot(jetDir);
198  Amg::Vector3D SVPV=jetDir*projDist;
199 
200  AmgSymMatrix(3) PrimCovMtx=PrimVrt.covariancePosition(); //Create
201  PrimCovMtx(0,0) += SecVrtErr[0];
202  PrimCovMtx(0,1) += SecVrtErr[1];
203  PrimCovMtx(1,0) += SecVrtErr[1];
204  PrimCovMtx(1,1) += SecVrtErr[2];
205  PrimCovMtx(0,2) += SecVrtErr[3];
206  PrimCovMtx(2,0) += SecVrtErr[3];
207  PrimCovMtx(1,2) += SecVrtErr[4];
208  PrimCovMtx(2,1) += SecVrtErr[4];
209  PrimCovMtx(2,2) += SecVrtErr[5];
210 
211  bool success=true;
212  AmgSymMatrix(3) WgtMtx;
213  PrimCovMtx.computeInverseWithCheck(WgtMtx, success);
214  if( !success || WgtMtx(0,0)<=0. || WgtMtx(1,1)<=0. || WgtMtx(2,2)<=0. ){
215  ATH_MSG_DEBUG(" Cov.matrix inversion failure in vertex distance significane");
216  return 1.e10;
217  }
218 
219  double Signif=SVPV.transpose()*WgtMtx*SVPV;
220  if(Signif<=0.)return 1.e10; //Something is wrong in distance significance.
221  Signif=std::sqrt(Signif);
222  if( Signif!=Signif ) Signif = 0.;
223  if(projDist<0)Signif=-Signif;
224  return Signif;
225  }
226 
227  double InDetVKalVxInJetTool::vrtVrtDist(const Amg::Vector3D & Vrt1, const std::vector<double> & VrtErr1,
228  const Amg::Vector3D & Vrt2, const std::vector<double> & VrtErr2)
229  const
230  {
231  double Signif;
232  Amg::Vector3D SVPV(Vrt1.x()- Vrt2.x(),Vrt1.y()- Vrt2.y(),Vrt1.z()- Vrt2.z());
233 
234  AmgSymMatrix(3) PrimCovMtx; //Create
235  PrimCovMtx(0,0) = VrtErr1[0]+VrtErr2[0];
236  PrimCovMtx(0,1) = PrimCovMtx(1,0) = VrtErr1[1]+VrtErr2[1];
237  PrimCovMtx(1,1) = VrtErr1[2]+VrtErr2[2];
238  PrimCovMtx(0,2) = PrimCovMtx(2,0) = VrtErr1[3]+VrtErr2[3];
239  PrimCovMtx(1,2) = PrimCovMtx(2,1) = VrtErr1[4]+VrtErr2[4];
240  PrimCovMtx(2,2) = VrtErr1[5]+VrtErr2[5];
241 
242  bool success=true;
243  AmgSymMatrix(3) WgtMtx;
244  PrimCovMtx.computeInverseWithCheck(WgtMtx, success);
245  if( !success || WgtMtx(0,0)<=0. || WgtMtx(1,1)<=0. || WgtMtx(2,2)<=0. ){
246  ATH_MSG_DEBUG(" Cov.matrix inversion failure in vertex distance significane");
247  return 1.e10;
248  }
249 
250  Signif=SVPV.transpose()*WgtMtx*SVPV;
251  if(Signif<=0.)return 1.e10; //Something is wrong in distance significance.
252  Signif=std::sqrt(Signif);
253  if(Signif != Signif) Signif = 0.;
254  return Signif;
255  }
256 //
257 
258 
259 //----------------------------
260 // Vertex error along radius
261 //----------------------------
262  double InDetVKalVxInJetTool::vrtRadiusError(const Amg::Vector3D & SecVrt, const std::vector<double> & VrtErr)
263  {
264  double DirX=SecVrt.x(), DirY=SecVrt.y();
265  double Covar = DirX*VrtErr[0]*DirX
266  +2.*DirX*VrtErr[1]*DirY
267  +DirY*VrtErr[2]*DirY;
268  Covar /= DirX*DirX + DirY*DirY;
269  Covar=std::sqrt(Covar);
270  if(Covar != Covar) Covar = 0.;
271  return Covar;
272  }
273 
274 
275 
276  double InDetVKalVxInJetTool::coneDist(const AmgVector(5) & vectPerig, const TLorentzVector & jetDir)
277 
278  {
279 
280  double etaTr = -std::log(std::tan(vectPerig[3]/2.));
281  double etaJet = jetDir.PseudoRapidity();
282  double adphi = std::abs(jetDir.Phi()-vectPerig[2]);
283  while(adphi> M_PI)adphi-=2.*M_PI;
284  return std::sqrt(adphi*adphi + (etaJet-etaTr)*(etaJet-etaTr));
285  }
286 
287 
288  /* Invariant mass calculation for V0 decays*/
289  /* Gives correct mass assignment in case of nonequal masses*/
290 
291 
292  double InDetVKalVxInJetTool::massV0(std::vector< std::vector<double> >& trkAtVrt,
293  double massP, double massPi )
294 
295  {
296  double ap1=1./std::abs(trkAtVrt[0][2]);
297  double ap2=1./std::abs(trkAtVrt[1][2]);
298  CxxUtils::sincos phi1 (trkAtVrt[0][0]);
299  CxxUtils::sincos theta1(trkAtVrt[0][1]);
300  CxxUtils::sincos phi2 (trkAtVrt[1][0]);
301  CxxUtils::sincos theta2(trkAtVrt[1][1]);
302  double px = phi1.cs*theta1.sn*ap1
303  + phi2.cs*theta2.sn*ap2;
304  double py = phi1.sn*theta1.sn*ap1
305  + phi2.sn*theta2.sn*ap2;
306  double pz = theta1.cs*ap1
307  + theta2.cs*ap2;
308  double ee= (ap1 > ap2) ?
309  (std::sqrt(ap1*ap1+massP*massP)+std::sqrt(ap2*ap2+massPi*massPi)):
310  (std::sqrt(ap2*ap2+massP*massP)+std::sqrt(ap1*ap1+massPi*massPi));
311  double test=(ee-pz)*(ee+pz)-px*px-py*py;
312  return test>0 ? std::sqrt(test) : 0.;
313  }
314 
315 
316 //
317 // Search for outliers using track Chi2 and track Ranking
318  int InDetVKalVxInJetTool::findMax( std::vector<double>& chi2PerTrk, std::vector<float> & rank)
319 
320  {
321  double chi2Ref=0.;
322  int position=-1;
323  if( chi2PerTrk.empty() ) return position ;
324  for (int i=0; i< (int)chi2PerTrk.size(); i++){
325  if(chi2PerTrk[i]/std::max(rank[i],(float)0.1) > chi2Ref) { chi2Ref=chi2PerTrk[i]/std::max(rank[i],(float)0.1); position=i;}
326  }
327  return position;
328  }
329 
330 
331 // Function returns a transverse momentum of track w/r some direction
332 //
333  double InDetVKalVxInJetTool::pTvsDir(const Amg::Vector3D &dir, const std::vector< double >& inpTrk)
334 
335  {
336  double norm=std::hypot(dir.x(),dir.y(),dir.z());
337  double sx=dir.x()/norm; double sy=dir.y()/norm; double sz=dir.z()/norm;
338 
339  double px=0.,py=0.,pz=0.; double scale;
340  double api=1./std::abs(inpTrk[2]);
341  CxxUtils::sincos phi (inpTrk[0]);
342  CxxUtils::sincos theta(inpTrk[1]);
343 
344  px = phi.cs * theta.sn*api;
345  py = phi.sn * theta.sn*api;
346  pz = theta.cs*api;
347  scale = px*sx + py*sy + pz*sz;
348  px -= sx*scale;
349  py -= sy*scale;
350  pz -= sz*scale;
351  return std::hypot(px,py,pz);
352  }
353 
354  TLorentzVector InDetVKalVxInJetTool::totalMom(const std::vector<const Trk::Perigee*>& inpTrk)
355  const
356  {
357  AmgVector(5) vectPerig; vectPerig.setZero();
358  double px=0.,py=0.,pz=0.,ee=0.;
359  for (const auto *i : inpTrk) {
360  if(!i) continue;
361  vectPerig = i->parameters();
362  double api=1./std::abs(vectPerig[4]);
363  CxxUtils::sincos phi (vectPerig[2]);
364  CxxUtils::sincos theta(vectPerig[3]);
365  px += phi.cs * theta.sn*api;
366  py += phi.sn * theta.sn*api;
367  pz += theta.cs*api;
368  ee += std::sqrt( api*api + m_massPi*m_massPi);
369  }
370  return {px,py,pz,ee};
371  }
372 
373  TLorentzVector InDetVKalVxInJetTool::totalMom(const std::vector<const xAOD::TrackParticle*>& InpTrk)
374 
375  {
376  TLorentzVector sum(0.,0.,0.,0.);
377  for (const auto *i : InpTrk) {
378  if( i == nullptr ) continue;
379  sum += i->p4();
380  }
381  return sum;
382  }
383 
384 
385  TLorentzVector InDetVKalVxInJetTool::momAtVrt(const std::vector< double >& inpTrk)
386  const
387  {
388  double api=1./std::abs(inpTrk[2]);
389  CxxUtils::sincos phi (inpTrk[0]);
390  CxxUtils::sincos theta(inpTrk[1]);
391  double px = phi.cs * theta.sn*api;
392  double py = phi.sn * theta.sn*api;
393  double pz = theta.cs*api;
394  double ee = std::sqrt( api*api + m_massPi*m_massPi);
395  return {px,py,pz,ee};
396  }
397 //
398 //-- Perigee in xAOD::TrackParticle
399 //
400 
402  {
403  return &(i_ntrk->perigeeParameters());
404  }
405 
406 
407 
409  const std::vector<const xAOD::TrackParticle*>& listTrk,
410  Amg::Vector3D& FitVertex,
411  Trk::IVKalState& istate) const
412  {
413  return m_fitSvc->VKalVrtFitFast(listTrk, FitVertex, istate);
414  }
415 
416 
417  StatusCode InDetVKalVxInJetTool::VKalVrtFitBase(const std::vector<const xAOD::TrackParticle*> & listPart,
419  TLorentzVector& Momentum,
420  long int& Charge,
421  std::vector<double>& ErrorMatrix,
422  std::vector<double>& Chi2PerTrk,
423  std::vector< std::vector<double> >& TrkAtVrt,
424  double& Chi2,
425  Trk::IVKalState& istate,
426  bool ifCovV0) const
427  {
428  std::vector<const xAOD::NeutralParticle*> netralPartDummy(0);
429  return m_fitSvc->VKalVrtFit( listPart, netralPartDummy,Vertex, Momentum, Charge,
430  ErrorMatrix, Chi2PerTrk, TrkAtVrt, Chi2,
431  istate, ifCovV0 );
432 
433  }
434 
436  const Trk::IVKalState& istate) const
437  {
438  return m_fitSvc->VKalGetTrkWeights(wgt, istate);
439  }
440 /*************************************************************************************************************/
441  void InDetVKalVxInJetTool::getPixelLayers(const xAOD::TrackParticle* Part, int &blHit, int &l1Hit, int &l2Hit, int &nLays ) const
442  {
443  blHit=l1Hit=l2Hit=nLays=0;
444  if(m_existIBL){ // 4-layer pixel detector
445  uint8_t IBLhit,BLhit,NPlay,IBLexp,BLexp;
446  if(!Part->summaryValue( IBLhit, xAOD::numberOfInnermostPixelLayerHits) ) IBLhit = 0;
447  if(!Part->summaryValue( BLhit, xAOD::numberOfNextToInnermostPixelLayerHits) ) BLhit = 0;
448  if(!Part->summaryValue( NPlay, xAOD::numberOfContribPixelLayers) ) NPlay = 0;
449  if(!Part->summaryValue( IBLexp, xAOD::expectInnermostPixelLayerHit) ) IBLexp = 0;
450  if(!Part->summaryValue( BLexp, xAOD::expectNextToInnermostPixelLayerHit) ) BLexp = 0;
451  blHit=IBLhit; if( IBLexp==0 ) blHit=-1;
452  l1Hit= BLhit; if( BLexp==0 ) l1Hit=-1;
453  nLays=NPlay;
454  //if((IBLhit+BLhit) == 0){ //no hits in IBL and BL VK OLD VERSION WITHOUT PATTERN AVAILABLE
455  // if(NPlay>=1) { l2Hit=1; } // at least one of remaining layers is fired
456  // if(NPlay==0) { l2Hit=0; }
457  //}else if( IBLhit*BLhit == 0){ // one hit in IBL and BL. Others are presumably also fired
458  // if(NPlay>=2) { l2Hit=1; }
459  // if(NPlay<=1) { l2Hit=0; } // no fired layer except for IBL/BL
460  //}
461  uint32_t HitPattern=Part->hitPattern();
462  l2Hit=0; if( HitPattern&((1<<Trk::pixelBarrel2)) ) l2Hit=1;
463  // bitH=HitPattern&((int)std::pow(2,Trk::pixelBarrel1));
464  } else { // 3-layer pixel detector
465  uint8_t BLhit,NPlay,NHoles,IBLhit;
466  if(!Part->summaryValue( BLhit, xAOD::numberOfBLayerHits) ) BLhit = 0;
467  if(!Part->summaryValue(IBLhit, xAOD::numberOfInnermostPixelLayerHits) ) IBLhit = 0; // Some safety
468  BLhit=BLhit>IBLhit ? BLhit : IBLhit; // Some safety
469  if(!Part->summaryValue( NPlay, xAOD::numberOfContribPixelLayers) ) NPlay = 0;
470  if(!Part->summaryValue(NHoles, xAOD::numberOfPixelHoles) ) NHoles = 0;
471  blHit=BLhit; //B-layer hit is fired. Presumable all other layers are also fired.
472  nLays=NPlay;
473  //if (BLhit==0) { //B-layer hit is absent.
474  // if(NPlay>=2) { l1Hit=l2Hit=1;}
475  // if(NPlay==0) { l1Hit=l2Hit=0;}
476  // if(NPlay==1) {
477  // if( NHoles==0) {l1Hit=0; l2Hit=1;}
478  // if( NHoles>=1) {l1Hit=1; l2Hit=0;}
479  // }
480  //}
481  uint32_t HitPattern=Part->hitPattern();
482  l1Hit=0; if( HitPattern&((1<<Trk::pixelBarrel1)) ) l1Hit=1;
483  l2Hit=0; if( HitPattern&((1<<Trk::pixelBarrel2)) ) l2Hit=1;
484  }
485 
486  }
487  void InDetVKalVxInJetTool::getPixelProblems(const xAOD::TrackParticle* Part, int &splshIBL, int &splshBL ) const
488  {
489  splshIBL=splshBL=0;
490  if(m_existIBL){ // 4-layer pixel detector
491  uint8_t share,split;
492  //if(!Part->summaryValue( IBLout, xAOD::numberOfInnermostPixelLayerOutliers ) ) IBLout = 0;
493  if(!Part->summaryValue( share, xAOD::numberOfInnermostPixelLayerSharedHits ) ) share = 0;
494  if(!Part->summaryValue( split, xAOD::numberOfInnermostPixelLayerSplitHits ) ) split = 0;
495  splshIBL=share+split;
496  if(!Part->summaryValue( share, xAOD::numberOfNextToInnermostPixelLayerSharedHits ) ) share = 0;
498  splshBL=share+split;
499  }
500  }
501  void InDetVKalVxInJetTool::getPixelDiscs(const xAOD::TrackParticle* Part, int &d0Hit, int &d1Hit, int &d2Hit)
502  {
503  uint32_t HitPattern=Part->hitPattern();
504  d0Hit=0; if( HitPattern&((1<<Trk::pixelEndCap0)) ) d0Hit=1;
505  d1Hit=0; if( HitPattern&((1<<Trk::pixelEndCap1)) ) d1Hit=1;
506  d2Hit=0; if( HitPattern&((1<<Trk::pixelEndCap2)) ) d2Hit=1;
507  }
508 
509 /*************************************************************************************************************/
510 
511  Amg::MatrixX InDetVKalVxInJetTool::makeVrtCovMatrix( std::vector<double> & errorMatrix )
512 
513  {
514  Amg::MatrixX vrtCovMtx(3,3);
515  vrtCovMtx(0,0) = errorMatrix[0];
516  vrtCovMtx(0,1) = vrtCovMtx(1,0) = errorMatrix[1];
517  vrtCovMtx(1,1) = errorMatrix[2];
518  vrtCovMtx(0,2) = vrtCovMtx(2,0) = errorMatrix[3];
519  vrtCovMtx(1,2) = vrtCovMtx(2,1) = errorMatrix[4];
520  vrtCovMtx(2,2) = errorMatrix[5];
521  return vrtCovMtx;
522  }
523 
524  void InDetVKalVxInJetTool::fillVrtNTup( std::vector<Vrt2Tr> & all2TrVrt)
525  const
526  {
527  if (!m_h) return;
528  Hists& h = getHists();
529  int ipnt=0;
530  Amg::Vector3D pf1,pf2;
531  for(auto & vrt : all2TrVrt) {
532  if(ipnt==DevTuple::maxNTrk)break;
533  h.m_curTup->VrtDist2D[ipnt]=vrt.fitVertex.perp();
534  h.m_curTup->VrtSig3D[ipnt]=vrt.signif3D;
535  h.m_curTup->VrtSig2D[ipnt]=vrt.signif2D;
536  h.m_curTup->itrk[ipnt]=vrt.i;
537  h.m_curTup->jtrk[ipnt]=vrt.j;
538  h.m_curTup->mass[ipnt]=vrt.momentum.M();
539  h.m_curTup->Chi2[ipnt]=vrt.chi2;
540  h.m_curTup->badVrt[ipnt]=vrt.badVrt;
541  h.m_curTup->VrtDR[ipnt]=vrt.dRSVPV;
542  h.m_curTup->VrtErrR[ipnt]= vrtRadiusError(vrt.fitVertex, vrt.errorMatrix);
543  Amg::setRThetaPhi(pf1, 1., vrt.trkAtVrt[0][1], vrt.trkAtVrt[0][0]);
544  Amg::setRThetaPhi(pf2, 1., vrt.trkAtVrt[1][1], vrt.trkAtVrt[1][0]);
545  h.m_curTup->VrtdRtt[ipnt]=Amg::deltaR(pf1,pf2);
546  ipnt++; h.m_curTup->nVrt=ipnt;
547  }
548  }
549 
550  void InDetVKalVxInJetTool::fillNVrtNTup(std::vector<WrkVrt> & VrtSet, std::vector< std::vector<float> > & trkScore,
551  const xAOD::Vertex & PV, const TLorentzVector & JetDir)
552  const
553  {
554  if (!m_h) return;
555  Hists& h = getHists();
556  int ipnt=0;
557  TLorentzVector VertexMom;
558  for(auto & vrt : VrtSet) {
559  if(ipnt==DevTuple::maxNVrt)break;
560  h.m_curTup->NVrtDist2D[ipnt]=vrt.vertex.perp();
561  h.m_curTup->NVrtNT[ipnt]=vrt.selTrk.size();
562  h.m_curTup->NVrtTrkI[ipnt]=vrt.selTrk[0];
563  h.m_curTup->NVrtM[ipnt]=vrt.vertexMom.M();
564  h.m_curTup->NVrtChi2[ipnt]=vrt.chi2;
565  float maxW=0., sumW=0.;
566  for(auto trk : vrt.selTrk){ sumW+=trkScore[trk][0]; maxW=std::max(trkScore[trk][0], maxW);}
567  h.m_curTup->NVrtMaxW[ipnt]=maxW;
568  h.m_curTup->NVrtAveW[ipnt]=sumW/vrt.selTrk.size();
569  TLorentzVector SVPV(vrt.vertex.x()-PV.x(),vrt.vertex.y()-PV.y(),vrt.vertex.z()-PV.z(),1.);
570  h.m_curTup->NVrtDR[ipnt]=JetDir.DeltaR(SVPV);
571  VertexMom += vrt.vertexMom;
572  ipnt++; h.m_curTup->nNVrt=ipnt;
573  }
574  h.m_curTup->TotM=VertexMom.M();
575  }
576 
577 
579  static const SG::ConstAccessor< ElementLink< xAOD::TruthParticleContainer> > truthParticleLinkAcc ("truthParticleLink");
580  if( truthParticleLinkAcc.isAvailable (*TP) ) {
582  truthParticleLinkAcc (*TP);
583  if( !tplink.isValid() ) return 0;
584  static const SG::ConstAccessor<float> truthMatchProbabilityAcc ("truthMatchProbability");
585  if( truthMatchProbabilityAcc (*TP ) < 0.5 ) return 0;
586  if (HepMC::is_simulation_particle(*tplink)) return 0;
587  if( (*tplink)->hasProdVtx()){
588  if( (*tplink)->prodVtx()->nIncomingParticles()==1){
589  int PDGID1=0, PDGID2=0, PDGID3=0, PDGID4=0;
590  const xAOD::TruthParticle * parTP1=getPreviousParent(*tplink, PDGID1);
591  const xAOD::TruthParticle * parTP2=nullptr ;
592  const xAOD::TruthParticle * parTP3=nullptr ;
593  int noBC1=notFromBC(PDGID1);
594  if(noBC1) parTP2 = getPreviousParent(parTP1, PDGID2);
595  int noBC2=notFromBC(PDGID2);
596  if(noBC2 && parTP2) parTP3 = getPreviousParent(parTP2, PDGID3);
597  int noBC3=notFromBC(PDGID3);
598  if(noBC3 && parTP3) getPreviousParent(parTP3, PDGID4);
599  int noBC4=notFromBC(PDGID4);
600  if(noBC1 && noBC2 && noBC3 && noBC4)return 0;
601  return 1; //This is a reconstructed track from B/C decays
602  } } }
603  return 0;
604  }
605 
607  int noBC=0;
608  if(PDGID<=0)return 1;
609  if(PDGID>600 && PDGID<4000)noBC=1;
610  if(PDGID<400 || PDGID>5600)noBC=1;
611  if(PDGID==513 || PDGID==523 || PDGID==533 || PDGID==543)noBC=1; //Remove tracks from B* (they are in PV)
612  if(PDGID==5114 || PDGID==5214 || PDGID==5224 || PDGID==5314 || PDGID==5324)noBC=1; //Remove tracks from B_Barions* (they are in PV)
613  //if(PDGID==413 || PDGID==423 || PDGID==433 )continue; //Keep tracks from D* (they are from B vertex)
614  //if(PDGID==4114 || PDGID==4214 || PDGID==4224 || PDGID==4314 || PDGID==4324)continue;
615  return noBC;
616  }
618  ParentPDG=0;
619  if( child->hasProdVtx() ){
620  if( child->prodVtx()->nIncomingParticles()==1 ){
621  ParentPDG = abs((*(child->prodVtx()->incomingParticleLinks())[0])->pdgId());
622  return *(child->prodVtx()->incomingParticleLinks())[0];
623  }
624  }
625  return nullptr;
626  }
627 
628 
630  static const SG::ConstAccessor< ElementLink< xAOD::TruthParticleContainer> > truthParticleLinkAcc ("truthParticleLink");
631  if( truthParticleLinkAcc.isAvailable (*TP) ) {
633  truthParticleLinkAcc (*TP);
634  if( tplink.isValid() && HepMC::is_simulation_particle(*tplink)) return 1;
635  }
636  return 0;
637  }
639  static const SG::ConstAccessor< ElementLink< xAOD::TruthParticleContainer> > truthParticleLinkAcc ("truthParticleLink");
640  if( truthParticleLinkAcc.isAvailable (*TP) ) {
642  truthParticleLinkAcc (*TP);
643  if( !tplink.isValid() ) return 1;
644  } else { return 1; }
645  return 0;
646  }
647 
648 } //end namespace
Trk::pixelEndCap2
@ pixelEndCap2
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:239
xAOD::numberOfPixelHoles
@ numberOfPixelHoles
number of pixel layers on track with absence of hits [unit8_t].
Definition: TrackingPrimitives.h:261
Trk::TrkVKalVrtFitter::VKalVrtFit
virtual StatusCode VKalVrtFit(const std::vector< const xAOD::TrackParticle * > &, const std::vector< const xAOD::NeutralParticle * > &, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, dvect &ErrorMatrix, dvect &Chi2PerTrk, std::vector< std::vector< double >> &TrkAtVrt, double &Chi2, IVKalState &istate, bool ifCovV0=false) const override final
xAOD::Vertex_v1::x
float x() const
Returns the x position.
xAOD::numberOfInnermostPixelLayerSplitHits
@ numberOfInnermostPixelLayerSplitHits
number of Pixel 0th layer barrel hits split by cluster splitting
Definition: TrackingPrimitives.h:240
PlotCalibFromCool.norm
norm
Definition: PlotCalibFromCool.py:100
fitman.sy
sy
Definition: fitman.py:524
InDetVKalVxInJetTool.h
Amg::MatrixX
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Definition: EventPrimitives.h:29
fitman.sz
sz
Definition: fitman.py:527
InDet::InDetVKalVxInJetTool::Hists
Definition: InDetVKalVxInJetTool.h:124
test_pyathena.px
px
Definition: test_pyathena.py:18
max
#define max(a, b)
Definition: cfImp.cxx:41
InDet::InDetVKalVxInJetTool::m_h
std::unique_ptr< Hists > m_h
Definition: InDetVKalVxInJetTool.h:174
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
xAOD::Vertex
Vertex_v1 Vertex
Define the latest version of the vertex class.
Definition: Event/xAOD/xAODTracking/xAODTracking/Vertex.h:16
InDet::InDetVKalVxInJetTool::m_fitSvc
Trk::TrkVKalVrtFitter * m_fitSvc
Definition: InDetVKalVxInJetTool.h:222
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
InDet::InDetVKalVxInJetTool::getPixelLayers
void getPixelLayers(const xAOD::TrackParticle *Part, int &blHit, int &l1Hit, int &l2Hit, int &nLay) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:441
InDet::InDetVKalVxInJetTool::m_cutPt
double m_cutPt
Definition: InDetVKalVxInJetTool.h:181
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
InDet::InDetVKalVxInJetTool::getG4Inter
static int getG4Inter(const xAOD::TrackParticle *TP)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:629
Jet
Basic data class defines behavior for all Jet objects The Jet class is the principal data class for...
Definition: Reconstruction/Jet/JetEvent/JetEvent/Jet.h:47
InDet::InDetVKalVxInJetTool::getHists
Hists & getHists() const
Definition: InDetVKalVxInJetTool.cxx:493
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
InDet::InDetVKalVxInJetTool::DevTuple::maxNVrt
static const int maxNVrt
Definition: InDetVKalVxInJetTool.h:259
InDet::InDetVKalVxInJetTool::findMax
static int findMax(std::vector< double > &chi2PerTrk, std::vector< float > &rank)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:318
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
xAOD::numberOfNextToInnermostPixelLayerSplitHits
@ numberOfNextToInnermostPixelLayerSplitHits
number of Pixel 1st layer barrel hits split by cluster splitting
Definition: TrackingPrimitives.h:251
InDet::InDetVKalVxInJetTool::vrtRadiusError
static double vrtRadiusError(const Amg::Vector3D &secVrt, const std::vector< double > &vrtErr)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:262
InDet::InDetVKalVxInJetTool::m_rLayerB
double m_rLayerB
Definition: InDetVKalVxInJetTool.h:203
InDet::InDetVKalVxInJetTool::notFromBC
static int notFromBC(int PDGID)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:606
Trk::ParametersT
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
Definition: EMErrorDetail.h:25
InDet
DUMMY Primary Vertex Finder.
Definition: VP1ErrorUtils.h:36
Trk::TrkVKalVrtFitter::VKalVrtFitFast
virtual StatusCode VKalVrtFitFast(std::span< const xAOD::TrackParticle *const >, Amg::Vector3D &Vertex, double &minDZ, IVKalState &istate) const
Definition: VKalVrtFitFastSvc.cxx:56
theta
Scalar theta() const
theta method
Definition: AmgMatrixBasePlugin.h:71
python.compressB64.sx
string sx
Definition: compressB64.py:96
M_PI
#define M_PI
Definition: ActiveFraction.h:11
sincos.h
Helper to simultaneously calculate sin and cos of the same angle.
InDet::InDetVKalVxInJetTool::m_beampipeR
double m_beampipeR
Definition: InDetVKalVxInJetTool.h:202
xAOD::expectInnermostPixelLayerHit
@ expectInnermostPixelLayerHit
Do we expect a 0th-layer barrel hit for this track?
Definition: TrackingPrimitives.h:236
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
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
InDet::InDetVKalVxInJetTool::massV0
static double massV0(std::vector< std::vector< double > > &trkAtVrt, double massP, double massPi)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:292
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
yodamerge_tmp.scale
scale
Definition: yodamerge_tmp.py:138
AmgSymMatrix
#define AmgSymMatrix(dim)
Definition: EventPrimitives.h:52
xAOD::numberOfBLayerHits
@ numberOfBLayerHits
these are the hits in the first pixel layer, i.e.
Definition: TrackingPrimitives.h:231
TrkVKalVrtFitter.h
Monitored::X
@ X
Definition: HistogramFillerUtils.h:24
InDet::InDetVKalVxInJetTool::fillNVrtNTup
void fillNVrtNTup(std::vector< WrkVrt > &vrtSet, std::vector< std::vector< float > > &trkScore, const xAOD::Vertex &primVrt, const TLorentzVector &jetDir) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:550
InDet::InDetVKalVxInJetTool::fillVrtNTup
void fillVrtNTup(std::vector< Vrt2Tr > &all2TrVrt) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:524
InDet::InDetVKalVxInJetTool::GetTrkFitWeights
StatusCode GetTrkFitWeights(std::vector< double > &wgt, const Trk::IVKalState &istate) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:435
Trk::pixelEndCap0
@ pixelEndCap0
three pixel discs (on each side)
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:237
xAOD::TrackParticle_v1::p4
virtual FourMom_t p4() const override final
The full 4-momentum of the particle.
Definition: TrackParticle_v1.cxx:129
python.changerun.kk
list kk
Definition: changerun.py:41
InDet::InDetVKalVxInJetTool::m_rLayer1
double m_rLayer1
Definition: InDetVKalVxInJetTool.h:204
xAOD::TrackParticle_v1::perigeeParameters
const Trk::Perigee & perigeeParameters() const
Returns the Trk::MeasuredPerigee track parameters.
Definition: TrackParticle_v1.cxx:485
InDet::InDetVKalVxInJetTool::printWrkSet
void printWrkSet(const std::vector< WrkVrt > *WrkSet, const std::string &name) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:80
xAOD::expectNextToInnermostPixelLayerHit
@ expectNextToInnermostPixelLayerHit
Do we expect a 1st-layer barrel hit for this track?
Definition: TrackingPrimitives.h:247
convertTimingResiduals.sum
sum
Definition: convertTimingResiduals.py:55
CxxUtils::sincos::cs
double cs
Definition: sincos.h:95
InDet::InDetVKalVxInJetTool::VKalVrtFitBase
StatusCode VKalVrtFitBase(const std::vector< const xAOD::TrackParticle * > &listPart, Amg::Vector3D &Vertex, TLorentzVector &Momentum, long int &Charge, std::vector< double > &ErrorMatrix, std::vector< double > &Chi2PerTrk, std::vector< std::vector< double > > &TrkAtVrt, double &Chi2, Trk::IVKalState &istate, bool ifCovV0) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:417
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
Trk::pixelBarrel2
@ pixelBarrel2
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:234
lumiFormat.i
int i
Definition: lumiFormat.py:92
InDet::InDetVKalVxInJetTool::getPixelProblems
void getPixelProblems(const xAOD::TrackParticle *Part, int &splshIBL, int &splshBL) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:487
Trk::pixelEndCap1
@ pixelEndCap1
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:238
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
InDet::InDetVKalVxInJetTool::totalMom
TLorentzVector totalMom(const std::vector< const Trk::Perigee * > &inpTrk) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:354
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
AmgVector
AmgVector(4) T2BSTrackFilterTool
Definition: T2BSTrackFilterTool.cxx:114
xAOD::TruthParticle_v1
Class describing a truth particle in the MC record.
Definition: TruthParticle_v1.h:41
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
InDet::InDetVKalVxInJetTool::m_existIBL
bool m_existIBL
Definition: InDetVKalVxInJetTool.h:198
InDet::InDetVKalVxInJetTool::getMCPileup
static int getMCPileup(const xAOD::TrackParticle *TP)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:638
drawFromPickle.tan
tan
Definition: drawFromPickle.py:36
TrackSummary.h
xAOD::Vertex_v1::z
float z() const
Returns the z position.
InDet::InDetVKalVxInJetTool::rankBTrk
double rankBTrk(double TrkPt, double JetPt, double Signif) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:21
dot.dot
def dot(G, fn, nodesToHighlight=[])
Definition: dot.py:5
InDet::InDetVKalVxInJetTool::VKalVrtFitFastBase
StatusCode VKalVrtFitFastBase(const std::vector< const xAOD::TrackParticle * > &listPart, Amg::Vector3D &Vertex, Trk::IVKalState &istate) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:408
beamspotman.dir
string dir
Definition: beamspotman.py:623
xAOD::TruthParticle_v1::prodVtx
const TruthVertex_v1 * prodVtx() const
The production vertex of this particle.
Definition: TruthParticle_v1.cxx:80
Trk::pixelBarrel1
@ pixelBarrel1
Definition: Tracking/TrkEvent/TrkTrackSummary/TrkTrackSummary/TrackSummary.h:233
InDet::InDetVKalVxInJetTool::m_coneForTag
double m_coneForTag
Definition: InDetVKalVxInJetTool.h:186
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
InDet::InDetVKalVxInJetTool::getIdHF
static int getIdHF(const xAOD::TrackParticle *TP)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:578
InDet::InDetVKalVxInJetTool::m_rLayer2
double m_rLayer2
Definition: InDetVKalVxInJetTool.h:205
InDet::InDetVKalVxInJetTool::getBDir
TLorentzVector getBDir(const xAOD::TrackParticle *trk1, const xAOD::TrackParticle *trk2, const xAOD::Vertex &primVrt, Amg::Vector3D &V1, Amg::Vector3D &V2) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:42
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Trk::TrkVKalVrtFitter::VKalGetTrkWeights
virtual StatusCode VKalGetTrkWeights(dvect &Weights, const IVKalState &istate) const override final
Definition: VKalVrtFitSvc.cxx:546
CxxUtils::sincos::sn
double sn
Definition: sincos.h:92
InDet::InDetVKalVxInJetTool::getPixelDiscs
static void getPixelDiscs(const xAOD::TrackParticle *Part, int &d0Hit, int &d1Hit, int &d2Hit)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:501
Amg::deltaR
double deltaR(const Amg::Vector3D &v1, const Amg::Vector3D &v2)
Definition: GeoPrimitivesHelpers.h:122
h
xAOD::Vertex_v1
Class describing a Vertex.
Definition: Vertex_v1.h:42
InDet::InDetVKalVxInJetTool::momAtVrt
TLorentzVector momAtVrt(const std::vector< double > &inpTrk) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:385
Trk::IVKalState
Definition: IVKalState.h:21
InDet::InDetVKalVxInJetTool::getPreviousParent
static const xAOD::TruthParticle * getPreviousParent(const xAOD::TruthParticle *child, int &ParentPDG)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:617
xAOD::TruthVertex_v1::nIncomingParticles
size_t nIncomingParticles() const
Get the number of incoming particles.
Definition: TruthVertex_v1.cxx:49
GeoPrimitivesHelpers.h
xAOD::Vertex_v1::y
float y() const
Returns the y position.
Amg::setRThetaPhi
void setRThetaPhi(Amg::Vector3D &v, double r, double theta, double phi)
sets radius, the theta and phi angle of a vector.
Definition: GeoPrimitivesHelpers.h:80
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
DetType::Part
Part
Definition: DetType.h:14
CxxUtils::sincos
Helper to simultaneously calculate sin and cos of the same angle.
Definition: sincos.h:76
xAOD::numberOfInnermostPixelLayerSharedHits
@ numberOfInnermostPixelLayerSharedHits
number of Pixel 0th layer barrel hits shared by several tracks.
Definition: TrackingPrimitives.h:239
InDet::InDetVKalVxInJetTool::m_massPi
const double m_massPi
Definition: InDetVKalVxInJetTool.h:238
xAOD::numberOfContribPixelLayers
@ numberOfContribPixelLayers
number of contributing layers of the pixel detector [unit8_t].
Definition: TrackingPrimitives.h:230
InDet::InDetVKalVxInJetTool::pTvsDir
static double pTvsDir(const Amg::Vector3D &Dir, const std::vector< double > &inpTrk)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:333
SG::ConstAccessor::isAvailable
bool isAvailable(const ELT &e) const
Test to see if this variable exists in the store.
dqt_zlumi_alleff_HIST.tl
tl
Definition: dqt_zlumi_alleff_HIST.py:73
xAOD::TrackParticle_v1
Class describing a TrackParticle.
Definition: TrackParticle_v1.h:43
xAOD::numberOfNextToInnermostPixelLayerSharedHits
@ numberOfNextToInnermostPixelLayerSharedHits
number of Pixel 1st layer barrel hits shared by several tracks.
Definition: TrackingPrimitives.h:250
InDet::InDetVKalVxInJetTool::projSV_PV
static double projSV_PV(const Amg::Vector3D &SV, const xAOD::Vertex &PV, const TLorentzVector &Jet)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:103
InDet::InDetVKalVxInJetTool::DevTuple::maxNTrk
static const int maxNTrk
Definition: InDetVKalVxInJetTool.h:258
InDet::InDetVKalVxInJetTool::coneDist
static double coneDist(const AmgVector(5) &, const TLorentzVector &)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:276
Trk::split
@ split
Definition: LayerMaterialProperties.h:38
InDet::InDetVKalVxInJetTool::getPerigee
static const Trk::Perigee * getPerigee(const xAOD::TrackParticle *)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:401
InDet::InDetVKalVxInJetTool::vrtVrtDist
double vrtVrtDist(const xAOD::Vertex &primVrt, const Amg::Vector3D &SecVrt, const std::vector< double > &VrtErr, double &Signif) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:126
InDet::InDetVKalVxInJetTool::vrtVrtDist2D
double vrtVrtDist2D(const xAOD::Vertex &primVrt, const Amg::Vector3D &SecVrt, const std::vector< double > &VrtErr, double &Signif) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:160
xAOD::numberOfInnermostPixelLayerHits
@ numberOfInnermostPixelLayerHits
these are the hits in the 0th pixel barrel layer
Definition: TrackingPrimitives.h:237
InDet::InDetVKalVxInJetTool::insideMatLayer
bool insideMatLayer(float, float) const
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:109
InDet::InDetVKalVxInJetTool::makeVrtCovMatrix
static Amg::MatrixX makeVrtCovMatrix(std::vector< double > &ErrorMatrix)
Definition: InnerDetector/InDetRecTools/InDetVKalVxInJetTool/src/Utilities.cxx:511
xAOD::TruthVertex_v1::incomingParticleLinks
const TPLinks_t & incomingParticleLinks() const
Get all the incoming particles.