Skip to content

Commit c12cb30

Browse files
committed
Add changes to plot with evsels
1 parent 7c99a1b commit c12cb30

1 file changed

Lines changed: 112 additions & 13 deletions

File tree

PWGCF/Flow/TableProducer/zdcQVectors.cxx

Lines changed: 112 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,20 @@ struct ZdcQVectors {
150150
O2_DEFINE_CONFIGURABLE(cfgTrackSelsEta, float, 0.8, "eta cut");
151151

152152
O2_DEFINE_CONFIGURABLE(cfgCCDBdir_Shift, std::string, "Users/c/ckoster/ZDC/LHC23_PbPb_pass5/Shift", "CCDB directory for Shift ZDC");
153+
Configurable<std::vector<int>> cfgSelVec{"cfgSelVec", std::vector<int>{1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1}, "Put 1 for every event selection from SelectionCriteria that is used in flowSP"};
154+
Configurable<std::vector<double>> cfgEvSelsMultPv{"cfgEvSelsMultPv", std::vector<double>{2223.49, -75.1444, 0.963572, -0.00570399, 1.34877e-05, 3790.99, -137.064, 2.13044, -0.017122, 5.82834e-05}, "Multiplicity cuts (PV) first 5 parameters cutLOW last 5 cutHIGH (Default is +-2sigma pass5) "};
155+
Configurable<std::vector<double>> cfgEvSelsMult{"cfgEvSelsMult", std::vector<double>{1301.56, -41.4615, 0.478224, -0.00239449, 4.46966e-06, 2967.6, -102.927, 1.47488, -0.0106534, 3.28622e-05}, "Multiplicity cuts (Global) first 5 parameters cutLOW last 5 cutHIGH (Default is +-2sigma pass5) "};
156+
153157

154158
// define my.....
155159
// Filter collisionFilter = nabs(aod::collision::posZ) <;
156-
using UsedCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::CentNGlobals>;
160+
161+
using UsedCollisions = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::CentFT0Cs, aod::CentFT0CVariant1s, aod::CentFT0Ms, aod::CentFV0As, aod::CentNGlobals>;
157162
using BCsRun3 = soa::Join<aod::BCs, aod::Timestamps, aod::BcSels, aod::Run3MatchedToBCSparse>;
163+
Filter trackFilter = nabs(aod::track::eta) < cfgTrackSelsEta && aod::track::pt > cfgTrackSelsPtmin&& aod::track::pt < cfgTrackSelsPtmax && ((requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t)true)) && nabs(aod::track::dcaXY) < cfgTrackSelsDCAxy&& nabs(aod::track::dcaZ) < cfgTrackSelsDCAz;
164+
using UnfilteredTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA>;
165+
using UsedTracks = soa::Filtered<UnfilteredTracks>;
166+
158167

159168
enum SelectionCriteria {
160169
evSel_FilteredEvent,
@@ -172,6 +181,7 @@ struct ZdcQVectors {
172181
evSel_kIsGoodITSLayer0123,
173182
evSel_RCTFlagsZDC,
174183
evSel_CentCuts,
184+
evSel_MultCut,
175185
nEventSelections
176186
};
177187

@@ -185,6 +195,15 @@ struct ZdcQVectors {
185195
// Define output
186196
HistogramRegistry registry{"Registry"};
187197

198+
// Event selection cuts
199+
std::unique_ptr<TF1> fPhiCutLow = nullptr;
200+
std::unique_ptr<TF1> fPhiCutHigh = nullptr;
201+
std::unique_ptr<TF1> fMultPVCutLow = nullptr;
202+
std::unique_ptr<TF1> fMultPVCutHigh = nullptr;
203+
std::unique_ptr<TF1> fMultCutLow = nullptr;
204+
std::unique_ptr<TF1> fMultCutHigh = nullptr;
205+
std::unique_ptr<TF1> fMultMultPVCut = nullptr;
206+
188207
Service<ccdb::BasicCCDBManager> ccdb;
189208

190209
// keep track of calibration histos for each given step and iteration
@@ -247,6 +266,7 @@ struct ZdcQVectors {
247266
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_CentCuts + 1, "Cenrality range");
248267
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_kIsGoodITSLayersAll + 1, "kIsGoodITSLayersAll");
249268
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_kIsGoodITSLayer0123 + 1, "kIsGoodITSLayer0123");
269+
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_MultCut + 1, "Mult & MultPV");
250270
registry.get<TH1>(HIST("hEventCount"))->GetXaxis()->SetBinLabel(evSel_isSelectedZDC + 1, "isSelected");
251271

