Skip to content

Commit 0ca5052

Browse files
committed
Merge branch 'master' of github.com:sweta29singh/O2Physics
2 parents 66d62d4 + a30cd83 commit 0ca5052

File tree

7 files changed

+242
-642
lines changed

7 files changed

+242
-642
lines changed

PWGCF/FemtoUniverse/Core/FemtoUniverseDetaDphiStar.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -585,7 +585,7 @@ class FemtoUniverseDetaDphiStar
585585
}
586586

587587
if (IsDphiAvgOrDist) {
588-
if (std::pow(dphiAvg, 2) / std::pow(cutDeltaPhiStarMax, 2) + std::pow(deta, 2) / std::pow(cutDeltaEtaMax, 2) < 1.) {
588+
if ((dphiAvg > cutDeltaPhiStarMin) && (dphiAvg < cutDeltaPhiStarMax) && (deta > cutDeltaEtaMin) && (deta < cutDeltaEtaMax)) {
589589
return true;
590590
} else {
591591
if (ChosenEventType == femto_universe_container::EventType::same) {

PWGEM/Dilepton/TableProducer/skimmerPrimaryElectron.cxx

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,10 @@ struct skimmerPrimaryElectron {
325325
trackParCov.setPID(o2::track::PID::Electron);
326326
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
327327
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
328-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
328+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
329+
if (!isPropOK) {
330+
return false;
331+
}
329332
float dcaXY = mDcaInfoCov.getY();
330333
float dcaZ = mDcaInfoCov.getZ();
331334

@@ -387,8 +390,10 @@ struct skimmerPrimaryElectron {
387390
trackParCov.setPID(o2::track::PID::Electron);
388391
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
389392
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
390-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
391-
393+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
394+
if (!isPropOK) {
395+
return false;
396+
}
392397
std::vector<float> inputFeatures = mlResponseSingleTrack.getInputFeatures(track, trackParCov, collision);
393398
float binningFeature = mlResponseSingleTrack.getBinningFeature(track, trackParCov, collision);
394399

@@ -465,7 +470,10 @@ struct skimmerPrimaryElectron {
465470
trackParCov.setPID(o2::track::PID::Electron);
466471
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
467472
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
468-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
473+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
474+
if (!isPropOK) {
475+
return;
476+
}
469477
float dcaXY = mDcaInfoCov.getY();
470478
float dcaZ = mDcaInfoCov.getZ();
471479

@@ -983,7 +991,10 @@ struct prefilterPrimaryElectron {
983991
trackParCov.setPID(o2::track::PID::Electron);
984992
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
985993
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
986-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
994+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
995+
if (!isPropOK) {
996+
return false;
997+
}
987998
float dcaXY = mDcaInfoCov.getY();
988999
float dcaZ = mDcaInfoCov.getZ();
9891000

@@ -1024,7 +1035,10 @@ struct prefilterPrimaryElectron {
10241035
if constexpr (loose_track_sign > 0) { // positive track is loose track
10251036
auto trackParCov = getTrackParCov(pos);
10261037
trackParCov.setPID(o2::track::PID::Electron);
1027-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1038+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1039+
if (!isPropOK) {
1040+
return false;
1041+
}
10281042
getPxPyPz(trackParCov, pVec_recalc);
10291043

10301044
ROOT::Math::PtEtaPhiMVector v1(ele.pt(), ele.eta(), ele.phi(), o2::constants::physics::MassElectron);
@@ -1035,7 +1049,10 @@ struct prefilterPrimaryElectron {
10351049
} else {
10361050
auto trackParCov = getTrackParCov(ele);
10371051
trackParCov.setPID(o2::track::PID::Electron);
1038-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1052+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1053+
if (!isPropOK) {
1054+
return false;
1055+
}
10391056
getPxPyPz(trackParCov, pVec_recalc);
10401057

10411058
ROOT::Math::PtEtaPhiMVector v1(trackParCov.getPt(), trackParCov.getEta(), trackParCov.getPhi(), o2::constants::physics::MassElectron);
@@ -1109,7 +1126,10 @@ struct prefilterPrimaryElectron {
11091126
trackParCov.setPID(o2::track::PID::Electron);
11101127
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
11111128
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1112-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1129+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1130+
if (!isPropOK) {
1131+
continue;
1132+
}
11131133
getPxPyPz(trackParCov, pVec_recalc);
11141134

11151135
for (const auto& empos : positrons_per_coll) {
@@ -1154,7 +1174,10 @@ struct prefilterPrimaryElectron {
11541174
trackParCov.setPID(o2::track::PID::Electron);
11551175
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
11561176
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1157-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1177+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1178+
if (!isPropOK) {
1179+
continue;
1180+
}
11581181
getPxPyPz(trackParCov, pVec_recalc);
11591182
for (const auto& emele : electrons_per_coll) {
11601183
if (emele.trackId() == pos.globalIndex()) {
@@ -1197,7 +1220,10 @@ struct prefilterPrimaryElectron {
11971220
trackParCov.setPID(o2::track::PID::Electron);
11981221
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
11991222
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1200-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1223+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1224+
if (!isPropOK) {
1225+
continue;
1226+
}
12011227
getPxPyPz(trackParCov, pVec_recalc);
12021228
for (const auto& empos : positrons_per_coll) {
12031229
if (empos.trackId() == pos.globalIndex()) {
@@ -1226,7 +1252,10 @@ struct prefilterPrimaryElectron {
12261252
trackParCov.setPID(o2::track::PID::Electron);
12271253
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
12281254
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
1229-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1255+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
1256+
if (!isPropOK) {
1257+
continue;
1258+
}
12301259
getPxPyPz(trackParCov, pVec_recalc);
12311260

12321261
for (const auto& emele : electrons_per_coll) {

PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronQC.cxx

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,10 @@ struct skimmerPrimaryElectronQC {
336336
trackParCov.setPID(o2::track::PID::Electron);
337337
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
338338
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
339-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
339+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
340+
if (!isPropOK) {
341+
return false;
342+
}
340343
float dcaXY = mDcaInfoCov.getY();
341344
float dcaZ = mDcaInfoCov.getZ();
342345

@@ -409,7 +412,10 @@ struct skimmerPrimaryElectronQC {
409412
trackParCov.setPID(o2::track::PID::Electron);
410413
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
411414
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
412-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
415+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
416+
if (!isPropOK) {
417+
return false;
418+
}
413419
float dcaXY = mDcaInfoCov.getY();
414420
float dcaZ = mDcaInfoCov.getZ();
415421

@@ -455,7 +461,10 @@ struct skimmerPrimaryElectronQC {
455461
trackParCov.setPID(o2::track::PID::Electron);
456462
mVtx.setPos({collision.posX(), collision.posY(), collision.posZ()});
457463
mVtx.setCov(collision.covXX(), collision.covXY(), collision.covYY(), collision.covXZ(), collision.covYZ(), collision.covZZ());
458-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
464+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, trackParCov, 2.f, matCorr, &mDcaInfoCov);
465+
if (!isPropOK) {
466+
return;
467+
}
459468
float dcaXY = mDcaInfoCov.getY();
460469
float dcaZ = mDcaInfoCov.getZ();
461470

@@ -596,12 +605,18 @@ struct skimmerPrimaryElectronQC {
596605

597606
auto t1ParCov = getTrackParCov(t1);
598607
t1ParCov.setPID(o2::track::PID::Electron);
599-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t1ParCov, 2.f, matCorr, &mDcaInfoCov);
608+
bool isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t1ParCov, 2.f, matCorr, &mDcaInfoCov);
609+
if (!isPropOK) {
610+
return false;
611+
}
600612
getPxPyPz(t1ParCov, pVec1);
601613

602614
auto t2ParCov = getTrackParCov(t2);
603615
t2ParCov.setPID(o2::track::PID::Electron);
604-
o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t2ParCov, 2.f, matCorr, &mDcaInfoCov);
616+
isPropOK = o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, t2ParCov, 2.f, matCorr, &mDcaInfoCov);
617+
if (!isPropOK) {
618+
return false;
619+
}
605620
getPxPyPz(t2ParCov, pVec2);
606621

607622
ROOT::Math::PtEtaPhiMVector v1(t1ParCov.getPt(), t1ParCov.getEta(), t1ParCov.getPhi(), o2::constants::physics::MassElectron);

PWGHF/D2H/Tasks/taskDstarToD0Pi.cxx

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ struct HfTaskDstarToD0Pi {
5959
Configurable<bool> selectionFlagDstarToD0Pi{"selectionFlagDstarToD0Pi", true, "Selection Flag for D* decay to D0 & Pi"};
6060
Configurable<bool> isCentStudy{"isCentStudy", true, "Flag to select centrality study"};
6161
Configurable<bool> qaEnabled{"qaEnabled", true, "Flag to enable QA histograms"};
62+
Configurable<bool> studyD0ToPiKPi0{"studyD0ToPiKPi0", false, "Flag to study D*->D0(piKpi0)pi channel"};
6263

6364
// CCDB configuration
6465
Configurable<bool> useWeight{"useWeight", true, "Flag to use weights from CCDB"};
@@ -262,6 +263,28 @@ struct HfTaskDstarToD0Pi {
262263
}
263264
}
264265

266+
if (studyD0ToPiKPi0) {
267+
// inclusive D0ToPiKPi0 study
268+
if (doprocessMcWML && isCentStudy) {
269+
registry.add("D0ToPiKPi0/hDeltaInvMassVsPtVsCentVsBDTScore", "#Delta #it{M}_{inv} Vs Pt Vs Cent Vs BDTScore for D0ToPiKPi0", {HistType::kTHnSparseF, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}, {axisCentrality}, {axisBDTScoreBackground}, {axisBDTScorePrompt}, {axisBDTScoreNonPrompt}}}, true);
270+
} else if (doprocessMcWoMl && isCentStudy) {
271+
registry.add("D0ToPiKPi0/hDeltaInvMassDstar3D", "#Delta #it{M}_{inv} D* Candidate for D0ToPiKPi0; inv. mass ((#pi #pi k) - (#pi k)) (GeV/#it{c}^{2});#it{p}_{T} (GeV/#it{c}); FT0M centrality", {HistType::kTH3F, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}, {axisCentrality}}}, true);
272+
} else if (doprocessMcWML && !isCentStudy) {
273+
registry.add("D0ToPiKPi0/hDeltaInvMassVsPtVsBDTScore", "#Delta #it{M}_{inv} Vs Pt Vs BDTScore for D0ToPiKPi0", {HistType::kTHnSparseF, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}, {axisBDTScoreBackground}, {axisBDTScorePrompt}, {axisBDTScoreNonPrompt}}}, true);
274+
} else if (doprocessMcWoMl && !isCentStudy) {
275+
registry.add("D0ToPiKPi0/hDeltaInvMassDstar2D", "#Delta #it{M}_{inv} D* Candidate for D0ToPiKPi0; inv. mass ((#pi #pi k) - (#pi k)) (GeV/#it{c}^{2});#it{p}_{T} (GeV/#it{c})", {HistType::kTH2F, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}}}, true);
276+
}
277+
278+
// differential (prompt/Non-prompt) D0ToPiKPi0 study
279+
if (doprocessMcWML) {
280+
registry.add("D0ToPiKPi0/hPromptDeltaInvMassVsPtVsBDTScore", "Prompt #Delta #it{M}_{inv} Vs Pt Vs BDTScore for D0ToPiKPi0", {HistType::kTHnSparseF, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}, {axisBDTScoreBackground}, {axisBDTScorePrompt}, {axisBDTScoreNonPrompt}}}, true);
281+
registry.add("D0ToPiKPi0/hNonPromptDeltaInvMassVsPtVsBDTScore", "Non-Prompt #Delta #it{M}_{inv} Vs Pt Vs BDTScore for D0ToPiKPi0", {HistType::kTHnSparseF, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}, {axisBDTScoreBackground}, {axisBDTScorePrompt}, {axisBDTScoreNonPrompt}}}, true);
282+
} else if (doprocessMcWoMl) {
283+
registry.add("D0ToPiKPi0/hPromptDeltaInvMassDstar2D", "Prompt #Delta #it{M}_{inv} D* Candidate for D0ToPiKPi0; inv. mass ((#pi #pi k) - (#pi k)) (GeV/#it{c}^{2});#it{p}_{T} (GeV/#it{c})", {HistType::kTH2F, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}}}, true);
284+
registry.add("D0ToPiKPi0/hNonPromptDeltaInvMassDstar2D", "Non-Prompt #Delta #it{M}_{inv} D* Candidate for D0ToPiKPi0; inv. mass ((#pi #pi k) - (#pi k)) (GeV/#it{c}^{2});#it{p}_{T} (GeV/#it{c})", {HistType::kTH2F, {{axisDeltaInvMass}, {vecPtBins, "#it{p}_{T} (GeV/#it{c})"}}}, true);
285+
}
286+
}
287+
265288
// if weights to be applied
266289
if (useWeight) {
267290
ccdbApi.init(ccdbUrl);
@@ -542,6 +565,38 @@ struct HfTaskDstarToD0Pi {
542565
}
543566
}
544567
}
568+
} else if (studyD0ToPiKPi0 && candDstarMcRec.isSelDstarToD0Pi() && (std::abs(candDstarMcRec.flagMcMatchRec()) == hf_decay::hf_cand_dstar::DecayChannelMain::DstarToPiKPiPi0) && (std::abs(candDstarMcRec.flagMcMatchRecD0()) == hf_decay::hf_cand_2prong::DecayChannelMain::D0ToPiKPi0)) {
569+
// Aplly all selection to study D*->D0(piKpi0)pi channel same as signal channel
570+
// MC Matched but to D*->D0(piKpi0)pi channel
571+
auto deltaMDstar = std::abs(candDstarMcRec.invMassDstar() - candDstarMcRec.invMassD0());
572+
if constexpr (ApplyMl) {
573+
auto bdtScore = candDstarMcRec.mlProbDstarToD0Pi();
574+
// inclusive study
575+
if (isCentStudy) {
576+
registry.fill(HIST("D0ToPiKPi0/hDeltaInvMassVsPtVsCentVsBDTScore"), deltaMDstar, candDstarMcRec.pt(), centrality, bdtScore[0], bdtScore[1], bdtScore[2]);
577+
} else {
578+
registry.fill(HIST("D0ToPiKPi0/hDeltaInvMassVsPtVsBDTScore"), deltaMDstar, candDstarMcRec.pt(), bdtScore[0], bdtScore[1], bdtScore[2]);
579+
}
580+
// differential (prompt/Non-prompt) study
581+
if (candDstarMcRec.originMcRec() == RecoDecay::OriginType::Prompt) {
582+
registry.fill(HIST("D0ToPiKPi0/hPromptDeltaInvMassVsPtVsBDTScore"), deltaMDstar, candDstarMcRec.pt(), bdtScore[0], bdtScore[1], bdtScore[2]);
583+
} else if (candDstarMcRec.originMcRec() == RecoDecay::OriginType::NonPrompt) {
584+
registry.fill(HIST("D0ToPiKPi0/hNonPromptDeltaInvMassVsPtVsBDTScore"), deltaMDstar, candDstarMcRec.pt(), bdtScore[0], bdtScore[1], bdtScore[2]);
585+
}
586+
} else { // without ML
587+
// inclusive study
588+
if (isCentStudy) {
589+
registry.fill(HIST("D0ToPiKPi0/hDeltaInvMassDstar3D"), deltaMDstar, candDstarMcRec.pt(), centrality);
590+
} else {
591+
registry.fill(HIST("D0ToPiKPi0/hDeltaInvMassDstar2D"), deltaMDstar, candDstarMcRec.pt());
592+
}
593+
// differential (prompt/Non-prompt) study
594+
if (candDstarMcRec.originMcRec() == RecoDecay::OriginType::Prompt) {
595+
registry.fill(HIST("D0ToPiKPi0/hPromptDeltaInvMassDstar2D"), deltaMDstar, candDstarMcRec.pt());
596+
} else if (candDstarMcRec.originMcRec() == RecoDecay::OriginType::NonPrompt) {
597+
registry.fill(HIST("D0ToPiKPi0/hNonPromptDeltaInvMassDstar2D"), deltaMDstar, candDstarMcRec.pt());
598+
}
599+
}
545600
} else { // MC Unmatched (Baground at Reconstruction Level)
546601
if (qaEnabled) {
547602
registry.fill(HIST("QA/hCPASkimD0RecBg"), candDstarMcRec.cpaD0());

0 commit comments

Comments
 (0)