10 #include <b2bii/utility/BelleMdstToGenHepevt.h>
13 static const Belle::Gen_hepevt& gen_level_step1(
const Belle::Gen_hepevt& gen)
15 return (gen && gen.mother() && gen.isthep() < 0 && gen.isthep() != -10)
16 ? gen_level_step1(gen.mother()) : gen;
20 static const Belle::Gen_hepevt& gen_level_step2(
const Belle::Gen_hepevt& gen)
22 return (gen && gen.mother() && gen.isthep() < 0)
23 ? gen_level_step2(gen.mother()) : gen;
26 const Belle::Gen_hepevt& gen_level(
const Belle::Gen_hepevt& gen)
28 const Belle::Gen_hepevt& level1(gen_level_step1(gen));
29 if (!level1 || level1.isthep() >= 0) {
31 }
else if (level1.isthep() == -10) {
32 const Belle::Gen_hepevt& level2(gen_level_step2(gen));
34 if (level2.idhep() == 310 || abs(level2.idhep()) == 3122)
return level1;
41 const Belle::Gen_hepevt& get_hepevt(
const Belle::Mdst_trk& trk,
int i)
43 Belle::Mdst_sim_trk_Manager& xrefmgr = Belle::Mdst_sim_trk_Manager::get_manager();
44 Belle::Mdst_sim_trk_Index index(xrefmgr.index(
"trk"));
46 Belle::Panther_ID trackID(trk.get_ID());
47 std::vector<Belle::Mdst_sim_trk> point = point_from(trackID, index);
48 if (i >= 0 && i < (
int)point.size())
return point[i].hepevt();
49 else return Belle::Gen_hepevt_Manager::get_manager().get_NULL();
52 const Belle::Gen_hepevt& get_hepevt(
const Belle::Mdst_charged& ch,
int i)
54 if (!Belle::Mdst_sim_trk_Manager::get_manager().count()) {
56 Belle::Mdst_sim_xref_Manager& xrefmgr = Belle::Mdst_sim_xref_Manager::get_manager();
57 Belle::Mdst_sim_xref_Index index(xrefmgr.index(
"charged"));
59 Belle::Panther_ID trackID(ch.get_ID());
60 std::vector<Belle::Mdst_sim_xref> point = point_from(trackID, index);
61 if (i >= 0 && i < (
int)point.size())
return point[i].hepevt();
62 else return Belle::Gen_hepevt_Manager::get_manager().get_NULL();
64 return get_hepevt(ch.trk(), i);
67 const Belle::Gen_hepevt& get_hepevt(
const Belle::Mdst_ecl& ecl,
int i)
69 Belle::Mdst_sim_ecl_Manager& xrefmgr = Belle::Mdst_sim_ecl_Manager::get_manager();
70 Belle::Mdst_sim_ecl_Index index(xrefmgr.index(
"ecl"));
72 Belle::Panther_ID eclID(ecl.get_ID());
73 std::vector<Belle::Mdst_sim_ecl> point = point_from(eclID, index);
74 if (i >= 0 && i < (
int)point.size())
return point[i].hepevt();
75 else return Belle::Gen_hepevt_Manager::get_manager().get_NULL();
78 const Belle::Gen_hepevt& get_hepevt(
const Belle::Mdst_gamma& gamma,
int i)
80 if (!Belle::Mdst_sim_ecl_Manager::get_manager().count()) {
83 return Belle::Gen_hepevt_Manager::get_manager().get_NULL();
85 return get_hepevt(gamma.ecl(), i);