252272
if (!cfgFillNothing) {
@@ -364,6 +384,28 @@ struct ZdcQVectors {
364384
registry.addClone("recentering/before/", "recentering/after/");
365385
registry.addClone("QA/before/", "QA/after/");
366386
}
387+
388+
fMultPVCutLow = std::make_unique<TF1>("fMultPVCutLow", "[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x", 0, 100);
389+
fMultPVCutHigh = std::make_unique<TF1>("fMultPVCutHigh", "[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x", 0, 100);
390+
fMultCutLow = std::make_unique<TF1>("fMultCutLow", "[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x", 0, 100);
391+
fMultCutHigh = std::make_unique<TF1>("fMultCutHigh", "[0]+[1]*x+[2]*x*x+[3]*x*x*x+[4]*x*x*x*x", 0, 100);
392+
393+
std::vector<double> paramsMultPVCut = cfgEvSelsMultPv;
394+
std::vector<double> paramsMultCut = cfgEvSelsMult;
395+
396+
uint64_t nParams = 10;
397+
398+
if (paramsMultPVCut.size() < nParams) {
399+
LOGF(fatal, "cfg.cEvSelsMultPv not set properly.. size = %d (should be 10) --> Check your config files!", paramsMultPVCut.size());
400+
} else if (paramsMultCut.size() < nParams) {
401+
LOGF(fatal, "cfg.cEvSelsMult not set properly.. size = %d (should be 10) --> Check your config files!", paramsMultCut.size());
402+
} else {
403+
fMultPVCutLow->SetParameters(paramsMultPVCut[0], paramsMultPVCut[1], paramsMultPVCut[2], paramsMultPVCut[3], paramsMultPVCut[4]);
404+
fMultPVCutHigh->SetParameters(paramsMultPVCut[5], paramsMultPVCut[6], paramsMultPVCut[7], paramsMultPVCut[8], paramsMultPVCut[9]);
405+
fMultCutLow->SetParameters(paramsMultCut[0], paramsMultCut[1], paramsMultCut[2], paramsMultCut[3], paramsMultCut[4]);
406+
fMultCutHigh->SetParameters(paramsMultCut[5], paramsMultCut[6], paramsMultCut[7], paramsMultCut[8], paramsMultCut[9]);
407+
}
408+
367409
}
368410

369411
double rescaleTimestamp(uint64_t timestamp, int runnumber)
@@ -426,8 +468,8 @@ struct ZdcQVectors {
426468
}
427469
}
428470

