49 std::vector<char> track_pass_map(trackParticleContainer->
size());
50 std::vector<char> vertex_pass_map(D0Container->
size());
57 bool passed_D0_or_D0b = (flag_D0(*vertex) || flag_D0b(*vertex));
61 if(!passed_D0_or_D0b)
continue;
66 if(!track1) {
ATH_MSG_WARNING(
"Could not find track at D0 vertex (index 0)");
continue; }
67 if(!track2) {
ATH_MSG_WARNING(
"Could not find track at D0 vertex (index 1)");
continue; }
71 const std::vector<float>& reFit_Px = acc_reFit_Px(*vertex);
72 const std::vector<float>& reFit_Py = acc_reFit_Py(*vertex);
73 const std::vector<float>& reFit_Pz = acc_reFit_Pz(*vertex);
75 TLorentzVector track1_pion, track1_kaon;
76 track1_pion.SetXYZM(reFit_Px.at(0),reFit_Py.at(0),reFit_Pz.at(0),
m_pionMass);
77 track1_kaon.SetXYZM(reFit_Px.at(0),reFit_Py.at(0),reFit_Pz.at(0),
m_kaonMass);
79 TLorentzVector track2_pion, track2_kaon;
80 track2_pion.SetXYZM(reFit_Px.at(1),reFit_Py.at(1),reFit_Pz.at(1),
m_pionMass);
81 track2_kaon.SetXYZM(reFit_Px.at(1),reFit_Py.at(1),reFit_Pz.at(1),
m_kaonMass);
84 TLorentzVector D0_hypo1 = track1_pion + track2_kaon;
85 TLorentzVector D0_hypo2 = track1_kaon + track2_pion;
87 bool passed_Dstar =
false;
93 if( track1->index() == track3->index() )
continue;
94 if( track2->index() == track3->index() )
continue;
96 TLorentzVector track3_pion= track3->p4();
98 const double deltaM_hypo1 = (D0_hypo1 + track3_pion).M() - D0_hypo1.M();
99 const double deltaM_hypo2 = (D0_hypo2 + track3_pion).M() - D0_hypo2.M();
108 track_pass_map[track1->index()] =
true;
109 track_pass_map[track2->index()] =
true;
110 track_pass_map[track3->index()] =
true;
118 vertex_pass_map[vertex->index()] =
true;
129 flagTrackPass(*track) = track_pass_map[track->index()] ;
140 flagVertexPass(*vertex) = vertex_pass_map[vertex->index()];
144 return StatusCode::SUCCESS;