Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions PWGDQ/Core/VarManager.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -891,6 +891,14 @@ void VarManager::SetDefaultVarNames()
fgVariableUnits[kCosThetaCS] = "";
fgVariableNames[kPhiCS] = "#varphi_{CS}";
fgVariableUnits[kPhiCS] = "rad.";
fgVariableNames[kMCCosThetaHE] = "MC cos#it{#theta}";
fgVariableUnits[kMCCosThetaHE] = "";
fgVariableNames[kMCPhiHE] = "MC #varphi_{HE}";
fgVariableUnits[kMCPhiHE] = "rad.";
fgVariableNames[kMCCosThetaCS] = "MC cos#it{#theta}_{CS}";
fgVariableUnits[kMCCosThetaCS] = "";
fgVariableNames[kMCPhiCS] = "MC #varphi_{CS}";
fgVariableUnits[kMCPhiCS] = "rad.";
fgVariableNames[kDeltaPhiPair2] = "#Delta#phi";
fgVariableUnits[kDeltaPhiPair2] = "rad.";
fgVariableNames[kDeltaEtaPair2] = "#Delta#eta";
Expand Down
57 changes: 56 additions & 1 deletion PWGDQ/Core/VarManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,13 @@ class VarManager : public TObject
kDeltaPhiSym,
kNCorrelationVariables,

//MC particle pair Variables

kMCCosThetaHE,
kMCCosThetaCS,
kMCPhiHE,
kMCPhiCS,

// Dilepton-track-track variables
kQuadMass,
kQuadDefaultDileptonMass,
Expand Down Expand Up @@ -987,7 +994,7 @@ class VarManager : public TObject
template <uint32_t fillMap, int pairType, typename T1, typename T2>
static void FillPairME(T1 const& t1, T2 const& t2, float* values = nullptr);
template <typename T1, typename T2>
static void FillPairMC(T1 const& t1, T2 const& t2, float* values = nullptr, PairCandidateType pairType = kDecayToEE);
static void FillPairMC(T1 const& t1, T2 const& t2, float* values = nullptr, PairCandidateType pairType = kDecayToMuMu);
template <typename T1, typename T2, typename T3>
static void FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* values = nullptr, PairCandidateType pairType = kTripleCandidateToEEPhoton);
template <int pairType, uint32_t collFillMap, uint32_t fillMap, typename C, typename T>
Expand Down Expand Up @@ -3027,6 +3034,54 @@ void VarManager::FillPairMC(T1 const& t1, T2 const& t2, float* values, PairCandi
values[kEta] = v12.Eta();
values[kPhi] = v12.Phi();
values[kRap] = -v12.Rapidity();

// TODO : implement resolution smearing.
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), m1);
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), m2);
ROOT::Math::PtEtaPhiMVector v12 = v1 + v2;
values[kMass] = v12.M();
values[kPt] = v12.Pt();
values[kEta] = v12.Eta();
values[kPhi] = v12.Phi();
values[kRap] = -v12.Rapidity();

// TO DO: get the correct values from CCDB
double BeamMomentum = TMath::Sqrt(fgCenterOfMassEnergy * fgCenterOfMassEnergy / 4 - fgMassofCollidingParticle * fgMassofCollidingParticle); // GeV
ROOT::Math::PxPyPzEVector Beam1(0., 0., -BeamMomentum, fgCenterOfMassEnergy / 2);
ROOT::Math::PxPyPzEVector Beam2(0., 0., BeamMomentum, fgCenterOfMassEnergy / 2);

// Boost to center of mass frame
ROOT::Math::Boost boostv12{v12.BoostToCM()};
ROOT::Math::XYZVectorF v1_CM{(boostv12(v1).Vect()).Unit()};
ROOT::Math::XYZVectorF v2_CM{(boostv12(v2).Vect()).Unit()};
ROOT::Math::XYZVectorF Beam1_CM{(boostv12(Beam1).Vect()).Unit()};
ROOT::Math::XYZVectorF Beam2_CM{(boostv12(Beam2).Vect()).Unit()};

// Helicity frame
ROOT::Math::XYZVectorF zaxis_HE{(v12.Vect()).Unit()};
ROOT::Math::XYZVectorF yaxis_HE{(Beam1_CM.Cross(Beam2_CM)).Unit()};
ROOT::Math::XYZVectorF xaxis_HE{(yaxis_HE.Cross(zaxis_HE)).Unit()};

