Skip to content

Commit e7aef7f

Browse files
authored
[PWGCF] Update lambdaR2Correlation.cxx (#12499)
1 parent 508e5f5 commit e7aef7f

File tree

1 file changed

+67
-38
lines changed

1 file changed

+67
-38
lines changed

PWGCF/TwoParticleCorrelations/Tasks/lambdaR2Correlation.cxx

Lines changed: 67 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "Common/DataModel/Centrality.h"
2020
#include "Common/DataModel/CollisionAssociationTables.h"
2121
#include "Common/DataModel/EventSelection.h"
22+
#include "Common/DataModel/Multiplicity.h"
2223
#include "Common/DataModel/PIDResponse.h"
2324

2425
#include "CCDB/BasicCCDBManager.h"
@@ -43,9 +44,11 @@ namespace o2::aod
4344
namespace lambdacollision
4445
{
4546
DECLARE_SOA_COLUMN(Cent, cent, float);
46-
}
47+
DECLARE_SOA_COLUMN(Mult, mult, float);
48+
} // namespace lambdacollision
4749
DECLARE_SOA_TABLE(LambdaCollisions, "AOD", "LAMBDACOLS", o2::soa::Index<>,
4850
lambdacollision::Cent,
51+
lambdacollision::Mult,
4952
aod::collision::PosX,
5053
aod::collision::PosY,
5154
aod::collision::PosZ);
@@ -56,6 +59,7 @@ namespace lambdamcgencollision
5659
}
5760
DECLARE_SOA_TABLE(LambdaMcGenCollisions, "AOD", "LMCGENCOLS", o2::soa::Index<>,
5861
lambdacollision::Cent,
62+
lambdacollision::Mult,
5963
o2::aod::mccollision::PosX,
6064
o2::aod::mccollision::PosY,
6165
o2::aod::mccollision::PosZ);
@@ -172,6 +176,11 @@ enum TrackLabels {
172176
kGenLambdaToPrPi
173177
};
174178

