@@ -85,12 +85,12 @@ struct eventQC {
8585
8686 struct : ConfigurableGroup {
8787 std::string prefix = " eventcut_group" ;
88- Configurable<float > cfgZvtxMin{" cfgZvtxMin" , -10 . f , " min. Zvtx" };
89- Configurable<float > cfgZvtxMax{" cfgZvtxMax" , 10 . f , " max. Zvtx" };
90- Configurable<bool > cfgRequireSel8{" cfgRequireSel8" , true , " require sel8 in event cut" };
91- Configurable<bool > cfgRequireFT0AND{" cfgRequireFT0AND" , true , " require FT0AND in event cut" };
92- Configurable<bool > cfgRequireNoTFB{" cfgRequireNoTFB" , true , " require No time frame border in event cut" };
93- Configurable<bool > cfgRequireNoITSROFB{" cfgRequireNoITSROFB" , true , " require no ITS readout frame border in event cut" };
88+ Configurable<float > cfgZvtxMin{" cfgZvtxMin" , -1e+10 , " min. Zvtx" };
89+ Configurable<float > cfgZvtxMax{" cfgZvtxMax" , 1e+10 , " max. Zvtx" };
90+ Configurable<bool > cfgRequireSel8{" cfgRequireSel8" , false , " require sel8 in event cut" };
91+ Configurable<bool > cfgRequireFT0AND{" cfgRequireFT0AND" , false , " require FT0AND in event cut" };
92+ Configurable<bool > cfgRequireNoTFB{" cfgRequireNoTFB" , false , " require No time frame border in event cut" };
93+ Configurable<bool > cfgRequireNoITSROFB{" cfgRequireNoITSROFB" , false , " require no ITS readout frame border in event cut" };
9494 Configurable<bool > cfgRequireVertexITSTPC{" cfgRequireVertexITSTPC" , false , " require Vertex ITSTPC in event cut" }; // ITS-TPC matched track contributes PV.
9595 Configurable<bool > cfgRequireVertexTOFmatched{" cfgRequireVertexTOFmatched" , false , " require Vertex TOFmatched in event cut" }; // ITS-TPC-TOF matched track contributes PV.
9696 Configurable<bool > cfgRequireNoSameBunchPileup{" cfgRequireNoSameBunchPileup" , false , " require no same bunch pileup in event cut" };
@@ -201,13 +201,14 @@ struct eventQC {
201201
202202 if (doprocessEventQC_SWT) {
203203 fRegistry .add (" BC/hNcoll" , " Number of collisions per triggered BC;N_{collision} per triggered BC" , kTH1F , {{11 , -0.5 , +10.5 }}, false );
204- fRegistry .add (" BC/hDeltaT" , " diff. in collision time per BC;#DeltaT_{coll} (ns)" , kTH1F , {{500 , -25 , +25 }}, false );
205- fRegistry .add (" BC/hDeltaZ" , " diff. in collision Z_{vtx} per BC;#DeltaZ_{vtx} (cm)" , kTH1F , {{1000 , -5 , +5 }}, false );
206- fRegistry .add (" BC/hCorrNcontrib" , " hMultNTracksPV;" , kTH2F , {{axis_mult_ncontrib}, {axis_mult_ncontrib}}, false );
207- fRegistry .add (" BC/Collision/hMultNTracksPV" , " hMultNTracksPV;N_{track} to PV in |#eta| < 0.8" , kTH1F , {{axis_mult_ncontrib08}}, false );
204+ fRegistry .add (" BC/Collision/hMultNTracksPV" , " hMultNTracksPV;N_{track} to PV" , kTH1F , {{axis_mult_ncontrib}}, false );
208205 fRegistry .add (" BC/Collision/hMultFT0AFT0C" , " hMultFT0AFT0C;mult. FT0A;mult. FT0C" , kTH2F , {{axis_mult_ft0a}, {axis_mult_ft0c}}, false );
209206 fRegistry .add (" BC/Collision/hMultFT0AFV0A" , " hMultFT0AFV0A;mult. FT0A;mult. FV0A" , kTH2F , {{axis_mult_ft0a}, {axis_mult_fv0a}}, false );
210207 fRegistry .add (" BC/Collision/hMultFT0CFV0A" , " hMultFT0CFV0A;mult. FT0C;mult. FV0A" , kTH2F , {{axis_mult_ft0c}, {axis_mult_fv0a}}, false );
208+
209+ fRegistry .add (" perBC/hDeltaTZ" , " #DeltaZ_{vtx} vs. #DeltaT of collisions per BC;#DeltaZ_{vtx} (cm);#DeltaT (ns)" , kTH2F , {{100 , -5 , +5 }, {50 , -25 , +25 }}, false );
210+ fRegistry .add (" perBC/hCorrNcontrib" , " hMultNTracksPV;" , kTH2F , {{axis_mult_ncontrib}, {axis_mult_ncontrib}}, false );
211+ // fRegistry.addClone("perBC/", "beyondBC/");
211212 }
212213
213214 // event info
@@ -238,7 +239,8 @@ struct eventQC {
238239
239240 if (cfgFillEvent) {
240241 fRegistry .add (" Event/before/hZvtx" , " vertex z; Z_{vtx} (cm)" , kTH1F , {{100 , -50 , +50 }}, false );
241- fRegistry .add (" Event/before/hMultNTracksPV" , " hMultNTracksPV; N_{track} to PV in |#eta| < 0.8" , kTH1F , {{axis_mult_ncontrib08}}, false );
242+ fRegistry .add (" Event/before/hMultNTracksPV" , " hMultNTracksPV; N_{track} to PV" , kTH1F , {{axis_mult_ncontrib}}, false );
243+ fRegistry .add (" Event/before/hMultNTracksPV08" , " hMultNTracksPV08; N_{track} to PV in |#eta| < 0.8" , kTH1F , {{axis_mult_ncontrib08}}, false );
242244 fRegistry .add (" Event/before/hMultFT0AFT0C" , " hMultFT0AFT0C;mult. FT0A;mult. FT0C" , kTH2F , {{axis_mult_ft0a}, {axis_mult_ft0c}}, false );
243245 fRegistry .add (" Event/before/hMultFT0AFV0A" , " hMultFT0AFV0A;mult. FT0A;mult. FV0A" , kTH2F , {{axis_mult_ft0a}, {axis_mult_fv0a}}, false );
244246 fRegistry .add (" Event/before/hMultFT0CFV0A" , " hMultFT0CFV0A;mult. FT0C;mult. FV0A" , kTH2F , {{axis_mult_ft0c}, {axis_mult_fv0a}}, false );
@@ -479,7 +481,8 @@ struct eventQC {
479481 }
480482 fRegistry .fill (HIST (" Event/" ) + HIST (event_types[ev_id]) + HIST (" hZvtx" ), collision.posZ ());
481483
482- fRegistry .fill (HIST (" Event/" ) + HIST (event_types[ev_id]) + HIST (" hMultNTracksPV" ), collision.multNTracksPV ());
484+ fRegistry .fill (HIST (" Event/" ) + HIST (event_types[ev_id]) + HIST (" hMultNTracksPV" ), collision.numContrib ());
485+ fRegistry .fill (HIST (" Event/" ) + HIST (event_types[ev_id]) + HIST (" hMultNTracksPV08" ), collision.multNTracksPV ());
483486 fRegistry .fill (HIST (" Event/" ) + HIST (event_types[ev_id]) + HIST (" hMultFT0AFT0C" ), collision.multFT0A (), collision.multFT0C ());
484487 fRegistry .fill (HIST (" Event/" ) + HIST (event_types[ev_id]) + HIST (" hMultFT0AFV0A" ), collision.multFT0A (), collision.multFV0A ());
485488 fRegistry .fill (HIST (" Event/" ) + HIST (event_types[ev_id]) + HIST (" hMultFT0CFV0A" ), collision.multFT0C (), collision.multFV0A ());
@@ -740,7 +743,7 @@ struct eventQC {
740743 }
741744
742745 template <typename TCollision>
743- bool isSelectedEvent (TCollision const & collision)
746+ bool isSelectedCollision (TCollision const & collision)
744747 {
745748 if (eventcuts.cfgRequireSel8 && !collision.sel8 ()) {
746749 return false ;
@@ -838,38 +841,66 @@ struct eventQC {
838841
839842 SliceCache cache;
840843 Preslice<aod::Tracks> perCol = o2::aod::track::collisionId;
841- Preslice<aod::Collisions> perBC = o2::aod::collision::bcId;
844+ // Preslice<aod::Collisions> perBC = o2::aod::collision::bcId;
845+ PresliceUnsorted<MyCollisions> perFoundBC = aod::evsel::foundBCId;
842846
843847 template <bool isTriggerAnalysis, typename TBCs, typename TCollisions, typename TTracks>
844848 void runQC (TBCs const & bcs, TCollisions const & collisions, TTracks const & tracks)
845849 {
846850 if constexpr (isTriggerAnalysis) {
851+ // std::vector<int> selectedCollisionIds;
852+ // selectedCollisionIds.reserve(collisions.size());
853+
847854 for (const auto & bc : bcs) {
848855 initCCDB (bc);
849856 if (!zorro.isSelected (bc.globalBC ())) { // triggered BC
850857 continue ;
851858 }
852859
853- // if (!bc.selection_bit(o2::aod::evsel::kIsTriggerTVX)) {
854- // continue;
855- // }
856-
857- const auto & collisions_per_bc = collisions.sliceBy (perBC, bc.globalIndex ());
860+ // const auto& collisions_per_bc = collisions.sliceBy(perBC, bc.globalIndex());
861+ const auto & collisions_per_bc = collisions.sliceBy (perFoundBC, bc.globalIndex ());
858862 fRegistry .fill (HIST (" BC/hNcoll" ), collisions_per_bc.size ());
859863 for (const auto & collision : collisions_per_bc) {
860- fRegistry .fill (HIST (" BC/Collision/hMultNTracksPV" ), collision.multNTracksPV ());
864+ if (!isSelectedCollision (collision)) {
865+ continue ;
866+ }
867+
868+ fRegistry .fill (HIST (" BC/Collision/hMultNTracksPV" ), collision.numContrib ());
861869 fRegistry .fill (HIST (" BC/Collision/hMultFT0AFT0C" ), collision.multFT0A (), collision.multFT0C ());
862870 fRegistry .fill (HIST (" BC/Collision/hMultFT0AFV0A" ), collision.multFT0A (), collision.multFV0A ());
863871 fRegistry .fill (HIST (" BC/Collision/hMultFT0CFV0A" ), collision.multFT0C (), collision.multFV0A ());
872+ // selectedCollisionIds.emplace_back(collision.globalIndex());
864873 }
865874
866875 for (const auto & [col1, col2] : combinations (CombinationsStrictlyUpperIndexPolicy (collisions_per_bc, collisions_per_bc))) {
867- fRegistry .fill (HIST (" BC/hDeltaZ" ), col1.posZ () - col2.posZ ());
868- fRegistry .fill (HIST (" BC/hDeltaT" ), col1.collisionTime () - col2.collisionTime ());
869- fRegistry .fill (HIST (" BC/hCorrNcontrib" ), col1.numContrib (), col2.numContrib ());
876+ if (!isSelectedCollision (col1) || !isSelectedCollision (col2)) {
877+ continue ;
878+ }
879+ fRegistry .fill (HIST (" perBC/hDeltaTZ" ), col1.posZ () - col2.posZ (), col1.collisionTime () - col2.collisionTime ());
880+ fRegistry .fill (HIST (" perBC/hCorrNcontrib" ), col1.numContrib (), col2.numContrib ());
870881 } // end of pairing
871882 } // end of bc loop
872- }
883+
884+ // for (const auto& collisionId1 : selectedCollisionIds) {
885+ // const auto& col1 = collisions.rawIteratorAt(collisionId1);
886+ // for (const auto& col2 : collisions) {
887+ // if (!isSelectedCollision(col2)) {
888+ // continue;
889+ // }
890+
891+ // const auto& bc1 = col1.template bc_as<TBCs>(); // don't use foundBC for CEFP.
892+ // const auto& bc2 = col2.template bc_as<TBCs>(); // don't use foundBC for CEFP.
893+ // if (bc1.globalBC() == bc2.globalBC()) {
894+ // continue;
895+ // }
896+ // fRegistry.fill(HIST("beyondBC/hDeltaTZ"), col1.posZ() - col2.posZ(), col1.collisionTime() - col2.collisionTime());
897+ // fRegistry.fill(HIST("beyondBC/hCorrNcontrib"), col1.numContrib(), col2.numContrib());
898+ // } // end of all collision loop
899+ // } // end of selected collision loop
900+
901+ // selectedCollisionIds.clear();
902+ // selectedCollisionIds.shrink_to_fit();
903+ } // end of trigger QC
873904
874905 for (const auto & collision : collisions) {
875906 if constexpr (isTriggerAnalysis) {
@@ -892,7 +923,7 @@ struct eventQC {
892923 if (cfgFillEvent) {
893924 fillEventInfo<0 >(collision);
894925 }
895- if (!isSelectedEvent (collision)) {
926+ if (!isSelectedCollision (collision)) {
896927 continue ;
897928 }
898929 if (cfgFillEvent) {
0 commit comments