Calculate kinematics of two body B decays containing a K_L0.
46 {
47
48 bool k_check = false;
49 ROOT::Math::PxPyPzEVector klDaughters;
50 ROOT::Math::PxPyPzEVector pDaughters;
51 double m_j = 0;
52 for (auto daughter : daughters) {
54 if (k_check)
55 B2FATAL("More than one K_L is detected! This tool accepts only one K_L in the final state.");
56
58 if (klm_cluster)
59 klDaughters = klm_cluster->getMomentum();
60 else {
62 if (ecl_cluster) {
63 ClusterUtils clutls;
65 } else {
66 B2ERROR("K_L candidate must have related KLM or ECL cluster!");
67 }
68 }
69 k_check = true;
70 } else {
71 pDaughters += daughter->get4Vector();
72
73
74 m_j = daughter->getPDGMass();
75 idx = daughter->getArrayIndex() + idx * 100;
76 }
77 }
78
79 if (!k_check)
80 B2FATAL("This tool is meant to reconstruct decays with a K_L0 in the final state. There is no K_L0 in this decay!");
81
82
83 if (daughters.size() == 3) {
84 m_j = pDaughters.M();
85 }
86
88
89 const double s_p = (klDaughters.Vect().Unit()).Dot(pDaughters.Vect());
90 const double m_sum = (m_b * m_b) - (m_j * m_j) - m_k2;
91
92 const double s_p2 = s_p * s_p;
93 const double m_sum2 = m_sum * m_sum;
94 const double s_pm = s_p * m_sum;
95 const double e_j2 = pDaughters.E() * pDaughters.E();
96
97 const double k_mag1 = (s_pm + std::sqrt(s_p2 * m_sum2 - 4 * (e_j2 - s_p2) * (e_j2 * m_k2 - m_sum2 / 4))) / (2 *
98 (e_j2 - s_p2));
99 const double k_mag2 = (s_pm - std::sqrt(s_p2 * m_sum2 - 4 * (e_j2 - s_p2) * (e_j2 * m_k2 - m_sum2 / 4))) / (2 *
100 (e_j2 - s_p2));
101
102
103 ROOT::Math::PxPyPzEVector missDaughters;
104
105 if (k_mag1 > 0)
106 missDaughters = k_mag1 * klDaughters / klDaughters.P();
107 else
108 missDaughters = k_mag2 * klDaughters / klDaughters.P();
109
110 missDaughters.SetE(std::sqrt(m_k2 + missDaughters.P2()));
111
112 if (isnan(missDaughters.P()))
113 return false;
114
115 ROOT::Math::PxPyPzEVector mom = pDaughters + missDaughters;
116 mom.SetE(std::sqrt(m_b * m_b + mom.P2()));
117 if (isnan(mom.P()))
118 return false;
119
120 KMomentum = missDaughters;
121 BMomentum = mom;
122
123 return true;
124 };
int getPDGCode() const
PDG code.
double getMass() const
Particle mass.
static const ParticleType Klong
K^0_L particle.
@ c_neutralHadron
CR is reconstructed as a neutral hadron (N2)