179+
enum CentEstType {
180+
kCentFT0M = 0,
181+
kCentFV0A
182+
};
183+
175184
enum RunType {
176185
kRun3 = 0,
177186
kRun2
@@ -229,6 +238,7 @@ struct LambdaTableProducer {
229238
Produces<aod::LambdaMcGenTracks> lambdaMCGenTrackTable;
230239

231240
// Collisions
241+
Configurable<int> cCentEstimator{"cCentEstimator", 0, "Centrality Estimator : 0-FT0M, 1-FV0A"};
232242
Configurable<float> cMinZVtx{"cMinZVtx", -10.0, "Min VtxZ cut"};
233243
Configurable<float> cMaxZVtx{"cMaxZVtx", 10.0, "Max VtxZ cut"};
234244
Configurable<float> cMinMult{"cMinMult", 0., "Minumum Multiplicity"};
@@ -318,9 +328,8 @@ struct LambdaTableProducer {
318328
{"hPrimFracVsPtEtaCentLambda", "hPrimFracVsPtEtaCentAntiLambda"}};
319329

320330
// Initialize Global Variables
321-
float cent = 0.;
331+
float cent = 0., mult = 0.;
322332
float pt = 0., eta = 0., rap = 0., phi = 0.;
323-
bool bSecondaryLambdaFlag = false;
324333

325334
void init(InitContext const&)
326335
{
@@ -412,9 +421,7 @@ struct LambdaTableProducer {
412421
// McReco Histos
413422
histos.add("Tracks/h2f_tracks_pid_before_sel", "PIDs", kTH2F, {axisPID, axisV0Pt});
414423
histos.add("Tracks/h2f_tracks_pid_after_sel", "PIDs", kTH2F, {axisPID, axisV0Pt});
415-
histos.add("Tracks/h2f_lambda_from_sigma", "PIDs", kTH2F, {axisPID, axisV0Pt});
416-
histos.add("Tracks/h2f_lambda_from_cascade", "PIDs", kTH2F, {axisPID, axisV0Pt});
417-
histos.add("Tracks/h2f_lambda_from_omega", "PIDs", kTH2F, {axisPID, axisV0Pt});
424+
histos.add("Tracks/h2f_lambda_mothers_pdg", "PIDs", kTH2F, {axisPID, axisV0Pt});
418425

419426
// McGen Histos
420427
histos.add("McGen/h1f_collision_recgen", "# of Reco Collision Associated to One Mc Generator Collision", kTH1F, {axisMult});
@@ -481,7 +488,12 @@ struct LambdaTableProducer {
481488
}
482489

483490
if constexpr (run == kRun3) { // Run3 Min-Bias Trigger
484-
cent = col.centFT0M();
491+
// select centrality estimator
492+
if (cCentEstimator == kCentFT0M) {
493+
cent = col.centFT0M();
494+
} else if (cCentEstimator == kCentFV0A) {
495+
cent = col.centFV0A();
496+
}
485497
if (cSel8Trig && !col.sel8()) {
486498
return false;
487499
}
@@ -495,7 +507,7 @@ struct LambdaTableProducer {
495507
}
496508
}
497509

498-
if (cent <= cMinMult || cent >= cMaxMult) { // select centrality
510+
if (cent <= cMinMult || cent >= cMaxMult) { // select centrality percentile class
499511
return false;
500512
}
501513

@@ -527,6 +539,9 @@ struct LambdaTableProducer {
527539
return false;
528540
}
529541

542+
// Set Multiplicity
543+
mult = col.multNTracksPV();
544+
530545
return true;
531546
}
532547

@@ -772,7 +787,6 @@ struct LambdaTableProducer {
772787
// check for secondary lambda
773788
if (!mcpart.isPhysicalPrimary()) {
774789
histos.fill(HIST("Tracks/h1f_tracks_info"), kSecondaryLambda);
775-
bSecondaryLambdaFlag = true;
776790
return kSecondary;
777791
}
778792

@@ -817,18 +831,6 @@ struct LambdaTableProducer {
817831
}
818832
}
819833

820-
// get information about secondary lambdas
821-
if (bSecondaryLambdaFlag) {
822-
auto lambdaMothers = mcpart.template mothers_as<aod::McParticles>();
823-
if (std::abs(lambdaMothers[0].pdgCode()) == kSigmaMinus || std::abs(lambdaMothers[0].pdgCode()) == kSigma0 || std::abs(lambdaMothers[0].pdgCode()) == kSigmaPlus) {
824-
histos.fill(HIST("Tracks/h2f_lambda_from_sigma"), mcpart.pdgCode(), mcpart.pt());
825-
} else if (std::abs(lambdaMothers[0].pdgCode()) == kXiMinus || std::abs(lambdaMothers[0].pdgCode()) == kXi0) {
826-
histos.fill(HIST("Tracks/h2f_lambda_from_cascade"), mcpart.pdgCode(), mcpart.pt());
827-
} else if (std::abs(lambdaMothers[0].pdgCode()) == kOmegaMinus) {
828-
histos.fill(HIST("Tracks/h2f_lambda_from_omega"), mcpart.pdgCode(), mcpart.pt());
829-
}
830-
}
831-
832834
return true;
833835
}
834836

@@ -893,6 +895,14 @@ struct LambdaTableProducer {
893895
return primFrac * effCorrFact;
894896
}
895897

898+
template <typename V, typename T>
899+
void fillLambdaMothers(V const& v0, T const&)
900+
{
901+
auto mcpart = v0.template mcParticle_as<aod::McParticles>();
902+
auto lambdaMothers = mcpart.template mothers_as<aod::McParticles>();
903+
histos.fill(HIST("Tracks/h2f_lambda_mothers_pdg"), lambdaMothers[0].pdgCode(), v0.pt());
904+
}
905+
896906
template <ParticleType part, typename C, typename V, typename T>
897907
void fillLambdaQAHistos(C const& col, V const& v0, T const&)
898908
{
@@ -973,7 +983,7 @@ struct LambdaTableProducer {
973983
histos.fill(HIST("Events/h1f_collision_posZ"), collision.posZ());
974984

975985
// Fill Collision Table
976-
lambdaCollisionTable(cent, collision.posX(), collision.posY(), collision.posZ());
986+
lambdaCollisionTable(cent, mult, collision.posX(), collision.posY(), collision.posZ());
977987

978988
// initialize v0track objects
979989
ParticleType v0Type = kLambda;
@@ -1005,9 +1015,11 @@ struct LambdaTableProducer {
10051015
// we have v0 as lambda
10061016
histos.fill(HIST("Tracks/h1f_tracks_info"), kAllSelPassed);
10071017

1008-
// Remove lambda with ambiguous daughters
1009-
if (cRemoveAmbiguousTracks && hasAmbiguousDaughters(v0, tracks)) {
1010-
continue;
1018+
// Remove lambda with ambiguous daughters (Only for run3)
1019+
if constexpr (run == kRun3) {
1020+
if (cRemoveAmbiguousTracks && hasAmbiguousDaughters(v0, tracks)) {
1021+
continue;
1022+
}
10111023
}
10121024

10131025
// Get Lambda mass and kinematic variables
@@ -1021,13 +1033,21 @@ struct LambdaTableProducer {
10211033
if constexpr (dmc == kMC) {
10221034
histos.fill(HIST("Tracks/h2f_tracks_pid_before_sel"), v0.mcParticle().pdgCode(), v0.pt());
10231035

1024-
if (cSelMCPSV0) { // Get Primary/Secondary Lambda
1036+
// Get Primary/Secondary Lambda
1037+
if (cSelMCPSV0) {
10251038
v0PrmScdType = isPrimaryV0(v0);
10261039
}
1027-
if (cSelectTrueLambda && !selTrueMcRecLambda(v0, tracks)) { // check for true Lambda/Anti-Lambda
1040+
1041+
// check for true Lambda/Anti-Lambda
1042+
if (cSelectTrueLambda && !selTrueMcRecLambda(v0, tracks)) {
10281043
continue;
10291044
}
10301045

1046+
// get mothers information
1047+
if (v0PrmScdType == kSecondary) {
1048+
fillLambdaMothers(v0, tracks);
1049+
}
1050+
10311051
histos.fill(HIST("Tracks/h1f_tracks_info"), kPassTrueLambdaSel);
10321052
histos.fill(HIST("Tracks/h2f_tracks_pid_after_sel"), v0.mcParticle().pdgCode(), v0.pt());
10331053

@@ -1073,7 +1093,7 @@ struct LambdaTableProducer {
10731093
void fillLambdaMcGenTables(C const& mcCollision, M const& mcParticles)
10741094
{
10751095
// Fill McGen Collision Table
1076-
lambdaMCGenCollisionTable(cent, mcCollision.posX(), mcCollision.posY(), mcCollision.posZ());
1096+
lambdaMCGenCollisionTable(cent, mult, mcCollision.posX(), mcCollision.posY(), mcCollision.posZ());
10771097

10781098
// initialize track objects
10791099
ParticleType v0Type = kLambda;
@@ -1203,11 +1223,13 @@ struct LambdaTableProducer {
12031223
SliceCache cache;
12041224
Preslice<soa::Join<aod::V0Datas, aod::McV0Labels>> perCollision = aod::v0data::collisionId;
12051225

1206-
using CollisionsRun3 = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms>;
1207-
using CollisionsRun2 = soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms>;
1226+
using CollisionsRun3 = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Ms, aod::CentFV0As, aod::PVMults>;
1227+
using CollisionsRun2 = soa::Join<aod::Collisions, aod::EvSels, aod::CentRun2V0Ms, aod::PVMults>;
12081228
using Tracks = soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA, aod::pidTPCPi, aod::pidTPCPr, aod::TrackCompColls>;
1209-
using McV0Tracks = soa::Join<aod::V0Datas, aod::McV0Labels>;
1229+
using TracksRun2 = soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksExtra, aod::TracksDCA, aod::pidTPCPi, aod::pidTPCPr>;
12101230
using TracksMC = soa::Join<Tracks, aod::McTrackLabels>;
1231+
using TracksMCRun2 = soa::Join<TracksRun2, aod::McTrackLabels>;
1232+
using McV0Tracks = soa::Join<aod::V0Datas, aod::McV0Labels>;
12111233

12121234
void processDataRun3(CollisionsRun3::iterator const& collision, aod::V0Datas const& V0s, Tracks const& tracks)
12131235
{
@@ -1216,7 +1238,7 @@ struct LambdaTableProducer {
12161238

12171239
PROCESS_SWITCH(LambdaTableProducer, processDataRun3, "Process for Run3 DATA", true);
12181240

1219-
void processDataRun2(CollisionsRun2::iterator const& collision, aod::V0Datas const& V0s, Tracks const& tracks)
1241+
void processDataRun2(CollisionsRun2::iterator const& collision, aod::V0Datas const& V0s, TracksRun2 const& tracks)
12201242
{
12211243
fillLambdaRecoTables<kRun2, kData>(collision, V0s, tracks);
12221244
}
@@ -1236,7 +1258,7 @@ struct LambdaTableProducer {
12361258
PROCESS_SWITCH(LambdaTableProducer, processMCRecoRun3, "Process for Run3 McReco DATA", false);
12371259

12381260
void processMCRecoRun2(soa::Join<CollisionsRun2, aod::McCollisionLabels>::iterator const& collision, aod::McCollisions const&,
1239-
McV0Tracks const& V0s, TracksMC const& tracks, aod::McParticles const&)
1261+
McV0Tracks const& V0s, TracksMCRun2 const& tracks, aod::McParticles const&)
12401262
{
12411263
// check collision
12421264
if (!selCollision<kRun2>(collision)) {
@@ -1259,7 +1281,7 @@ struct LambdaTableProducer {
12591281

12601282
void processMCRun2(aod::McCollisions::iterator const& mcCollision,
12611283
soa::SmallGroups<soa::Join<CollisionsRun2, aod::McCollisionLabels>> const& collisions,
1262-
McV0Tracks const& V0s, TracksMC const& tracks,
1284+
McV0Tracks const& V0s, TracksMCRun2 const& tracks,
12631285
aod::McParticles const& mcParticles)
12641286
{
12651287
analyzeMcRecoGen<kRun2, kMC>(mcCollision, collisions, V0s, tracks, mcParticles);
@@ -1483,6 +1505,7 @@ struct LambdaR2Correlation {
14831505
const AxisSpec axisCheck(1, 0, 1, "");
14841506
const AxisSpec axisPosZ(220, -11, 11, "V_{z} (cm)");
14851507
const AxisSpec axisCent(cMultBins, "FT0M (%)");
1508+
const AxisSpec axisChMult(200, 0, 200, "N_{ch}");
14861509
const AxisSpec axisMult(10, 0, 10, "N_{#Lambda}");
14871510
const AxisSpec axisMass(100, 1.06, 1.16, "M_{#Lambda} (GeV/#it{c}^{2})");
14881511
const AxisSpec axisPt(cNPtBins, cMinPt, cMaxPt, "p_{T} (GeV/#it{c})");
@@ -1496,8 +1519,9 @@ struct LambdaR2Correlation {
14961519
// Event
14971520
histos.add("Event/Reco/h1f_collision_posz", "V_{Z} Distribution", kTH1F, {axisPosZ});
14981521
histos.add("Event/Reco/h1f_ft0m_mult_percentile", "FT0M (%)", kTH1F, {axisCent});
1499-
histos.add("Event/Reco/h1i_lambda_mult", "#Lambda - Multiplicity", kTH1I, {axisMult});
1500-
histos.add("Event/Reco/h1i_antilambda_mult", "#bar{#Lambda} - Multiplicity", kTH1I, {axisMult});
1522+
histos.add("Event/Reco/h2f_Mult_vs_Centrality", "N_{TPC} vs FT0M(%)", kTH2F, {axisCent, axisChMult});
1523+
histos.add("Event/Reco/h2f_lambda_mult", "#Lambda - Multiplicity", kTH2F, {axisCent, axisMult});
1524+
histos.add("Event/Reco/h2f_antilambda_mult", "#bar{#Lambda} - Multiplicity", kTH2F, {axisCent, axisMult});
15011525

15021526
// Efficiency Histograms
15031527
// Single Particle Efficiencies
@@ -1510,6 +1534,8 @@ struct LambdaR2Correlation {
15101534

15111535
// Single and Two Particle Densities
15121536
// 1D Histograms
1537+
histos.add("Reco/Primary/h2f_n1_mass_LaP", "#rho_{1}^{#Lambda}", kTH2F, {axisCent, axisMass});
1538+
histos.add("Reco/Primary/h2f_n1_mass_LaM", "#rho_{1}^{#bar{#Lambda}}", kTH2F, {axisCent, axisMass});
15131539
histos.add("Reco/Primary/h2f_n1_pt_LaP", "#rho_{1}^{#Lambda}", kTH2F, {axisCent, axisPt});
15141540
histos.add("Reco/Primary/h2f_n1_pt_LaM", "#rho_{1}^{#bar{#Lambda}}", kTH2F, {axisCent, axisPt});
15151541
histos.add("Reco/Primary/h2f_n1_eta_LaP", "#rho_{1}^{#Lambda}", kTH2F, {axisCent, axisEta});
@@ -1622,6 +1648,7 @@ struct LambdaR2Correlation {
16221648
histos.fill(HIST(SubDirRecGen[rec_gen]) + HIST(SubDirPrmScd[pst]) + HIST("Efficiency/h3f_n1_centptrap_") + HIST(SubDirHist[part]), cent, track.pt(), track.rap());
16231649

16241650
// QA Plots
1651+
histos.fill(HIST(SubDirRecGen[rec_gen]) + HIST(SubDirPrmScd[pst]) + HIST("h2f_n1_mass_") + HIST(SubDirHist[part]), cent, track.mass());
16251652
histos.fill(HIST(SubDirRecGen[rec_gen]) + HIST(SubDirPrmScd[pst]) + HIST("h2f_n1_pt_") + HIST(SubDirHist[part]), cent, track.pt(), track.corrFact());
16261653
histos.fill(HIST(SubDirRecGen[rec_gen]) + HIST(SubDirPrmScd[pst]) + HIST("h2f_n1_eta_") + HIST(SubDirHist[part]), cent, track.eta(), track.corrFact());
16271654
histos.fill(HIST(SubDirRecGen[rec_gen]) + HIST(SubDirPrmScd[pst]) + HIST("h2f_n1_phi_") + HIST(SubDirHist[part]), cent, track.phi(), track.corrFact());
@@ -1637,9 +1664,9 @@ struct LambdaR2Correlation {
16371664
// fill multiplicity histograms
16381665
if (ntrk != 0) {
16391666
if (part == kLambda) {
1640-
histos.fill(HIST("Event/") + HIST(SubDirRecGen[rec_gen]) + HIST("h1i_lambda_mult"), ntrk);
1667+
histos.fill(HIST("Event/") + HIST(SubDirRecGen[rec_gen]) + HIST("h2f_lambda_mult"), cent, ntrk);
16411668
} else {
1642-
histos.fill(HIST("Event/") + HIST(SubDirRecGen[rec_gen]) + HIST("h1i_antilambda_mult"), ntrk);
1669+
histos.fill(HIST("Event/") + HIST(SubDirRecGen[rec_gen]) + HIST("h2f_antilambda_mult"), cent, ntrk);
16431670
}
16441671
}
16451672
}
@@ -1671,6 +1698,7 @@ struct LambdaR2Correlation {
16711698
{
16721699
histos.fill(HIST("Event/Reco/h1f_collision_posz"), collision.posZ());
16731700
histos.fill(HIST("Event/Reco/h1f_ft0m_mult_percentile"), collision.cent());
1701+
histos.fill(HIST("Event/Reco/h2f_Mult_vs_Centrality"), collision.cent(), collision.mult());
16741702

16751703
cent = collision.cent();
16761704

@@ -1723,6 +1751,7 @@ struct LambdaR2Correlation {
17231751
{
17241752
histos.fill(HIST("Event/McGen/h1f_collision_posz"), mcgencol.posZ());
17251753
histos.fill(HIST("Event/McGen/h1f_ft0m_mult_percentile"), mcgencol.cent());
1754+
histos.fill(HIST("Event/McGen/h2f_Mult_vs_Centrality"), mcgencol.cent(), mcgencol.mult());
17261755

17271756
cent = mcgencol.cent();
17281757

0 commit comments

Comments
 (0)