429-
template <typename TCollision, typename TBunchCrossing>
430-
uint16_t eventSelected(TCollision collision, TBunchCrossing bunchCrossing)
471+
template <typename TCollision, typename TBunchCrossing>
472+
uint16_t eventSelected(TCollision collision, TBunchCrossing bunchCrossing, bool& isEventSelected, const int& multTrk)
431473
{
432474
uint16_t selectionBits = 0;
433475
bool selected;
@@ -441,72 +483,124 @@ struct ZdcQVectors {
441483
if (selected) {
442484
selectionBits |= static_cast<uint16_t>(0x1u << evSel_Zvtx);
443485
fillCutAnalysis(collision, bunchCrossing, evSel_Zvtx);
486+
} else if (cfgSelVec.value[evSel_Zvtx]) {
487+
isEventSelected = false;
444488
}
445489

446490
selected = collision.sel8();
447491
if (selected) {
448492
selectionBits |= static_cast<uint16_t>(0x1u << evSel_sel8);
449493
fillCutAnalysis(collision, bunchCrossing, evSel_sel8);
494+
} else if (cfgSelVec.value[evSel_sel8]) {
495+
isEventSelected = false;
450496
}
451497

452498
auto occupancy = collision.trackOccupancyInTimeRange();
453499
selected = occupancy <= EvSel.cfgMaxOccupancy;
454500
if (selected) {
455501
selectionBits |= static_cast<uint16_t>(0x1u << evSel_occupancy);
456502
fillCutAnalysis(collision, bunchCrossing, evSel_occupancy);
503+
} else if (cfgSelVec.value[evSel_occupancy]) {
504+
isEventSelected = false;
457505
}
458506

459507
selected = collision.selection_bit(o2::aod::evsel::kNoSameBunchPileup);
460508
if (selected) {
461509
selectionBits |= static_cast<uint16_t>(0x1u << evSel_kNoSameBunchPileup);
462510
fillCutAnalysis(collision, bunchCrossing, evSel_kNoSameBunchPileup);
511+
} else if (cfgSelVec.value[evSel_kNoSameBunchPileup]) {
512+
isEventSelected = false;
463513
}
464514

465515
selected = collision.selection_bit(o2::aod::evsel::kIsGoodZvtxFT0vsPV);
466516
if (selected) {
467517
selectionBits |= static_cast<uint16_t>(0x1u << evSel_kIsGoodZvtxFT0vsPV);
468518
fillCutAnalysis(collision, bunchCrossing, evSel_kIsGoodZvtxFT0vsPV);
519+
} else if (cfgSelVec.value[evSel_kIsGoodZvtxFT0vsPV]) {
520+
isEventSelected = false;
469521
}
470522

471523
selected = collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeStandard);
472524
if (selected) {
473525
selectionBits |= static_cast<uint16_t>(0x1u << evSel_kNoCollInTimeRangeStandard);
474526
fillCutAnalysis(collision, bunchCrossing, evSel_kNoCollInTimeRangeStandard);
527+
} else if (cfgSelVec.value[evSel_kNoCollInTimeRangeStandard]) {
528+
isEventSelected = false;
475529
}
476530

477531
selected = collision.selection_bit(o2::aod::evsel::kNoCollInTimeRangeNarrow);
478532
if (selected) {
479533
selectionBits |= static_cast<uint16_t>(0x1u << evSel_kNoCollInTimeRangeNarrow);
480534
fillCutAnalysis(collision, bunchCrossing, evSel_kNoCollInTimeRangeNarrow);
535+
} else if (cfgSelVec.value[evSel_kNoCollInTimeRangeNarrow]) {
536+
isEventSelected = false;
481537
}
482538

483539
selected = collision.selection_bit(o2::aod::evsel::kIsVertexITSTPC);
484540
if (selected) {
485541
selectionBits |= static_cast<uint16_t>(0x1u << evSel_kIsVertexITSTPC);
486542
fillCutAnalysis(collision, bunchCrossing, evSel_kIsVertexITSTPC);
543+
} else if (cfgSelVec.value[evSel_kIsVertexITSTPC]) {
544+
isEventSelected = false;
487545
}
488546

489547
selected = collision.selection_bit(o2::aod::evsel::kIsGoodITSLayersAll);
490548
if (selected) {
491549
selectionBits |= static_cast<uint16_t>(0x1u << evSel_kIsGoodITSLayersAll);
492550
fillCutAnalysis(collision, bunchCrossing, evSel_kIsGoodITSLayersAll);
551+
} else if (cfgSelVec.value[evSel_kIsGoodITSLayersAll]) {
552+
isEventSelected = false;
493553
}
494554

495555
selected = collision.selection_bit(o2::aod::evsel::kIsGoodITSLayer0123);
496556
if (selected) {
497557
selectionBits |= static_cast<uint16_t>(0x1u << evSel_kIsGoodITSLayer0123);
498558
fillCutAnalysis(collision, bunchCrossing, evSel_kIsGoodITSLayer0123);
559+
} else if (cfgSelVec.value[evSel_kIsGoodITSLayer0123]) {
560+
isEventSelected = false;
499561
}
500562

501563
selected = rctChecker(collision);
502564
if (selected) {
503565
selectionBits |= static_cast<uint16_t>(0x1u << evSel_RCTFlagsZDC);
504566
fillCutAnalysis(collision, bunchCrossing, evSel_RCTFlagsZDC);
567+
} else if (cfgSelVec.value[evSel_RCTFlagsZDC]) {
568+
isEventSelected = false;
569+
}
570+
571+
float vtxz = -999;
572+
if (collision.numContrib() > 1) {
573+
vtxz = collision.posZ();
574+
float zRes = std::sqrt(collision.covZZ());
575+
float minzRes = 0.25;
576+
int maxNumContrib = 20;
577+
if (zRes > minzRes && collision.numContrib() < maxNumContrib)
578+
vtxz = -999;
579+
}
580+
581+
auto multNTracksPV = collision.multNTracksPV();
582+
selected = true;
583+
584+
if (vtxz > cfgVtxZ || vtxz < -cfgVtxZ)
585+
selected = false;
586+
if (multNTracksPV < fMultPVCutLow->Eval(collision.centFT0C()))
587+
selected = false;
588+
if (multNTracksPV > fMultPVCutHigh->Eval(collision.centFT0C()))
589+
selected = false;
590+
if (multTrk < fMultCutLow->Eval(collision.centFT0C()))
591+
selected = false;
592+
if (multTrk > fMultCutHigh->Eval(collision.centFT0C()))
593+
selected = false;
594+
595+
if (selected) {
596+
selectionBits |= static_cast<uint16_t>(0x1u << evSel_MultCut);
597+
fillCutAnalysis(collision, bunchCrossing, evSel_MultCut);
598+
} else if (cfgSelVec.value[evSel_MultCut]) {
599+
isEventSelected = false;
505600
}
506601

507602
// Fill for centrality estimators!
508603
fillCutAnalysis(collision, bunchCrossing, nEventSelections);
509-
510604
return selectionBits;
511605
}
512606

