40 const EventContext& ctx = Gaudi::Hive::currentContext();
51 std::vector<char> track_pass_map(trackParticleContainer->size());
52 std::vector<char> vertex_pass_map(D0Container->size());
59 bool passed_D0_or_D0b = (flag_D0(*
vertex) || flag_D0b(*
vertex));
63 if(!passed_D0_or_D0b)
continue;
68 if(!track1) {
ATH_MSG_WARNING(
"Could not find track at D0 vertex (index 0)");
continue; }
69 if(!track2) {
ATH_MSG_WARNING(
"Could not find track at D0 vertex (index 1)");
continue; }
73 const std::vector<float>& reFit_Px = acc_reFit_Px(*
vertex);
74 const std::vector<float>& reFit_Py = acc_reFit_Py(*
vertex);
75 const std::vector<float>& reFit_Pz = acc_reFit_Pz(*
vertex);
77 TLorentzVector track1_pion, track1_kaon;
78 track1_pion.SetXYZM(reFit_Px.at(0),reFit_Py.at(0),reFit_Pz.at(0),
m_pionMass);
79 track1_kaon.SetXYZM(reFit_Px.at(0),reFit_Py.at(0),reFit_Pz.at(0),
m_kaonMass);
81 TLorentzVector track2_pion, track2_kaon;
82 track2_pion.SetXYZM(reFit_Px.at(1),reFit_Py.at(1),reFit_Pz.at(1),
m_pionMass);
83 track2_kaon.SetXYZM(reFit_Px.at(1),reFit_Py.at(1),reFit_Pz.at(1),
m_kaonMass);
86 TLorentzVector D0_hypo1 = track1_pion + track2_kaon;
87 TLorentzVector D0_hypo2 = track1_kaon + track2_pion;
89 bool passed_Dstar =
false;
95 if( track1->
index() == track3->index() )
continue;
96 if( track2->
index() == track3->index() )
continue;
98 TLorentzVector track3_pion= track3->p4();
100 const double deltaM_hypo1 = (D0_hypo1 + track3_pion).M() - D0_hypo1.M();
101 const double deltaM_hypo2 = (D0_hypo2 + track3_pion).M() - D0_hypo2.M();
110 track_pass_map[track1->
index()] =
true;
111 track_pass_map[track2->
index()] =
true;
112 track_pass_map[track3->index()] =
true;
120 vertex_pass_map[
vertex->index()] =
true;
131 flagTrackPass(*
track) = track_pass_map[
track->index()] ;
142 flagVertexPass(*
vertex) = vertex_pass_map[
vertex->index()];
146 return StatusCode::SUCCESS;