@@ -156,15 +156,16 @@ struct ZdcQVectors {
156156 O2_DEFINE_CONFIGURABLE (cfgNoGain, bool , false , " Do not apply gain correction to ZDC energy calibration" );
157157
158158 O2_DEFINE_CONFIGURABLE (cfgCCDBdir_Shift, std::string, " Users/c/ckoster/ZDC/LHC23_PbPb_pass5/Shift" , " CCDB directory for Shift ZDC" );
159+ O2_DEFINE_CONFIGURABLE (cfgSelVec, std::vector<bool >, {1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 1 , 1 , 1 , 0 , 1 , 1 }, " Put 1 for every event selection from SelectionCriteria that is used in flowSP" );
159160
160161 // define my.....
161162 // Filter collisionFilter = nabs(aod::collision::posZ) <;
162163 using UsedCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::CentNGlobals>;
163164 using BCsRun3 = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
164165
165166 enum SelectionCriteria {
166- evSel_FilteredEvent ,
167- evSel_BCHasZDC ,
167+ FilteredEvent ,
168+ BCHasZDC ,
168169 evSel_isSelectedZDC,
169170 evSel_Zvtx,
170171 evSel_sel8,
@@ -443,7 +444,7 @@ struct ZdcQVectors {
443444 }
444445
445446 template <typename TCollision, typename TBunchCrossing>
446- uint16_t eventSelected (TCollision collision, TBunchCrossing bunchCrossing)
447+ uint16_t eventSelected (TCollision collision, TBunchCrossing bunchCrossing, bool & isEventSelected )
447448 {
448449 uint16_t selectionBits = 0 ;
449450 bool selected;
@@ -457,67 +458,89 @@ struct ZdcQVectors {
457458 if (selected) {
458459 selectionBits |= static_cast <uint16_t >(0x1u << evSel_Zvtx);
459460 fillCutAnalysis (collision, bunchCrossing, evSel_Zvtx);
461+ } else if (cfgSelVec[evSel_Zvtx]){
462+ isEventSelected = false ;
460463 }
461464
462465 selected = collision.sel8 ();
463466 if (selected) {
464467 selectionBits |= static_cast <uint16_t >(0x1u << evSel_sel8);
465468 fillCutAnalysis (collision, bunchCrossing, evSel_sel8);
469+ } else if (cfgSelVec[evSel_sel8]){
470+ isEventSelected = false ;
466471 }
467472
468473 auto occupancy = collision.trackOccupancyInTimeRange ();
469474 selected = occupancy <= EvSel.cfgMaxOccupancy ;
470475 if (selected) {
471476 selectionBits |= static_cast <uint16_t >(0x1u << evSel_occupancy);
472477 fillCutAnalysis (collision, bunchCrossing, evSel_occupancy);
478+ } else if (cfgSelVec[evSel_occupancy]){
479+ isEventSelected = false ;
473480 }
474481
475482 selected = collision.selection_bit (o2::aod::evsel::kNoSameBunchPileup );
476483 if (selected) {
477484 selectionBits |= static_cast <uint16_t >(0x1u << evSel_kNoSameBunchPileup);
478485 fillCutAnalysis (collision, bunchCrossing, evSel_kNoSameBunchPileup);
486+ } else if (cfgSelVec[evSel_kNoSameBunchPileup]){
487+ isEventSelected = false ;
479488 }
480489
481490 selected = collision.selection_bit (o2::aod::evsel::kIsGoodZvtxFT0vsPV );
482491 if (selected) {
483492 selectionBits |= static_cast <uint16_t >(0x1u << evSel_kIsGoodZvtxFT0vsPV);
484493 fillCutAnalysis (collision, bunchCrossing, evSel_kIsGoodZvtxFT0vsPV);
494+ } else if (cfgSelVec[evSel_kIsGoodZvtxFT0vsPV]){
495+ isEventSelected = false ;
485496 }
486497
487498 selected = collision.selection_bit (o2::aod::evsel::kNoCollInTimeRangeStandard );
488499 if (selected) {
489500 selectionBits |= static_cast <uint16_t >(0x1u << evSel_kNoCollInTimeRangeStandard);
490501 fillCutAnalysis (collision, bunchCrossing, evSel_kNoCollInTimeRangeStandard);
502+ } else if (cfgSelVec[evSel_kNoCollInTimeRangeStandard]){
503+ isEventSelected = false ;
491504 }
492505
493506 selected = collision.selection_bit (o2::aod::evsel::kNoCollInTimeRangeNarrow );
494507 if (selected) {
495508 selectionBits |= static_cast <uint16_t >(0x1u << evSel_kNoCollInTimeRangeNarrow);
496509 fillCutAnalysis (collision, bunchCrossing, evSel_kNoCollInTimeRangeNarrow);
510+ } else if (cfgSelVec[evSel_kNoCollInTimeRangeNarrow]){
511+ isEventSelected = false ;
497512 }
498513
499514 selected = collision.selection_bit (o2::aod::evsel::kIsVertexITSTPC );
500515 if (selected) {
501516 selectionBits |= static_cast <uint16_t >(0x1u << evSel_kIsVertexITSTPC);
502517 fillCutAnalysis (collision, bunchCrossing, evSel_kIsVertexITSTPC);
518+ } else if (cfgSelVec[evSel_kIsVertexITSTPC]){
519+ isEventSelected = false ;
503520 }
504521
505522 selected = collision.selection_bit (o2::aod::evsel::kIsGoodITSLayersAll );
506523 if (selected) {
507524 selectionBits |= static_cast <uint16_t >(0x1u << evSel_kIsGoodITSLayersAll);
508525 fillCutAnalysis (collision, bunchCrossing, evSel_kIsGoodITSLayersAll);
526+ } else if (cfgSelVec[evSel_kIsGoodITSLayersAll]){
527+ isEventSelected = false ;
509528 }
510529
511530 selected = collision.selection_bit (o2::aod::evsel::kIsGoodITSLayer0123 );
512531 if (selected) {
513532 selectionBits |= static_cast <uint16_t >(0x1u << evSel_kIsGoodITSLayer0123);
514533 fillCutAnalysis (collision, bunchCrossing, evSel_kIsGoodITSLayer0123);
534+ } else if (cfgSelVec[evSel_kIsGoodITSLayer0123]){
535+ isEventSelected = false ;
515536 }
516537
517538 selected = rctChecker (collision);
518539 if (selected) {
519540 selectionBits |= static_cast <uint16_t >(0x1u << evSel_RCTFlagsZDC);
520541 fillCutAnalysis (collision, bunchCrossing, evSel_RCTFlagsZDC);
542+ } else if (cfgSelVec[evSel_RCTFlagsZDC]){
543+ isEventSelected = false ;
521544 }
522545
523546 // Fill for centrality estimators!
@@ -807,7 +830,11 @@ struct ZdcQVectors {
807830 }
808831 registry.fill (HIST (" hEventCount" ), evSel_isSelectedZDC);
809832
810- uint16_t eventSelectionFlags = eventSelected (collision, foundBC.zdc ());
833+ // Use this bool to check for given set of event selections of Q-vectors would be selected
834+ // Enable plotting only if event would be selected
835+ bool isEventSelected = true ;
836+
837+ uint16_t eventSelectionFlags = eventSelected (collision, foundBC.zdc (), isEventSelected);
811838
812839 // ALWAYS use these event selections
813840 if (cent < EvSel.cfgCentMin || cent > EvSel.cfgCentMax || !collision.sel8 () || std::abs (collision.posZ ()) > cfgVtxZ) {
@@ -842,10 +869,11 @@ struct ZdcQVectors {
842869 // load the calibration histos for iteration 0 step 0 (Energy Calibration)
843870 if (!cfgNoGain)
844871 loadCalibrations<kEnergyCal >(cfgEnergyCal.value );
872+
845873 // load the calibrations for the mean v
846874 loadCalibrations<kMeanv >(cfgMeanv.value );
847875
848- if (!cfgFillNothing) {
876+ if (!cfgFillNothing && isEventSelected ) {
849877 registry.get <TProfile>(HIST (" vmean/hvertex_vx" ))->Fill (Form (" %d" , runnumber), v[0 ]);
850878 registry.get <TProfile>(HIST (" vmean/hvertex_vy" ))->Fill (Form (" %d" , runnumber), v[1 ]);
851879 registry.get <TProfile>(HIST (" vmean/hvertex_vz" ))->Fill (Form (" %d" , runnumber), v[2 ]);
@@ -891,7 +919,7 @@ struct ZdcQVectors {
891919 calibtower++;
892920 }
893921
894- if (cfgFillHistRegistry && !cfgFillNothing) {
922+ if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected ) {
895923 for (int i = 0 ; i < nTowersPerSide; i++) {
896924 float bincenter = i + .5 ;
897925 registry.fill (HIST (" QA/ZNA_Energy" ), bincenter, eZN[i]);
@@ -950,7 +978,7 @@ struct ZdcQVectors {
950978 }
951979 }
952980
953- if (cfgFillHistRegistry && !cfgFillNothing) {
981+ if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected ) {
954982 registry.get <TProfile>(HIST (" QA/before/ZNA_Qx" ))->Fill (Form (" %d" , runnumber), q[0 ]);
955983 registry.get <TProfile>(HIST (" QA/before/ZNA_Qy" ))->Fill (Form (" %d" , runnumber), q[1 ]);
956984 registry.get <TProfile>(HIST (" QA/before/ZNC_Qx" ))->Fill (Form (" %d" , runnumber), q[2 ]);
@@ -974,15 +1002,15 @@ struct ZdcQVectors {
9741002 std::vector<double > qRec (q);
9751003
9761004 if (cal.atIteration == 0 ) {
977- if (isSelected && cfgFillHistRegistry)
1005+ if (isSelected && cfgFillHistRegistry && isEventSelected )
9781006 fillCommonRegistry<kBefore >(q[0 ], q[1 ], q[2 ], q[3 ], v, centrality, rsTimestamp);
9791007
9801008 spTableZDC (runnumber, cents, v, foundBC.timestamp (), q[0 ], q[1 ], q[2 ], q[3 ], isSelected, eventSelectionFlags);
9811009 counter++;
9821010 lastRunNumber = runnumber;
9831011 return ;
9841012 } else {
985- if (cfgFillHistRegistry)
1013+ if (cfgFillHistRegistry && isEventSelected )
9861014 fillCommonRegistry<kBefore >(q[0 ], q[1 ], q[2 ], q[3 ], v, centrality, rsTimestamp);
9871015
9881016 // vector of 4
@@ -1002,7 +1030,7 @@ struct ZdcQVectors {
10021030 corrQxC.push_back (getCorrection<THnSparse, kRec >(names[0 ][2 ].Data (), it, 1 ));
10031031 corrQyC.push_back (getCorrection<THnSparse, kRec >(names[0 ][3 ].Data (), it, 1 ));
10041032
1005- if (cfgFillHistRegistry && !cfgFillNothing) {
1033+ if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected ) {
10061034 registry.get <TH2 >(HIST (" recentering/QXA_vs_iteration" ))->Fill (pb + 1 , q[0 ] - std::accumulate (corrQxA.begin (), corrQxA.end (), 0.0 ));
10071035 registry.get <TH2 >(HIST (" recentering/QYA_vs_iteration" ))->Fill (pb + 1 , q[1 ] - std::accumulate (corrQyA.begin (), corrQyA.end (), 0.0 ));
10081036 registry.get <TH2 >(HIST (" recentering/QXC_vs_iteration" ))->Fill (pb + 1 , q[2 ] - std::accumulate (corrQxC.begin (), corrQxC.end (), 0.0 ));
@@ -1016,7 +1044,7 @@ struct ZdcQVectors {
10161044 corrQxC.push_back (getCorrection<TProfile, kRec >(names[step - 1 ][2 ].Data (), it, step));
10171045 corrQyC.push_back (getCorrection<TProfile, kRec >(names[step - 1 ][3 ].Data (), it, step));
10181046
1019- if (cfgFillHistRegistry && !cfgFillNothing) {
1047+ if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected ) {
10201048 registry.get <TH2 >(HIST (" recentering/QXA_vs_iteration" ))->Fill (pb + 1 , q[0 ] - std::accumulate (corrQxA.begin (), corrQxA.end (), 0.0 ));
10211049 registry.get <TH2 >(HIST (" recentering/QYA_vs_iteration" ))->Fill (pb + 1 , q[1 ] - std::accumulate (corrQyA.begin (), corrQyA.end (), 0.0 ));
10221050 registry.get <TH2 >(HIST (" recentering/QXC_vs_iteration" ))->Fill (pb + 1 , q[2 ] - std::accumulate (corrQxC.begin (), corrQxC.end (), 0.0 ));
@@ -1032,7 +1060,7 @@ struct ZdcQVectors {
10321060 corrQxC.push_back (getCorrection<TProfile, kTimestamp >(namesTS[2 ].Data (), it, 6 ));
10331061 corrQyC.push_back (getCorrection<TProfile, kTimestamp >(namesTS[3 ].Data (), it, 6 ));
10341062
1035- if (cfgFillHistRegistry && !cfgFillNothing) {
1063+ if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected ) {
10361064 registry.get <TH2 >(HIST (" recentering/QXA_vs_iteration" ))->Fill (pb + 1 , q[0 ] - std::accumulate (corrQxA.begin (), corrQxA.end (), 0.0 ));
10371065 registry.get <TH2 >(HIST (" recentering/QYA_vs_iteration" ))->Fill (pb + 1 , q[1 ] - std::accumulate (corrQyA.begin (), corrQyA.end (), 0.0 ));
10381066 registry.get <TH2 >(HIST (" recentering/QXC_vs_iteration" ))->Fill (pb + 1 , q[2 ] - std::accumulate (corrQxC.begin (), corrQxC.end (), 0.0 ));
@@ -1079,7 +1107,7 @@ struct ZdcQVectors {
10791107 }
10801108
10811109 for (int ishift = 1 ; ishift <= nshift; ishift++) {
1082- if (!cfgFillNothing) {
1110+ if (!cfgFillNothing && isEventSelected ) {
10831111 registry.fill (HIST (" shift/ShiftZDCC" ), centrality, 0.5 , ishift - 0.5 , std::sin (ishift * 1.0 * psiZDCC));
10841112 registry.fill (HIST (" shift/ShiftZDCC" ), centrality, 1.5 , ishift - 0.5 , std::cos (ishift * 1.0 * psiZDCC));
10851113 registry.fill (HIST (" shift/ShiftZDCA" ), centrality, 0.5 , ishift - 0.5 , std::sin (ishift * 1.0 * psiZDCA));
@@ -1120,7 +1148,7 @@ struct ZdcQVectors {
11201148 psiZDCCshift = std::atan2 (std::sin (psiZDCCshift), std::cos (psiZDCCshift));
11211149 psiZDCAshift = std::atan2 (std::sin (psiZDCAshift), std::cos (psiZDCAshift));
11221150
1123- if (cfgFillHistRegistry && !cfgFillNothing) {
1151+ if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected ) {
11241152 registry.fill (HIST (" QA/shift/psiZDCA" ), psiZDCA, centrality);
11251153 registry.fill (HIST (" QA/shift/psiZDCC" ), psiZDCC, centrality);
11261154 registry.fill (HIST (" QA/shift/psiZDCAC" ), psiZDCA, psiZDCC);
@@ -1137,7 +1165,7 @@ struct ZdcQVectors {
11371165 double qXcShift = std::hypot (qRec[2 ], qRec[3 ]) * std::cos (psiZDCCshift);
11381166 double qYcShift = std::hypot (qRec[2 ], qRec[3 ]) * std::sin (psiZDCCshift);
11391167
1140- if (isSelected && cfgFillHistRegistry && !cfgFillNothing) {
1168+ if (isSelected && cfgFillHistRegistry && !cfgFillNothing && isEventSelected ) {
11411169 fillCommonRegistry<kAfter >(qXaShift, qYaShift, qXcShift, qYcShift, v, centrality, rsTimestamp);
11421170 registry.fill (HIST (" QA/centrality_after" ), centrality);
11431171 registry.get <TProfile>(HIST (" QA/after/ZNA_Qx" ))->Fill (Form (" %d" , runnumber), qXaShift);
0 commit comments