@@ -79,6 +79,7 @@ struct FlowGfwTask {
7979 O2_DEFINE_CONFIGURABLE (cfgNoSameBunchPileup, bool , false , " kNoSameBunchPileup" );
8080 O2_DEFINE_CONFIGURABLE (cfgIsGoodZvtxFT0vsPV, bool , false , " kIsGoodZvtxFT0vsPV" );
8181 O2_DEFINE_CONFIGURABLE (cfgNoCollInTimeRangeStandard, bool , false , " kNoCollInTimeRangeStandard" );
82+ O2_DEFINE_CONFIGURABLE (cfgEvSelkIsGoodITSLayersAll, bool , false , " kIsGoodITSLayersAll" )
8283 O2_DEFINE_CONFIGURABLE (cfgOccupancy, bool , false , " Bool for event selection on detector occupancy" );
8384 O2_DEFINE_CONFIGURABLE (cfgMultCut, bool , false , " Use additional event cut on mult correlations" );
8485 O2_DEFINE_CONFIGURABLE (FineBinning, bool , false , " Manually change to fine binning" )
@@ -96,13 +97,22 @@ struct FlowGfwTask {
9697 ConfigurableAxis axisCentForQA{" axisCentForQA" , {100 , 0 , 100 }, " centrality for QA" };
9798 ConfigurableAxis axisT0C{" axisT0C" , {70 , 0 , 70000 }, " N_{ch} (T0C)" };
9899 ConfigurableAxis axisT0A{" axisT0A" , {200 , 0 , 200000 }, " N_{ch} (T0A)" };
100+ ConfigurableAxis axisT0M{" axisT0M" , {70 , 0 , 70000 }, " N_{ch} (T0M)" };
99101 ConfigurableAxis axisFT0CAmp{" axisFT0CAmp" , {5000 , 0 , 5000 }, " axisFT0CAmp" };
100102 ConfigurableAxis axisFT0AAmp{" axisFT0AAmp" , {5000 , 0 , 5000 }, " axisFT0AAmp" };
101103 ConfigurableAxis axisFT0MAmp{" axisFT0MAmp" , {10000 , 0 , 10000 }, " axisFT0MAmp" };
102104 ConfigurableAxis axisNchPV{" axisNchPV" , {4000 , 0 , 4000 }, " N_{ch} (PV)" };
103105 ConfigurableAxis axisDCAz{" axisDCAz" , {200 , -2 , 2 }, " DCA_{z} (cm)" };
104106 ConfigurableAxis axisDCAxy{" axisDCAxy" , {200 , -1 , 1 }, " DCA_{xy} (cm)" };
105107
108+ // Configurables for ZDC
109+ Configurable<int > nBinsAmp{" nBinsAmp" , 1025 , " nbinsAmp" };
110+ Configurable<float > maxZN{" maxZN" , 4099.5 , " Max ZN signal" };
111+ Configurable<float > maxZP{" maxZP" , 3099.5 , " Max ZP signal" };
112+ Configurable<float > maxZEM{" maxZEM" , 3099.5 , " Max ZEM signal" };
113+ Configurable<int > nBinsFit{" nBinsFit" , 1000 , " nbinsFit" };
114+ Configurable<float > maxMultFT0{" maxMultFT0" , 3000 , " Max FT0 signal" };
115+
106116 // Corrections
107117 TH1D* mEfficiency = nullptr ;
108118 GFWWeights* mAcceptance = nullptr ;
@@ -167,6 +177,7 @@ struct FlowGfwTask {
167177 kNOPSAMEBUNCHPILEUP ,
168178 kISGOODZVTXFT0VSPV ,
169179 kNOCOLLINTIMERANGESTANDART ,
180+ kISGOODITSLAYERSALL ,
170181 kAFTERMULTCUTS ,
171182 kCENTRALITY ,
172183 kNOOFEVENTSTEPS
@@ -201,6 +212,7 @@ struct FlowGfwTask {
201212 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (kNOPSAMEBUNCHPILEUP + 1 , " kNoSameBunchPileup" );
202213 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (kISGOODZVTXFT0VSPV + 1 , " kIsGoodZvtxFT0vsPV" );
203214 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (kNOCOLLINTIMERANGESTANDART + 1 , " kNoCollInTimeRangeStandard" );
215+ registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (kISGOODITSLAYERSALL + 1 , " kIsGoodITSLayersAll" );
204216 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (kAFTERMULTCUTS + 1 , " After Mult cuts" );
205217 registry.get <TH1>(HIST (" hEventCount" ))->GetXaxis ()->SetBinLabel (kCENTRALITY + 1 , " Centrality" );
206218 registry.add (" hPhi" , " #phi distribution" , {HistType::kTH1D , {axisPhi}});
@@ -219,6 +231,8 @@ struct FlowGfwTask {
219231 registry.add (" BeforeCut_globalTracks_multV0A" , " before cut;mulplicity V0A;mulplicity global tracks" , {HistType::kTH2D , {axisT0A, axisNch}});
220232 registry.add (" BeforeCut_multV0A_multT0A" , " before cut;mulplicity T0A;mulplicity V0A" , {HistType::kTH2D , {axisT0A, axisT0A}});
221233 registry.add (" BeforeCut_multT0C_centT0C" , " before cut;Centrality T0C;mulplicity T0C" , {HistType::kTH2D , {axisCentForQA, axisT0C}});
234+ registry.add (" BeforeCut_multT0A_centT0A" , " before cut;Centrality T0C;mulplicity T0A" , {HistType::kTH2D , {axisCentForQA, axisT0A}});
235+ registry.add (" BeforeCut_multFT0M_centFT0M" , " before cut;Centrality FT0M;mulplicity FT0M" , {HistType::kTH2D , {axisCentForQA, axisT0M}});
222236
223237 // After cuts
224238 registry.add (" globalTracks_centT0C_Aft" , " after cut;Centrality T0C;mulplicity global tracks" , {HistType::kTH2D , {axisCentForQA, axisNch}});
@@ -228,12 +242,30 @@ struct FlowGfwTask {
228242 registry.add (" globalTracks_multV0A_Aft" , " after cut;mulplicity V0A;mulplicity global tracks" , {HistType::kTH2D , {axisT0A, axisNch}});
229243 registry.add (" multV0A_multT0A_Aft" , " after cut;mulplicity T0A;mulplicity V0A" , {HistType::kTH2D , {axisT0A, axisT0A}});
230244 registry.add (" multT0C_centT0C_Aft" , " after cut;Centrality T0C;mulplicity T0C" , {HistType::kTH2D , {axisCentForQA, axisT0C}});
245+ registry.add (" multT0A_centT0A_Aft" , " after cut;Centrality T0A;mulplicity T0A" , {HistType::kTH2D , {axisCentForQA, axisT0A}});
246+ registry.add (" multFT0M_centFT0M_Aft" , " after cut;Centrality FT0M;mulplicity FT0M" , {HistType::kTH2D , {axisCentForQA, axisT0M}});
231247
232248 // FT0 plots
233249 registry.add (" FT0CAmp" , " ;FT0C amplitude;Events" , kTH1F , {axisFT0CAmp});
234250 registry.add (" FT0AAmp" , " ;FT0A amplitude;Events" , kTH1F , {axisFT0AAmp});
235251 registry.add (" FT0MAmp" , " ;FT0M amplitude;Events" , kTH1F , {axisFT0MAmp});
236252
253+ // ZDC plots
254+ const AxisSpec axisEvent{3 , 0 ., +3.0 , " " };
255+ registry.add (" hEventCounterForZDC" , " Event counter" , kTH1F , {axisEvent});
256+ registry.add (" ZNAcoll" , " ZNAcoll; ZNA amplitude; Entries" , {HistType::kTH1F , {{nBinsAmp, -0.5 , maxZN}}});
257+ registry.add (" ZPAcoll" , " ZPAcoll; ZPA amplitude; Entries" , {HistType::kTH1F , {{nBinsAmp, -0.5 , maxZP}}});
258+ registry.add (" ZNCcoll" , " ZNCcoll; ZNC amplitude; Entries" , {HistType::kTH1F , {{nBinsAmp, -0.5 , maxZN}}});
259+ registry.add (" ZPCcoll" , " ZPCcoll; ZPC amplitude; Entries" , {HistType::kTH1F , {{nBinsAmp, -0.5 , maxZP}}});
260+ registry.add (" ZNvsFT0correl" , " ZNvsFT0correl" , {HistType::kTH2F , {{{nBinsFit, 0 ., maxMultFT0}, {nBinsAmp, -0.5 , 2 . * maxZN}}}});
261+ registry.add (" ZDCAmp" , " ZDC Amplitude; ZDC Amplitude; Events" , {HistType::kTH1F , {{nBinsAmp, -0.5 , maxZP}}});
262+ registry.add (" ZNvsZEMcoll" , " ZNvsZEMcoll; ZEM; ZNA+ZNC" , {HistType::kTH2F , {{{nBinsAmp, -0.5 , maxZEM}, {nBinsAmp, -0.5 , 2 . * maxZN}}}});
263+ registry.add (" ZNvsZEMcoll05" , " ZNvsZEMcoll; ZEM; ZNA+ZNC" , {HistType::kTH2F , {{{nBinsAmp, -0.5 , maxZEM}, {nBinsAmp, -0.5 , 2 . * maxZN}}}});
264+ registry.add (" ZNvsZEMcoll510" , " ZNvsZEMcoll; ZEM; ZNA+ZNC" , {HistType::kTH2F , {{{nBinsAmp, -0.5 , maxZEM}, {nBinsAmp, -0.5 , 2 . * maxZN}}}});
265+ registry.add (" ZNvsZEMcoll1020" , " ZNvsZEMcoll; ZEM; ZNA+ZNC" , {HistType::kTH2F , {{{nBinsAmp, -0.5 , maxZEM}, {nBinsAmp, -0.5 , 2 . * maxZN}}}});
266+ registry.add (" ZNvsZEMcoll2030" , " ZNvsZEMcoll; ZEM; ZNA+ZNC" , {HistType::kTH2F , {{{nBinsAmp, -0.5 , maxZEM}, {nBinsAmp, -0.5 , 2 . * maxZN}}}});
267+ registry.add (" ZNvsZEMcollrest" , " ZNvsZEMcoll; ZEM; ZNA+ZNC" , {HistType::kTH2F , {{{nBinsAmp, -0.5 , maxZEM}, {nBinsAmp, -0.5 , 2 . * maxZN}}}});
268+
237269 // Track plots
238270 registry.add (" Events_per_Centrality_Bin" , " Events_per_Centrality_Bin;Centrality FT0C;No. of Events" , kTH1F , {axisCentrality});
239271 registry.add (" Global_Tracks_Nch_vs_Cent" , " Global Tracks;Centrality (%); M (|#eta| < 0.8);" , {HistType::kTH2D , {axisCentrality, axisNch}});
@@ -332,8 +364,8 @@ struct FlowGfwTask {
332364 fPtAxis = new TAxis (nPtBins, ptBins);
333365
334366 if (cfgOutputNUAWeights) {
335- fWeights ->SetPtBins (nPtBins, ptBins);
336- fWeights ->Init (true , false );
367+ fWeights ->setPtBins (nPtBins, ptBins);
368+ fWeights ->init (true , false );
337369 }
338370
339371 // add in FlowContainer to Get boostrap sample automatically
@@ -477,7 +509,7 @@ struct FlowGfwTask {
477509 return false ;
478510 weight_nue = 1 . / eff;
479511 if (mAcceptance )
480- weight_nua = mAcceptance ->GetNUA (phi, eta, vtxz);
512+ weight_nua = mAcceptance ->getNUA (phi, eta, vtxz);
481513 else
482514 weight_nua = 1 ;
483515 return true ;
@@ -532,6 +564,13 @@ struct FlowGfwTask {
532564 }
533565 registry.fill (HIST (" hEventCount" ), kNOCOLLINTIMERANGESTANDART );
534566 }
567+ if (cfgEvSelkIsGoodITSLayersAll) {
568+ if (cfgEvSelkIsGoodITSLayersAll && !collision.selection_bit (o2::aod::evsel::kIsGoodITSLayersAll )) {
569+ // no other collisions in this Readout Frame with per-collision multiplicity above threshold
570+ return false ;
571+ }
572+ registry.fill (HIST (" hEventCount" ), kISGOODITSLAYERSALL );
573+ }
535574
536575 float vtxz = -999 ;
537576 if (collision.numContrib () > 1 ) {
@@ -614,10 +653,12 @@ struct FlowGfwTask {
614653 Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex;
615654 Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPtMin) && (aod::track::pt < cfgCutPtMax) && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t ) true )) && (aod::track::tpcChi2NCl < cfgCutChi2prTPCcls) && (nabs(aod::track::dcaZ) < cfgCutDCAz) && (nabs(aod::track::dcaXY) < cfgCutDCAxy);
616655
617- using Colls = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs>>; // collisions filter
656+ using Colls = soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0As, aod::CentFT0Ms >>; // collisions filter
618657 using AodTracks = soa::Filtered<soa::Join<aod::Tracks, aod::TrackSelection, aod::TracksDCA, aod::TracksExtra>>; // tracks filter
619658
620- void processData (Colls::iterator const & collision, aod::BCsWithTimestamps const &, AodTracks const & tracks, aod::FT0s const &)
659+ using BCsRun3 = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
660+
661+ void processData (Colls::iterator const & collision, aod::BCsWithTimestamps const &, AodTracks const & tracks, aod::FT0s const &, aod::Zdcs const &, BCsRun3 const &)
621662 {
622663 registry.fill (HIST (" hEventCount" ), kFILTERED );
623664 if (!collision.sel8 ())
@@ -635,6 +676,8 @@ struct FlowGfwTask {
635676 registry.fill (HIST (" BeforeCut_globalTracks_multV0A" ), collision.multFV0A (), tracks.size ());
636677 registry.fill (HIST (" BeforeCut_multV0A_multT0A" ), collision.multFT0A (), collision.multFV0A ());
637678 registry.fill (HIST (" BeforeCut_multT0C_centT0C" ), collision.centFT0C (), collision.multFT0C ());
679+ registry.fill (HIST (" BeforeCut_multT0A_centT0A" ), collision.centFT0A (), collision.multFT0A ());
680+ registry.fill (HIST (" BeforeCut_multFT0M_centFT0M" ), collision.centFT0M (), collision.multFT0M ());
638681 registry.fill (HIST (" hEventCount" ), kSEL8 );
639682
640683 const auto centrality = collision.centFT0C ();
@@ -662,7 +705,7 @@ struct FlowGfwTask {
662705
663706 fGFW ->Clear ();
664707
665- auto bc = collision.bc_as <aod::BCsWithTimestamps >();
708+ auto bc = collision.bc_as <BCsRun3 >();
666709 loadCorrections (bc.timestamp ());
667710 registry.fill (HIST (" hEventCount" ), kCENTRALITY );
668711
@@ -674,26 +717,67 @@ struct FlowGfwTask {
674717 registry.fill (HIST (" globalTracks_multV0A_Aft" ), collision.multFV0A (), tracks.size ());
675718 registry.fill (HIST (" multV0A_multT0A_Aft" ), collision.multFT0A (), collision.multFV0A ());
676719 registry.fill (HIST (" multT0C_centT0C_Aft" ), collision.centFT0C (), collision.multFT0C ());
720+ registry.fill (HIST (" multT0A_centT0A_Aft" ), collision.centFT0A (), collision.multFT0A ());
721+ registry.fill (HIST (" multFT0M_centFT0M_Aft" ), collision.centFT0M (), collision.multFT0M ());
677722
678- // FT0 amplitude to use in fine binning
679- double ft0aAmp = 0 ;
680- double ft0cAmp = 0 ;
723+ const auto & foundBC = collision. foundBC_as <BCsRun3>();
724+ if (foundBC. has_zdc ()) {
725+ registry. fill ( HIST ( " hEventCounterForZDC " ), 1 ) ;
681726
682- if (collision.has_foundFT0 ()) {
683- auto ft0 = collision.foundFT0 ();
684- for (const auto & amplitude : ft0.amplitudeA ()) {
685- ft0aAmp += amplitude;
686- }
687- for (const auto & amplitude : ft0.amplitudeC ()) {
688- ft0cAmp += amplitude;
689- }
690- }
727+ // FT0 amplitude to use in fine binning
728+ double ft0aAmp = 0 ;
729+ double ft0cAmp = 0 ;
691730
692- registry.fill (HIST (" FT0AAmp" ), ft0aAmp);
693- registry.fill (HIST (" FT0CAmp" ), ft0cAmp);
731+ if (collision.has_foundFT0 ()) {
732+ auto ft0 = collision.foundFT0 ();
733+ for (const auto & amplitude : ft0.amplitudeA ()) {
734+ ft0aAmp += amplitude;
735+ }
736+ for (const auto & amplitude : ft0.amplitudeC ()) {
737+ ft0cAmp += amplitude;
738+ }
739+ } else {
740+ ft0aAmp = ft0cAmp = -999 ;
741+ }
694742
695- double ft0mAmp = ft0aAmp + ft0cAmp;
696- registry.fill (HIST (" FT0MAmp" ), ft0mAmp);
743+ registry.fill (HIST (" FT0AAmp" ), ft0aAmp);
744+ registry.fill (HIST (" FT0CAmp" ), ft0cAmp);
745+
746+ double ft0mAmp = ft0aAmp + ft0cAmp;
747+ registry.fill (HIST (" FT0MAmp" ), ft0mAmp);
748+
749+ // ZDC amplitude to use in fine binning
750+ const auto & zdcread = foundBC.zdc ();
751+ auto aZNA = zdcread.amplitudeZNA ();
752+ auto aZNC = zdcread.amplitudeZNC ();
753+ auto aZPA = zdcread.amplitudeZPA ();
754+ auto aZPC = zdcread.amplitudeZPC ();
755+ auto aZEM1 = zdcread.amplitudeZEM1 ();
756+ auto aZEM2 = zdcread.amplitudeZEM2 ();
757+
758+ registry.fill (HIST (" ZNAcoll" ), aZNA);
759+ registry.fill (HIST (" ZNCcoll" ), aZNC);
760+ registry.fill (HIST (" ZPAcoll" ), aZPA);
761+ registry.fill (HIST (" ZPCcoll" ), aZPC);
762+
763+ double aZDC = aZNC + aZNA + aZPA + aZPC;
764+ registry.fill (HIST (" ZNvsFT0correl" ), (ft0aAmp + ft0aAmp) / 100 ., aZNC + aZNA);
765+ registry.fill (HIST (" ZDCAmp" ), aZDC);
766+
767+ registry.fill (HIST (" ZNvsZEMcoll" ), aZEM1 + aZEM2, aZNA + aZNC);
768+
769+ if (centrality >= 0 && centrality <= 5 ) {
770+ registry.fill (HIST (" ZNvsZEMcoll05" ), aZEM1 + aZEM2, aZNA + aZNC);
771+ } else if (centrality > 5 && centrality <= 10 ) {
772+ registry.fill (HIST (" ZNvsZEMcoll510" ), aZEM1 + aZEM2, aZNA + aZNC);
773+ } else if (centrality > 10 && centrality <= 20 ) {
774+ registry.fill (HIST (" ZNvsZEMcoll1020" ), aZEM1 + aZEM2, aZNA + aZNC);
775+ } else if (centrality > 20 && centrality <= 30 ) {
776+ registry.fill (HIST (" ZNvsZEMcoll2030" ), aZEM1 + aZEM2, aZNA + aZNC);
777+ } else {
778+ registry.fill (HIST (" ZNvsZEMcollrest" ), aZEM1 + aZEM2, aZNA + aZNC);
779+ }
780+ } // End of ZDC
697781
698782 // track weights
699783 float weff = 1 , wacc = 1 ;
@@ -708,15 +792,14 @@ struct FlowGfwTask {
708792 int globalTracksNch = 0 ;
709793
710794 for (const auto & track : tracks) {
711-
712795 if (!trackSelected (track))
713796 continue ;
714797
715798 if (cfgUseAdditionalTrackCut && !trackSelected (track, magnetfield))
716799 continue ;
717800
718801 if (cfgOutputNUAWeights)
719- fWeights ->Fill (track.phi (), track.eta (), vtxz, track.pt (), centrality, 0 );
802+ fWeights ->fill (track.phi (), track.eta (), vtxz, track.pt (), centrality, 0 );
720803
721804 if (!setCurrentParticleWeights (weff, wacc, track.phi (), track.eta (), track.pt (), vtxz))
722805 continue ;
0 commit comments