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