@@ -35,3 +35,36 @@ float V0::calcMass2(float massPos2, float massNeg2) const
3535 auto energy = std::sqrt (massPos2 + p2pos) + std::sqrt (massNeg2 + p2neg);
3636 return energy * energy - p2;
3737}
38+
39+ float V0::calcAPAlpha () const
40+ {
41+ // calculate Armenteros-Podolanski alpha
42+ std::array<float , 3 > pP, pN, pV0;
43+ float alp = 0 .f , pV0tot2 = 0 .f ;
44+ getProng (0 ).getPxPyPzGlo (pP);
45+ getProng (1 ).getPxPyPzGlo (pN);
46+ for (int i = 0 ; i < 3 ; i++) {
47+ pV0[i] = pP[i] + pN[i];
48+ alp += pV0[i] * (pP[i] - pN[i]);
49+ pV0tot2 += pV0[i] * pV0[i];
50+ }
51+ alp /= pV0tot2;
52+ return alp;
53+ }
54+
55+ float V0::calcAPQt () const
56+ {
57+ // calculate Armenteros-Podolanski qt
58+ std::array<float , 3 > pP, pN, pV0;
59+ float pPtot2 = 0 .f , pV0tot2 = 0 .f , cross = 0 .f ;
60+ getProng (0 ).getPxPyPzGlo (pP);
61+ getProng (1 ).getPxPyPzGlo (pN);
62+ for (int i = 0 ; i < 3 ; i++) {
63+ pV0[i] = pP[i] + pN[i];
64+ pPtot2 += pP[i] * pP[i];
65+ pV0tot2 += pV0[i] * pV0[i];
66+ cross += pV0[i] * pP[i]; // -> pP * pV0 * cos
67+ }
68+ float qt = pPtot2 - (cross * cross) / pV0tot2;
69+ return qt > 0 ? std::sqrt (qt) : 0 ;
70+ }
0 commit comments