// Collins-Soper frame
ROOT::Math::XYZVectorF zaxis_CS{((Beam1_CM.Unit() - Beam2_CM.Unit()).Unit())};
ROOT::Math::XYZVectorF yaxis_CS{(Beam1_CM.Cross(Beam2_CM)).Unit()};
ROOT::Math::XYZVectorF xaxis_CS{(yaxis_CS.Cross(zaxis_CS)).Unit()};

if (fgUsedVars[kMCCosThetaHE]) {
values[kMCCosThetaHE] = (t1.pdgCode() < 0 ? zaxis_HE.Dot(v1_CM) : zaxis_HE.Dot(v2_CM));
}

if (fgUsedVars[kMCPhiHE]) {
values[kMCPhiHE] = (t1.pdgCode() < 0 ? TMath::ATan2(yaxis_HE.Dot(v1_CM), xaxis_HE.Dot(v1_CM)) : TMath::ATan2(yaxis_HE.Dot(v2_CM), xaxis_HE.Dot(v2_CM)));
}

if (fgUsedVars[kMCCosThetaCS]) {
values[kMCCosThetaCS] = (t1.pdgCode() < 0 ? zaxis_CS.Dot(v1_CM) : zaxis_CS.Dot(v2_CM));
}

if (fgUsedVars[kMCPhiCS]) {
values[kMCPhiCS] = (t1.pdgCode() < 0 ? TMath::ATan2(yaxis_CS.Dot(v1_CM), xaxis_CS.Dot(v1_CM)) : TMath::ATan2(yaxis_CS.Dot(v2_CM), xaxis_CS.Dot(v2_CM)));
}
}

template <typename T1, typename T2, typename T3>
Expand Down
2 changes: 2 additions & 0 deletions PWGDQ/Tasks/dqEfficiency.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1349,13 +1349,15 @@ void DefineHistograms(HistogramManager* histMan, TString histClasses)
if (classStr.Contains("MCTruthGenPair")) {
dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "mctruth_pair");
histMan->AddHistogram(objArray->At(iclass)->GetName(), "Pt_Rapidity", "MC generator p_{T}, y distribution", false, 120, 0.0, 30.0, VarManager::kMCPt, 150, 2.5, 4.0, VarManager::kMCY);
histMan->AddHistogram(objArray->At(iclass)->GetName(), "cosTheta_Phi", "MC generator cosTheta, phi distribution", false, 40, -1.0, 1.0, VarManager::kMCCosThetaHE, 40, -3.14, 3.14, VarManager::kMCPhiHE);
histMan->AddHistogram(objArray->At(iclass)->GetName(), "Eta", "MC generator #eta distribution", false, 200, 2.5, 4.0, VarManager::kMCEta);
// histMan->AddHistogram(objArray->At(iclass)->GetName(), "Rapidity", "MC generator y distribution", false, 150, 2.5, 4.0, VarManager::kMCY);
histMan->AddHistogram(objArray->At(iclass)->GetName(), "Phi", "MC generator #varphi distribution", false, 50, 0.0, 2. * TMath::Pi(), VarManager::kMCPhi);
}
if (classStr.Contains("MCTruthGen")) {
dqhistograms::DefineHistograms(histMan, objArray->At(iclass)->GetName(), "mctruth");
histMan->AddHistogram(objArray->At(iclass)->GetName(), "Pt_Rapidity", "MC generator p_{T}, y distribution", false, 120, 0.0, 30.0, VarManager::kMCPt, 150, 2.5, 4.0, VarManager::kMCY);
histMan->AddHistogram(objArray->At(iclass)->GetName(), "cosTheta_Phi", "MC generator cosTheta, phi distribution", false, 40, -1.0, 1.0, VarManager::kMCCosThetaHE, 40, -3.14, 3.14, VarManager::kMCPhiHE);
histMan->AddHistogram(objArray->At(iclass)->GetName(), "Eta", "MC generator #eta distribution", false, 200, 2.5, 4.0, VarManager::kMCEta);
// histMan->AddHistogram(objArray->At(iclass)->GetName(), "Rapidity", "MC generator y distribution", false, 150, 2.5, 4.0, VarManager::kMCY);
histMan->AddHistogram(objArray->At(iclass)->GetName(), "Phi", "MC generator #varphi distribution", false, 50, 0.0, 2. * TMath::Pi(), VarManager::kMCPhi);
Expand Down