78 const std::pair<const xAOD::TrackParticle*,const xAOD::TrackParticle*> iTrks,
80 std::pair<ROOT::Math::XYZTVector,ROOT::Math::XYZTVector> moms,
84 return isgood(ctx, iTrks, candV, moms,tPV,quality);
88 const std::pair<const xAOD::TrackParticle*,const xAOD::TrackParticle*> iTrks,
90 std::pair<ROOT::Math::XYZTVector,ROOT::Math::XYZTVector> moms,
92 float & quality)
const
95 double Prob2v=TMath::Prob(candV.
chiSquared(),1);
98 auto sumMom=moms.first+moms.second;
104 ROOT::Math::XYZVector vSVPV(candV.
x()-tPV.
x(),candV.
y()-tPV.
y(),candV.
z()-tPV.
z());
105 double cosSVPV=vSVPV.Unit().Dot(sumMom.Vect().Unit());
114 if(
m_do2TrkIBLChecks && ( (ihitIBL==0&&jhitIBL>0) || (ihitIBL>0&&jhitIBL==0) ) )
return false;
115 int ihitBL =
getBLHit (iTrks.first);
116 int jhitBL =
getBLHit (iTrks.second);
119 if( ihitIBL<1 && ihitBL<1)
return false;
120 if( jhitIBL<1 && jhitBL<1)
return false;
122 float ihitR = iTrks.first->radiusOfFirstHit();
123 float jhitR = iTrks.second->radiusOfFirstHit();
124 if(std::abs(ihitR-jhitR)>50.)
return false;
125 if( vrtR-std::min(ihitR,jhitR) > 50.)
return false;
126 if(ihitR-vrtR > 180.+2.*vrtRErr)
return false;
127 if(jhitR-vrtR > 180.+2.*vrtRErr)
return false;
130 if(std::abs(ihitR-jhitR)>12.)
return false;
131 if( ihitR-vrtR > 36.)
return false;
132 if( jhitR-vrtR > 36.)
return false;
133 if( ihitR-vrtR <-2.*vrtRErr)
return false;
134 if( jhitR-vrtR <-2.*vrtRErr)
return false;
137 std::vector<double> impact,impactError;
138 m_fitSvc->VKalGetImpact( ctx, iTrks.first, tPV.
position(), 1, impact, impactError);
139 float trk1Signif = sqrt( impact[0]*impact[0]/impactError[0] + impact[1]*impact[1]/impactError[2]);
140 m_fitSvc->VKalGetImpact( ctx, iTrks.second, tPV.
position(), 1, impact, impactError);
141 float trk2Signif = sqrt( impact[0]*impact[0]/impactError[0] + impact[1]*impact[1]/impactError[2]);
142 float minPtT = std::min(iTrks.first->pt(),iTrks.second->pt());
143 std::vector<float> VARS(10);
145 VARS[1]=log(sumMom.Pt());
147 VARS[3]=log(vrtR<20. ? vSVPV.Rho() : vrtR);
148 VARS[4]=log(std::min(trk1Signif,trk2Signif));
149 VARS[5]=log(std::max(trk1Signif,trk2Signif));
151 VARS[7]=sqrt(std::abs(1.-cosSVPV*cosSVPV));
153 VARS[9]=std::max(ihitR,jhitR);
165 double DirX=SecVrt.x(), DirY=SecVrt.y();
166 double Covar = DirX*VrtErr[0]*DirX
167 +2.*DirX*VrtErr[1]*DirY
168 +DirY*VrtErr[2]*DirY;
169 Covar /= DirX*DirX + DirY*DirY;
170 Covar=std::sqrt(std::abs(Covar));
171 if(Covar != Covar) Covar = 0.;
virtual bool isgood(const EventContext &ctx, const std::pair< const xAOD::TrackParticle *, const xAOD::TrackParticle * > tracks, const xAOD::Vertex &candV, std::pair< ROOT::Math::XYZTVector, ROOT::Math::XYZTVector > moms, const xAOD::Vertex &tPV) const override final
constexpr double mass[PARTICLEHYPOTHESES]
the array of masses