Skip to content

Commit 301c2c9

Browse files
committed
add plots for DCA template fit study
1 parent c302af9 commit 301c2c9

1 file changed

Lines changed: 124 additions & 14 deletions

File tree

‎PWGMM/Mult/Tasks/mftReassociationValidation.cxx‎

Lines changed: 124 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,7 @@ struct MftReassociationValidation {
272272
Configurable<bool> fillGeneralHistograms{"fillGeneralHistograms", true, "Fill general reassociation efficiencyhistograms"};
273273
Configurable<bool> fillSpecificHistograms{"fillSpecificHistograms", true, "Fill specific histograms (DCA, DeltaPos)"};
274274
Configurable<bool> fillParametersHistograms{"fillParametersHistograms", true, "Fill parameters histograms"};
275+
Configurable<bool> fillDcaTemplateFit{"fillDcaTemplateFit", true, "Fill DCA template histograms for primary/secondary fraction fit"};
275276
Configurable<bool> keepOnlyPhysicalPrimary{"keepOnlyPhysicalPrimary", true, "Keep only physical primary particles"};
276277
Configurable<bool> keepOnlySecondaries{"keepOnlySecondaries", false, "Keep only secondary particles"};
277278
Configurable<std::string> grpmagPath{"grpmagPath", "GLO/Config/GRPMagField", "CCDB path of the GRPMagField object"};
@@ -309,8 +310,6 @@ struct MftReassociationValidation {
309310
Configurable<bool> cutOrphanTracksExplicitly{"cutOrphanTracksExplicitly", false, "if true, cut orphan tracks explicitly"};
310311
Configurable<bool> cutOnDcaXY{"cutOnDcaXY", false, "if true, cut on DCA XY"};
311312
Configurable<bool> cutOnDcaZ{"cutOnDcaZ", false, "if true, cut on DCA Z"};
312-
Configurable<float> dcaXYMax{"dcaXYMax", 2.0f, "Maximum value for DCA XY"};
313-
Configurable<float> dcaZMax{"dcaZMax", 10.0f, "Maximum value for DCA Z"};
314313
Configurable<float> etaMftTrackMax{"etaMftTrackMax", -2.4f, "Maximum value for the eta of MFT tracks when used in cut function"};
315314
Configurable<float> etaMftTrackMin{"etaMftTrackMin", -3.36f, "Minimum value for the eta of MFT tracks when used in cut function"};
316315
Configurable<float> etaMftTrackMaxFilter{"etaMftTrackMaxFilter", -2.0f, "Maximum value for the eta of MFT tracks when used in filter"};
@@ -406,6 +405,8 @@ struct MftReassociationValidation {
406405
ConfigurableAxis axisDcaX{"axisDcaX", {500, -0.1, 2.1}, "DCAx binning (cm)"};
407406
ConfigurableAxis axisDcaY{"axisDcaY", {500, -0.1, 2.1}, "DCAy binning (cm)"};
408407
ConfigurableAxis axisDcaZ{"axisDcaZ", {500, -1., 1.}, "DCAz binning (cm)"};
408+
ConfigurableAxis axisDcaXYfit{"axisDcaXYfit", {500, 0., 2.}, "DCAxy binning (cm) for the template fit"};
409+
ConfigurableAxis axisDcaZfit{"axisDcaZfit", {500, -1., 1.}, "DCAz binning (cm) for the template fit"};
409410
ConfigurableAxis axisMultiplicity{"axisMultiplicity", {VARIABLE_WIDTH, 0, 5, 10, 20, 30, 40, 50, 100.1}, "multiplicity axis for histograms"};
410411
ConfigurableAxis axisPhi{"axisPhi", {72, 0, TwoPI}, "phi axis for histograms"};
411412
ConfigurableAxis axisPt{"axisPt", {72, 0, 36}, "pt axis for histograms"};
@@ -578,6 +579,11 @@ struct MftReassociationValidation {
578579
registry.get<TH1>(HIST("MC/2D/hIsTrueCollisionAmongCompatibleCollisionsDcaNotReassociated"))->GetXaxis()->SetBinLabel(iBin + 1, labelsMftIsTrueCollisionAmongCompatibleCollisionsStep[iBin].data());
579580
}
580581
}
582+
583+
if (configTask.fillDcaTemplateFit) {
584+
registry.add("MC/2D/DcaFit/hPtVsDcaXY_prim", "Primary DCA_{xy} (2D);p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
585+
registry.add("MC/2D/DcaFit/hPtVsDcaXY_sec", "Secondary DCA_{xy} (2D);p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
586+
}
581587
}
582588

583589
void addMftMonteCarloHistograms3D()
@@ -689,6 +695,20 @@ struct MftReassociationValidation {
689695
registry.get<TH1>(HIST("MC/3D/hIsTrueCollisionAmongCompatibleCollisionsDcaNotReassociated"))->GetXaxis()->SetBinLabel(iBin + 1, labelsMftIsTrueCollisionAmongCompatibleCollisionsStep[iBin].data());
690696
}
691697
}
698+
699+
if (configTask.fillDcaTemplateFit) {
700+
// 3D reassociated
701+
registry.add("MC/3D/DcaFit/hPtVsDcaXY_prim", "Primary DCA_{xy} (3D);p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
702+
registry.add("MC/3D/DcaFit/hPtVsDcaXY_sec", "Secondary DCA_{xy} (3D);p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
703+
registry.add("MC/3D/DcaFit/hPtVsDcaZ_prim", "Primary DCA_{z} (3D);p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaZfit});
704+
registry.add("MC/3D/DcaFit/hPtVsDcaZ_sec", "Secondary DCA_{z} (3D);p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaZfit});
705+
706+
// Non-ambiguous
707+
registry.add("MC/3D/DcaFit/NonAmb/hPtVsDcaXY_prim", "NonAmb Primary DCA_{xy};p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
708+
registry.add("MC/3D/DcaFit/NonAmb/hPtVsDcaXY_sec", "NonAmb Secondary DCA_{xy};p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
709+
registry.add("MC/3D/DcaFit/NonAmb/hPtVsDcaZ_prim", "NonAmb Primary DCA_{z};p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaZfit});
710+
registry.add("MC/3D/DcaFit/NonAmb/hPtVsDcaZ_sec", "NonAmb Secondary DCA_{z};p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaZfit});
711+
}
692712
}
693713

694714
template <ReassociationMethod ReassociationMethod, McStatus McStatus>
@@ -833,6 +853,10 @@ struct MftReassociationValidation {
833853

834854
if (doprocessData) {
835855
addMftHistograms<Data, TwoDimensional>();
856+
857+
if (configTask.fillDcaTemplateFit) {
858+
registry.add("Data/2D/DcaFit/hPtVsDcaXY", "Data DCA_{xy} (2D);p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
859+
}
836860
}
837861

838862
if (doprocessMcReassociated2d) {
@@ -857,6 +881,18 @@ struct MftReassociationValidation {
857881
addMftMonteCarloHistograms3D();
858882
}
859883

884+
if (doprocessData3d) {
885+
addMftHistograms<Data, ThreeDimensional>();
886+
887+
if (configTask.fillDcaTemplateFit) {
888+
registry.add("Data/3D/DcaFit/hPtVsDcaXY", "Data DCA_{xy} (3D);p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
889+
registry.add("Data/3D/DcaFit/hPtVsDcaZ", "Data DCA_{z} (3D);p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaZfit});
890+
891+
registry.add("Data/3D/DcaFit/NonAmb/hPtVsDcaXY", "NonAmb Data DCA_{xy};p_{T} (GeV/c);DCA_{xy} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaXYfit});
892+
registry.add("Data/3D/DcaFit/NonAmb/hPtVsDcaZ", "NonAmb Data DCA_{z};p_{T} (GeV/c);DCA_{z} (cm)", kTH2F, {configAxis.axisPt, configAxis.axisDcaZfit});
893+
}
894+
}
895+
860896
} // End of init() function
861897

862898
// =========================
@@ -1108,11 +1144,11 @@ struct MftReassociationValidation {
11081144
}
11091145
}
11101146

1111-
if (configMft.cutOnDcaXY && std::abs(dcaXY) > configMft.dcaXYMax) {
1147+
if (configMft.cutOnDcaXY && std::abs(dcaXY) > configMft.mftMaxDCAxy) {
11121148
return false;
11131149
}
11141150
registry.fill(HIST("MC/") + HIST(WhatReassociationMethod[ReassociationMethod]) + HIST("hPreciseTrackSelectionCounter"), SpecificTrackSelectionStep::AfterDcaXYCut);
1115-
if (configMft.cutOnDcaZ && std::abs(dcaZ) > configMft.dcaZMax) {
1151+
if (configMft.cutOnDcaZ && std::abs(dcaZ) > configMft.mftMaxDCAz) {
11161152
return false;
11171153
}
11181154
registry.fill(HIST("MC/") + HIST(WhatReassociationMethod[ReassociationMethod]) + HIST("hPreciseTrackSelectionCounter"), SpecificTrackSelectionStep::AfterDcaZCut);
@@ -1199,31 +1235,77 @@ struct MftReassociationValidation {
11991235

12001236
for (const auto& reassociated2dMftTrack : reassociated2dMftTracks) {
12011237

1202-
registry.fill(HIST("Data/hAmbiguityOfMftTracks"), MftTrackAmbiguityStep::AllMftTracks);
12031238
auto templatedMftTrack = reassociated2dMftTrack.template mfttrack_as<FilteredMftTracks>();
12041239

12051240
o2::track::TrackParCovFwd trackPar = o2::aod::fwdtrackutils::getTrackParCovFwdShift(templatedMftTrack, mZShift);
12061241
std::array<double, 3> dcaInfOrig;
12071242
trackPar.propagateToDCAhelix(bZ, {collision.posX(), collision.posY(), collision.posZ()}, dcaInfOrig);
1208-
auto dcaXYoriginal = 999.f;
1209-
dcaXYoriginal = std::sqrt(dcaInfOrig[0] * dcaInfOrig[0] + dcaInfOrig[1] * dcaInfOrig[1]);
1243+
// auto dcaXYoriginal = 999.f;
1244+
// dcaXYoriginal = std::sqrt(dcaInfOrig[0] * dcaInfOrig[0] + dcaInfOrig[1] * dcaInfOrig[1]);
12101245

1211-
if (!isAcceptedMftTrack<TwoDimensional>(templatedMftTrack, false, true, dcaXYoriginal, dcaInfOrig[2])) {
1246+
if (!isAcceptedMftTrack<TwoDimensional>(templatedMftTrack, false, true, reassociated2dMftTrack.bestDCAXY(), dcaInfOrig[2])) {
12121247
continue;
12131248
}
12141249

1215-
registry.fill(HIST("Data/hAmbiguityOfMftTracks"), MftTrackAmbiguityStep::AfterTrackSelection);
1216-
1217-
if (isAmbiguousMftTrack<Data, TwoDimensional>(reassociated2dMftTrack, true)) {
1218-
registry.fill(HIST("Data/hReassociation2dMftTracks"), Reassociation2dMftTracks::NotReassociated2dMftTracks);
1250+
if (configTask.fillDcaTemplateFit) {
1251+
registry.fill(HIST("Data/2D/DcaFit/hPtVsDcaXY"), templatedMftTrack.pt(), reassociated2dMftTrack.bestDCAXY());
12191252
}
12201253

12211254
} // end of loop over reassociated MFT tracks
1222-
1223-
// TO-DO the same for reassociated3d (change the histograms)
12241255
}
12251256
PROCESS_SWITCH(MftReassociationValidation, processData, "Process MFT reassociation validation for DATA", false);
12261257

1258+
void processData3d(FilteredCollisionsWSelMult::iterator const& collision,
1259+
FilteredMftTracks const& /*mftTracks*/,
1260+
soa::SmallGroups<aod::BestCollisionsFwd3d> const& reassociated3dMftTracks,
1261+
aod::BCsWithTimestamps const&)
1262+
{
1263+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
1264+
if (areCorrectionsLoaded == false) {
1265+
loadZVertexShiftCorrection(bc);
1266+
areCorrectionsLoaded = true;
1267+
}
1268+
1269+
if (!isAcceptedCollision<ThreeDimensional>(collision, false)) {
1270+
return;
1271+
}
1272+
1273+
for (const auto& reassociated3dMftTrack : reassociated3dMftTracks) {
1274+
auto templatedMftTrack = reassociated3dMftTrack.template mfttrack_as<FilteredMftTracks>();
1275+
1276+
// // Compute DCA at original collision for isAcceptedMftTrack
1277+
// o2::track::TrackParCovFwd trackPar =
1278+
// o2::aod::fwdtrackutils::getTrackParCovFwdShift(templatedMftTrack, mZShift);
1279+
// std::array<double, 3> dcaInfOrig;
1280+
// trackPar.propagateToDCAhelix(
1281+
// bZ,
1282+
// {collision.posX(), collision.posY(), collision.posZ()},
1283+
// dcaInfOrig);
1284+
// const float dcaXYoriginal =
1285+
// std::sqrt(dcaInfOrig[0] * dcaInfOrig[0] +
1286+
// dcaInfOrig[1] * dcaInfOrig[1]);
1287+
1288+
// Use existing track selection function (unchanged)
1289+
if (!isAcceptedMftTrack<ThreeDimensional>(templatedMftTrack, false, true, reassociated3dMftTrack.bestDCAXY(), reassociated3dMftTrack.bestDCAZ())) {
1290+
continue;
1291+
}
1292+
1293+
if (configTask.fillDcaTemplateFit) {
1294+
registry.fill(HIST("Data/3D/DcaFit/hPtVsDcaXY"), templatedMftTrack.pt(), reassociated3dMftTrack.bestDCAXY());
1295+
registry.fill(HIST("Data/3D/DcaFit/hPtVsDcaZ"), templatedMftTrack.pt(), reassociated3dMftTrack.bestDCAZ());
1296+
}
1297+
1298+
// The same for nonambi only
1299+
if (reassociated3dMftTrack.ambDegree() == 1) {
1300+
if (configTask.fillDcaTemplateFit) {
1301+
registry.fill(HIST("Data/3D/DcaFit/NonAmb/hPtVsDcaXY"), templatedMftTrack.pt(), reassociated3dMftTrack.bestDCAXY());
1302+
registry.fill(HIST("Data/3D/DcaFit/NonAmb/hPtVsDcaZ"), templatedMftTrack.pt(), reassociated3dMftTrack.bestDCAZ());
1303+
}
1304+
}
1305+
}
1306+
}
1307+
PROCESS_SWITCH(MftReassociationValidation, processData3d, "Process DCA fit histograms for DATA 3D reassociation", false);
1308+
12271309
void processCreateLookupTable(FilteredCollisionsWSelMultMcLabels const& collisions, soa::Join<aod::McCollisions, aod::McCollsExtra> const& mcCollisions)
12281310
{
12291311
recoVtxX.clear();
@@ -1347,6 +1429,15 @@ struct MftReassociationValidation {
13471429
registry.fill(HIST("MC/2D/hPreciseTrackSelectionCounter"), SpecificTrackSelectionStep::HasMcParticle);
13481430

13491431
auto particle = templatedTrack.template mcParticle_as<aod::McParticles>();
1432+
1433+
if (configTask.fillDcaTemplateFit) {
1434+
if (particle.isPhysicalPrimary()) {
1435+
registry.fill(HIST("MC/2D/DcaFit/hPtVsDcaXY_prim"), templatedTrack.pt(), reassociated2dMftTrack.bestDCAXY());
1436+
} else {
1437+
registry.fill(HIST("MC/2D/DcaFit/hPtVsDcaXY_sec"), templatedTrack.pt(), reassociated2dMftTrack.bestDCAXY());
1438+
}
1439+
}
1440+
13501441
float deltaX = -999.f;
13511442
float deltaY = -999.f;
13521443
float deltaZ = -999.f;
@@ -1734,6 +1825,25 @@ struct MftReassociationValidation {
17341825
registry.fill(HIST("MC/3D/hPreciseTrackSelectionCounter"), SpecificTrackSelectionStep::HasMcParticle);
17351826

17361827
auto particle = templatedTrack.template mcParticle_as<aod::McParticles>();
1828+
1829+
if (configTask.fillDcaTemplateFit) {
1830+
if (particle.isPhysicalPrimary()) {
1831+
registry.fill(HIST("MC/3D/DcaFit/hPtVsDcaXY_prim"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAXY());
1832+
registry.fill(HIST("MC/3D/DcaFit/hPtVsDcaZ_prim"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAZ());
1833+
if (reassociated3dMftTrack.ambDegree() == 1) {
1834+
registry.fill(HIST("MC/3D/DcaFit/NonAmb/hPtVsDcaXY_prim"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAXY());
1835+
registry.fill(HIST("MC/3D/DcaFit/NonAmb/hPtVsDcaZ_prim"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAZ());
1836+
}
1837+
} else {
1838+
registry.fill(HIST("MC/3D/DcaFit/hPtVsDcaXY_sec"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAXY());
1839+
registry.fill(HIST("MC/3D/DcaFit/hPtVsDcaZ_sec"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAZ());
1840+
if (reassociated3dMftTrack.ambDegree() == 1) {
1841+
registry.fill(HIST("MC/3D/DcaFit/NonAmb/hPtVsDcaXY_sec"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAXY());
1842+
registry.fill(HIST("MC/3D/DcaFit/NonAmb/hPtVsDcaZ_sec"), templatedTrack.pt(), reassociated3dMftTrack.bestDCAZ());
1843+
}
1844+
}
1845+
}
1846+
17371847
float deltaX = -999.f;
17381848
float deltaY = -999.f;
17391849
float deltaZ = -999.f;

0 commit comments

Comments
 (0)