@@ -249,6 +249,98 @@ class FemtoDreamMath
249249 return vect;
250250 }
251251
252+ // / Compute the 3d components of the pair momentum in LCMS and PRF
253+ // / Copy from femto universe
254+ // / \tparam T type of tracks
255+ // / \param part1 Particle 1
256+ // / \param mass1 Mass of particle 1
257+ // / \param part2 Particle 2
258+ // / \param mass2 Mass of particle 2
259+ // / \param isiden Identical or non-identical particle pair
260+ template <typename T>
261+ static std::vector<double > newpairfuncMC (const T& part1, const float mass1, const T& part2, const float mass2, bool isiden)
262+ {
263+ const double trkPx1 = part1.pt () * std::cos (part1.phi ());
264+ const double trkPy1 = part1.pt () * std::sin (part1.phi ());
265+ const double trkPz1 = part1.pt () * std::sinh (part1.eta ());
266+
267+ const double trkPx2 = part2.pt () * std::cos (part2.phi ());
268+ const double trkPy2 = part2.pt () * std::sin (part2.phi ());
269+ const double trkPz2 = part2.pt () * std::sinh (part2.eta ());
270+
271+ const double e1 = std::sqrt (std::pow (trkPx1, 2 ) + std::pow (trkPy1, 2 ) + std::pow (trkPz1, 2 ) + std::pow (mass1, 2 ));
272+ const double e2 = std::sqrt (std::pow (trkPx2, 2 ) + std::pow (trkPy2, 2 ) + std::pow (trkPz2, 2 ) + std::pow (mass2, 2 ));
273+
274+ const ROOT::Math::PxPyPzEVector vecpart1 (trkPx1, trkPy1, trkPz1, e1 );
275+ const ROOT::Math::PxPyPzEVector vecpart2 (trkPx2, trkPy2, trkPz2, e2 );
276+ const ROOT::Math::PxPyPzEVector trackSum = vecpart1 + vecpart2;
277+
278+ std::vector<double > vect;
279+
280+ const double tPx = trackSum.px ();
281+ const double tPy = trackSum.py ();
282+ const double tPz = trackSum.pz ();
283+ const double tE = trackSum.E ();
284+
285+ const double tPtSq = (tPx * tPx + tPy * tPy);
286+ const double tMtSq = (tE * tE - tPz * tPz);
287+ const double tM = std::sqrt (tMtSq - tPtSq);
288+ const double tMt = std::sqrt (tMtSq);
289+ const double tPt = std::sqrt (tPtSq);
290+
291+ // Boost to LCMS
292+
293+ const double beta_LCMS = tPz / tE;
294+ const double gamma_LCMS = tE / tMt;
295+
296+ const double fDKOut = (trkPx1 * tPx + trkPy1 * tPy) / tPt;
297+ const double fDKSide = (-trkPx1 * tPy + trkPy1 * tPx) / tPt;
298+ const double fDKLong = gamma_LCMS * (trkPz1 - beta_LCMS * e1 );
299+ const double fDE = gamma_LCMS * (e1 - beta_LCMS * trkPz1);
300+
301+ const double px1LCMS = fDKOut ;
302+ const double py1LCMS = fDKSide ;
303+ const double pz1LCMS = fDKLong ;
304+ const double pE1LCMS = fDE ;
305+
306+ const double px2LCMS = (trkPx2 * tPx + trkPy2 * tPy) / tPt;
307+ const double py2LCMS = (trkPy2 * tPx - trkPx2 * tPy) / tPt;
308+ const double pz2LCMS = gamma_LCMS * (trkPz2 - beta_LCMS * e2 );
309+ const double pE2LCMS = gamma_LCMS * (e2 - beta_LCMS * trkPz2);
310+
311+ const double fDKOutLCMS = px1LCMS - px2LCMS;
312+ const double fDKSideLCMS = py1LCMS - py2LCMS;
313+ const double fDKLongLCMS = pz1LCMS - pz2LCMS;
314+
315+ // Boost to PRF
316+
317+ const double betaOut = tPt / tMt;
318+ const double gammaOut = tMt / tM;
319+
320+ const double fDKOutPRF = gammaOut * (fDKOutLCMS - betaOut * (pE1LCMS - pE2LCMS));
321+ const double fDKSidePRF = fDKSideLCMS ;
322+ const double fDKLongPRF = fDKLongLCMS ;
323+ const double fKOut = gammaOut * (fDKOut - betaOut * fDE );
324+
325+ const double qlcms = std::sqrt (fDKOutLCMS * fDKOutLCMS + fDKSideLCMS * fDKSideLCMS + fDKLongLCMS * fDKLongLCMS );
326+ const double qinv = std::sqrt (fDKOutPRF * fDKOutPRF + fDKSidePRF * fDKSidePRF + fDKLongPRF * fDKLongPRF );
327+ const double kstar = std::sqrt (fKOut * fKOut + fDKSide * fDKSide + fDKLong * fDKLong );
328+
329+ if (isiden) {
330+ vect.push_back (qinv);
331+ vect.push_back (fDKOutLCMS );
332+ vect.push_back (fDKSideLCMS );
333+ vect.push_back (fDKLongLCMS );
334+ vect.push_back (qlcms);
335+ } else {
336+ vect.push_back (kstar);
337+ vect.push_back (fDKOut );
338+ vect.push_back (fDKSide );
339+ vect.push_back (fDKLong );
340+ }
341+ return vect;
342+ }
343+
252344 // / Compute the phi angular of a pair with respect to the event plane
253345 // / \tparam T type of tracks
254346 // / \param part1 Particle 1
0 commit comments