18 const std::unordered_map<std::string,int>& TrkVarInt,
23 double eta = TrkVarDouble.at(
"eta");
24 double PInvVert = TrkVarDouble.at(
"PInvVert");
25 double ThetaVert = TrkVarDouble.at(
"ThetaVert");
26 double A0Vert = TrkVarDouble.at(
"A0Vert");
27 double ZVert = TrkVarDouble.at(
"ZVert");
28 double Chi2 = TrkVarDouble.at(
"Chi2");
29 double ConeDist = TrkVarDouble.at(
"ConeDist");
30 double CovTrkMtx11 = TrkVarDouble.at(
"CovTrkMtx11");
31 double CovTrkMtx22 = TrkVarDouble.at(
"CovTrkMtx22");
32 double trkP = TrkVarDouble.at(
"trkP");
33 double trkPErr = TrkVarDouble.at(
"trkPErr");
35 int PixelHits = TrkVarInt.at(
"PixelHits");
36 int SctHits = TrkVarInt.at(
"SctHits");
37 int BLayHits = TrkVarInt.at(
"BLayHits");
38 int SharedHits = TrkVarInt.at(
"SharedHits");
39 int badHits = TrkVarInt.at(
"badHits");
43 if ( ConeDist >
m_coneForTag )
return StatusCode::FAILURE;
47 h.m_hb_trkPErr->Fill( trkPErr , evtWgt);
49 if(trkPErr>0.5)
return StatusCode::FAILURE;
52 double Pt =
sin(ThetaVert)/std::abs(PInvVert);
56 if(
Pt < pT_cut)
return StatusCode::FAILURE;
67 if(Chi2 > chi2_cut)
return StatusCode::FAILURE;
70 if(std::abs(A0Vert) > d0_cut)
return StatusCode::FAILURE;
74 if(badHits && PixelHits<=3)
return StatusCode::FAILURE;
77 if(PixelHits < pix_cut)
return StatusCode::FAILURE;
81 if(SctHits<3)
return StatusCode::FAILURE;
83 if(std::abs(
eta)>1.65) SctHits--;
85 if(SctHits < strip_cut)
return StatusCode::FAILURE;
88 if((PixelHits+SctHits) < si_cut)
return StatusCode::FAILURE;
91 if(BLayHits < inpix_cut)
return StatusCode::FAILURE;
94 if(SharedHits > shared_cut)
return StatusCode::FAILURE;
96 return StatusCode::SUCCESS;
105 const TLorentzVector & JetDir,
106 std::vector<const xAOD::TrackParticle*>& SelectedTracks,
111 std::vector<const xAOD::TrackParticle*>::const_iterator i_ntrk;
112 std::vector<double> Impact,ImpactError;
113 std::multimap<double,const xAOD::TrackParticle*> orderedTrk;
115 for (i_ntrk = InpTrk.begin(); i_ntrk < InpTrk.end(); ++i_ntrk) {
117 if((*i_ntrk)->numberDoF() == 0)
continue;
118 if( (*i_ntrk)->pt() > JetDir.Pt() )
continue;
123 const Trk::Perigee mPer=(*i_ntrk)->perigeeParameters() ;
124 AmgVector(5) VectPerig = mPer.parameters();
127 double trkChi2 = (*i_ntrk)->chiSquared() / (*i_ntrk)->numberDoF();
129 double CovTrkMtx11 = (*i_ntrk)->definingParametersCovMatrix()(0,0);
130 double CovTrkMtx22 = (*i_ntrk)->definingParametersCovMatrix()(1,1);
131 double CovTrkMtx55 = (*i_ntrk)->definingParametersCovMatrix()(4,4);
132 double ConeDist =
coneDist(VectPerig,JetDir);
134 double trkP=1./std::abs(VectPerig[4]);
135 double trkPErr=std::sqrt(CovTrkMtx55)*trkP ;
137 uint8_t PixelHits,SctHits,BLayHits,sctSharedHits,pixSharedHits;
143 long int SharedHits = sctSharedHits+pixSharedHits;
145 uint8_t splSCTHits,outSCTHits,splPixHits,outPixHits;
150 bool badHits = ( splSCTHits || outSCTHits || outPixHits || splPixHits );
153 double ImpactA0=std::sqrt( (perigeePos.x()-PrimVrt.
x())*(perigeePos.x()-PrimVrt.
x())
154 +(perigeePos.y()-PrimVrt.
y())*(perigeePos.y()-PrimVrt.
y()) );
155 double ImpactZ=perigeePos.z()-PrimVrt.
z();
156 double ImpactSignif=std::sqrt(ImpactA0*ImpactA0/CovTrkMtx11+ImpactZ*ImpactZ/CovTrkMtx22);
160 h.m_hb_trkD0->Fill( ImpactA0, evtWgt);
163 double eta = (*i_ntrk)->eta();
165 std::unordered_map<std::string,double> TrkVarDouble;
166 std::unordered_map<std::string,int> TrkVarInt;
168 TrkVarDouble[
"eta"] =
eta;
169 TrkVarDouble[
"PInvVert"] = VectPerig[4];
170 TrkVarDouble[
"ThetaVert"] = VectPerig[3];
171 TrkVarDouble[
"A0Vert"] = ImpactA0;
172 TrkVarDouble[
"ZVert"] = ImpactZ;
173 TrkVarDouble[
"Chi2"] = trkChi2;
174 TrkVarDouble[
"ConeDist"] = ConeDist;
175 TrkVarDouble[
"CovTrkMtx11"] = CovTrkMtx11;
176 TrkVarDouble[
"CovTrkMtx22"] = CovTrkMtx22;
177 TrkVarDouble[
"trkP"] = trkP;
178 TrkVarDouble[
"trkPErr"] = trkPErr;
180 TrkVarInt[
"PixelHits"] = PixelHits;
181 TrkVarInt[
"SctHits"] = SctHits;
182 TrkVarInt[
"BLayHits"] = BLayHits;
183 TrkVarInt[
"badHits"] = badHits;
184 TrkVarInt[
"SharedHits"] = SharedHits;
187 if(
sc.isFailure() )
continue;
189 double rnkBTrk=
rankBTrk(0.,0.,ImpactSignif);
190 if(rnkBTrk<0.7)nPrimTrk += 1;
191 orderedTrk.emplace(rnkBTrk,*i_ntrk);
195 std::map<double,const xAOD::TrackParticle*>::reverse_iterator rt=orderedTrk.rbegin();
196 SelectedTracks.resize(orderedTrk.size());
197 for (
int cntt=0; rt!=orderedTrk.rend(); ++rt,++cntt) {SelectedTracks[cntt]=(*rt).second;}