@@ -147,6 +147,7 @@ struct HeavyionMultiplicity {
147147 ConfigurableAxis centralityBinning{" centralityBinning" , {VARIABLE_WIDTH, 0 , 5 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 , 100 }, " " };
148148 ConfigurableAxis occupancyBin{" occupancyBin" , {VARIABLE_WIDTH, 0 , 500 , 1000 , 2000 , 5000 , 10000 }, " " };
149149 ConfigurableAxis centBinGen{" centBinGen" , {VARIABLE_WIDTH, 0 , 500 , 1000 , 2000 , 5000 , 10000 }, " " };
150+ 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" };
150151
151152 Configurable<bool > isApplySameBunchPileup{" isApplySameBunchPileup" , true , " Enable SameBunchPileup cut" };
152153 Configurable<bool > isApplyGoodZvtxFT0vsPV{" isApplyGoodZvtxFT0vsPV" , true , " Enable GoodZvtxFT0vsPV cut" };
@@ -178,6 +179,7 @@ struct HeavyionMultiplicity {
178179 AxisSpec axisPt = {ptHistBin, " pT" , " pTAxis" };
179180 AxisSpec axisOccupancy = {occupancyBin, " occupancy" , " OccupancyAxis" };
180181 AxisSpec axisCentBinGen = {centBinGen, " GenCentrality" , " CentGenAxis" };
182+ AxisSpec impactParAxis = {binsImpactPar, " Impact Parameter" };
181183
182184 histos.add (" EventHist" , " EventHist" , kTH1D , {axisEvent}, false );
183185 histos.add (" VtxZHist" , " VtxZHist" , kTH1D , {axisVtxZ}, false );
@@ -269,6 +271,21 @@ struct HeavyionMultiplicity {
269271 histos.add (" mult10_vs_FT0C" , " mult10_vs_FT0C" , kTH2F , {axisMult, axisCentBinGen}, true );
270272 histos.add (" mult10_vs_FT0A" , " mult10_vs_FT0A" , kTH2F , {axisMult, axisCentBinGen}, true );
271273 }
274+
275+ if (doprocessEvtLossSigLossMC) {
276+ histos.add (" MCEventHist" , " MCEventHist" , kTH1F , {axisEvent}, false );
277+ auto hstat = histos.get <TH1>(HIST (" MCEventHist" ));
278+ auto * x = hstat->GetXaxis ();
279+ x->SetBinLabel (1 , " All MC events" );
280+ x->SetBinLabel (2 , " MC events with atleast one reco event" );
281+ histos.add (" hImpactParameterGen" , " Impact parameter of generated MC events" , kTH1F , {impactParAxis});
282+ histos.add (" hImpactParameterRec" , " Impact parameter of selected MC events" , kTH1F , {impactParAxis});
283+ histos.add (" hImpactParvsCentrRec" , " Impact parameter of selected MC events vs centrality" , kTH2F , {axisCent, impactParAxis});
284+ histos.add (" hgendndetaBeforeEvtSel" , " Eta of all generated particles" , kTH1F , {axisEta});
285+ histos.add (" hgendndetaAfterEvtSel" , " Eta of generated particles after EvtSel" , kTH1F , {axisEta});
286+ histos.add (" hgendndetaVscentBeforeEvtSel" , " hgendndetaBeforeEvtSel vs centrality" , kTH2F , {axisEta, impactParAxis});
287+ histos.add (" hgendndetaVscentAfterEvtSel" , " hgendndetaAfterEvtSel vs centrality" , kTH2F , {axisEta, impactParAxis});
288+ }
272289 }
273290
274291 template <typename CheckCol>
@@ -416,7 +433,6 @@ struct HeavyionMultiplicity {
416433 }
417434 }
418435 }
419- PROCESS_SWITCH (HeavyionMultiplicity, processData, " process data CentFT0C" , false );
420436
421437 void processCorrelation (CollisionDataTable::iterator const & cols, FilTrackDataTable const & tracks)
422438 {
@@ -441,7 +457,6 @@ struct HeavyionMultiplicity {
441457 histos.fill (HIST (" GlobalMult_vs_FV0A" ), nchTracks, cols.multFV0A ());
442458 histos.fill (HIST (" NPVtracks_vs_GlobalMult" ), cols.multNTracksPV (), nchTracks);
443459 }
444- PROCESS_SWITCH (HeavyionMultiplicity, processCorrelation, " do correlation study in data" , false );
445460
446461 void processMonteCarlo (CollisionMCTrueTable::iterator const &, CollisionMCRecTable const & RecCols, TrackMCTrueTable const & GenParticles, FilTrackMCRecTable const & RecTracks)
447462 {
@@ -541,7 +556,6 @@ struct HeavyionMultiplicity {
541556 } // track (mcgen) loop
542557 } // collision loop
543558 }
544- PROCESS_SWITCH (HeavyionMultiplicity, processMonteCarlo, " process MC CentFT0C" , false );
545559
546560 void processMCpTefficiency (CollisionMCTrueTable::iterator const &, CollisionMCRecTable const & RecCols, TrackMCTrueTable const & GenParticles, FilTrackMCRecTable const & RecTracks)
547561 {
@@ -589,7 +603,6 @@ struct HeavyionMultiplicity {
589603 }
590604 }
591605 }
592- PROCESS_SWITCH (HeavyionMultiplicity, processMCpTefficiency, " process MC pTefficiency" , false );
593606
594607 void processMCcheckFakeTracks (CollisionMCTrueTable::iterator const &, CollisionMCRecTable const & RecCols, FilTrackMCRecTable const & RecTracks)
595608 {
@@ -628,7 +641,6 @@ struct HeavyionMultiplicity {
628641 }
629642 }
630643 }
631- PROCESS_SWITCH (HeavyionMultiplicity, processMCcheckFakeTracks, " Check Fake tracks" , false );
632644
633645 void processStrangeYield (CollisionDataTable::iterator const & cols, V0TrackCandidates const &, aod::V0Datas const & v0data)
634646 {
@@ -671,7 +683,6 @@ struct HeavyionMultiplicity {
671683 histos.fill (HIST (" AntiLambdaCentEtaMass" ), selColCent (cols), v0track.eta (), v0track.mAntiLambda ());
672684 }
673685 }
674- PROCESS_SWITCH (HeavyionMultiplicity, processStrangeYield, " Strange particle yield" , false );
675686
676687 void processppData (ColDataTablepp::iterator const & cols, FilTrackDataTable const & tracks)
677688 {
@@ -696,7 +707,6 @@ struct HeavyionMultiplicity {
696707 }
697708 } // track loop
698709 }
699- PROCESS_SWITCH (HeavyionMultiplicity, processppData, " process pp data" , false );
700710
701711 void processppMonteCarlo (CollisionMCTrueTable::iterator const &, ColMCRecTablepp const & RecCols, TrackMCTrueTable const & GenParticles, FilTrackMCRecTable const & RecTracks)
702712 {
@@ -796,7 +806,6 @@ struct HeavyionMultiplicity {
796806 } // track (mcgen) loop
797807 } // collision loop
798808 }
799- PROCESS_SWITCH (HeavyionMultiplicity, processppMonteCarlo, " process pp MC" , false );
800809
801810 void processGen (aod::McCollisions::iterator const &, aod::McParticles const & GenParticles)
802811 {
@@ -836,7 +845,73 @@ struct HeavyionMultiplicity {
836845 histos.fill (HIST (" dndeta10_vs_FT0C" ), particle.eta (), multFT0C);
837846 }
838847 }
848+
849+ void processEvtLossSigLossMC (soa::Join<CollisionMCTrueTable, aod::MultMCExtras>::iterator const & mcCollision, CollisionMCRecTable const & RecCols, TrackMCTrueTable const & GenParticles)
850+ {
851+ if (isApplyInelgt0 && !mcCollision.isInelGt0 ()) {
852+ return ;
853+ }
854+ if (std::abs (mcCollision.posZ ()) >= vtxRange) {
855+ return ;
856+ }
857+ // All generated events
858+ histos.fill (HIST (" MCEventHist" ), 1 );
859+ histos.fill (HIST (" hImpactParameterGen" ), mcCollision.impactParameter ());
860+
861+ bool atLeastOne = false ;
862+ auto centrality = -999 .;
863+ auto numcontributors = -999 ;
864+ for (const auto & RecCol : RecCols) {
865+ if (!isEventSelected (RecCol)) {
866+ continue ;
867+ }
868+ if (std::abs (RecCol.posZ ()) >= vtxRange) {
869+ continue ;
870+ }
871+ if (RecCol.numContrib () <= numcontributors) {
872+ continue ;
873+ } else {
874+ numcontributors = RecCol.numContrib ();
875+ }
876+ centrality = selColCent (RecCol);
877+ atLeastOne = true ;
878+ }
879+
880+ // Generated events with at least one reconstructed collision (event loss estimation)
881+ if (atLeastOne) {
882+ histos.fill (HIST (" MCEventHist" ), 2 );
883+ histos.fill (HIST (" hImpactParameterRec" ), mcCollision.impactParameter ());
884+ histos.fill (HIST (" hImpactParvsCentrRec" ), centrality, mcCollision.impactParameter ());
885+ }
886+
887+ for (const auto & particle : GenParticles) {
888+
889+ if (!isGenTrackSelected (particle)) {
890+ continue ;
891+ }
892+
893+ // All generated particles
894+ histos.fill (HIST (" hgendndetaBeforeEvtSel" ), particle.eta ());
895+ histos.fill (HIST (" hgendndetaVscentBeforeEvtSel" ), particle.eta (), mcCollision.impactParameter ());
896+
897+ if (atLeastOne) {
898+ // All generated particles with at least one reconstructed collision (signal loss estimation)
899+ histos.fill (HIST (" hgendndetaAfterEvtSel" ), particle.eta ());
900+ histos.fill (HIST (" hgendndetaVscentAfterEvtSel" ), particle.eta (), mcCollision.impactParameter ());
901+ }
902+ }
903+ }
904+
905+ PROCESS_SWITCH (HeavyionMultiplicity, processData, " process data CentFT0C" , false );
906+ PROCESS_SWITCH (HeavyionMultiplicity, processCorrelation, " do correlation study in data" , false );
907+ PROCESS_SWITCH (HeavyionMultiplicity, processMonteCarlo, " process MC CentFT0C" , false );
908+ PROCESS_SWITCH (HeavyionMultiplicity, processMCpTefficiency, " process MC pTefficiency" , false );
909+ PROCESS_SWITCH (HeavyionMultiplicity, processMCcheckFakeTracks, " Check Fake tracks" , false );
910+ PROCESS_SWITCH (HeavyionMultiplicity, processStrangeYield, " Strange particle yield" , false );
911+ PROCESS_SWITCH (HeavyionMultiplicity, processppData, " process pp data" , false );
912+ PROCESS_SWITCH (HeavyionMultiplicity, processppMonteCarlo, " process pp MC" , false );
839913 PROCESS_SWITCH (HeavyionMultiplicity, processGen, " process pure MC gen" , false );
914+ PROCESS_SWITCH (HeavyionMultiplicity, processEvtLossSigLossMC, " process Signal Loss, Event Loss" , false );
840915};
841916
842917WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments