Skip to content

Commit 600bd24

Browse files
sigurdnesealibuild
andauthored
[PWGDQ] Add open charm MC analyses (AliceO2Group#8894)
Co-authored-by: ALICE Builder <[email protected]>
1 parent 717995c commit 600bd24

File tree

7 files changed

+1267
-47
lines changed

7 files changed

+1267
-47
lines changed

PWGDQ/Core/CutsLibrary.cxx

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3172,6 +3172,27 @@ AnalysisCompositeCut* o2::aod::dqcuts::GetCompositeCut(const char* cutName)
31723172
return cut;
31733173
}
31743174

3175+
if (!nameStr.compare("pairCosPointingPos")) {
3176+
cut->AddCut(GetAnalysisCut("pairCosPointingPos"));
3177+
return cut;
3178+
}
3179+
3180+
if (!nameStr.compare("pairCosPointingNeg90")) {
3181+
cut->AddCut(GetAnalysisCut("pairCosPointingNeg90"));
3182+
return cut;
3183+
}
3184+
3185+
if (!nameStr.compare("pairCosPointingNeg85")) {
3186+
cut->AddCut(GetAnalysisCut("pairCosPointingNeg85"));
3187+
return cut;
3188+
}
3189+
3190+
if (!nameStr.compare("pairTauxyzProjectedCosPointing1")) {
3191+
cut->AddCut(GetAnalysisCut("pairCosPointingNeg"));
3192+
cut->AddCut(GetAnalysisCut("pairTauxyzProjected1"));
3193+
return cut;
3194+
}
3195+
31753196
// -------------------------------------------------------------------------------------------------
31763197
//
31773198
// Below are a list of single electron single muon and in order or optimize the trigger
@@ -5962,6 +5983,21 @@ AnalysisCut* o2::aod::dqcuts::GetAnalysisCut(const char* cutName)
59625983
return cut;
59635984
}
59645985

5986+
if (!nameStr.compare("pairCosPointingPos")) {
5987+
cut->AddCut(VarManager::kCosPointingAngle, 0.9, 1000.);
5988+
return cut;
5989+
}
5990+
5991+
if (!nameStr.compare("pairCosPointingNeg90")) {
5992+
cut->AddCut(VarManager::kCosPointingAngle, -1000., -0.9);
5993+
return cut;
5994+
}
5995+
5996+
if (!nameStr.compare("pairCosPointingNeg85")) {
5997+
cut->AddCut(VarManager::kCosPointingAngle, -1000., -0.85);
5998+
return cut;
5999+
}
6000+
59656001
// -------------------------------------------------------------------------------------------------
59666002
//
59676003
// Below are a list of single electron single muon and pair selection in order or optimize the trigger

PWGDQ/Core/HistogramsLibrary.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
941941
hm->AddHistogram(histClass, "LxyProj_Pt", "", false, 10, 0.0, 20.0, VarManager::kPt, 1000, -1.0, 1.0, VarManager::kVertexingLxyProjected);
942942
hm->AddHistogram(histClass, "LxyProj_Mass_Pt", "", false, 50, 2.0, 4.0, VarManager::kMass, 10, 0.0, 20.0, VarManager::kPt, 1000, -1.0, 1.0, VarManager::kVertexingLxyProjected);
943943
hm->AddHistogram(histClass, "LzProj_Mass_Pt", "", false, 50, 2.0, 4.0, VarManager::kMass, 10, 0.0, 20.0, VarManager::kPt, 1000, -1.0, 1.0, VarManager::kVertexingLzProjected);
944+
hm->AddHistogram(histClass, "CosPointingAngle", "", false, 200, -1.0, 1.0, VarManager::kCosPointingAngle);
944945
}
945946

946947
if (subGroupStr.Contains("kalman-filter")) {
@@ -1378,6 +1379,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
13781379
hm->AddHistogram(histClass, "MassD0region_Rapidity", "", false, 140, 1.5, 2.2, VarManager::kMass, 10, -0.8, 0.8, VarManager::kRap);
13791380
hm->AddHistogram(histClass, "MassD0region_eta", "", false, 140, 1.5, 2.2, VarManager::kMass, 40, -2., 2., VarManager::kEta);
13801381
hm->AddHistogram(histClass, "MassD0region_TauxyzProj", "", false, 140, 1.5, 2.2, VarManager::kMass, 200, -0.03, 0.03, VarManager::kVertexingTauxyzProjected);
1382+
hm->AddHistogram(histClass, "MassD0region_CosPointing", "", false, 140, 1.5, 2.2, VarManager::kMass, 200, -1.0, 1.0, VarManager::kCosPointingAngle);
13811383
hm->AddHistogram(histClass, "MassD0region_VtxNContribReal", "", false, 140, 1.5, 2.2, VarManager::kMass, 50, 0, 50, VarManager::kVtxNcontribReal);
13821384
hm->AddHistogram(histClass, "MassD0region_Rapidity_AveragePt", "", true, 140, 1.5, 2.2, VarManager::kMass, 10, -0.8, 0.8, VarManager::kRap, 150, 0.0, 30.0, VarManager::kPt);
13831385
}

