Skip to content

Commit c899e14

Browse files
authored
[PWGLF] Add process function for data in minimum bias events (#16310)
1 parent 1767dc1 commit c899e14

1 file changed

Lines changed: 190 additions & 6 deletions

File tree

PWGLF/Tasks/Strangeness/strangenessInJetsIons.cxx

Lines changed: 190 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ struct StrangenessInJetsIons {
106106

107107
// Define histogram registries
108108
HistogramRegistry registryData{"registryData", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
109+
HistogramRegistry registryDataMB{"registryDataMB", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
109110
HistogramRegistry registryMC{"registryMC", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
110111
HistogramRegistry registryQC{"registryQC", {}, OutputObjHandlingPolicy::AnalysisObject, true, true};
111112

@@ -549,6 +550,45 @@ struct StrangenessInJetsIons {
549550
registryMC.add("h3dAntiLambdaFeeddownFromXi0", "h3dAntiLambdaFeeddownFromXi0", kTH3D, {multAxis, ptAxis, ptAxis});
550551
}
551552
}
553+
554+
// Histograms for real data in MB events
555+
if (doprocessDataMB) {
556+
557+
// Event counters
558+
registryDataMB.add("number_of_events_data", "number of events in data", HistType::kTH1D, {{20, 0, 20, "Event Cuts"}});
559+
registryDataMB.add("number_of_events_vsmultiplicity", "number of events in data vs multiplicity", HistType::kTH1D, {{101, 0, 101, "Multiplicity percentile"}});
560+
561+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(1, "All collisions");
562+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(2, "Zorro selection");
563+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(3, "sel8");
564+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(4, "posZ cut");
565+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(5, "kNoSameBunchPileup");
566+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(6, "kIsGoodZvtxFT0vsPV");
567+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(7, "No empty events");
568+
registryDataMB.get<TH1>(HIST("number_of_events_data"))->GetXaxis()->SetBinLabel(8, "At least one jet");
569+
570+
// Histograms for analysis of strange hadrons
571+
if (particleOfInterestDict[ParticleOfInterest::kV0Particles]) {
572+
registryDataMB.add("Lambda_in_MB", "Lambda_in_MB", HistType::kTH3F, {multAxis, ptAxis, invMassLambdaAxis});
573+
registryDataMB.add("AntiLambda_in_MB", "AntiLambda_in_MB", HistType::kTH3F, {multAxis, ptAxis, invMassLambdaAxis});
574+
registryDataMB.add("K0s_in_MB", "K0s_in_MB", HistType::kTH3F, {multAxis, ptAxis, invMassK0sAxis});
575+
}
576+
if (particleOfInterestDict[ParticleOfInterest::kCascades]) {
577+
registryDataMB.add("XiPos_in_MB", "XiPos_in_MB", HistType::kTH3F, {multAxis, ptAxis, invMassXiAxis});
578+
registryDataMB.add("XiNeg_in_MB", "XiNeg_in_MB", HistType::kTH3F, {multAxis, ptAxis, invMassXiAxis});
579+
registryDataMB.add("OmegaPos_in_MB", "OmegaPos_in_MB", HistType::kTH3F, {multAxis, ptAxis, invMassOmegaAxis});
580+
registryDataMB.add("OmegaNeg_in_MB", "OmegaNeg_in_MB", HistType::kTH3F, {multAxis, ptAxis, invMassOmegaAxis});
581+
}
582+
if (particleOfInterestDict[ParticleOfInterest::kPions]) {
583+
registryDataMB.add("Pion_in_MB", "Pion_in_MB", HistType::kTHnSparseF, {multAxis, ptAxisLongLived, nsigmaTPCAxis, nsigmaTOFAxis, dcaAxis});
584+
}
585+
if (particleOfInterestDict[ParticleOfInterest::kKaons]) {
586+
registryDataMB.add("Kaon_in_MB", "Kaon_in_MB", HistType::kTHnSparseF, {multAxis, ptAxisLongLived, nsigmaTPCAxis, nsigmaTOFAxis, dcaAxis});
587+
}
588+
if (particleOfInterestDict[ParticleOfInterest::kProtons]) {
589+
registryDataMB.add("Proton_in_MB", "Proton_in_MB", HistType::kTHnSparseF, {multAxis, ptAxisLongLived, nsigmaTPCAxis, nsigmaTOFAxis, dcaAxis});
590+
}
591+
}
552592
}
553593

554594
// Delta phi calculation
@@ -1635,7 +1675,7 @@ struct StrangenessInJetsIons {
16351675
bool isV0 = isK0S || isLambda || isAntiLambda;
16361676
if (!isV0)
16371677
continue;
1638-
for (int i = 0; i < int(fjTracks.size()); ++i) {
1678+
for (long unsigned int i = 0; i < fjTracks.size(); ++i) {
16391679
if (isV0DaughterTrack(fjTracks[i], v0)) {
16401680
// LOG(info) << "[AddV0sForJetReconstructionData] V0 daughter track found in fjTracks.";
16411681
isTrackReplaced[i] = true;
@@ -1645,7 +1685,7 @@ struct StrangenessInJetsIons {
16451685

16461686
std::vector<fastjet::PseudoJet> cleanFjInput;
16471687
cleanFjInput.reserve(fjInput.size());
1648-
for (int i = 0; i < int(fjInput.size()); ++i) {
1688+
for (long unsigned int i = 0; i < fjInput.size(); ++i) {
16491689
if (!isTrackReplaced[i])
16501690
cleanFjInput.push_back(fjInput[i]);
16511691
}
@@ -1733,7 +1773,7 @@ struct StrangenessInJetsIons {
17331773
bool isV0 = isK0S || isLambda || isAntiLambda;
17341774
if (!isV0)
17351775
continue;
1736-
for (int i = 0; i < int(fjTracks.size()); ++i) {
1776+
for (long unsigned int i = 0; i < fjTracks.size(); ++i) {
17371777
if (isV0DaughterTrack(fjTracks[i], v0)) {
17381778
// LOG(info) << "[AddV0sForJetReconstructionMCD] V0 daughter track found in fjTracks.";
17391779
isTrackReplaced[i] = true;
@@ -1743,7 +1783,7 @@ struct StrangenessInJetsIons {
17431783

17441784
std::vector<fastjet::PseudoJet> cleanFjInput;
17451785
cleanFjInput.reserve(fjInput.size());
1746-
for (int i = 0; i < int(fjInput.size()); ++i) {
1786+
for (long unsigned int i = 0; i < fjInput.size(); ++i) {
17471787
if (!isTrackReplaced[i])
17481788
cleanFjInput.push_back(fjInput[i]);
17491789
}
@@ -1789,7 +1829,7 @@ struct StrangenessInJetsIons {
17891829
// LOG(info) << "[AddV0sForJetReconstructionMCP] Add V0 as input for jet finder.";
17901830

17911831
// Remove V0 daughter particles if already in the input list for the jet finder
1792-
for (int i = 0; i < int(fjParticleObj.size()); ++i) {
1832+
for (long unsigned int i = 0; i < fjParticleObj.size(); ++i) {
17931833
const auto& mcPart = fjParticleObj[i];
17941834
if (!mcPart.has_mothers())
17951835
continue;
@@ -1805,7 +1845,7 @@ struct StrangenessInJetsIons {
18051845

18061846
std::vector<fastjet::PseudoJet> cleanFjInput;
18071847
cleanFjInput.reserve(fjInput.size());
1808-
for (int i = 0; i < int(fjInput.size()); ++i) {
1848+
for (long unsigned int i = 0; i < fjInput.size(); ++i) {
18091849
if (!isTrackReplaced[i])
18101850
cleanFjInput.push_back(fjInput[i]);
18111851
}
@@ -3181,6 +3221,150 @@ struct StrangenessInJetsIons {
31813221
}
31823222
}
31833223
PROCESS_SWITCH(StrangenessInJetsIons, processMCmodels, "Process MC generated events (with models)", false);
3224+
3225+
// --- Process Minimum Bias events ---
3226+
// Process data MB
3227+
void processDataMB(SelCollisions::iterator const& collision, aod::V0Datas const& fullV0s,
3228+
aod::CascDataExt const& Cascades, DaughterTracks const& tracks,
3229+
aod::BCsWithTimestamps const&)
3230+
{
3231+
// Vertex position vector
3232+
TVector3 vtxPos(collision.posX(), collision.posY(), collision.posZ());
3233+
3234+
// Fill event counter before event selection
3235+
registryDataMB.fill(HIST("number_of_events_data"), 0.5);
3236+
3237+
// Get the bunch crossing (BC) information associated with the collision
3238+
auto bc = collision.template bc_as<aod::BCsWithTimestamps>();
3239+
3240+
// Initialize CCDB objects using the BC info
3241+
initCCDB(bc);
3242+
3243+
// If skimmed processing is enabled, skip this event unless it passes Zorro selection
3244+
if (cfgSkimmedProcessing && !zorro.isSelected(collision.template bc_as<aod::BCsWithTimestamps>().globalBC())) {
3245+
return;
3246+
}
3247+
3248+
// Fill event counter after zorro selection
3249+
registryDataMB.fill(HIST("number_of_events_data"), 1.5);
3250+
3251+
// Event selection
3252+
if (!collision.sel8())
3253+
return;
3254+
3255+
// Fill event counter after sel8 selection
3256+
registryDataMB.fill(HIST("number_of_events_data"), 2.5);
3257+
3258+
// Require vertex position within the allowed z range
3259+
if (std::fabs(collision.posZ()) > zVtx)
3260+
return;
3261+
3262+
// Fill event counter after z vertex selection
3263+
registryDataMB.fill(HIST("number_of_events_data"), 3.5);
3264+
3265+
// Reject collisions associated to the same found BC
3266+
if (requireNoSameBunchPileup && !collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup))
3267+
return;
3268+
3269+
// Fill event counter after selection kNoSameBunchPileup
3270+
registryDataMB.fill(HIST("number_of_events_data"), 4.5);
3271+
3272+
// Compatible z_vtx from FT0 and from PV
3273+
if (requireGoodZvtxFT0vsPV && !collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV))
3274+
return;
3275+
3276+
// Fill event counter after selection kIsGoodZvtxFT0vsPV
3277+
registryDataMB.fill(HIST("number_of_events_data"), 5.5);
3278+
3279+
// Event multiplicity
3280+
float centrality;
3281+
if (centrEstimator == 0) {
3282+
centrality = collision.centFT0C();
3283+
} else {
3284+
centrality = collision.centFT0M();
3285+
}
3286+
registryDataMB.fill(HIST("number_of_events_vsmultiplicity"), centrality);
3287+
3288+
if (particleOfInterestDict[ParticleOfInterest::kV0Particles]) { // V0s
3289+
for (const auto& v0 : fullV0s) {
3290+
3291+
// Get V0 daughters
3292+
const auto& pos = v0.posTrack_as<DaughterTracks>();
3293+
const auto& neg = v0.negTrack_as<DaughterTracks>();
3294+
TVector3 v0dir(v0.px(), v0.py(), v0.pz());
3295+
3296+
// K0s
3297+
if (passedK0ShortSelection(v0, pos, neg, vtxPos)) {
3298+
registryDataMB.fill(HIST("K0s_in_MB"), centrality, v0.pt(), v0.mK0Short());
3299+
}
3300+
// Lambda
3301+
if (passedLambdaSelection(v0, pos, neg, vtxPos)) {
3302+
registryDataMB.fill(HIST("Lambda_in_MB"), centrality, v0.pt(), v0.mLambda());
3303+
}
3304+
// AntiLambda
3305+
if (passedAntiLambdaSelection(v0, pos, neg, vtxPos)) {
3306+
registryDataMB.fill(HIST("AntiLambda_in_MB"), centrality, v0.pt(), v0.mAntiLambda());
3307+
}
3308+
}
3309+
}
3310+
3311+
if (particleOfInterestDict[ParticleOfInterest::kCascades]) { // Cascades
3312+
for (const auto& casc : Cascades) {
3313+
// Get cascade daughters
3314+
const auto& bach = casc.bachelor_as<DaughterTracks>();
3315+
const auto& pos = casc.posTrack_as<DaughterTracks>();
3316+
const auto& neg = casc.negTrack_as<DaughterTracks>();
3317+
TVector3 cascadeDir(casc.px(), casc.py(), casc.pz());
3318+
3319+
// Xi+
3320+
if (passedXiSelection(casc, pos, neg, bach, collision) && bach.sign() > 0) {
3321+
registryDataMB.fill(HIST("XiPos_in_MB"), centrality, casc.pt(), casc.mXi());
3322+
}
3323+
// Xi-
3324+
if (passedXiSelection(casc, pos, neg, bach, collision) && bach.sign() < 0) {
3325+
registryDataMB.fill(HIST("XiNeg_in_MB"), centrality, casc.pt(), casc.mXi());
3326+
}
3327+
// Omega+
3328+
if (passedOmegaSelection(casc, pos, neg, bach, collision) && bach.sign() > 0) {
3329+
registryDataMB.fill(HIST("OmegaPos_in_MB"), centrality, casc.pt(), casc.mOmega());
3330+
}
3331+
// Omega-
3332+
if (passedOmegaSelection(casc, pos, neg, bach, collision) && bach.sign() < 0) {
3333+
registryDataMB.fill(HIST("OmegaNeg_in_MB"), centrality, casc.pt(), casc.mOmega());
3334+
}
3335+
}
3336+
}
3337+
if (particleOfInterestDict[ParticleOfInterest::kPions] ||
3338+
particleOfInterestDict[ParticleOfInterest::kKaons] ||
3339+
particleOfInterestDict[ParticleOfInterest::kProtons]) {
3340+
for (const auto& trk : tracks) {
3341+
3342+
if (!passedSingleTrackSelection(trk)) {
3343+
continue;
3344+
}
3345+
3346+
float nsigmaTPC = 0.f;
3347+
float nsigmaTOF = 0.f;
3348+
3349+
if (particleOfInterestDict[ParticleOfInterest::kPions]) {
3350+
nsigmaTPC = trk.tpcNSigmaPi();
3351+
nsigmaTOF = trk.tofNSigmaPi();
3352+
registryDataMB.fill(HIST("Pion_in_MB"), centrality, trk.pt() * trk.sign(), nsigmaTPC, nsigmaTOF, trk.dcaXY());
3353+
}
3354+
if (particleOfInterestDict[ParticleOfInterest::kKaons]) {
3355+
nsigmaTPC = trk.tpcNSigmaKa();
3356+
nsigmaTOF = trk.tofNSigmaKa();
3357+
registryDataMB.fill(HIST("Kaon_in_MB"), centrality, trk.pt() * trk.sign(), nsigmaTPC, nsigmaTOF, trk.dcaXY());
3358+
}
3359+
if (particleOfInterestDict[ParticleOfInterest::kProtons]) {
3360+
nsigmaTPC = trk.tpcNSigmaPr();
3361+
nsigmaTOF = trk.tofNSigmaPr();
3362+
registryDataMB.fill(HIST("Proton_in_MB"), centrality, trk.pt() * trk.sign(), nsigmaTPC, nsigmaTOF, trk.dcaXY());
3363+
}
3364+
}
3365+
}
3366+
}
3367+
PROCESS_SWITCH(StrangenessInJetsIons, processDataMB, "Process data in minimum bias events", false);
31843368
};
31853369

31863370
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)