ATLAS Offline Software
Sel2TrkVertices.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
7 // Header include
10 #include "MVAUtils/BDT.h"
11 //-------------------------------------------------
12 // Other stuff
15 
16 #include "TMath.h"
17 #include "TH1.h"
18 #include "TH2D.h"
19 //
20 
21 
22 namespace Rec{
23 
24 
25 //
26 //
27 //--------------------------------------------------------
28 // Template routine for 2track secondary vertices selection
29 //
30 
31  void NewVrtSecInclusiveTool::select2TrVrt(std::vector<const xAOD::TrackParticle*> & selectedTracks,
32  const xAOD::Vertex & primVrt,
33  std::map<long int,std::vector<double>> & goodVrt,
34  compatibilityGraph_t& compatibilityGraph )
35  const
36  {
37  std::vector<const xAOD::NeutralParticle*> neutralPartDummy(0);
38  std::vector<const xAOD::TrackParticle*> tracksForFit(2,nullptr);
39  std::vector<double> impact,impactError;
40  std::vector<double> inpMass(2,m_massPi);
41  long int Charge;
42  int i,j;
43  StatusCode sc;
44  Vrt2Tr tmpVrt;
45  std::vector<Vrt2Tr> all2TrVrt(0);
46  TLorentzVector PSum2T;
47  Amg::Vector3D iniVrt(0.,0.,0.);
48 //
49  int NTracks = (int) (selectedTracks.size());
50 //
51 // impact parameters with sign calculations
52 //
54  double signifR=0.,signifZ=0.;
55  std::vector<int> nPixHits(NTracks,0);
56  std::vector<double> trackSignif(NTracks),dRdZratio(NTracks);
57  for (i=0; i<NTracks; i++) {
58  m_fitSvc->VKalGetImpact(selectedTracks[i], primVrt.position(), 1, impact, impactError);
59  signifR = impact[0]/ sqrt(impactError[0]);
60  signifZ = impact[1]/ sqrt(impactError[2]);
61  trackSignif[i] = sqrt( signifR*signifR + signifZ*signifZ);
62  dRdZratio[i] = std::abs(signifR/signifZ);
63  if( !(selectedTracks[i]->summaryValue(nPixelHits,xAOD::numberOfPixelHits)) ) nPixelHits=0;
64  nPixHits[i]=nPixelHits;
65  if(m_fillHist){
66  Hists& h = getHists();
67  h.m_hb_impactR->Fill( signifR, m_w_1);
68  h.m_hb_impactZ->Fill( signifZ, m_w_1);
69  h.m_hb_impactRZ->Fill(signifR, signifZ, m_w_1);
70  h.m_hb_impact->Fill( trackSignif[i], m_w_1);
71  if( i<DevTuple::maxNTrk){
72  Hists& h = getHists();
73  h.m_curTup->pttrk[i]=selectedTracks[i]->pt();
74  h.m_curTup->d0trk[i]=selectedTracks[i]->d0();
75  h.m_curTup->Sig3D[i]=trackSignif[i];
76  h.m_curTup->idHF[i] =getIdHF(selectedTracks[i]);
77  h.m_curTup->dRdZrat[i] =dRdZratio[i];
78  uint8_t TRTHits;
79  if( !(selectedTracks[i]->summaryValue( TRTHits,xAOD::numberOfTRTHits))) TRTHits=0;
80  h.m_curTup->trkTRT[i] =TRTHits;
81  h.m_curTup->etatrk[i] =selectedTracks[i]->eta();
82  }
83  }
84  }
85 
86  if( m_fillHist ){
87  Hists& h = getHists();
88  h.m_curTup->nTrk=NTracks < DevTuple::maxNTrk ? NTracks : DevTuple::maxNTrk ;
89  h.m_curTup->n2Vrt=0;
90  }
91 
92  std::vector<std::vector<std::tuple<int,float>>> trkCount(NTracks);
93  std::unique_ptr<Trk::IVKalState> state = m_fitSvc->makeState();
94  m_fitSvc->setMassInputParticles( inpMass, *state ); // Use pion masses for fit
95  for (i=0; i<NTracks-1; i++) {
96  if(trackSignif[i]<m_trkSigCut || dRdZratio[i]<m_dRdZRatioCut )continue;
97  for (j=i+1; j<NTracks; j++) {
98  if(trackSignif[j]<m_trkSigCut || dRdZratio[j]<m_dRdZRatioCut )continue;
99  PSum2T=selectedTracks[i]->p4()+selectedTracks[j]->p4();
100  if(PSum2T.M()>1.5*m_vrt2TrMassLimit)continue; //Approximate mass
101  if( std::abs(selectedTracks[i]->eta()-selectedTracks[j]->eta())==0 &&
102  std::abs(selectedTracks[i]->phi()-selectedTracks[j]->phi())==0 &&
103  std::abs(selectedTracks[i]->pt() -selectedTracks[j]->pt())==0 ) continue; //remove duplicated tracks
104  float ihitR = selectedTracks[i]->radiusOfFirstHit();
105  float jhitR = selectedTracks[j]->radiusOfFirstHit();
106  if(std::abs(ihitR-jhitR)>50.)continue; //- FMPs are in very different layers
107 
108  tracksForFit[0]=selectedTracks[i];
109  tracksForFit[1]=selectedTracks[j];
110  double minDZ=0.;
111  sc=m_fitSvc->VKalVrtFitFast(tracksForFit,tmpVrt.fitVertex,minDZ,*state); /* Fast crude estimation*/
112  if( sc.isFailure() ) { /* No initial estimation */
113  iniVrt=primVrt.position();
114  } else {
115  double cosMomVrtDir = projSV_PV(tmpVrt.fitVertex,primVrt,PSum2T);
116  if( cosMomVrtDir>0. ) iniVrt=tmpVrt.fitVertex; /* Good initial estimation */
117  else iniVrt=primVrt.position();
118  }
119  if(nPixHits[i]>0 && nPixHits[j]>0){ if(minDZ> m_fastZSVCut) continue; } // Drop SV candidates with big Z track-track distance.
120  else{ if(minDZ>2.*m_fastZSVCut) continue; } // Drop SV candidates with big Z track-track distance.
121  m_fitSvc->setApproximateVertex(iniVrt.x(), iniVrt.y(), iniVrt.z(),*state);
122  sc=m_fitSvc->VKalVrtFit(tracksForFit, neutralPartDummy, tmpVrt.fitVertex, tmpVrt.momentum, Charge,
123  tmpVrt.errorMatrix, tmpVrt.chi2PerTrk, tmpVrt.trkAtVrt, tmpVrt.chi2, *state, false );
124  if(sc.isFailure()) continue; /* No fit */
125  double Prob2v=TMath::Prob(tmpVrt.chi2,1);
126  if( Prob2v < m_sel2VrtProbCut ) continue;
127  if( tmpVrt.momentum.M()> m_vrt2TrMassLimit ) continue;
128  if( tmpVrt.fitVertex.perp() > m_maxSVRadiusCut) continue; // Too far from interaction point
129  double cosSVPV=projSV_PV(tmpVrt.fitVertex, primVrt, tmpVrt.momentum);
130  TLorentzVector SVPV(tmpVrt.fitVertex.x()-primVrt.x(),
131  tmpVrt.fitVertex.y()-primVrt.y(),
132  tmpVrt.fitVertex.z()-primVrt.z(), 10.);
133  if(m_fillHist){
134  Hists& h = getHists();
135  if(Charge==0){h.m_hb_massPiPi->Fill(tmpVrt.momentum.M(),1.);}
136  h.m_hb_cosSVMom->Fill(cosSVPV,1.);
137  h.m_hb_etaSV->Fill(SVPV.Eta(),1.);
138  }
139  if(cosSVPV<m_cosSVPVCut)continue;
140  if(tmpVrt.momentum.Pt()<1000.)continue;
141  double vrtR=tmpVrt.fitVertex.perp();
142  double vrtRErr=vrtRadiusError(tmpVrt.fitVertex,tmpVrt.errorMatrix );
143 //Check close material layer
144  double dstMatSignif=1.e4;
145  if(m_removeTrkMatSignif>0. && vrtR>20.){
146  if(vrtR<30.){ dstMatSignif=std::abs(vrtR-m_beampipeR)/vrtRErr;}
147  else { dstMatSignif=distToMatLayerSignificance(tmpVrt);} //Material in Pixel volume
148  if(dstMatSignif<m_removeTrkMatSignif)continue;
149  }
150 //
151 // Check pixel hits vs vertex positions.
152  int ihitIBL = getIBLHit(selectedTracks[i]);
153  int jhitIBL = getIBLHit(selectedTracks[j]);
154  if( (ihitIBL==0&&jhitIBL>0) || (ihitIBL>0&&jhitIBL==0) ) continue;
155  int ihitBL = getBLHit (selectedTracks[i]);
156  int jhitBL = getBLHit (selectedTracks[j]);
157 //--Very general cleaning cuts based on ID geometry and applicable to all processes
158  if(tmpVrt.fitVertex.perp()<m_firstPixelLayerR-2.*vrtRErr){
159  if( ihitIBL<1 && ihitBL<1) continue;
160  if( jhitIBL<1 && jhitBL<1) continue;
161  }
162  if( vrtR-std::min(ihitR,jhitR) > 50.) continue; //- FMP is closer to (0,0) than SV itself
163  if(ihitR-vrtR > 180.+2.*vrtRErr)continue; //- Distance FMP-vertex should be less then SCT-Pixel gap
164  if(jhitR-vrtR > 180.+2.*vrtRErr)continue; //- Distance FMP-vertex should be less then SCT-Pixel gap
165 //-------------------------------------------------------
166  if(m_useVertexCleaning){ //More agressive cleaning
167  if(std::abs(ihitR-jhitR)>12.) continue;
168  if( ihitR-vrtR > 36.) continue; // Too big dR between vertex and hit in pixel
169  if( jhitR-vrtR > 36.) continue; // Should be another layer in between
170  if( ihitR-vrtR <-2.*vrtRErr) continue; // Vertex is behind hit in pixel
171  if( jhitR-vrtR <-2.*vrtRErr) continue; // Vertex is behind hit in pixel
172  }
173 //
174 // Debugging and BDT
175  double minPtT = std::min(tracksForFit[0]->pt(),tracksForFit[1]->pt());
176  if( m_fillHist ){
177  Hists& h = getHists();
178  double Sig3D=0.,Sig2D=0., Dist2D=0.;
179  int idisk1=0,idisk2=0,idisk3=0,jdisk1=0,jdisk2=0,jdisk3=0;
180  int sumIBLHits = std::max(ihitIBL,0)+std::max(jhitIBL,0);
181  int sumBLHits = std::max(ihitBL, 0)+std::max(jhitBL, 0);
182  getPixelDiscs(selectedTracks[i],idisk1,idisk2,idisk3);
183  getPixelDiscs(selectedTracks[j],jdisk1,jdisk2,jdisk3);
184  vrtVrtDist(primVrt, tmpVrt.fitVertex, tmpVrt.errorMatrix, Sig3D);
185  Dist2D=vrtVrtDist2D(primVrt, tmpVrt.fitVertex, tmpVrt.errorMatrix, Sig2D);
186  h.m_hb_signif3D->Fill(Sig3D,1.);
187  h.m_curTup->VrtTrkHF [h.m_curTup->n2Vrt] = getIdHF(tracksForFit[0])+ getIdHF(tracksForFit[1]);
188  h.m_curTup->VrtTrkI [h.m_curTup->n2Vrt] = getG4Inter(tracksForFit[0])+ getG4Inter(tracksForFit[1]);
189  h.m_curTup->VrtCh [h.m_curTup->n2Vrt] = Charge;
190  h.m_curTup->VrtProb [h.m_curTup->n2Vrt] = Prob2v;
191  h.m_curTup->VrtSig3D [h.m_curTup->n2Vrt] = Sig3D;
192  h.m_curTup->VrtSig2D [h.m_curTup->n2Vrt] = Sig2D;
193  h.m_curTup->VrtDist2D[h.m_curTup->n2Vrt] = vrtR<20. ? Dist2D : vrtR;
194  h.m_curTup->VrtM [h.m_curTup->n2Vrt] = tmpVrt.momentum.M();
195  h.m_curTup->VrtZ [h.m_curTup->n2Vrt] = tmpVrt.fitVertex.z();
196  h.m_curTup->VrtPt [h.m_curTup->n2Vrt] = tmpVrt.momentum.Pt();
197  h.m_curTup->VrtEta [h.m_curTup->n2Vrt] = SVPV.Eta();
198  h.m_curTup->VrtIBL [h.m_curTup->n2Vrt] = sumIBLHits;
199  h.m_curTup->VrtBL [h.m_curTup->n2Vrt] = sumBLHits;
200  h.m_curTup->VrtCosSPM[h.m_curTup->n2Vrt] = cosSVPV;
201  h.m_curTup->VMinPtT [h.m_curTup->n2Vrt] = minPtT;
202  h.m_curTup->VMinS3DT [h.m_curTup->n2Vrt] = std::min(trackSignif[i],trackSignif[j]);
203  h.m_curTup->VMaxS3DT [h.m_curTup->n2Vrt] = std::max(trackSignif[i],trackSignif[j]);
204  h.m_curTup->VrtBDT [h.m_curTup->n2Vrt] = 1.1;
205  h.m_curTup->VrtHR1 [h.m_curTup->n2Vrt] = ihitR;
206  h.m_curTup->VrtHR2 [h.m_curTup->n2Vrt] = jhitR;
207  h.m_curTup->VrtDZ [h.m_curTup->n2Vrt] = minDZ;
208  h.m_curTup->VrtDisk [h.m_curTup->n2Vrt] = idisk1+10*idisk2+20*idisk3+30*jdisk1+40*jdisk2+50*jdisk3;
209  h.m_curTup->VSigMat [h.m_curTup->n2Vrt] = dstMatSignif;
210  if(h.m_curTup->n2Vrt<DevTuple::maxNVrt-1)h.m_curTup->n2Vrt++;
211  }
212 //-------------------BDT based rejection
213  if(tmpVrt.momentum.Pt() > m_vrt2TrPtLimit) continue;
214  std::vector<float> VARS(10);
215  VARS[0]=Prob2v;
216  VARS[1]=log(tmpVrt.momentum.Pt());
217  VARS[2]=log(std::max(minPtT,m_cutPt));
218  VARS[3]=log(vrtR<20. ? SVPV.Perp() : vrtR);
219  VARS[4]=log(std::max(std::min(trackSignif[i],trackSignif[j]),m_trkSigCut));
220  VARS[5]=log(std::max(trackSignif[i],trackSignif[j]));
221  VARS[6]=tmpVrt.momentum.M();
222  VARS[7]=sqrt(std::abs(1.-cosSVPV*cosSVPV));
223  VARS[8]=SVPV.Eta();
224  VARS[9]=std::max(ihitR,jhitR);
225  float wgtSelect=m_SV2T_BDT->GetGradBoostMVA(VARS);
226  if( m_fillHist ) {
227  Hists& h = getHists();
228  h.m_curTup->VrtBDT[h.m_curTup->n2Vrt-1] = wgtSelect;
229  }
230  if(wgtSelect<m_v2tIniBDTCut) continue;
231 //
232 //--- Save good candidate for multi-vertex fit
233 //
234  add_edge(i,j,compatibilityGraph);
235  goodVrt[NTracks*i+j]=std::vector<double>{tmpVrt.fitVertex.x(),tmpVrt.fitVertex.y(),tmpVrt.fitVertex.z()};
236  trkCount[i].emplace_back(j,wgtSelect); trkCount[j].emplace_back(i,wgtSelect);
237  }
238  }
239  //=== Resolve -!----!- case to speed up cluster finding
240  for(int t=0; t<NTracks; t++){
241  if(trkCount[t].size()==2){
242  i=std::get<0>(trkCount[t][0]);
243  j=std::get<0>(trkCount[t][1]);
244  if(trkCount[i].size()==1 && trkCount[j].size()==1 ){
245  if( std::get<1>(trkCount[t][0]) < std::get<1>(trkCount[t][1]) ) {
246  remove_edge(t,i,compatibilityGraph);
247  if(t<i)goodVrt.erase(NTracks*t+i); else goodVrt.erase(NTracks*i+t);
248  trkCount[i].clear();
249  trkCount[t].erase(trkCount[t].begin()+0);
250  } else {
251  remove_edge(t,j,compatibilityGraph);
252  if(t<j)goodVrt.erase(NTracks*t+j); else goodVrt.erase(NTracks*j+t);
253  trkCount[j].clear();
254  trkCount[t].erase(trkCount[t].begin()+1);
255  }
256  }
257  }
258  }
259  //=== Remove isolated 2track vertices
260  for(int t=0; t<NTracks; t++){
261  if(trkCount[t].size()==1){
262  i=std::get<0>(trkCount[t][0]);
263  if(trkCount[i].size()==1){
264  if( std::get<1>(trkCount[t][0]) < m_v2tFinBDTCut ) {
265  remove_edge(t,i,compatibilityGraph);
266  if(t<i)goodVrt.erase(NTracks*t+i); else goodVrt.erase(NTracks*i+t);
267  trkCount[t].clear();
268  trkCount[i].clear();
269  }
270  }
271  }
272  }
273 
274  }
275 
276 
277 } //end of namespace
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
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
Rec::NewVrtSecInclusiveTool::m_maxSVRadiusCut
double m_maxSVRadiusCut
Definition: NewVrtSecInclusiveTool.h:153
Rec::NewVrtSecInclusiveTool::Vrt2Tr::chi2
double chi2
Definition: NewVrtSecInclusiveTool.h:272
max
#define max(a, b)
Definition: cfImp.cxx:41
Rec::NewVrtSecInclusiveTool::Hists
Definition: NewVrtSecInclusiveTool.h:101
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
Rec::NewVrtSecInclusiveTool::m_dRdZRatioCut
float m_dRdZRatioCut
Definition: NewVrtSecInclusiveTool.h:160
PlotCalibFromCool.begin
begin
Definition: PlotCalibFromCool.py:94
test_pyathena.pt
pt
Definition: test_pyathena.py:11
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::numberOfPixelHits
@ numberOfPixelHits
these are the pixel hits, including the b-layer [unit8_t].
Definition: TrackingPrimitives.h:259
xAOD::numberOfTRTHits
@ numberOfTRTHits
number of TRT hits [unit8_t].
Definition: TrackingPrimitives.h:275
xAOD::Vertex_v1::position
const Amg::Vector3D & position() const
Returns the 3-pos.
Rec::NewVrtSecInclusiveTool::m_useVertexCleaning
bool m_useVertexCleaning
Definition: NewVrtSecInclusiveTool.h:171
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
IDTPM::nPixelHits
float nPixelHits(const U &p)
Definition: TrackParametersHelper.h:326
Rec::NewVrtSecInclusiveTool::select2TrVrt
void select2TrVrt(std::vector< const xAOD::TrackParticle * > &SelectedTracks, const xAOD::Vertex &primVrt, std::map< long int, std::vector< double >> &vrt, compatibilityGraph_t &compatibilityGraph) const
Definition: Sel2TrkVertices.cxx:31
Rec::NewVrtSecInclusiveTool::Vrt2Tr
Definition: NewVrtSecInclusiveTool.h:265
TrkVKalVrtFitter.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
Rec::NewVrtSecInclusiveTool::m_cutPt
double m_cutPt
Definition: NewVrtSecInclusiveTool.h:146
Rec::NewVrtSecInclusiveTool::Vrt2Tr::fitVertex
Amg::Vector3D fitVertex
Definition: NewVrtSecInclusiveTool.h:266
Rec::NewVrtSecInclusiveTool::m_removeTrkMatSignif
float m_removeTrkMatSignif
Definition: NewVrtSecInclusiveTool.h:166
Rec::NewVrtSecInclusiveTool::m_fitSvc
ToolHandle< Trk::TrkVKalVrtFitter > m_fitSvc
Definition: NewVrtSecInclusiveTool.h:180
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
Rec::NewVrtSecInclusiveTool::m_vrt2TrMassLimit
float m_vrt2TrMassLimit
Definition: NewVrtSecInclusiveTool.h:157
Rec::NewVrtSecInclusiveTool::DevTuple::maxNTrk
static constexpr int maxNTrk
Definition: NewVrtSecInclusiveTool.h:202
lumiFormat.i
int i
Definition: lumiFormat.py:85
Rec
Name: MuonSpContainer.h Package : offline/Reconstruction/MuonIdentification/muonEvent.
Definition: FakeTrackBuilder.h:10
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Rec::NewVrtSecInclusiveTool::m_massPi
double m_massPi
Definition: NewVrtSecInclusiveTool.h:183
Rec::NewVrtSecInclusiveTool::m_fastZSVCut
float m_fastZSVCut
Definition: NewVrtSecInclusiveTool.h:167
Rec::NewVrtSecInclusiveTool::m_vrt2TrPtLimit
float m_vrt2TrPtLimit
Definition: NewVrtSecInclusiveTool.h:158
xAOD::Vertex_v1::z
float z() const
Returns the z position.
Rec::NewVrtSecInclusiveTool::m_cosSVPVCut
float m_cosSVPVCut
Definition: NewVrtSecInclusiveTool.h:168
BDT.h
min
#define min(a, b)
Definition: cfImp.cxx:40
Rec::NewVrtSecInclusiveTool::m_trkSigCut
double m_trkSigCut
Definition: NewVrtSecInclusiveTool.h:155
Rec::NewVrtSecInclusiveTool::m_v2tIniBDTCut
float m_v2tIniBDTCut
Definition: NewVrtSecInclusiveTool.h:161
Rec::NewVrtSecInclusiveTool::m_sel2VrtProbCut
double m_sel2VrtProbCut
Definition: NewVrtSecInclusiveTool.h:151
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
Rec::NewVrtSecInclusiveTool::m_beampipeR
float m_beampipeR
Definition: NewVrtSecInclusiveTool.h:164
NewVrtSecInclusiveTool.h
Rec::NewVrtSecInclusiveTool::compatibilityGraph_t
boost::adjacency_list< boost::listS, boost::vecS, boost::undirectedS > compatibilityGraph_t
Definition: NewVrtSecInclusiveTool.h:278
Rec::NewVrtSecInclusiveTool::m_w_1
double m_w_1
Definition: NewVrtSecInclusiveTool.h:99
Rec::NewVrtSecInclusiveTool::Vrt2Tr::errorMatrix
std::vector< double > errorMatrix
Definition: NewVrtSecInclusiveTool.h:269
h
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
Rec::NewVrtSecInclusiveTool::m_firstPixelLayerR
float m_firstPixelLayerR
Definition: NewVrtSecInclusiveTool.h:165
GeoPrimitivesHelpers.h
Rec::NewVrtSecInclusiveTool::getHists
Hists & getHists() const
Definition: NewVrtSecInclusiveTool.cxx:361
Rec::NewVrtSecInclusiveTool::m_v2tFinBDTCut
float m_v2tFinBDTCut
Definition: NewVrtSecInclusiveTool.h:162
xAOD::Vertex_v1::y
float y() const
Returns the y position.
python.CaloCondTools.log
log
Definition: CaloCondTools.py:20
Rec::NewVrtSecInclusiveTool::getG4Inter
static int getG4Inter(const xAOD::TrackParticle *TP)
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:294
Rec::NewVrtSecInclusiveTool::distToMatLayerSignificance
double distToMatLayerSignificance(Vrt2Tr &Vrt) const
Definition: Reconstruction/VKalVrt/NewVrtSecInclusiveTool/src/Utilities.cxx:315
Rec::NewVrtSecInclusiveTool::Vrt2Tr::trkAtVrt
std::vector< std::vector< double > > trkAtVrt
Definition: NewVrtSecInclusiveTool.h:271
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
Rec::NewVrtSecInclusiveTool::m_SV2T_BDT
std::unique_ptr< MVAUtils::BDT > m_SV2T_BDT
Definition: NewVrtSecInclusiveTool.h:175
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::m_fillHist
bool m_fillHist
Definition: NewVrtSecInclusiveTool.h:170
Rec::NewVrtSecInclusiveTool::DevTuple::maxNVrt
static constexpr int maxNVrt
Definition: NewVrtSecInclusiveTool.h:203
AnalysisMisc.h
Rec::NewVrtSecInclusiveTool::Vrt2Tr::momentum
TLorentzVector momentum
Definition: NewVrtSecInclusiveTool.h:267
Rec::NewVrtSecInclusiveTool::Vrt2Tr::chi2PerTrk
std::vector< double > chi2PerTrk
Definition: NewVrtSecInclusiveTool.h:270