Skip to content

Commit 727959f

Browse files
committed
add possibility to plot with event selections
1 parent 583c468 commit 727959f

1 file changed

Lines changed: 43 additions & 15 deletions

File tree

PWGCF/Flow/TableProducer/zdcQVectors.cxx

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)