Skip to content

Commit bd64cf9

Browse files
authored
[PWGLF] Added Nch Analysis and small changes (#15405)
1 parent 6926fb3 commit bd64cf9

File tree

1 file changed

+60
-7
lines changed

1 file changed

+60
-7
lines changed

PWGLF/Tasks/Strangeness/v0ptinvmassplots.cxx

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ struct V0PtInvMassPlots {
7070
HistogramRegistry rAntilambdaSplitMassPlotsPerPtBin{"AntiLambdaSplitMassPlotsPerPtBin", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
7171
HistogramRegistry rFeeddownMatrices{"FeeddownMatrices", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
7272
HistogramRegistry rMCCorrections{"MCCorrections", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
73+
HistogramRegistry rNchAnalysis{"NchAnalysis", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
7374

7475
// Configurable for histograms
7576
Configurable<int> nBins{"nBins", 100, "N bins in all histos"};
@@ -81,6 +82,7 @@ struct V0PtInvMassPlots {
8182
Configurable<float> nSigmaTPCProton{"nSigmaTPCProton", 4, "nSigmaTPCProton"};
8283
Configurable<float> compv0masscut{"compv0masscut", 0.01, "CompetitiveV0masscut (GeV)"};
8384
Configurable<float> etadau{"etadau", 0.8, "Eta Daughters"};
85+
Configurable<float> etagen{"etagen", 0.8, "Eta Generated"};
8486
Configurable<float> rapidityCut{"rapidityCut", 0.5, "V0 Rapidity Window"};
8587
Configurable<float> itsMinHits{"itsMinHits", 1.0, "Minimum Hits of Daughter Tracks in the ITS"};
8688

@@ -125,7 +127,7 @@ struct V0PtInvMassPlots {
125127
Configurable<bool> doLambdadcaposdautopv{"doLambdadcaposdautopv", true, "Enable Lambda DCA pos daughter to PV Topological Cut"};
126128
Configurable<bool> doLambdadcanegdautopv{"doLambdadcanegdautopv", true, "Enable Lambda DCA neg daughter to PV Topological Cut"};
127129

128-
// Configurables switches for Lambda selection
130+
// Configurables switches for AntiLambda selection
129131
Configurable<bool> dotruthAntiLambda{"dotruthAntiLambda", true, "Enable AntiLambda MC Matching"};
130132
Configurable<bool> doAntilambdaTPCPID{"doAntilambdaTPCPID", true, "Enable AntiLambda TPC PID"};
131133
Configurable<bool> doAntilambdacomptmasscut{"doAntilambdacomptmasscut", true, "Enable AntiLambda Competitive V0 Mass Cut"};
@@ -164,10 +166,11 @@ struct V0PtInvMassPlots {
164166
Configurable<float> antilambdamaxct{"antilambdamaxct", 30.00, "AntiLambda maximum ct value"};
165167
Configurable<float> antilambdaparamArmenterosCut{"antilambdaparamArmenterosCut", 0.2, "AntiLambda Armenteros Cut on parameter"};
166168

167-
// Configurables for Specific V0s analysis
169+
// Configurables for Specific Analysis
168170
Configurable<bool> kzeroAnalysis{"kzeroAnalysis", true, "Enable K0sh Pt Analysis"};
169171
Configurable<bool> lambdaAnalysis{"lambdaAnalysis", true, "Enable Lambda Pt Analysis"};
170172
Configurable<bool> antiLambdaAnalysis{"antiLambdaAnalysis", true, "Enable AntiLambda Pt Analysis"};
173+
Configurable<bool> doNchAnalysis{"doNchAnalysis", true, "Enable Nch vs Centrality Analysis"};
171174

172175
// Configurable string for Different Pt Bins
173176
Configurable<std::string> kzeroSettingPtBinsString{"kzeroSettingPtBinsString", {"0.0,0.15,0.3,0.45,0.6,0.75,0.9,1.05,1.2,1.35,1.5,1.65,1.8,1.95,2.1,2.25,2.4,2.55,2.7,2.85,3.0"}, "K0sh Pt Bin Values"};
@@ -215,6 +218,7 @@ struct V0PtInvMassPlots {
215218
AxisSpec lambdaPtAxis = {lambdaptedgevalues, "#it{p}_{T} (GeV/#it{c})"};
216219
AxisSpec antilambdaPtAxis = {antilambdaptedgevalues, "#it{p}_{T} (GeV/#it{c})"};
217220
AxisSpec centAxis = {100, 0.0f, 100.0f, "#it{Centrality} (%)"};
221+
AxisSpec nchAxis = {100, 0.0f, 100.0f, "#it{N}_{ch} (%)"};
218222
AxisSpec armenterosQtAxis = {nBinsArmenteros, 0.0f, 0.3f, "#it{p}_{T} (GeV/#it{c})"};
219223
AxisSpec armenterosasymAxis = {nBinsArmenteros, -1.f, 1.f, "#it{p}^{+}_{||}-#it{p}^{-}_{||}/#it{p}^{+}_{||}+#it{p}^{-}_{||}"};
220224
AxisSpec vertexZAxis = {nBins, -11.0f, 11.0f, "vrtx_{Z} [cm]"};
@@ -344,6 +348,12 @@ struct V0PtInvMassPlots {
344348
rMCCorrections.add("hAntiXiZeroGeneratedPtSpectrum", "hAntiXiZeroGeneratedPtSpectrum", {HistType::kTH2D, {antilambdaPtAxis, centAxis}});
345349
rMCCorrections.add("hAntiOmegaGeneratedPtSpectrum", "hAntiOmegaGeneratedPtSpectrum", {HistType::kTH2D, {antilambdaPtAxis, centAxis}});
346350
rMCCorrections.add("hPhiGeneratedPtSpectrum", "hPhiGeneratedPtSpectrum", {HistType::kTH2D, {k0ShortPtAxis, centAxis}});
351+
rMCCorrections.add("hGenPartcles", "hGenPartcles", {HistType::kTH2D, {nchAxis, centAxis}});
352+
353+
// NCh Analysis
354+
rNchAnalysis.add("hNchCentralityGenerated", "hNchCentralityGenerated", {HistType::kTH2D, {centAxis, nchAxis}}); // Nch vs Centrality Generated
355+
rNchAnalysis.add("hNchCentralityGeneratedAfterEventSelection", "hNchCentralityGeneratedAfterEventSelection", {HistType::kTH2D, {centAxis, nchAxis}}); // Nch vs Centrality Generated After Event Selection
356+
rNchAnalysis.add("hNchCentrality", "hNchCentrality", {HistType::kTH2D, {centAxis, nchAxis}}); // Nch vs Centrality
347357
}
348358

349359
// Event selection function
@@ -388,6 +398,39 @@ struct V0PtInvMassPlots {
388398
return true;
389399
}
390400

401+
// Charged Particle Selection Function
402+
template <typename TParticle, typename TCollision>
403+
bool acceptGeneratedParticle(TParticle const& particle, TCollision const& mcCollision)
404+
{
405+
rMCCorrections.fill(HIST("hGenPartcles"), 0.5, mcCollision.centFT0M());
406+
rMCCorrections.get<TH2>(HIST("hGenPartcles"))->GetXaxis()->SetBinLabel(1, "All Gen Particles");
407+
if (!particle.isPhysicalPrimary()) { // Daughters Pseudorapidity Cut
408+
return false;
409+
}
410+
rMCCorrections.fill(HIST("hGenPartcles"), 1.5, mcCollision.centFT0M());
411+
rMCCorrections.get<TH2>(HIST("hGenPartcles"))->GetXaxis()->SetBinLabel(2, "Physical Primary");
412+
if (!particle.producedByGenerator()) {
413+
return false;
414+
}
415+
rMCCorrections.fill(HIST("hGenPartcles"), 2.5, mcCollision.centFT0M());
416+
rMCCorrections.get<TH2>(HIST("hGenPartcles"))->GetXaxis()->SetBinLabel(3, "Produced by Generator");
417+
if (std::abs(particle.eta()) > etagen) { // Eta cut
418+
return false;
419+
}
420+
rMCCorrections.fill(HIST("hGenPartcles"), 3.5, mcCollision.centFT0M());
421+
rMCCorrections.get<TH2>(HIST("hGenPartcles"))->GetXaxis()->SetBinLabel(4, "Eta Cut");
422+
auto pdgParticle = pdgDB->GetParticle(particle.pdgCode());
423+
if (pdgParticle == nullptr) {
424+
return false;
425+
}
426+
if (std::abs(pdgParticle->Charge()) < 3) {
427+
return false;
428+
}
429+
rMCCorrections.fill(HIST("hGenPartcles"), 4.5, mcCollision.centFT0M());
430+
rMCCorrections.get<TH2>(HIST("hGenPartcles"))->GetXaxis()->SetBinLabel(4, "Charge Cut");
431+
return true;
432+
}
433+
391434
// V0 selection function
392435
template <typename TV0, typename Track, typename TCollision>
393436
bool acceptV0(TV0 const& v0, Track const& posDaughterTrack, Track const& negDaughterTrack, TCollision const& collision)
@@ -710,6 +753,7 @@ struct V0PtInvMassPlots {
710753
return;
711754
}
712755
rMCCorrections.fill(HIST("hNEvents_Corrections"), 1.5, mcCollision.centFT0M()); // Event Efficiency Denominator
756+
int NParticlesPerCollision = 0; // Counter for the number of particles per collision for the Nch analysis
713757
// Particles (of interest) Generated Pt Spectrum and Signal Loss Denominator Loop
714758
for (const auto& mcParticle : mcParticles) {
715759
if (std::abs(mcParticle.y()) < rapidityCut) {
@@ -757,7 +801,11 @@ struct V0PtInvMassPlots {
757801
}
758802
}
759803
}
804+
if (acceptGeneratedParticle(mcParticle, mcCollision)) {
805+
NParticlesPerCollision++;
806+
}
760807
}
808+
rNchAnalysis.fill(HIST("hNchCentralityGenerated"), mcCollision.centFT0M(), NParticlesPerCollision);
761809
// Signal Loss Numenator Loop
762810
for (const auto& collision : collisions) {
763811
rMCCorrections.fill(HIST("hNEvents_Corrections"), 2.5, mcCollision.centFT0M()); // Number of Events Reconsctructed
@@ -766,6 +814,9 @@ struct V0PtInvMassPlots {
766814
}
767815
rMCCorrections.fill(HIST("hNEvents_Corrections"), 3.5, mcCollision.centFT0M()); // Event Split Denomimator and Event Efficiency Numenator
768816
for (const auto& mcParticle : mcParticles) {
817+
if (acceptGeneratedParticle(mcParticle, mcCollision)) {
818+
NParticlesPerCollision++; // Counter to fill the NchCerntralityPlot after the loop
819+
}
769820
if (!mcParticle.isPhysicalPrimary()) {
770821
continue;
771822
}
@@ -786,11 +837,12 @@ struct V0PtInvMassPlots {
786837
}
787838
}
788839
}
840+
rNchAnalysis.fill(HIST("hNchCentralityGeneratedAfterEventSelection"), mcCollision.centFT0M(), NParticlesPerCollision);
789841
// End of Signal Loss Numenator Loop
790842
}
791843
// This is the Process for the MC reconstructed Data
792844
// void recMCProcess(soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels, aod::PVMults, aod::MultsExtraMC, aod::CentFT0Ms>::iterator const& collision,
793-
void recMCProcess(soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels, aod::PVMults, aod::MultsExtra, aod::CentFT0Ms>::iterator const& collision,
845+
void recMCProcess(soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels, aod::MultsGlobal, aod::PVMults, aod::MultsExtra, aod::CentFT0Ms>::iterator const& collision,
794846
soa::Join<aod::McCollisions, aod::McCentFT0Ms> const& /*mcCollisions*/,
795847
soa::Join<aod::V0Datas, aod::McV0Labels> const& V0s,
796848
DaughterTracks const&, // no need to define a variable for tracks, if we don't access them directly
@@ -827,7 +879,8 @@ struct V0PtInvMassPlots {
827879
if (!acceptEvent(collision)) { // Event Selection
828880
return;
829881
}
830-
rPtAnalysis.fill(HIST("hNRecEvents"), 0.5, mcCollision.centFT0M()); // Event Split Numenator
882+
rPtAnalysis.fill(HIST("hNRecEvents"), 0.5, mcCollision.centFT0M()); // Event Split Numenator
883+
rNchAnalysis.fill(HIST("hNchCentrality"), mcCollision.centFT0M(), collision.multNTracksGlobal()); // Nch vs Centrality
831884
for (const auto& v0 : V0s) {
832885
// Checking that the V0 is a true K0s/Lambdas/Antilambdas and then filling the parameter histograms and the invariant mass plots for different cuts (which are taken from namespace)
833886
const auto& posDaughterTrack = v0.template posTrack_as<DaughterTracks>();
@@ -952,7 +1005,7 @@ struct V0PtInvMassPlots {
9521005
}
9531006
}
9541007
// This is the process for Real Data
955-
void dataProcess(soa::Join<aod::Collisions, aod::EvSels, aod::PVMults, aod::CentFT0Ms, aod::MultsExtra /*,aod::CentNGlobals*/>::iterator const& collision,
1008+
void dataProcess(soa::Join<aod::Collisions, aod::EvSels, aod::PVMults, aod::MultsGlobal, aod::CentFT0Ms, aod::MultsExtra /*,aod::CentNGlobals*/>::iterator const& collision,
9561009
aod::V0Datas const& V0s,
9571010
DaughterTracks const&)
9581011
{
@@ -981,11 +1034,11 @@ struct V0PtInvMassPlots {
9811034
for (int i = 0; i < nAntilambdaHistograms + 1; i++) {
9821035
antilambdaptedgevalues[i] = std::stod(pthistos::antilambdaPtBins[i]);
9831036
}
984-
9851037
if (!acceptEvent(collision)) { // Event Selection
9861038
return;
9871039
}
988-
rPtAnalysis.fill(HIST("hNRecEvents"), 0.5, collision.centFT0M()); // Number of recorded events
1040+
rPtAnalysis.fill(HIST("hNRecEvents"), 0.5, collision.centFT0M()); // Number of recorded events
1041+
rNchAnalysis.fill(HIST("hNchCentrality"), collision.centFT0M(), collision.multNTracksGlobal()); // Nch vs Centrality
9891042
for (const auto& v0 : V0s) {
9901043
// Checking that the V0 is a true K0s/Lambdas/Antilambdas and then filling the parameter histograms and the invariant mass plots for different cuts (which are taken from namespace)
9911044
const auto& posDaughterTrack = v0.template posTrack_as<DaughterTracks>();

0 commit comments

Comments
 (0)