@@ -86,6 +86,7 @@ struct FlowGenericFramework {
8686
8787 O2_DEFINE_CONFIGURABLE (cfgNbootstrap, int , 10 , " Number of subsamples" )
8888 O2_DEFINE_CONFIGURABLE (cfgMpar, int , 8 , " Highest order of pt-pt correlations" )
89+ O2_DEFINE_CONFIGURABLE (cfgCentEstimator, int , 0 , " 0:FT0C; 1:FT0CVariant1; 2:FT0M; 3:FT0A" )
8990 O2_DEFINE_CONFIGURABLE (cfgUseNch, bool , false , " Do correlations as function of Nch" )
9091 O2_DEFINE_CONFIGURABLE (cfgFillWeights, bool , false , " Fill NUA weights" )
9192 O2_DEFINE_CONFIGURABLE (cfgRunByRun, bool , false , " Fill histograms on a run-by-run basis" )
@@ -115,6 +116,9 @@ struct FlowGenericFramework {
115116 O2_DEFINE_CONFIGURABLE (cfgIsVertexITSTPC, bool , true , " Selects collisions with at least one ITS-TPC track" );
116117 O2_DEFINE_CONFIGURABLE (cfgMagField, float , 99999 , " Configurable magnetic field; default CCDB will be queried" );
117118 O2_DEFINE_CONFIGURABLE (cfgTofPtCut, float , 0.5 , " pt cut on TOF for PID" );
119+ O2_DEFINE_CONFIGURABLE (cfgUseDensityDependentCorrection, bool , false , " Use density dependent efficiency correction based on Run 2 measurements" );
120+ Configurable<std::vector<double >> cfgTrackDensityP0{" cfgTrackDensityP0" , std::vector<double >{0.7217476707 , 0.7384792571 , 0.7542625668 , 0.7640680200 , 0.7701951667 , 0.7755299053 , 0.7805901710 , 0.7849446786 , 0.7957356586 , 0.8113039262 , 0.8211968966 , 0.8280558878 , 0.8329342135 }, " parameter 0 for track density efficiency correction" };
121+ Configurable<std::vector<double >> cfgTrackDensityP1{" cfgTrackDensityP1" , std::vector<double >{-2.169488e-05 , -2.191913e-05 , -2.295484e-05 , -2.556538e-05 , -2.754463e-05 , -2.816832e-05 , -2.846502e-05 , -2.843857e-05 , -2.705974e-05 , -2.477018e-05 , -2.321730e-05 , -2.203315e-05 , -2.109474e-05 }, " parameter 1 for track density efficiency correction" };
118122
119123 Configurable<GFWBinningCuts> cfgGFWBinning{" cfgGFWBinning" , {40 , 16 , 72 , 300 , 0 , 3000 , 0.2 , 10.0 , 0.2 , 3.0 , {0.2 , 0.25 , 0.3 , 0.35 , 0.4 , 0.45 , 0.5 , 0.55 , 0.6 , 0.65 , 0.7 , 0.75 , 0.8 , 0.85 , 0.9 , 0.95 , 1 , 1.1 , 1.2 , 1.3 , 1.4 , 1.5 , 1.6 , 1.7 , 1.8 , 1.9 , 2 , 2.2 , 2.4 , 2.6 , 2.8 , 3 , 3.5 , 4 , 5 , 6 , 8 , 10 }, {0 , 5 , 10 , 20 , 30 , 40 , 50 , 60 , 70 , 80 , 90 }}, " Configuration for binning" };
120124 Configurable<GFWRegions> cfgRegions{" cfgRegions" , {{" refN" , " refP" , " refFull" }, {-0.8 , 0.4 , -0.8 }, {-0.4 , 0.8 , 0.8 }, {0 , 0 , 0 }, {1 , 1 , 1 }}, " Configurations for GFW regions" };
@@ -137,6 +141,7 @@ struct FlowGenericFramework {
137141 OutputObj<FlowContainer> fFCgen {FlowContainer (" FlowContainer_gen" )};
138142 HistogramRegistry registry{" registry" };
139143
144+ // QA outputs
140145 std::map<int , std::vector<std::shared_ptr<TH1>>> th1sList;
141146 std::map<int , std::vector<std::shared_ptr<TH3>>> th3sList;
142147 enum OutputTH1Names {
@@ -148,6 +153,7 @@ struct FlowGenericFramework {
148153 hEventSel,
149154 kCount_TH1Names
150155 };
156+ // NUA outputs
151157 enum OutputTH3Names {
152158 hNUAref = 0 ,
153159 hNUAch,
@@ -156,14 +162,40 @@ struct FlowGenericFramework {
156162 hNUApr,
157163 kCount_TH3Names
158164 };
165+ enum CentEstimators {
166+ kCentFT0C = 0 ,
167+ kCentFT0CVariant1 ,
168+ kCentFT0M ,
169+ kCentFV0A
170+ };
159171
160- // define global variables
172+ // Define global variables
173+ // Generic Framework
161174 GFW* fGFW = new GFW();
162175 std::vector<GFW::CorrConfig> corrconfigs;
176+
163177 TRandom3* fRndm = new TRandom3(0 );
164178 TAxis* fPtAxis ;
165179 int lastRun = -1 ;
166180 std::vector<int > runNumbers;
181+
182+ // Density dependent eff correction
183+ std::vector<TF1*> funcEff;
184+ TH1D* hFindPtBin;
185+ TF1* funcV2;
186+ TF1* funcV3;
187+ TF1* funcV4;
188+ struct DensityCorr {
189+ double psi2Est;
190+ double psi3Est;
191+ double psi4Est;
192+ double v2;
193+ double v3;
194+ double v4;
195+ int density;
196+ DensityCorr () : psi2Est(0 .), psi3Est(0 .), psi4Est(0 .), v2(0 .), v3(0 .), v4(0 .), density(0 ) {}
197+ };
198+
167199 // Event selection cuts - Alex
168200 TF1* fPhiCutLow = nullptr ;
169201 TF1* fPhiCutHigh = nullptr ;
@@ -209,7 +241,25 @@ struct FlowGenericFramework {
209241 AxisSpec etaAxis = {etabins, -cfgEta, cfgEta, " #eta" };
210242 AxisSpec vtxAxis = {vtxZbins, -cfgVtxZ, cfgVtxZ, " Vtx_{z} (cm)" };
211243 AxisSpec ptAxis = {ptbinning, " #it{p}_{T} GeV/#it{c}" };
212- AxisSpec centAxis = {centbinning, " Centrality (%)" };
244+ std::string sCentralityEstimator ;
245+ switch (cfgCentEstimator) {
246+ case kCentFT0C :
247+ sCentralityEstimator = " FT0C" ;
248+ break ;
249+ case kCentFT0CVariant1 :
250+ sCentralityEstimator = " FT0C variant 1" ;
251+ break ;
252+ case kCentFT0M :
253+ sCentralityEstimator = " FT0M" ;
254+ break ;
255+ case kCentFV0A :
256+ sCentralityEstimator = " FV0A" ;
257+ break ;
258+ default :
259+ sCentralityEstimator = " FT0C" ;
260+ }
261+ sCentralityEstimator += " centrality (%)" ;
262+ AxisSpec centAxis = {centbinning, sCentralityEstimator .c_str ()};
213263 std::vector<double > nchbinning;
214264 int nchskip = (nchup - nchlow) / nchbins;
215265 for (int i = 0 ; i <= nchbins; ++i) {
@@ -240,10 +290,18 @@ struct FlowGenericFramework {
240290 if (doprocessMCReco || doprocessData || doprocessRun2) {
241291 registry.add (" trackQA/before/phi_eta_vtxZ" , " " , {HistType::kTH3D , {phiAxis, etaAxis, vtxAxis}});
242292 registry.add (" trackQA/before/pt_dcaXY_dcaZ" , " " , {HistType::kTH3D , {ptAxis, dcaXYAXis, dcaZAXis}});
293+ registry.add (" trackQA/before/chi2prTPCcls" , " #chi^{2}/cluster for the TPC track segment" , {HistType::kTH1D , {{100 , 0 ., 5 .}}});
294+ registry.add (" trackQA/before/chi2prITScls" , " #chi^{2}/cluster for the ITS track" , {HistType::kTH1D , {{100 , 0 ., 50 .}}});
295+ registry.add (" trackQA/before/nTPCClusters" , " Number of found TPC clusters" , {HistType::kTH1D , {{100 , 40 , 180 }}});
296+ registry.add (" trackQA/before/nITSClusters" , " Number of found ITS clusters" , {HistType::kTH1D , {{100 , 0 , 20 }}});
297+ registry.add (" trackQA/before/nTPCCrossedRows" , " Number of crossed TPC Rows" , {HistType::kTH1D , {{100 , 40 , 180 }}});
298+
243299 registry.addClone (" trackQA/before/" , " trackQA/after/" );
244300 registry.add (" trackQA/after/pt_ref" , " " , {HistType::kTH1D , {{100 , ptreflow, ptrefup}}});
245301 registry.add (" trackQA/after/pt_poi" , " " , {HistType::kTH1D , {{100 , ptpoilow, ptpoiup}}});
246302
303+ registry.add (" eventQA/before/centrality" , " " , {HistType::kTH1D , {centAxis}});
304+ registry.add (" eventQA/before/multiplicity" , " " , {HistType::kTH1D , {nchAxis}});
247305 registry.add (" eventQA/before/globalTracks_centT0C" , " " , {HistType::kTH2D , {centAxis, nchAxis}});
248306 registry.add (" eventQA/before/PVTracks_centT0C" , " " , {HistType::kTH2D , {centAxis, multpvAxis}});
249307 registry.add (" eventQA/before/globalTracks_PVTracks" , " " , {HistType::kTH2D , {multpvAxis, nchAxis}});
@@ -317,6 +375,24 @@ struct FlowGenericFramework {
317375 fMultCutHigh = new TF1 (" fMultCutHigh" , " [0]+[1]*x+[2]*x*x+[3]*x*x*x + 3.*([4]+[5]*x+[6]*x*x+[7]*x*x*x+[8]*x*x*x*x)" , 0 , 100 );
318376 fMultCutHigh ->SetParameters (1654.46 , -47.2379 , 0.449833 , -0.0014125 , 150.773 , -3.67334 , 0.0530503 , -0.000614061 , 3.15956e-06 );
319377 }
378+ if (cfgUseDensityDependentCorrection) {
379+ std::vector<double > pTEffBins = {0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 , 1.4 , 1.8 , 2.2 , 2.6 , 3.0 };
380+ hFindPtBin = new TH1D (" hFindPtBin" , " hFindPtBin" , pTEffBins.size () - 1 , &pTEffBins[0 ]);
381+ funcEff.resize (pTEffBins.size () - 1 );
382+ // LHC24g3 Eff
383+ std::vector<double > f1p0 = cfgTrackDensityP0;
384+ std::vector<double > f1p1 = cfgTrackDensityP1;
385+ for (uint ifunc = 0 ; ifunc < pTEffBins.size () - 1 ; ifunc++) {
386+ funcEff[ifunc] = new TF1 (Form (" funcEff%i" , ifunc), " [0]+[1]*x" , 0 , 3000 );
387+ funcEff[ifunc]->SetParameters (f1p0[ifunc], f1p1[ifunc]);
388+ }
389+ funcV2 = new TF1 (" funcV2" , " [0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x" , 0 , 100 );
390+ funcV2->SetParameters (0.0186111 , 0.00351907 , -4.38264e-05 , 1.35383e-07 , -3.96266e-10 );
391+ funcV3 = new TF1 (" funcV3" , " [0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x" , 0 , 100 );
392+ funcV3->SetParameters (0.0174056 , 0.000703329 , -1.45044e-05 , 1.91991e-07 , -1.62137e-09 );
393+ funcV4 = new TF1 (" funcV4" , " [0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x" , 0 , 100 );
394+ funcV4->SetParameters (0.008845 , 0.000259668 , -3.24435e-06 , 4.54837e-08 , -6.01825e-10 );
395+ }
320396 }
321397
322398 static constexpr std::string_view FillTimeName[] = {" before/" , " after/" };
@@ -576,12 +652,14 @@ struct FlowGenericFramework {
576652 AxisSpec phiAxis = {phibins, philow, phiup, " #phi" };
577653 AxisSpec etaAxis = {etabins, -cfgEta, cfgEta, " #eta" };
578654 AxisSpec vtxAxis = {vtxZbins, -cfgVtxZ, cfgVtxZ, " Vtx_{z} (cm)" };
655+ AxisSpec nchAxis = {nchbins, nchlow, nchup, " N_{ch}" };
656+ AxisSpec centAxis = {centbinning, " Centrality (%)" };
579657 std::vector<std::shared_ptr<TH1>> histos (kCount_TH1Names );
580658 histos[hPhi] = registry.add <TH1>(Form (" %d/phi" , run), " " , {HistType::kTH1D , {phiAxis}});
581659 histos[hEta] = registry.add <TH1>(Form (" %d/eta" , run), " " , {HistType::kTH1D , {etaAxis}});
582660 histos[hVtxZ] = registry.add <TH1>(Form (" %d/vtxz" , run), " " , {HistType::kTH1D , {vtxAxis}});
583- histos[hMult] = registry.add <TH1>(Form (" %d/mult" , run), " " , {HistType::kTH1D , {{ 3000 , 0.5 , 3000.5 } }});
584- histos[hCent] = registry.add <TH1>(Form (" %d/cent" , run), " " , {HistType::kTH1D , {{ 90 , 0 , 90 } }});
661+ histos[hMult] = registry.add <TH1>(Form (" %d/mult" , run), " " , {HistType::kTH1D , {nchAxis }});
662+ histos[hCent] = registry.add <TH1>(Form (" %d/cent" , run), " " , {HistType::kTH1D , {centAxis }});
585663 histos[hEventSel] = registry.add <TH1>(Form (" %d/eventSel" , run), " Number of Events;; Counts" , {HistType::kTH1D , {{11 , 0 , 11 }}});
586664 histos[hEventSel]->GetXaxis ()->SetBinLabel (1 , " Filtered event" );
587665 histos[hEventSel]->GetXaxis ()->SetBinLabel (2 , " sel8" );
@@ -661,15 +739,51 @@ struct FlowGenericFramework {
661739 fGFW ->Clear ();
662740 fFCpt ->clearVector ();
663741 float lRandom = fRndm ->Rndm ();
742+
743+ // be cautious, this only works for Pb-Pb
744+ // esimate the Event plane and vn for this event
745+ DensityCorr densitycorrections;
746+ if (cfgUseDensityDependentCorrection) {
747+ double psi2Est = 0 , psi3Est = 0 , psi4Est = 0 ;
748+ double v2 = 0 , v3 = 0 , v4 = 0 ;
749+ double q2x = 0 , q2y = 0 ;
750+ double q3x = 0 , q3y = 0 ;
751+ double q4x = 0 , q4y = 0 ;
752+ for (const auto & track : tracks) {
753+ bool withinPtRef = (ptreflow < track.pt ()) && (track.pt () < ptrefup); // within RF pT rang
754+ if (withinPtRef) {
755+ q2x += std::cos (2 * track.phi ());
756+ q2y += std::sin (2 * track.phi ());
757+ q3x += std::cos (3 * track.phi ());
758+ q3y += std::sin (3 * track.phi ());
759+ q4x += std::cos (4 * track.phi ());
760+ q4y += std::sin (4 * track.phi ());
761+ }
762+ }
763+ psi2Est = std::atan2 (q2y, q2x) / 2 .;
764+ psi3Est = std::atan2 (q3y, q3x) / 3 .;
765+ psi4Est = std::atan2 (q4y, q4x) / 4 .;
766+ v2 = funcV2->Eval (centrality);
767+ v3 = funcV3->Eval (centrality);
768+ v4 = funcV4->Eval (centrality);
769+ densitycorrections.psi2Est = psi2Est;
770+ densitycorrections.psi3Est = psi3Est;
771+ densitycorrections.psi4Est = psi4Est;
772+ densitycorrections.v2 = v2;
773+ densitycorrections.v3 = v3;
774+ densitycorrections.v4 = v4;
775+ densitycorrections.density = tracks.size ();
776+ }
777+
664778 for (const auto & track : tracks) {
665- processTrack (track, vtxz, run);
779+ processTrack (track, vtxz, run, densitycorrections );
666780 }
667781 if (!cfgFillWeights)
668782 fillOutputContainers<dt>((cfgUseNch) ? tracks.size () : centrality, lRandom);
669783 }
670784
671785 template <typename TTrack>
672- inline void processTrack (TTrack const & track, const float & vtxz, const int & run)
786+ inline void processTrack (TTrack const & track, const float & vtxz, const int & run, DensityCorr densitycorrections )
673787 {
674788 if constexpr (framework::has_type_v<aod::mctracklabel::McParticleId, typename TTrack::all_columns>) {
675789 if (track.mcParticleId () < 0 || !(track.has_mcParticle ()))
@@ -698,7 +812,7 @@ struct FlowGenericFramework {
698812 fillWeights (mcParticle, vtxz, 0 , run);
699813 } else {
700814 fillPtSums<kReco >(track, vtxz);
701- fillGFW<kReco >(mcParticle, vtxz, pidIndex);
815+ fillGFW<kReco >(mcParticle, vtxz, pidIndex, densitycorrections );
702816 }
703817
704818 if (cfgFillQA) {
@@ -729,7 +843,7 @@ struct FlowGenericFramework {
729843 }
730844
731845 fillPtSums<kGen >(track, vtxz);
732- fillGFW<kGen >(track, vtxz, pidIndex);
846+ fillGFW<kGen >(track, vtxz, pidIndex, densitycorrections );
733847
734848 if (cfgFillQA)
735849 fillTrackQA<kGen , kAfter >(track, vtxz);
@@ -748,7 +862,7 @@ struct FlowGenericFramework {
748862 fillWeights (track, vtxz, pidIndex, run);
749863 } else {
750864 fillPtSums<kReco >(track, vtxz);
751- fillGFW<kReco >(track, vtxz, pidIndex);
865+ fillGFW<kReco >(track, vtxz, pidIndex, densitycorrections );
752866 }
753867 if (cfgFillQA) {
754868 fillTrackQA<kReco , kAfter >(track, vtxz);
@@ -779,7 +893,7 @@ struct FlowGenericFramework {
779893 }
780894
781895 template <DataType dt, typename TTrack>
782- inline void fillGFW (TTrack track, const double & vtxz, int pid_index)
896+ inline void fillGFW (TTrack track, const double & vtxz, int pid_index, DensityCorr densitycorrections )
783897 {
784898 if (cfgUsePID) { // Analysing POI flow with id'ed particles
785899 double ptmins[] = {ptpoilow, ptpoilow, 0.3 , 0.5 };
@@ -812,6 +926,18 @@ struct FlowGenericFramework {
812926 double weff = (dt == kGen ) ? 1 . : getEfficiency (track);
813927 if (weff < 0 )
814928 return ;
929+ if (cfgUseDensityDependentCorrection && withinPtRef && dt != kGen ) {
930+ double fphi = densitycorrections.v2 * std::cos (2 * (track.phi () - densitycorrections.psi2Est )) + densitycorrections.v3 * std::cos (3 * (track.phi () - densitycorrections.psi3Est )) + densitycorrections.v4 * std::cos (4 * (track.phi () - densitycorrections.psi4Est ));
931+ fphi = (1 + 2 * fphi);
932+ int pTBinForEff = hFindPtBin->FindBin (track.pt ());
933+ if (pTBinForEff >= 1 && pTBinForEff <= hFindPtBin->GetNbinsX ()) {
934+ float wEPeff = funcEff[pTBinForEff - 1 ]->Eval (fphi * densitycorrections.density );
935+ if (wEPeff > 0 .) {
936+ wEPeff = 1 . / wEPeff;
937+ weff *= wEPeff;
938+ }
939+ }
940+ }
815941 double wacc = (dt == kGen ) ? 1 . : getAcceptance (track, vtxz, 0 );
816942 if (withinPtRef)
817943 fGFW ->Fill (track.eta (), fPtAxis ->FindBin (track.pt ()) - 1 , track.phi (), weff * wacc, 1 );
@@ -833,6 +959,13 @@ struct FlowGenericFramework {
833959 double wacc = getAcceptance (track, vtxz, 0 );
834960 registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" phi_eta_vtxZ" ), track.phi (), track.eta (), vtxz, (ft == kAfter ) ? wacc : 1.0 );
835961 registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" pt_dcaXY_dcaZ" ), track.pt (), track.dcaXY (), track.dcaZ ());
962+
963+ registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" chi2prTPCcls" ), track.tpcChi2NCl ());
964+ registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" chi2prITScls" ), track.itsChi2NCl ());
965+ registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" nTPCClusters" ), track.tpcNClsFound ());
966+ registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" nITSClusters" ), track.itsNCls ());
967+ registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" nTPCCrossedRows" ), track.tpcNClsCrossedRows ());
968+
836969 if (ft == kAfter ) {
837970 registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" pt_ref" ), track.pt ());
838971 registry.fill (HIST (" trackQA/" ) + HIST (FillTimeName[ft]) + HIST (" pt_poi" ), track.pt ());
@@ -857,7 +990,7 @@ struct FlowGenericFramework {
857990 Filter trackFilter = nabs(aod::track::eta) < cfgEta && aod::track::pt > cfgPtmin&& aod::track::pt < cfgPtmax && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t ) true )) && nabs(aod::track::dcaXY) < cfgDCAxy&& nabs(aod::track::dcaZ) < cfgDCAz;
858991 using GFWTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA, aod::pidTOFPi, aod::pidTPCPi, aod::pidTOFKa, aod::pidTPCKa, aod::pidTOFPr, aod::pidTPCPr>>;
859992
860- void processData (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs>>::iterator const & collision, aod::BCsWithTimestamps const &, GFWTracks const & tracks)
993+ void processData (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As >>::iterator const & collision, aod::BCsWithTimestamps const &, GFWTracks const & tracks)
861994 {
862995 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
863996 int run = bc.runNumber ();
@@ -894,13 +1027,33 @@ struct FlowGenericFramework {
8941027 registry.fill (HIST (" eventQA/eventSel" ), 2.5 );
8951028 if (cfgRunByRun)
8961029 th1sList[run][hEventSel]->Fill (2.5 );
897- const auto centrality = collision.centFT0C ();
1030+ float centrality;
1031+ switch (cfgCentEstimator) {
1032+ case kCentFT0C :
1033+ centrality = collision.centFT0C ();
1034+ break ;
1035+ case kCentFT0CVariant1 :
1036+ centrality = collision.centFT0CVariant1 ();
1037+ break ;
1038+ case kCentFT0M :
1039+ centrality = collision.centFT0M ();
1040+ break ;
1041+ case kCentFV0A :
1042+ centrality = collision.centFV0A ();
1043+ break ;
1044+ default :
1045+ centrality = collision.centFT0C ();
1046+ }
8981047 if (cfgFillQA)
8991048 fillEventQA<kBefore >(collision, tracks);
1049+ registry.fill (HIST (" eventQA/before/centrality" ), centrality);
1050+ registry.fill (HIST (" eventQA/before/multiplicity" ), tracks.size ());
9001051 if (cfgUseAdditionalEventCut && !eventSelected (collision, tracks.size (), centrality, run))
9011052 return ;
9021053 if (cfgFillQA)
9031054 fillEventQA<kAfter >(collision, tracks);
1055+ registry.fill (HIST (" eventQA/after/centrality" ), centrality);
1056+ registry.fill (HIST (" eventQA/after/multiplicity" ), tracks.size ());
9041057 processCollision<kReco >(collision, tracks, centrality, run);
9051058 }
9061059 PROCESS_SWITCH (FlowGenericFramework, processData, " Process analysis for non-derived data" , true );
0 commit comments