Skip to content

Commit d0bdb89

Browse files
committed
add 3Dfemto for MC
1 parent 9b318ea commit d0bdb89

File tree

1 file changed

+92
-0
lines changed

1 file changed

+92
-0
lines changed

PWGCF/FemtoDream/Core/femtoDreamMath.h

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)