Skip to content

Commit e6694f5

Browse files
ypwanggalibuild
andauthored
[PWGDQ] Add mix event for coherent Jpsi A2 (#17033)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent 9db403a commit e6694f5

2 files changed

Lines changed: 99 additions & 2 deletions

File tree

PWGDQ/Core/VarManager.h

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,14 @@ class VarManager : public TObject
479479
kQ2X0A2,
480480
kQ2Y0A1,
481481
kQ2Y0A2,
482+
kQ2X0B1,
483+
kQ2X0B2,
484+
kQ2Y0B1,
485+
kQ2Y0B2,
486+
kQ2X0C1,
487+
kQ2X0C2,
488+
kQ2Y0C1,
489+
kQ2Y0C2,
482490
kU2Q2Ev1,
483491
kU2Q2Ev2,
484492
kCos2DeltaPhiEv1,
@@ -2879,13 +2887,33 @@ void VarManager::FillTwoMixEvents(T1 const& ev1, T1 const& ev2, T2 const& /*trac
28792887
values[kQ2X0A2] = ev2.q2x0a();
28802888
values[kQ2Y0A1] = ev1.q2y0a();
28812889
values[kQ2Y0A2] = ev2.q2y0a();
2890+
2891+
values[kQ2X0B1] = ev1.q2x0b();
2892+
values[kQ2X0B2] = ev2.q2x0b();
2893+
values[kQ2Y0B1] = ev1.q2y0b();
2894+
values[kQ2Y0B2] = ev2.q2y0b();
2895+
2896+
values[kQ2X0C1] = ev1.q2x0c();
2897+
values[kQ2X0C2] = ev2.q2x0c();
2898+
values[kQ2Y0C1] = ev1.q2y0c();
2899+
values[kQ2Y0C2] = ev2.q2y0c();
28822900
}
28832901
if constexpr ((fillMap & CollisionQvect) > 0) {
28842902
// Tobe used for the calculation of u1q1 and u2q2
28852903
values[kQ2X0A1] = (ev1.qvecBPosRe() * ev1.nTrkBPos() + ev1.qvecBNegRe() * ev1.nTrkBNeg()) / (ev1.nTrkBPos() + ev1.nTrkBNeg());
28862904
values[kQ2X0A2] = (ev2.qvecBPosRe() * ev2.nTrkBPos() + ev2.qvecBNegRe() * ev2.nTrkBNeg()) / (ev2.nTrkBPos() + ev2.nTrkBNeg());
28872905
values[kQ2Y0A1] = (ev1.qvecBPosIm() * ev1.nTrkBPos() + ev1.qvecBNegIm() * ev1.nTrkBNeg()) / (ev1.nTrkBPos() + ev1.nTrkBNeg());
28882906
values[kQ2Y0A2] = (ev2.qvecBPosIm() * ev2.nTrkBPos() + ev2.qvecBNegIm() * ev2.nTrkBNeg()) / (ev2.nTrkBPos() + ev2.nTrkBNeg());
2907+
2908+
values[kQ2X0B1] = ev1.qvecFT0ARe();
2909+
values[kQ2X0B2] = ev2.qvecFT0ARe();
2910+
values[kQ2Y0B1] = ev1.qvecFT0AIm();
2911+
values[kQ2Y0B2] = ev2.qvecFT0AIm();
2912+
2913+
values[kQ2X0C1] = ev1.qvecFT0CRe();
2914+
values[kQ2X0C2] = ev2.qvecFT0CRe();
2915+
values[kQ2Y0C1] = ev1.qvecFT0CIm();
2916+
values[kQ2Y0C2] = ev2.qvecFT0CIm();
28892917
}
28902918
}
28912919

@@ -4287,6 +4315,10 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values)
42874315
// Compute the scalar product UQ for two muon from different event using Q-vector from A, for second and third harmonic
42884316
float Psi2A1 = getEventPlane(2, values[kQ2X0A1], values[kQ2Y0A1]);
42894317
float Psi2A2 = getEventPlane(2, values[kQ2X0A2], values[kQ2Y0A2]);
4318+
float Psi2B1 = getEventPlane(2, values[kQ2X0B1], values[kQ2Y0B1]);
4319+
float Psi2B2 = getEventPlane(2, values[kQ2X0B2], values[kQ2Y0B2]);
4320+
float Psi2C1 = getEventPlane(2, values[kQ2X0C1], values[kQ2Y0C1]);
4321+
float Psi2C2 = getEventPlane(2, values[kQ2X0C2], values[kQ2Y0C2]);
42904322
values[kCos2DeltaPhi] = TMath::Cos(2 * (v12.Phi() - Psi2A1)); // WARNING: using the first event EP
42914323
values[kCos2DeltaPhiEv1] = TMath::Cos(2 * (v1.Phi() - Psi2A1));
42924324
values[kCos2DeltaPhiEv2] = TMath::Cos(2 * (v2.Phi() - Psi2A2));
@@ -4317,6 +4349,39 @@ void VarManager::FillPairME(T1 const& t1, T2 const& t2, float* values)
43174349
values[kV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) ? 0. : V24ME;
43184350
values[kWV24ME] = (std::isnan(V22ME) || std::isinf(V22ME) || std::isnan(V24ME) || std::isinf(V24ME)) ? 0. : 1.0;
43194351

4352+
// coherent Jpsi A2
4353+
bool useCoherentJpsiA2 = fgUsedVars[kA2EP_RP_TPC] || fgUsedVars[kA2EP_RP_FT0A] || fgUsedVars[kA2EP_RP_FT0C];
4354+
if (useCoherentJpsiA2) {
4355+
ROOT::Math::Boost boostv12{v12.BoostToCM()};
4356+
ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(t1.sign() > 0 ? v1 : v2);
4357+
float Psi2A = t1.sign() > 0 ? Psi2A1 : Psi2A2;
4358+
float Psi2B = t1.sign() > 0 ? Psi2B1 : Psi2B2;
4359+
float Psi2C = t1.sign() > 0 ? Psi2C1 : Psi2C2;
4360+
4361+
// reaction plane
4362+
float phi = RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI);
4363+
values[kDeltaPhiRP_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi;
4364+
values[kDeltaPhiRP_TPC] = values[kDeltaPhiRP_TPC] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiRP_TPC] : values[kDeltaPhiRP_TPC];
4365+
values[kDeltaPhiRP_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi;
4366+
values[kDeltaPhiRP_FT0A] = values[kDeltaPhiRP_FT0A] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiRP_FT0A] : values[kDeltaPhiRP_FT0A];
4367+
values[kDeltaPhiRP_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi;
4368+
values[kDeltaPhiRP_FT0C] = values[kDeltaPhiRP_FT0C] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiRP_FT0C] : values[kDeltaPhiRP_FT0C];
4369+
// fold delta phi to [0, pi/2]
4370+
values[kDeltaPhiRP_TPC] = values[kDeltaPhiRP_TPC] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiRP_TPC] : values[kDeltaPhiRP_TPC];
4371+
values[kDeltaPhiRP_FT0A] = values[kDeltaPhiRP_FT0A] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiRP_FT0A] : values[kDeltaPhiRP_FT0A];
4372+
values[kDeltaPhiRP_FT0C] = values[kDeltaPhiRP_FT0C] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiRP_FT0C] : values[kDeltaPhiRP_FT0C];
4373+
values[kCos2DeltaPhiRP_TPC] = TMath::Cos(2. * (phi - Psi2A));
4374+
values[kCos2DeltaPhiRP_FT0A] = TMath::Cos(2. * (phi - Psi2B));
4375+
values[kCos2DeltaPhiRP_FT0C] = TMath::Cos(2. * (phi - Psi2C));
4376+
4377+
float A2RP_TPC = values[kCos2DeltaPhiRP_TPC] / values[kR2EP];
4378+
float A2RP_FT0A = values[kCos2DeltaPhiRP_FT0A] / values[kR2EP];
4379+
float A2RP_FT0C = values[kCos2DeltaPhiRP_FT0C] / values[kR2EP];
4380+
values[kA2EP_RP_TPC] = std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC;
4381+
values[kA2EP_RP_FT0A] = std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A;
4382+
values[kA2EP_RP_FT0C] = std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C;
4383+
}
4384+
43204385
if constexpr ((fillMap & ReducedEventQvectorExtra) > 0) {
43214386
std::complex<double> Q21(values[kQ2X0A] * values[kS11A], values[kQ2Y0A] * values[kS11A]);
43224387
std::complex<double> Q42(values[kQ42XA], values[kQ42YA]);
@@ -4388,6 +4453,38 @@ void VarManager::FillPairMEAcrossTFs(T const& t1, T const& t2, float* values)
43884453
values[kCos2ThetaStarFT0C] = values[kCosThetaStarFT0C] * values[kCosThetaStarFT0C];
43894454
}
43904455
}
4456+
4457+
bool useCoherentJpsiA2 = fgUsedVars[kA2EP_RP_TPC] || fgUsedVars[kA2EP_RP_FT0A] || fgUsedVars[kA2EP_RP_FT0C];
4458+
if (useCoherentJpsiA2) {
4459+
ROOT::Math::Boost boostv12{v12.BoostToCM()};
4460+
ROOT::Math::PtEtaPhiMVector v_daughter = boostv12(v1);
4461+
float Psi2A = values[kPsi2A];
4462+
float Psi2B = values[kPsi2B];
4463+
float Psi2C = values[kPsi2C];
4464+
4465+
// reaction plane
4466+
float phi = RecoDecay::constrainAngle(v_daughter.Phi(), -o2::constants::math::PI);
4467+
values[kDeltaPhiRP_TPC] = phi > Psi2A ? phi - Psi2A : Psi2A - phi;
4468+
values[kDeltaPhiRP_TPC] = values[kDeltaPhiRP_TPC] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiRP_TPC] : values[kDeltaPhiRP_TPC];
4469+
values[kDeltaPhiRP_FT0A] = phi > Psi2B ? phi - Psi2B : Psi2B - phi;
4470+
values[kDeltaPhiRP_FT0A] = values[kDeltaPhiRP_FT0A] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiRP_FT0A] : values[kDeltaPhiRP_FT0A];
4471+
values[kDeltaPhiRP_FT0C] = phi > Psi2C ? phi - Psi2C : Psi2C - phi;
4472+
values[kDeltaPhiRP_FT0C] = values[kDeltaPhiRP_FT0C] > TMath::Pi() ? 2. * TMath::Pi() - values[kDeltaPhiRP_FT0C] : values[kDeltaPhiRP_FT0C];
4473+
// fold delta phi to [0, pi/2]
4474+
values[kDeltaPhiRP_TPC] = values[kDeltaPhiRP_TPC] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiRP_TPC] : values[kDeltaPhiRP_TPC];
4475+
values[kDeltaPhiRP_FT0A] = values[kDeltaPhiRP_FT0A] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiRP_FT0A] : values[kDeltaPhiRP_FT0A];
4476+
values[kDeltaPhiRP_FT0C] = values[kDeltaPhiRP_FT0C] > TMath::Pi() / 2. ? TMath::Pi() - values[kDeltaPhiRP_FT0C] : values[kDeltaPhiRP_FT0C];
4477+
values[kCos2DeltaPhiRP_TPC] = TMath::Cos(2. * (phi - Psi2A));
4478+
values[kCos2DeltaPhiRP_FT0A] = TMath::Cos(2. * (phi - Psi2B));
4479+
values[kCos2DeltaPhiRP_FT0C] = TMath::Cos(2. * (phi - Psi2C));
4480+
4481+
float A2RP_TPC = values[kCos2DeltaPhiRP_TPC] / values[kR2EP];
4482+
float A2RP_FT0A = values[kCos2DeltaPhiRP_FT0A] / values[kR2EP];
4483+
float A2RP_FT0C = values[kCos2DeltaPhiRP_FT0C] / values[kR2EP];
4484+
values[kA2EP_RP_TPC] = std::isnan(A2RP_TPC) || std::isinf(A2RP_TPC) ? -999. : A2RP_TPC;
4485+
values[kA2EP_RP_FT0A] = std::isnan(A2RP_FT0A) || std::isinf(A2RP_FT0A) ? -999. : A2RP_FT0A;
4486+
values[kA2EP_RP_FT0C] = std::isnan(A2RP_FT0C) || std::isinf(A2RP_FT0C) ? -999. : A2RP_FT0C;
4487+
}
43914488
}
43924489

43934490
template <int pairType, typename T1, typename T2>

PWGDQ/Tasks/tableReader_withAssoc_direct.cxx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,7 +1694,7 @@ struct AnalysisSameEventPairing {
16941694

16951695
constexpr bool eventHasQvector = ((TEventFillMap & VarManager::ObjTypes::CollisionQvectCentr) > 0);
16961696
constexpr bool trackHasCov = ((TTrackFillMap & VarManager::ObjTypes::TrackCov) > 0);
1697-
constexpr bool fillFlowReso = eventHasQvector;
1697+
// constexpr bool fillFlowReso = eventHasQvector;
16981698

16991699
for (auto& event : events) {
17001700
if (!event.isEventSelected_bit(0))
@@ -1711,7 +1711,7 @@ struct AnalysisSameEventPairing {
17111711
if (groupedAssocs.size() == 0)
17121712
continue;
17131713

1714-
if (fillFlowReso) {
1714+
if (fConfigOptions.useFlowReso) {
17151715
if (ResoFlowSP == nullptr || ResoFlowEP == nullptr) {
17161716
LOGF(fatal, "Flow resolution histograms are not available, cannot fill flow variables!");
17171717
}

0 commit comments

Comments
 (0)