Skip to content

Commit 5c48fd0

Browse files
authored
[PWGEM/Dilepton] update eventQC (#12720)
1 parent a7e98b9 commit 5c48fd0

File tree

3 files changed

+79
-43
lines changed

3 files changed

+79
-43
lines changed

PWGEM/Dilepton/TableProducer/createEMEventDilepton.cxx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ struct CreateEMEventDilepton {
136136
mRunNumber = bc.runNumber();
137137
}
138138

139-
Preslice<aod::Collisions> perBC = aod::collision::bcId;
139+
// Preslice<aod::Collisions> perBC = aod::collision::bcId;
140140
// Preslice<aod::V0PhotonsKF> perCollision_pcm = aod::v0photonkf::collisionId;
141141
// PresliceUnsorted<aod::EMPrimaryElectrons> perCollision_el = aod::emprimaryelectron::collisionId;
142142
// PresliceUnsorted<aod::EMPrimaryMuons> perCollision_mu = aod::emprimarymuon::collisionId;
@@ -163,16 +163,18 @@ struct CreateEMEventDilepton {
163163
auto bc = collision.template foundBC_as<TBCs>();
164164
initCCDB(bc);
165165

166-
if (!collision.isSelected()) { // minimal cut for MB
167-
continue;
166+
if (collision.selection_bit(o2::aod::evsel::kIsTriggerTVX)) {
167+
if constexpr (eventtype == EMEventType::kEvent) {
168+
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
169+
} else if constexpr (eventtype == EMEventType::kEvent_Cent || eventtype == EMEventType::kEvent_Cent_Qvec) {
170+
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), collision.centFT0C());
171+
} else {
172+
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
173+
}
168174
}
169175

170-
if constexpr (eventtype == EMEventType::kEvent) {
171-
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
172-
} else if constexpr (eventtype == EMEventType::kEvent_Cent || eventtype == EMEventType::kEvent_Cent_Qvec) {
173-
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), collision.centFT0C());
174-
} else {
175-
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
176+
if (!collision.isSelected()) { // minimal cut for MB
177+
continue;
176178
}
177179

178180
if (!collision.isEoI()) { // events with at least 1 lepton for data reduction.

PWGEM/Dilepton/Tasks/eventQC.cxx

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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) {

PWGEM/PhotonMeson/TableProducer/createEMEventPhoton.cxx

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -154,22 +154,25 @@ struct CreateEMEventPhoton {
154154
auto bc = collision.template foundBC_as<TBCs>();
155155
initCCDB(bc);
156156

157-
if (!collision.isSelected()) {
158-
continue;
159-
}
160157
if (needEMCTrigger && !collision.alias_bit(kTVXinEMC)) {
161158
continue;
162159
}
163160
if (needPHSTrigger && !collision.alias_bit(kTVXinPHOS)) {
164161
continue;
165162
}
166163

167-
if constexpr (eventtype == EMEventType::kEvent) {
168-
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
169-
} else if constexpr (eventtype == EMEventType::kEvent_Cent || eventtype == EMEventType::kEvent_Cent_Qvec) {
170-
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), collision.centFT0C());
171-
} else {
172-
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
164+
if (collision.selection_bit(o2::aod::evsel::kIsTriggerTVX)) {
165+
if constexpr (eventtype == EMEventType::kEvent) {
166+
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
167+
} else if constexpr (eventtype == EMEventType::kEvent_Cent || eventtype == EMEventType::kEvent_Cent_Qvec) {
168+
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), collision.centFT0C());
169+
} else {
170+
event_norm_info(collision.alias_raw(), collision.selection_raw(), collision.rct_raw(), static_cast<int16_t>(10.f * collision.posZ()), 105.f);
171+
}
172+
}
173+
174+
if (!collision.isSelected()) {
175+
continue;
173176
}
174177

175178
if (!collision.isEoI()) { // events with at least 1 photon for data reduction.

0 commit comments

Comments
 (0)