PWGDQ/Core/MCSignalLibrary.cxx

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,6 +1185,126 @@ MCSignal* o2::aod::dqmcsignals::GetMCSignal(const char* name)
11851185
return signal;
11861186
}
11871187

1188+
//------------------------------------------------------------------------------------
1189+
1190+
if (!nameStr.compare("D0")) {
1191+
MCProng prong(1, {Pdg::kD0}, {true}, {false}, {0}, {0}, {false});
1192+
signal = new MCSignal(name, "D0", {prong}, {-1});
1193+
return signal;
1194+
}
1195+
if (!nameStr.compare("KPiFromD0")) {
1196+
MCProng prongKaon(2, {321, Pdg::kD0}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1197+
MCProng prongPion(2, {211, Pdg::kD0}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1198+
signal = new MCSignal(name, "Kaon and pion pair from D0", {prongKaon, prongPion}, {1, 1});
1199+
return signal;
1200+
}
1201+
if (!nameStr.compare("Dcharged")) {
1202+
MCProng prong(1, {Pdg::kDPlus}, {true}, {false}, {0}, {0}, {false});
1203+
signal = new MCSignal(name, "D+/-", {prong}, {-1});
1204+
return signal;
1205+
}
1206+
if (!nameStr.compare("Dplus")) {
1207+
MCProng prong(1, {Pdg::kDPlus}, {false}, {false}, {0}, {0}, {false});
1208+
signal = new MCSignal(name, "D+", {prong}, {-1});
1209+
return signal;
1210+
}
1211+
if (!nameStr.compare("Dminus")) {
1212+
MCProng prong(1, {-Pdg::kDPlus}, {false}, {false}, {0}, {0}, {false});
1213+
signal = new MCSignal(name, "D+", {prong}, {-1});
1214+
return signal;
1215+
}
1216+
if (!nameStr.compare("KPiPiFromDcharged")) {
1217+
MCProng prongKaon(2, {321, Pdg::kDPlus}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1218+
MCProng prongPion(2, {211, Pdg::kDPlus}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1219+
signal = new MCSignal(name, "Kaon pion pion triplet from D+/-", {prongKaon, prongPion, prongPion}, {1, 1, 1});
1220+
return signal;
1221+
}
1222+
if (!nameStr.compare("KPiPiFromDplus")) {
1223+
MCProng prongKaon(2, {-321, Pdg::kDPlus}, {false, false}, {false, false}, {0, 0}, {0, 0}, {false, false});
1224+
MCProng prongPion(2, {211, Pdg::kDPlus}, {false, false}, {false, false}, {0, 0}, {0, 0}, {false, false});
1225+
signal = new MCSignal(name, "Kaon pion pion triplet from D+", {prongKaon, prongPion, prongPion}, {1, 1, 1});
1226+
return signal;
1227+
}
1228+
if (!nameStr.compare("KPiPiFromDminus")) {
1229+
MCProng prongKaon(2, {321, -Pdg::kDPlus}, {false, false}, {false, false}, {0, 0}, {0, 0}, {false, false});
1230+
MCProng prongPion(2, {-211, -Pdg::kDPlus}, {false, false}, {false, false}, {0, 0}, {0, 0}, {false, false});
1231+
signal = new MCSignal(name, "Kaon pion pion triplet from D-", {prongKaon, prongPion, prongPion}, {1, 1, 1});
1232+
return signal;
1233+
}
1234+
if (!nameStr.compare("Dstar")) {
1235+
MCProng prong(1, {Pdg::kDStar}, {true}, {false}, {0}, {0}, {false});
1236+
signal = new MCSignal(name, "D*", {prong}, {-1});
1237+
return signal;
1238+
}
1239+
if (!nameStr.compare("DstarPlus")) {
1240+
MCProng prong(1, {Pdg::kDStar}, {false}, {false}, {0}, {0}, {false});
1241+
signal = new MCSignal(name, "D*+", {prong}, {-1});
1242+
return signal;
1243+
}
1244+
if (!nameStr.compare("DstarMinus")) {
1245+
MCProng prong(1, {-Pdg::kDStar}, {false}, {false}, {0}, {0}, {false});
1246+
signal = new MCSignal(name, "D*-", {prong}, {-1});
1247+
return signal;
1248+
}
1249+
if (!nameStr.compare("pionFromDstar")) {
1250+
MCProng prong(2, {211, Pdg::kDStar}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1251+
signal = new MCSignal(name, "Pions from D* decays", {prong}, {1});
1252+
return signal;
1253+
}
1254+
if (!nameStr.compare("D0FromDstar")) {
1255+
MCProng prong(2, {Pdg::kD0, Pdg::kDStar}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1256+
signal = new MCSignal(name, "D0 from D* decays", {prong}, {1});
1257+
return signal;
1258+
}
1259+
if (!nameStr.compare("KFromD0FromDstar")) {
1260+
MCProng prong(3, {321, Pdg::kD0, Pdg::kDStar}, {true, true, true}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1261+
signal = new MCSignal(name, "Kaons from D0 from D* decays", {prong}, {1});
1262+
return signal;
1263+
}
1264+
if (!nameStr.compare("PiFromD0FromDstar")) {
1265+
MCProng prong(3, {211, Pdg::kD0, Pdg::kDStar}, {true, true, true}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1266+
signal = new MCSignal(name, "Pions from D0 from D* decays", {prong}, {1});
1267+
return signal;
1268+
}
1269+
if (!nameStr.compare("KPiFromD0FromDstar")) {
1270+
MCProng prongKaon(3, {321, Pdg::kD0, Pdg::kDStar}, {true, true, true}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1271+
MCProng prongPion(3, {321, Pdg::kD0, Pdg::kDStar}, {true, true, true}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1272+
signal = new MCSignal(name, "Kaon and pion pair from D0 from D* decay", {prongKaon, prongPion}, {1, 1});
1273+
return signal;
1274+
}
1275+
if (!nameStr.compare("KPiPiFromD0FromDstar")) {
1276+
MCProng prongKaon(3, {321, Pdg::kD0, Pdg::kDStar}, {true, true, true}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1277+
MCProng prongPionSecondary(3, {211, Pdg::kD0, Pdg::kDStar}, {true, true, true}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1278+
MCProng prongPion(2, {211, Pdg::kDStar}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false});
1279+
signal = new MCSignal(name, "Kaon pion pion triplet from D*", {prongKaon, prongPionSecondary, prongPion}, {2, 2, 1});
1280+
return signal;
1281+
}
1282+
if (!nameStr.compare("KPiPiFromD0FromDstarPlus")) {
1283+
MCProng prongKaon(3, {-321, Pdg::kD0, Pdg::kDStar}, {false, false, false}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1284+
MCProng prongPionSecondary(3, {211, Pdg::kD0, Pdg::kDStar}, {false, false, false}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1285+
MCProng prongPion(2, {211, Pdg::kDStar}, {false, false}, {false, false}, {0, 0}, {0, 0}, {false, false});
1286+
signal = new MCSignal(name, "Kaon pion pion triplet from D*+", {prongKaon, prongPionSecondary, prongPion}, {2, 2, 1});
1287+
return signal;
1288+
}
1289+
if (!nameStr.compare("KPiPiFromD0FromDstarMinus")) {
1290+
MCProng prongKaon(3, {321, Pdg::kD0, Pdg::kDStar}, {false, false, false}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1291+
MCProng prongPionSecondary(3, {-211, Pdg::kD0, Pdg::kDStar}, {false, false, false}, {false, false, false}, {0, 0, 0}, {0, 0, 0}, {false, false, false});
1292+
MCProng prongPion(2, {-211, Pdg::kDStar}, {false, false}, {false, false}, {0, 0}, {0, 0}, {false, false});
1293+
signal = new MCSignal(name, "Kaon pion pion triplet from D*-", {prongKaon, prongPionSecondary, prongPion}, {2, 2, 1});
1294+
return signal;
1295+
}
1296+
if (!nameStr.compare("KFromDplus")) {
1297+
MCProng prong(2, {321, Pdg::kDPlus}, {true, true}, {false, false}, {0, 0}, {0, 0}, {false, false}, false, {502}, {true});
1298+
prong.SetSourceBit(0, MCProng::kPhysicalPrimary);
1299+
signal = new MCSignal(name, "Kaons from D+/- decays", {prong}, {-1});
1300+
return signal;
1301+
}
1302+
if (!nameStr.compare("LambdaC")) {
1303+
MCProng prong(1, {Pdg::kLambdaCPlus}, {true}, {false}, {0}, {0}, {false});
1304+
signal = new MCSignal(name, "Lambda_c", {prong}, {-1});
1305+
return signal;
1306+
}
1307+
11881308
//--------------------------------------------------------------------------------
11891309

11901310
if (!nameStr.compare("JpsiFromChic0")) {

PWGDQ/Core/VarManager.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,6 +642,8 @@ void VarManager::SetDefaultVarNames()
642642
fgVariableUnits[kVertexingLzOverErr] = "";
643643
fgVariableNames[kVertexingLxyzOverErr] = "Pair Lxyz/DLxyz";
644644
fgVariableUnits[kVertexingLxyzOverErr] = "";
645+
fgVariableNames[kCosPointingAngle] = "Cos #theta_{pointing}";
646+
fgVariableUnits[kCosPointingAngle] = "";
645647
fgVariableNames[kKFTrack0DCAxyz] = "Daughter0 DCAxyz";
646648
fgVariableUnits[kKFTrack0DCAxyz] = "cm";
647649
fgVariableNames[kKFTrack1DCAxyz] = "Daughter1 DCAxyz";

PWGDQ/Core/VarManager.h

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ class VarManager : public TObject
146146
kDecayToKPi, // e.g. D0 -> K+ pi- or cc.
147147
kTripleCandidateToKPiPi, // e.g. D+ -> K- pi+ pi+
148148
kTripleCandidateToPKPi, // e.g. Lambda_c -> p K- pi+
149-
kTripleCandidateToKKPi, // e.g. D_s -> K+ K- pi+
150149
kNMaxCandidateTypes
151150
};
152151

@@ -2885,21 +2884,6 @@ void VarManager::FillTriple(T1 const& t1, T2 const& t2, T3 const& t3, float* val
28852884
values[kPhi] = v123.Phi();
28862885
values[kRap] = -v123.Rapidity();
28872886
}
2888-
2889-
if (pairType == kTripleCandidateToKKPi) {
2890-
float m1 = o2::constants::physics::MassKaonCharged;
2891-
float m2 = o2::constants::physics::MassPionCharged;
2892-
2893-
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), m1);
2894-
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), m1);
2895-
ROOT::Math::PtEtaPhiMVector v3(t3.pt(), t3.eta(), t3.phi(), m2);
2896-
ROOT::Math::PtEtaPhiMVector v123 = v1 + v2 + v3;
2897-
values[kMass] = v123.M();
2898-
values[kPt] = v123.Pt();
2899-
values[kEta] = v123.Eta();
2900-
values[kPhi] = v123.Phi();
2901-
values[kRap] = -v123.Rapidity();
2902-
}
29032887
}
29042888

29052889
template <uint32_t fillMap, int pairType, typename T1, typename T2>
@@ -3063,6 +3047,21 @@ void VarManager::FillTripleMC(T1 const& t1, T2 const& t2, T3 const& t3, float* v
30633047
values[kPt1] = t1.pt();
30643048
values[kPt2] = t2.pt();
30653049
}
3050+
3051+
if (pairType == kTripleCandidateToKPiPi) {
3052+
float m1 = o2::constants::physics::MassKaonCharged;
3053+
float m2 = o2::constants::physics::MassPionCharged;
3054+
3055+
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), m1);
3056+
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), m2);
3057+
ROOT::Math::PtEtaPhiMVector v3(t3.pt(), t3.eta(), t3.phi(), m2);
3058+
ROOT::Math::PtEtaPhiMVector v123 = v1 + v2 + v3;
3059+
values[kMass] = v123.M();
3060+
values[kPt] = v123.Pt();
3061+
values[kEta] = v123.Eta();
3062+
values[kPhi] = v123.Phi();
3063+
values[kRap] = -v123.Rapidity();
3064+
}
30663065
}
30673066

30683067
template <int pairType, uint32_t collFillMap, uint32_t fillMap, typename C, typename T>
@@ -3574,6 +3573,10 @@ void VarManager::FillTripletVertexing(C const& collision, T const& t1, T const&
35743573
values[kVertexingTauzErr] = values[kVertexingLzErr] * v123.M() / (TMath::Abs(v123.Pz()) * o2::constants::physics::LightSpeedCm2NS);
35753574
values[kVertexingTauxyErr] = values[kVertexingLxyErr] * v123.M() / (v123.Pt() * o2::constants::physics::LightSpeedCm2NS);
35763575

3576+
values[kCosPointingAngle] = ((collision.posX() - secondaryVertex[0]) * v123.Px() +
3577+
(collision.posY() - secondaryVertex[1]) * v123.Py() +
3578+
(collision.posZ() - secondaryVertex[2]) * v123.Pz()) /
3579+
(v123.P() * values[VarManager::kVertexingLxyz]);
35773580
// run 2 definitions: Decay length projected onto the momentum vector of the candidate
35783581
values[kVertexingLzProjected] = (secondaryVertex[2] - collision.posZ()) * v123.Pz();
35793582
values[kVertexingLzProjected] = values[kVertexingLzProjected] / TMath::Sqrt(v123.Pz() * v123.Pz());

0 commit comments

Comments
 (0)