@@ -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
31863370WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments