@@ -116,14 +116,21 @@ struct FlowGfwLightIons {
116116 O2_DEFINE_CONFIGURABLE (cfgEtaPtPtFull, float , 0.8 , " eta cut for pure pt-pt correlations" );
117117 O2_DEFINE_CONFIGURABLE (cfgVtxZ, float , 10 , " vertex cut (cm)" );
118118 O2_DEFINE_CONFIGURABLE (cfgOccupancySelection, int , 2000 , " Max occupancy selection, -999 to disable" );
119- O2_DEFINE_CONFIGURABLE (cfgNoSameBunchPileupCut, bool , true , " kNoSameBunchPileupCut" );
120- O2_DEFINE_CONFIGURABLE (cfgIsGoodZvtxFT0vsPV, bool , true , " kIsGoodZvtxFT0vsPV" );
121- O2_DEFINE_CONFIGURABLE (cfgIsGoodITSLayersAll, bool , true , " kIsGoodITSLayersAll" );
122- O2_DEFINE_CONFIGURABLE (cfgNoCollInTimeRangeStandard, bool , true , " kNoCollInTimeRangeStandard" );
119+ struct : ConfigurableGroup {
120+ O2_DEFINE_CONFIGURABLE (cfgNoSameBunchPileupCut, bool , true , " kNoSameBunchPileupCut" );
121+ O2_DEFINE_CONFIGURABLE (cfgIsGoodZvtxFT0vsPV, bool , true , " kIsGoodZvtxFT0vsPV" );
122+ O2_DEFINE_CONFIGURABLE (cfgIsGoodITSLayersAll, bool , true , " kIsGoodITSLayersAll" );
123+ O2_DEFINE_CONFIGURABLE (cfgNoCollInTimeRangeStandard, bool , true , " kNoCollInTimeRangeStandard" );
124+ O2_DEFINE_CONFIGURABLE (cfgNoCollInRofStandard, bool , true , " kNoCollInRofStandard" );
125+ O2_DEFINE_CONFIGURABLE (cfgNoHighMultCollInPrevRof, bool , true , " kNoHighMultCollInPrevRof" );
126+ O2_DEFINE_CONFIGURABLE (cfgNoITSROFrameBorder, bool , true , " kNoITSROFrameBorder" );
127+ O2_DEFINE_CONFIGURABLE (cfgNoTimeFrameBorder, bool , true , " kNoTimeFrameBorder" );
128+ O2_DEFINE_CONFIGURABLE (cfgTVXinTRD, bool , true , " kTVXinTRD - Use kTVXinTRD (reject TRD triggered events)" );
129+ O2_DEFINE_CONFIGURABLE (cfgIsVertexITSTPC, bool , true , " kIsVertexITSTPC - Selects collisions with at least one ITS-TPC track" );
130+ } cfgEventCutFlags;
123131 O2_DEFINE_CONFIGURABLE (cfgDoOccupancySel, bool , true , " Bool for event selection on detector occupancy" );
132+ O2_DEFINE_CONFIGURABLE (cfgCentralityFactor, double , 1 ., " Correction factor for testing centrality robustness" );
124133 O2_DEFINE_CONFIGURABLE (cfgMultCut, bool , true , " Use additional event cut on mult correlations" );
125- O2_DEFINE_CONFIGURABLE (cfgTVXinTRD, bool , true , " Use kTVXinTRD (reject TRD triggered events)" );
126- O2_DEFINE_CONFIGURABLE (cfgIsVertexITSTPC, bool , true , " Selects collisions with at least one ITS-TPC track" );
127134 O2_DEFINE_CONFIGURABLE (cfgMagField, float , 99999 , " Configurable magnetic field; default CCDB will be queried" );
128135 O2_DEFINE_CONFIGURABLE (cfgFixedMultMin, int , 1 , " Minimum for fixed nch range" );
129136 O2_DEFINE_CONFIGURABLE (cfgFixedMultMax, int , 3000 , " Maximum for fixed nch range" );
@@ -210,12 +217,16 @@ struct FlowGfwLightIons {
210217 kFilteredEvent = 1 ,
211218 kSel8 ,
212219 kOccupancy ,
213- kTVXTRD ,
214- kNoSamebunchPU ,
215- kZVtxFT0PV ,
216- kNoCollTRStd ,
217- kVtxITSTPC ,
218- kGoodITSLayers ,
220+ kTVXinTRD ,
221+ kNoSameBunchPileup ,
222+ kIsGoodZvtxFT0vsPV ,
223+ kNoCollInTimeRangeStandard ,
224+ kNoCollInRofStandard ,
225+ kNoHighMultCollInPrevRof ,
226+ kNoTimeFrameBorder ,
227+ kNoITSROFrameBorder ,
228+ kIsVertexITSTPC ,
229+ kIsGoodITSLayersAll ,
219230 kMultCuts ,
220231 kTrackCent
221232 };
@@ -415,18 +426,23 @@ struct FlowGfwLightIons {
415426 }
416427
417428 registry.addClone (" eventQA/before/" , " eventQA/after/" );
418- registry.add (" eventQA/eventSel" , " Number of Events;; Counts" , {HistType::kTH1D , {{11 , 0.5 , 11 .5 }}});
429+ registry.add (" eventQA/eventSel" , " Number of Events;; Counts" , {HistType::kTH1D , {{15 , 0.5 , 15 .5 }}});
419430 registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kFilteredEvent , " Filtered event" );
420431 registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kSel8 , " sel8" );
421432 registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kOccupancy , " occupancy" );
422- registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kTVXTRD , " kTVXinTRD" );
423- registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoSamebunchPU , " kNoSameBunchPileup" );
424- registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kZVtxFT0PV , " kIsGoodZvtxFT0vsPV" );
425- registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoCollTRStd , " kNoCollInTimeRangeStandard" );
426- registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kVtxITSTPC , " kIsVertexITSTPC" );
427- registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kGoodITSLayers , " kIsGoodITSLayersAll" );
433+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kTVXinTRD , " kTVXinTRD" );
434+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoSameBunchPileup , " kNoSameBunchPileup" );
435+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kIsGoodZvtxFT0vsPV , " kIsGoodZvtxFT0vsPV" );
436+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoCollInTimeRangeStandard , " kNoCollInTimeRangeStandard" );
437+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoCollInRofStandard , " kNoCollInRofStandard" );
438+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoHighMultCollInPrevRof , " kNoHighMultCollInPrevRof" );
439+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoTimeFrameBorder , " kNoTimeFrameBorder" );
440+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kNoITSROFrameBorder , " kNoITSROFrameBorder" );
441+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kIsVertexITSTPC , " kIsVertexITSTPC" );
442+ registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kIsGoodITSLayersAll , " kIsGoodITSLayersAll" );
428443 registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kMultCuts , " after Mult cuts" );
429444 registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetXaxis ()->SetBinLabel (kTrackCent , " has track + within cent" );
445+ LOGF (info, " eventsel N bins = %d" , registry.get <TH1>(HIST (" eventQA/eventSel" ))->GetNbinsX ());
430446 if (!cfgRunByRun && cfgFillWeights) {
431447 registry.add <TH3>(" phi_eta_vtxz_ref" , " " , {HistType::kTH3D , {phiAxis, etaAxis, vtxAxis}});
432448 }
@@ -642,63 +658,101 @@ struct FlowGfwLightIons {
642658 template <typename TCollision>
643659 bool eventSelected (TCollision collision, const int & multTrk, const float & centrality, const int & run)
644660 {
645- if (cfgTVXinTRD) {
661+ if (cfgEventCutFlags. cfgTVXinTRD ) {
646662 if (collision.alias_bit (kTVXinTRD )) {
647663 // TRD triggered
648664 // "CMTVX-B-NOPF-TRD,minbias_TVX"
649665 return 0 ;
650666 }
651- registry.fill (HIST (" eventQA/eventSel" ), kTVXTRD );
667+ registry.fill (HIST (" eventQA/eventSel" ), kTVXinTRD );
652668 if (cfgRunByRun)
653- th1sList[run][hEventSel]->Fill (kTVXTRD );
669+ th1sList[run][hEventSel]->Fill (kTVXinTRD );
654670 }
655- if (cfgNoSameBunchPileupCut) {
671+ if (cfgEventCutFlags. cfgNoSameBunchPileupCut ) {
656672 if (!collision.selection_bit (o2::aod::evsel::kNoSameBunchPileup )) {
657673 // rejects collisions which are associated with the same "found-by-T0" bunch crossing
658674 // https://indico.cern.ch/event/1396220/#1-event-selection-with-its-rof
659675 return 0 ;
660676 }
661- registry.fill (HIST (" eventQA/eventSel" ), kNoSamebunchPU );
677+ registry.fill (HIST (" eventQA/eventSel" ), kNoSameBunchPileup );
662678 if (cfgRunByRun)
663- th1sList[run][hEventSel]->Fill (kNoSamebunchPU );
679+ th1sList[run][hEventSel]->Fill (kNoSameBunchPileup );
664680 }
665- if (cfgIsGoodZvtxFT0vsPV) {
681+ if (cfgEventCutFlags. cfgIsGoodZvtxFT0vsPV ) {
666682 if (!collision.selection_bit (o2::aod::evsel::kIsGoodZvtxFT0vsPV )) {
667683 // removes collisions with large differences between z of PV by tracks and z of PV from FT0 A-C time difference
668684 // use this cut at low multiplicities with caution
669685 return 0 ;
670686 }
671- registry.fill (HIST (" eventQA/eventSel" ), kZVtxFT0PV );
687+ registry.fill (HIST (" eventQA/eventSel" ), kIsGoodZvtxFT0vsPV );
672688 if (cfgRunByRun)
673- th1sList[run][hEventSel]->Fill (kZVtxFT0PV );
689+ th1sList[run][hEventSel]->Fill (kIsGoodZvtxFT0vsPV );
674690 }
675- if (cfgNoCollInTimeRangeStandard) {
691+ if (cfgEventCutFlags. cfgNoCollInTimeRangeStandard ) {
676692 if (!collision.selection_bit (o2::aod::evsel::kNoCollInTimeRangeStandard )) {
677693 // Rejection of the collisions which have other events nearby
678694 return 0 ;
679695 }
680- registry.fill (HIST (" eventQA/eventSel" ), kNoCollTRStd );
696+ registry.fill (HIST (" eventQA/eventSel" ), kNoCollInTimeRangeStandard );
697+ if (cfgRunByRun)
698+ th1sList[run][hEventSel]->Fill (kNoCollInTimeRangeStandard );
699+ }
700+
701+ if (cfgEventCutFlags.cfgNoCollInRofStandard ) {
702+ if (!collision.selection_bit (o2::aod::evsel::kNoCollInRofStandard )) {
703+ // Rejection of the collisions which have other events nearby
704+ return 0 ;
705+ }
706+ registry.fill (HIST (" eventQA/eventSel" ), kNoCollInRofStandard );
707+ if (cfgRunByRun)
708+ th1sList[run][hEventSel]->Fill (kNoCollInRofStandard );
709+ }
710+
711+ if (cfgEventCutFlags.cfgNoHighMultCollInPrevRof ) {
712+ if (!collision.selection_bit (o2::aod::evsel::kNoHighMultCollInPrevRof )) {
713+ // Rejection of the collisions which have other events nearby
714+ return 0 ;
715+ }
716+ registry.fill (HIST (" eventQA/eventSel" ), kNoHighMultCollInPrevRof );
681717 if (cfgRunByRun)
682- th1sList[run][hEventSel]->Fill (kNoCollTRStd );
718+ th1sList[run][hEventSel]->Fill (kNoHighMultCollInPrevRof );
683719 }
684720
685- if (cfgIsVertexITSTPC) {
721+ if (cfgEventCutFlags. cfgIsVertexITSTPC ) {
686722 if (!collision.selection_bit (o2::aod::evsel::kIsVertexITSTPC )) {
687723 // selects collisions with at least one ITS-TPC track, and thus rejects vertices built from ITS-only tracks
688724 return 0 ;
689725 }
690- registry.fill (HIST (" eventQA/eventSel" ), kVtxITSTPC );
726+ registry.fill (HIST (" eventQA/eventSel" ), kIsVertexITSTPC );
691727 if (cfgRunByRun)
692- th1sList[run][hEventSel]->Fill (kVtxITSTPC );
728+ th1sList[run][hEventSel]->Fill (kIsVertexITSTPC );
693729 }
694730
695- if (cfgIsGoodITSLayersAll) {
731+ if (cfgEventCutFlags. cfgIsGoodITSLayersAll ) {
696732 if (!collision.selection_bit (o2::aod::evsel::kIsGoodITSLayersAll )) {
697733 return 0 ;
698734 }
699- registry.fill (HIST (" eventQA/eventSel" ), kGoodITSLayers );
735+ registry.fill (HIST (" eventQA/eventSel" ), kIsGoodITSLayersAll );
736+ if (cfgRunByRun)
737+ th1sList[run][hEventSel]->Fill (kIsGoodITSLayersAll );
738+ }
739+
740+ if (cfgEventCutFlags.cfgNoTimeFrameBorder ) {
741+ if (!collision.selection_bit (o2::aod::evsel::kNoTimeFrameBorder )) {
742+ return 0 ;
743+ }
744+ registry.fill (HIST (" eventQA/eventSel" ), kNoTimeFrameBorder );
700745 if (cfgRunByRun)
701- th1sList[run][hEventSel]->Fill (kGoodITSLayers );
746+ th1sList[run][hEventSel]->Fill (kNoTimeFrameBorder );
747+ }
748+
749+ if (cfgEventCutFlags.cfgNoITSROFrameBorder ) {
750+ if (!collision.selection_bit (o2::aod::evsel::kNoITSROFrameBorder )) {
751+ return 0 ;
752+ }
753+ registry.fill (HIST (" eventQA/eventSel" ), kNoITSROFrameBorder );
754+ if (cfgRunByRun)
755+ th1sList[run][hEventSel]->Fill (kNoITSROFrameBorder );
702756 }
703757
704758 float vtxz = -999 ;
@@ -783,18 +837,23 @@ struct FlowGfwLightIons {
783837 profiles[pfCorr22] = registry.add <TProfile>(Form (" %d/corr22" , run), " " , {HistType::kTProfile , {(cfgUseNch) ? nchAxis : centAxis}});
784838 tpfsList.insert (std::make_pair (run, profiles));
785839 }
786- histos[hEventSel] = registry.add <TH1>(Form (" %d/eventSel" , run), " Number of Events;; Counts" , {HistType::kTH1D , {{11 , 0.5 , 11 .5 }}});
840+ histos[hEventSel] = registry.add <TH1>(Form (" %d/eventSel" , run), " Number of Events;; Counts" , {HistType::kTH1D , {{15 , 0.5 , 15 .5 }}});
787841 histos[hEventSel]->GetXaxis ()->SetBinLabel (kFilteredEvent , " Filtered event" );
788842 histos[hEventSel]->GetXaxis ()->SetBinLabel (kSel8 , " sel8" );
789843 histos[hEventSel]->GetXaxis ()->SetBinLabel (kOccupancy , " occupancy" );
790- histos[hEventSel]->GetXaxis ()->SetBinLabel (kTVXTRD , " kTVXinTRD" );
791- histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoSamebunchPU , " kNoSameBunchPileup" );
792- histos[hEventSel]->GetXaxis ()->SetBinLabel (kZVtxFT0PV , " kIsGoodZvtxFT0vsPV" );
793- histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoCollTRStd , " kNoCollInTimeRangeStandard" );
794- histos[hEventSel]->GetXaxis ()->SetBinLabel (kVtxITSTPC , " kIsVertexITSTPC" );
795- histos[hEventSel]->GetXaxis ()->SetBinLabel (kGoodITSLayers , " kIsGoodITSLayersAll" );
844+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kTVXinTRD , " kTVXinTRD" );
845+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoSameBunchPileup , " kNoSameBunchPileup" );
846+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kIsGoodZvtxFT0vsPV , " kIsGoodZvtxFT0vsPV" );
847+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoCollInTimeRangeStandard , " kNoCollInTimeRangeStandard" );
848+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoCollInRofStandard , " kNoCollInRofStandard" );
849+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoHighMultCollInPrevRof , " kNoHighMultCollInPrevRof" );
850+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoTimeFrameBorder , " kNoTimeFrameBorder" );
851+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kNoITSROFrameBorder , " kNoITSROFrameBorder" );
852+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kIsVertexITSTPC , " kIsVertexITSTPC" );
853+ histos[hEventSel]->GetXaxis ()->SetBinLabel (kIsGoodITSLayersAll , " kIsGoodITSLayersAll" );
796854 histos[hEventSel]->GetXaxis ()->SetBinLabel (kMultCuts , " after Mult cuts" );
797855 histos[hEventSel]->GetXaxis ()->SetBinLabel (kTrackCent , " has track + within cent" );
856+
798857 th1sList.insert (std::make_pair (run, histos));
799858 std::vector<std::shared_ptr<TH3>> histos3d (kCount_TH3Names );
800859 histos3d[hNUAref] = registry.add <TH3>(Form (" %d/phi_eta_vtxz_ref" , run), " " , {HistType::kTH3D , {phiAxis, etaAxis, vtxAxis}});
@@ -1160,21 +1219,21 @@ struct FlowGfwLightIons {
11601219 {
11611220 switch (cfgCentEstimator) {
11621221 case kCentFT0C :
1163- return collision.centFT0C ();
1222+ return cfgCentralityFactor * collision.centFT0C ();
11641223 case kCentFT0CVariant1 :
1165- return collision.centFT0CVariant1 ();
1224+ return cfgCentralityFactor * collision.centFT0CVariant1 ();
11661225 case kCentFT0M :
1167- return collision.centFT0M ();
1226+ return cfgCentralityFactor * collision.centFT0M ();
11681227 case kCentFV0A :
1169- return collision.centFV0A ();
1228+ return cfgCentralityFactor * collision.centFV0A ();
11701229 case kCentNTPV :
1171- return collision.centNTPV ();
1230+ return cfgCentralityFactor * collision.centNTPV ();
11721231 case kCentNGlobal :
1173- return collision.centNGlobal ();
1232+ return cfgCentralityFactor * collision.centNGlobal ();
11741233 case kCentMFT :
1175- return collision.centMFT ();
1234+ return cfgCentralityFactor * collision.centMFT ();
11761235 default :
1177- return collision.centFT0C ();
1236+ return cfgCentralityFactor * collision.centFT0C ();
11781237 }
11791238 }
11801239
0 commit comments