14 #include "GaudiKernel/ConcurrencyFlags.h"
17 #include "Math/Vector3D.h"
27 const std::string&
name,
36 declareInterface< ITwoTrackVertexSelector >(
this);
57 std::unique_ptr<TFile>
rootFile(TFile::Open(rootFilePath.c_str(),
"READ"));
60 return StatusCode::FAILURE;
62 std::unique_ptr<TTree> training((TTree*)
rootFile->Get(
"BDT"));
63 m_SV2T_BDT = std::make_unique<MVAUtils::BDT>(training.get());
65 return StatusCode::SUCCESS;
73 return StatusCode::SUCCESS;
79 std::pair<ROOT::Math::XYZTVector,ROOT::Math::XYZTVector> moms,
88 std::pair<ROOT::Math::XYZTVector,ROOT::Math::XYZTVector> moms,
93 double Prob2v=TMath::Prob(candV.
chiSquared(),1);
96 auto sumMom=moms.first+moms.second;
102 ROOT::Math::XYZVector vSVPV(candV.
x()-tPV.
x(),candV.
y()-tPV.
y(),candV.
z()-tPV.
z());
103 double cosSVPV=vSVPV.Unit().Dot(sumMom.Vect().Unit());
112 if(
m_do2TrkIBLChecks && ( (ihitIBL==0&&jhitIBL>0) || (ihitIBL>0&&jhitIBL==0) ) )
return false;
113 int ihitBL =
getBLHit (iTrks.first);
114 int jhitBL =
getBLHit (iTrks.second);
117 if( ihitIBL<1 && ihitBL<1)
return false;
118 if( jhitIBL<1 && jhitBL<1)
return false;
120 float ihitR = iTrks.first->radiusOfFirstHit();
121 float jhitR = iTrks.second->radiusOfFirstHit();
122 if(std::abs(ihitR-jhitR)>50.)
return false;
123 if( vrtR-
std::min(ihitR,jhitR) > 50.)
return false;
124 if(ihitR-vrtR > 180.+2.*vrtRErr)
return false;
125 if(jhitR-vrtR > 180.+2.*vrtRErr)
return false;
128 if(std::abs(ihitR-jhitR)>12.)
return false;
129 if( ihitR-vrtR > 36.)
return false;
130 if( jhitR-vrtR > 36.)
return false;
131 if( ihitR-vrtR <-2.*vrtRErr)
return false;
132 if( jhitR-vrtR <-2.*vrtRErr)
return false;
135 std::vector<double> impact,impactError;
136 m_fitSvc->VKalGetImpact( iTrks.first, tPV.
position(), 1, impact, impactError);
137 float trk1Signif = sqrt( impact[0]*impact[0]/impactError[0] + impact[1]*impact[1]/impactError[2]);
138 m_fitSvc->VKalGetImpact( iTrks.second, tPV.
position(), 1, impact, impactError);
139 float trk2Signif = sqrt( impact[0]*impact[0]/impactError[0] + impact[1]*impact[1]/impactError[2]);
140 float minPtT =
std::min(iTrks.first->pt(),iTrks.second->pt());
141 std::vector<float> VARS(10);
143 VARS[1]=
log(sumMom.Pt());
145 VARS[3]=
log(vrtR<20. ? vSVPV.Rho() : vrtR);
149 VARS[7]=sqrt(std::abs(1.-cosSVPV*cosSVPV));
163 double DirX=SecVrt.x(), DirY=SecVrt.y();
164 double Covar = DirX*VrtErr[0]*DirX
165 +2.*DirX*VrtErr[1]*DirY
166 +DirY*VrtErr[2]*DirY;
167 Covar /= DirX*DirX + DirY*DirY;
168 Covar=std::sqrt(std::abs(Covar));
169 if(Covar != Covar) Covar = 0.;
178 if( IBLexp==0 )
return -1;
187 if( BLexp==0 )
return -1;