@@ -115,6 +115,7 @@ AxisSpec axisMassLambda = {200, 1.07, 1.17, "Lambda/AntiLamda Mass", "Lambda/Ant
115115AxisSpec axisTracks{9 , 0.5 , 9.5 , " #tracks" , " TrackAxis" };
116116auto static constexpr kMinCharge = 3 .f;
117117auto static constexpr kMinpTcut = 0 .1f ;
118+ auto static constexpr kEtaInelgt0 = 1 .0f ;
118119auto static constexpr kNItslayers = 7 ;
119120
120121struct HeavyionMultiplicity {
@@ -147,6 +148,7 @@ struct HeavyionMultiplicity {
147148 ConfigurableAxis centralityBinning{" centralityBinning" , {VARIABLE_WIDTH, 0 , 5 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100 }, " " };
148149 ConfigurableAxis occupancyBin{" occupancyBin" , {VARIABLE_WIDTH, 0 , 500 , 1000 , 2000 , 5000 , 10000 }, " " };
149150 ConfigurableAxis centBinGen{" centBinGen" , {VARIABLE_WIDTH, 0 , 500 , 1000 , 2000 , 5000 , 10000 }, " " };
151+ ConfigurableAxis binsImpactPar{" binsImpactPar" , {VARIABLE_WIDTH, 0.0 , 3.00065 , 4.28798 , 6.14552 , 7.6196 , 8.90942 , 10.0897 , 11.2002 , 12.2709 , 13.3167 , 14.4173 , 23.2518 }, " Binning of the impact parameter axis" };
150152
151153 Configurable<bool > isApplySameBunchPileup{" isApplySameBunchPileup" , true , " Enable SameBunchPileup cut" };
152154 Configurable<bool > isApplyGoodZvtxFT0vsPV{" isApplyGoodZvtxFT0vsPV" , true , " Enable GoodZvtxFT0vsPV cut" };
@@ -178,6 +180,7 @@ struct HeavyionMultiplicity {
178180 AxisSpec axisPt = {ptHistBin, " pT" , " pTAxis" };
179181 AxisSpec axisOccupancy = {occupancyBin, " occupancy" , " OccupancyAxis" };
180182 AxisSpec axisCentBinGen = {centBinGen, " GenCentrality" , " CentGenAxis" };
183+ AxisSpec impactParAxis = {binsImpactPar, " Impact Parameter" };
181184
182185 histos.add (" EventHist" , " EventHist" , kTH1D , {axisEvent}, false );
183186 histos.add (" VtxZHist" , " VtxZHist" , kTH1D , {axisVtxZ}, false );
@@ -269,6 +272,21 @@ struct HeavyionMultiplicity {
269272 histos.add (" mult10_vs_FT0C" , " mult10_vs_FT0C" , kTH2F , {axisMult, axisCentBinGen}, true );
270273 histos.add (" mult10_vs_FT0A" , " mult10_vs_FT0A" , kTH2F , {axisMult, axisCentBinGen}, true );
271274 }
275+
276+ if (doprocessEvtLossSigLossMC) {
277+ histos.add (" MCEventHist" , " MCEventHist" , kTH1F , {axisEvent}, false );
278+ auto hstat = histos.get <TH1>(HIST (" MCEventHist" ));
279+ auto * x = hstat->GetXaxis ();
280+ x->SetBinLabel (1 , " All MC events" );
281+ x->SetBinLabel (2 , " MC events with atleast one reco event" );
282+ histos.add (" hImpactParameterGen" , " Impact parameter of generated MC events" , kTH1F , {impactParAxis});
283+ histos.add (" hImpactParameterRec" , " Impact parameter of selected MC events" , kTH1F , {impactParAxis});
284+ histos.add (" hImpactParvsCentrRec" , " Impact parameter of selected MC events vs centrality" , kTH2F , {axisCent, impactParAxis});
285+ histos.add (" hgendndetaBeforeEvtSel" , " Eta of all generated particles" , kTH1F , {axisEta});
286+ histos.add (" hgendndetaAfterEvtSel" , " Eta of generated particles after EvtSel" , kTH1F , {axisEta});
287+ histos.add (" hgendndetaVscentBeforeEvtSel" , " hgendndetaBeforeEvtSel vs centrality" , kTH2F , {axisEta, impactParAxis});
288+ histos.add (" hgendndetaVscentAfterEvtSel" , " hgendndetaAfterEvtSel vs centrality" , kTH2F , {axisEta, impactParAxis});
289+ }
272290 }
273291
274292 template <typename CheckCol>
@@ -416,7 +434,6 @@ struct HeavyionMultiplicity {
416434 }
417435 }
418436 }
419- PROCESS_SWITCH (HeavyionMultiplicity, processData, " process data CentFT0C" , false );
420437
421438 void processCorrelation (CollisionDataTable::iterator const & cols, FilTrackDataTable const & tracks)
422439 {
@@ -441,7 +458,6 @@ struct HeavyionMultiplicity {
441458 histos.fill (HIST (" GlobalMult_vs_FV0A" ), nchTracks, cols.multFV0A ());
442459 histos.fill (HIST (" NPVtracks_vs_GlobalMult" ), cols.multNTracksPV (), nchTracks);
443460 }
444- PROCESS_SWITCH (HeavyionMultiplicity, processCorrelation, " do correlation study in data" , false );
445461
446462 void processMonteCarlo (CollisionMCTrueTable::iterator const &, CollisionMCRecTable const & RecCols, TrackMCTrueTable const & GenParticles, FilTrackMCRecTable const & RecTracks)
447463 {
@@ -541,7 +557,6 @@ struct HeavyionMultiplicity {
541557 } // track (mcgen) loop
542558 } // collision loop
543559 }
544- PROCESS_SWITCH (HeavyionMultiplicity, processMonteCarlo, " process MC CentFT0C" , false );
545560
546561 void processMCpTefficiency (CollisionMCTrueTable::iterator const &, CollisionMCRecTable const & RecCols, TrackMCTrueTable const & GenParticles, FilTrackMCRecTable const & RecTracks)
547562 {
@@ -589,7 +604,6 @@ struct HeavyionMultiplicity {
589604 }
590605 }
591606 }
592- PROCESS_SWITCH (HeavyionMultiplicity, processMCpTefficiency, " process MC pTefficiency" , false );
593607
594608 void processMCcheckFakeTracks (CollisionMCTrueTable::iterator const &, CollisionMCRecTable const & RecCols, FilTrackMCRecTable const & RecTracks)
595609 {
@@ -628,7 +642,6 @@ struct HeavyionMultiplicity {
628642 }
629643 }
630644 }
631- PROCESS_SWITCH (HeavyionMultiplicity, processMCcheckFakeTracks, " Check Fake tracks" , false );
632645
633646 void processStrangeYield (CollisionDataTable::iterator const & cols, V0TrackCandidates const &, aod::V0Datas const & v0data)
634647 {
@@ -671,7 +684,6 @@ struct HeavyionMultiplicity {
671684 histos.fill (HIST (" AntiLambdaCentEtaMass" ), selColCent (cols), v0track.eta (), v0track.mAntiLambda ());
672685 }
673686 }
674- PROCESS_SWITCH (HeavyionMultiplicity, processStrangeYield, " Strange particle yield" , false );
675687
676688 void processppData (ColDataTablepp::iterator const & cols, FilTrackDataTable const & tracks)
677689 {
@@ -696,7 +708,6 @@ struct HeavyionMultiplicity {
696708 }
697709 } // track loop
698710 }
699- PROCESS_SWITCH (HeavyionMultiplicity, processppData, " process pp data" , false );
700711
701712 void processppMonteCarlo (CollisionMCTrueTable::iterator const &, ColMCRecTablepp const & RecCols, TrackMCTrueTable const & GenParticles, FilTrackMCRecTable const & RecTracks)
702713 {
@@ -796,7 +807,6 @@ struct HeavyionMultiplicity {
796807 } // track (mcgen) loop
797808 } // collision loop
798809 }
799- PROCESS_SWITCH (HeavyionMultiplicity, processppMonteCarlo, " process pp MC" , false );
800810
801811 void processGen (aod::McCollisions::iterator const &, aod::McParticles const & GenParticles)
802812 {
@@ -836,7 +846,73 @@ struct HeavyionMultiplicity {
836846 histos.fill (HIST (" dndeta10_vs_FT0C" ), particle.eta (), multFT0C);
837847 }
838848 }
849+
850+ void processEvtLossSigLossMC (soa::Join<CollisionMCTrueTable, aod::MultMCExtras>::iterator const & mcCollision, CollisionMCRecTable const & RecCols, TrackMCTrueTable const & GenParticles)
851+ {
852+ if (isApplyInelgt0 && !mcCollision.isInelGt0 ()) {
853+ return ;
854+ }
855+ if (std::abs (mcCollision.posZ ()) >= vtxRange) {
856+ return ;
857+ }
858+ // All generated events
859+ histos.fill (HIST (" MCEventHist" ), 1 );
860+ histos.fill (HIST (" hImpactParameterGen" ), mcCollision.impactParameter ());
861+
862+ bool atLeastOne = false ;
863+ auto centrality = -999 .;
864+ auto numcontributors = -999 ;
865+ for (const auto & RecCol : RecCols) {
866+ if (!isEventSelected (RecCol)) {
867+ continue ;
868+ }
869+ if (std::abs (RecCol.posZ ()) >= vtxRange) {
870+ continue ;
871+ }
872+ if (RecCol.numContrib () <= numcontributors) {
873+ continue ;
874+ } else {
875+ numcontributors = RecCol.numContrib ();
876+ }
877+ centrality = selColCent (RecCol);
878+ atLeastOne = true ;
879+ }
880+
881+ // Generated events with at least one reconstructed collision (event loss estimation)
882+ if (atLeastOne) {
883+ histos.fill (HIST (" MCEventHist" ), 2 );
884+ histos.fill (HIST (" hImpactParameterRec" ), mcCollision.impactParameter ());
885+ histos.fill (HIST (" hImpactParvsCentrRec" ), centrality, mcCollision.impactParameter ());
886+ }
887+
888+ for (const auto & particle : GenParticles) {
889+
890+ if (!isGenTrackSelected (particle)) {
891+ continue ;
892+ }
893+
894+ // All generated particles
895+ histos.fill (HIST (" hgendndetaBeforeEvtSel" ), particle.eta ());
896+ histos.fill (HIST (" hgendndetaVscentBeforeEvtSel" ), particle.eta (), mcCollision.impactParameter ());
897+
898+ if (atLeastOne) {
899+ // All generated particles with at least one reconstructed collision (signal loss estimation)
900+ histos.fill (HIST (" hgendndetaAfterEvtSel" ), particle.eta ());
901+ histos.fill (HIST (" hgendndetaVscentAfterEvtSel" ), particle.eta (), mcCollision.impactParameter ());
902+ }
903+ }
904+ }
905+
906+ PROCESS_SWITCH (HeavyionMultiplicity, processData, " process data CentFT0C" , false );
907+ PROCESS_SWITCH (HeavyionMultiplicity, processCorrelation, " do correlation study in data" , false );
908+ PROCESS_SWITCH (HeavyionMultiplicity, processMonteCarlo, " process MC CentFT0C" , false );
909+ PROCESS_SWITCH (HeavyionMultiplicity, processMCpTefficiency, " process MC pTefficiency" , false );
910+ PROCESS_SWITCH (HeavyionMultiplicity, processMCcheckFakeTracks, " Check Fake tracks" , false );
911+ PROCESS_SWITCH (HeavyionMultiplicity, processStrangeYield, " Strange particle yield" , false );
912+ PROCESS_SWITCH (HeavyionMultiplicity, processppData, " process pp data" , false );
913+ PROCESS_SWITCH (HeavyionMultiplicity, processppMonteCarlo, " process pp MC" , false );
839914 PROCESS_SWITCH (HeavyionMultiplicity, processGen, " process pure MC gen" , false );
915+ PROCESS_SWITCH (HeavyionMultiplicity, processEvtLossSigLossMC, " process Signal Loss, Event Loss" , false );
840916};
841917
842918WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments