50 std::vector<char> track_pass_map(trackParticleContainer->size());
51 std::vector<char> vertex_pass_map(D0Container->size());
58 bool passed_D0_or_D0b = (flag_D0(*
vertex) || flag_D0b(*
vertex));
62 if(!passed_D0_or_D0b)
continue;
67 if(!track1) {
ATH_MSG_WARNING(
"Could not find track at D0 vertex (index 0)");
continue; }
68 if(!track2) {
ATH_MSG_WARNING(
"Could not find track at D0 vertex (index 1)");
continue; }
72 const std::vector<float>& reFit_Px = acc_reFit_Px(*
vertex);
73 const std::vector<float>& reFit_Py = acc_reFit_Py(*
vertex);
74 const std::vector<float>& reFit_Pz = acc_reFit_Pz(*
vertex);
76 TLorentzVector track1_pion, track1_kaon;
77 track1_pion.SetXYZM(reFit_Px.at(0),reFit_Py.at(0),reFit_Pz.at(0),
m_pionMass);
78 track1_kaon.SetXYZM(reFit_Px.at(0),reFit_Py.at(0),reFit_Pz.at(0),
m_kaonMass);
80 TLorentzVector track2_pion, track2_kaon;
81 track2_pion.SetXYZM(reFit_Px.at(1),reFit_Py.at(1),reFit_Pz.at(1),
m_pionMass);
82 track2_kaon.SetXYZM(reFit_Px.at(1),reFit_Py.at(1),reFit_Pz.at(1),
m_kaonMass);
85 TLorentzVector D0_hypo1 = track1_pion + track2_kaon;
86 TLorentzVector D0_hypo2 = track1_kaon + track2_pion;
88 bool passed_Dstar =
false;
94 if( track1->
index() == track3->index() )
continue;
95 if( track2->
index() == track3->index() )
continue;
97 TLorentzVector track3_pion= track3->p4();
99 const double deltaM_hypo1 = (D0_hypo1 + track3_pion).M() - D0_hypo1.M();
100 const double deltaM_hypo2 = (D0_hypo2 + track3_pion).M() - D0_hypo2.M();
109 track_pass_map[track1->
index()] =
true;
110 track_pass_map[track2->
index()] =
true;
111 track_pass_map[track3->index()] =
true;
119 vertex_pass_map[
vertex->index()] =
true;
130 flagTrackPass(*
track) = track_pass_map[
track->index()] ;
141 flagVertexPass(*
vertex) = vertex_pass_map[
vertex->index()];
145 return StatusCode::SUCCESS;