@@ -694,7 +788,8 @@ struct ZdcQVectors {
694788

695789
void process(UsedCollisions::iterator const& collision,
696790
BCsRun3 const& /*bcs*/,
697-
aod::Zdcs const& /*zdcs*/)
791+
aod::Zdcs const& /*zdcs*/,
792+
UsedTracks const& tracks)
698793
{
699794
// for Q-vector calculation
700795
// A[0] & C[1]
@@ -797,10 +892,14 @@ struct ZdcQVectors {
797892
}
798893
registry.fill(HIST("hEventCount"), evSel_isSelectedZDC);
799894

800-
uint16_t eventSelectionFlags = eventSelected(collision, foundBC.zdc());
895+
// Use this bool to check for given set of event selections of Q-vectors would be selected
896+
// Enable plotting only if event would be selected
897+
bool isEventSelected = true;
898+
899+
uint16_t eventSelectionFlags = eventSelected(collision, foundBC.zdc(), isEventSelected, tracks.size());
801900

802901
// ALWAYS use these event selections
803-
if (cent < EvSel.cfgCentMin || cent > EvSel.cfgCentMax || !collision.sel8() || std::abs(collision.posZ()) > cfgVtxZ) {
902+
if (cent < EvSel.cfgCentMin || cent > EvSel.cfgCentMax || std::abs(collision.posZ()) > cfgVtxZ || !collision.sel8()) {
804903
// event not selected
805904
cal.isSelected = false;
806905
spTableZDC(runnumber, cents, v, foundBC.timestamp(), 0, 0, 0, 0, cal.isSelected, eventSelectionFlags);
@@ -835,7 +934,7 @@ struct ZdcQVectors {
835934
// load the calibrations for the mean v
836935
loadCalibrations<kMeanv>(cfgMeanv.value, timestamp);
837936

838-
if (!cfgFillNothing) {
937+
if (!cfgFillNothing && isEventSelected) {
839938
registry.get<TProfile>(HIST("vmean/hvertex_vx"))->Fill(Form("%d", runnumber), v[0]);
840939
registry.get<TProfile>(HIST("vmean/hvertex_vy"))->Fill(Form("%d", runnumber), v[1]);
841940
registry.get<TProfile>(HIST("vmean/hvertex_vz"))->Fill(Form("%d", runnumber), v[2]);
@@ -879,7 +978,7 @@ struct ZdcQVectors {
879978
calibtower++;
880979
}
881980

882-
if (cfgFillHistRegistry && !cfgFillNothing) {
981+
if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected) {
883982
for (int i = 0; i < nTowersPerSide; i++) {
884983
float bincenter = i + .5;
885984
registry.fill(HIST("QA/ZNA_Energy"), bincenter, eZN[i]);
@@ -940,7 +1039,7 @@ struct ZdcQVectors {
9401039
}
9411040
}
9421041

943-
if (cfgFillHistRegistry && !cfgFillNothing) {
1042+
if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected) {
9441043
registry.get<TProfile>(HIST("QA/before/ZNA_Qx"))->Fill(Form("%d", runnumber), q[0]);
9451044
registry.get<TProfile>(HIST("QA/before/ZNA_Qy"))->Fill(Form("%d", runnumber), q[1]);
9461045
registry.get<TProfile>(HIST("QA/before/ZNC_Qx"))->Fill(Form("%d", runnumber), q[2]);
@@ -991,7 +1090,7 @@ struct ZdcQVectors {
9911090
corrQxC.push_back(getCorrection<THnSparse, kRec>(names[0][2].Data(), it, 1));
9921091
corrQyC.push_back(getCorrection<THnSparse, kRec>(names[0][3].Data(), it, 1));
9931092

994-
if (cfgFillHistRegistry && !cfgFillNothing) {
1093+
if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected) {
9951094
registry.get<TH2>(HIST("recentering/QXA_vs_iteration"))->Fill(pb + 1, q[0] - std::accumulate(corrQxA.begin(), corrQxA.end(), 0.0));
9961095
registry.get<TH2>(HIST("recentering/QYA_vs_iteration"))->Fill(pb + 1, q[1] - std::accumulate(corrQyA.begin(), corrQyA.end(), 0.0));
9971096
registry.get<TH2>(HIST("recentering/QXC_vs_iteration"))->Fill(pb + 1, q[2] - std::accumulate(corrQxC.begin(), corrQxC.end(), 0.0));
@@ -1005,7 +1104,7 @@ struct ZdcQVectors {
10051104
corrQxC.push_back(getCorrection<TProfile, kRec>(names[step - 1][2].Data(), it, step));
10061105
corrQyC.push_back(getCorrection<TProfile, kRec>(names[step - 1][3].Data(), it, step));
10071106

1008-
if (cfgFillHistRegistry && !cfgFillNothing) {
1107+
if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected) {
10091108
registry.get<TH2>(HIST("recentering/QXA_vs_iteration"))->Fill(pb + 1, q[0] - std::accumulate(corrQxA.begin(), corrQxA.end(), 0.0));
10101109
registry.get<TH2>(HIST("recentering/QYA_vs_iteration"))->Fill(pb + 1, q[1] - std::accumulate(corrQyA.begin(), corrQyA.end(), 0.0));
10111110
registry.get<TH2>(HIST("recentering/QXC_vs_iteration"))->Fill(pb + 1, q[2] - std::accumulate(corrQxC.begin(), corrQxC.end(), 0.0));
@@ -1021,7 +1120,7 @@ struct ZdcQVectors {
10211120
corrQxC.push_back(getCorrection<TProfile, kTimestamp>(namesTS[2].Data(), it, 6));
10221121
corrQyC.push_back(getCorrection<TProfile, kTimestamp>(namesTS[3].Data(), it, 6));
10231122

1024-
if (cfgFillHistRegistry && !cfgFillNothing) {
1123+
if (cfgFillHistRegistry && !cfgFillNothing && isEventSelected) {
10251124
registry.get<TH2>(HIST("recentering/QXA_vs_iteration"))->Fill(pb + 1, q[0] - std::accumulate(corrQxA.begin(), corrQxA.end(), 0.0));
10261125
registry.get<TH2>(HIST("recentering/QYA_vs_iteration"))->Fill(pb + 1, q[1] - std::accumulate(corrQyA.begin(), corrQyA.end(), 0.0));
10271126
registry.get<TH2>(HIST("recentering/QXC_vs_iteration"))->Fill(pb + 1, q[2] - std::accumulate(corrQxC.begin(), corrQxC.end(), 0.0));

0 commit comments

Comments
 (0)