Skip to content

Commit 26e930f

Browse files
authored
[PWGEM/Photon] add a prefilter task for photons from pi0s (#10244)
1 parent a9d5b30 commit 26e930f

File tree

12 files changed

+421
-61
lines changed

12 files changed

+421
-61
lines changed

PWGEM/Dilepton/Tasks/prefilterDielectron.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ struct prefilterDielectron {
334334

335335
Filter collisionFilter_centrality = (cfgCentMin < o2::aod::cent::centFT0M && o2::aod::cent::centFT0M < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0A && o2::aod::cent::centFT0A < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0C && o2::aod::cent::centFT0C < cfgCentMax);
336336
Filter collisionFilter_occupancy_track = eventcuts.cfgTrackOccupancyMin <= o2::aod::evsel::trackOccupancyInTimeRange && o2::aod::evsel::trackOccupancyInTimeRange < eventcuts.cfgTrackOccupancyMax;
337-
Filter collisionFilter_occupancy_ft0c = eventcuts.cfgFT0COccupancyMin < o2::aod::evsel::ft0cOccupancyInTimeRange && o2::aod::evsel::ft0cOccupancyInTimeRange < eventcuts.cfgFT0COccupancyMax;
337+
Filter collisionFilter_occupancy_ft0c = eventcuts.cfgFT0COccupancyMin <= o2::aod::evsel::ft0cOccupancyInTimeRange && o2::aod::evsel::ft0cOccupancyInTimeRange < eventcuts.cfgFT0COccupancyMax;
338338
using FilteredMyCollisions = soa::Filtered<MyCollisions>;
339339

340340
int ndf = 0;

PWGEM/PhotonMeson/Core/Pi0EtaToGammaGamma.h

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ struct Pi0EtaToGammaGamma {
9494

9595
Configurable<int> cfgQvecEstimator{"cfgQvecEstimator", 0, "FT0M:0, FT0A:1, FT0C:2"};
9696
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
97+
Configurable<int> cfgOccupancyEstimator{"cfgOccupancyEstimator", 0, "FT0C:0, Track:1"};
9798
Configurable<float> cfgCentMin{"cfgCentMin", 0, "min. centrality"};
9899
Configurable<float> cfgCentMax{"cfgCentMax", 999, "max. centrality"};
99100
Configurable<float> maxY{"maxY", 0.8, "maximum rapidity for reconstructed particles"};
@@ -117,8 +118,10 @@ struct Pi0EtaToGammaGamma {
117118
Configurable<bool> cfgRequireGoodZvtxFT0vsPV{"cfgRequireGoodZvtxFT0vsPV", false, "require good Zvtx between FT0 vs. PV in event cut"};
118119
Configurable<bool> cfgRequireEMCReadoutInMB{"cfgRequireEMCReadoutInMB", false, "require the EMC to be read out in an MB collision (kTVXinEMC)"};
119120
Configurable<bool> cfgRequireEMCHardwareTriggered{"cfgRequireEMCHardwareTriggered", false, "require the EMC to be hardware triggered (kEMC7 or kDMC7)"};
120-
Configurable<int> cfgOccupancyMin{"cfgOccupancyMin", -1, "min. occupancy"};
121-
Configurable<int> cfgOccupancyMax{"cfgOccupancyMax", 1000000000, "max. occupancy"};
121+
Configurable<int> cfgTrackOccupancyMin{"cfgTrackOccupancyMin", -2, "min. occupancy"};
122+
Configurable<int> cfgTrackOccupancyMax{"cfgTrackOccupancyMax", 1000000000, "max. occupancy"};
123+
Configurable<float> cfgFT0COccupancyMin{"cfgFT0COccupancyMin", -2, "min. FT0C occupancy"};
124+
Configurable<float> cfgFT0COccupancyMax{"cfgFT0COccupancyMax", 1000000000, "max. FT0C occupancy"};
122125
Configurable<bool> onlyKeepWeightedEvents{"onlyKeepWeightedEvents", false, "flag to keep only weighted events (for JJ MCs) and remove all MB events (with weight = 1)"};
123126
} eventcuts;
124127

@@ -147,6 +150,8 @@ struct Pi0EtaToGammaGamma {
147150
Configurable<float> cfg_max_chi2its{"cfg_max_chi2its", 5.0, "max chi2/NclsITS"};
148151
Configurable<float> cfg_min_TPCNsigmaEl{"cfg_min_TPCNsigmaEl", -3.0, "min. TPC n sigma for electron"};
149152
Configurable<float> cfg_max_TPCNsigmaEl{"cfg_max_TPCNsigmaEl", +3.0, "max. TPC n sigma for electron"};
153+
Configurable<bool> cfg_disable_itsonly_track{"cfg_disable_itsonly_track", false, "flag to disable ITSonly tracks"};
154+
Configurable<bool> cfg_disable_tpconly_track{"cfg_disable_tpconly_track", false, "flag to disable TPConly tracks"};
150155
} pcmcuts;
151156

152157
DalitzEECut fDileptonCut;
@@ -228,6 +233,7 @@ struct Pi0EtaToGammaGamma {
228233
ep_bin_edges = std::vector<float>(ConfEPBins.value.begin(), ConfEPBins.value.end());
229234
ep_bin_edges.erase(ep_bin_edges.begin());
230235

236+
LOGF(info, "cfgOccupancyEstimator = %d", cfgOccupancyEstimator.value);
231237
occ_bin_edges = std::vector<float>(ConfOccupancyBins.value.begin(), ConfOccupancyBins.value.end());
232238
occ_bin_edges.erase(occ_bin_edges.begin());
233239

@@ -352,6 +358,9 @@ struct Pi0EtaToGammaGamma {
352358
fV0PhotonCut.SetChi2PerClusterTPC(0.0, pcmcuts.cfg_max_chi2tpc);
353359
fV0PhotonCut.SetTPCNsigmaElRange(pcmcuts.cfg_min_TPCNsigmaEl, pcmcuts.cfg_max_TPCNsigmaEl);
354360
fV0PhotonCut.SetChi2PerClusterITS(-1e+10, pcmcuts.cfg_max_chi2its);
361+
fV0PhotonCut.SetDisableITSonly(pcmcuts.cfg_disable_itsonly_track);
362+
fV0PhotonCut.SetDisableTPConly(pcmcuts.cfg_disable_tpconly_track);
363+
355364
if (pcmcuts.cfg_reject_v0_on_itsib) {
356365
fV0PhotonCut.SetNClustersITS(2, 4);
357366
} else {
@@ -611,7 +620,15 @@ struct Pi0EtaToGammaGamma {
611620
epbin = static_cast<int>(ep_bin_edges.size()) - 2;
612621
}
613622

614-
int occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.trackOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
623+
int occbin = -1;
624+
if (cfgOccupancyEstimator == 0) {
625+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.ft0cOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
626+
} else if (cfgOccupancyEstimator == 1) {
627+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.trackOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
628+
} else {
629+
occbin = lower_bound(occ_bin_edges.begin(), occ_bin_edges.end(), collision.ft0cOccupancyInTimeRange()) - occ_bin_edges.begin() - 1;
630+
}
631+
615632
if (occbin < 0) {
616633
occbin = 0;
617634
} else if (static_cast<int>(occ_bin_edges.size()) - 2 < occbin) {
@@ -851,7 +868,8 @@ struct Pi0EtaToGammaGamma {
851868
} // end of collision loop
852869
}
853870

854-
Filter collisionFilter_occupancy = eventcuts.cfgOccupancyMin <= o2::aod::evsel::trackOccupancyInTimeRange && o2::aod::evsel::trackOccupancyInTimeRange < eventcuts.cfgOccupancyMax;
871+
Filter collisionFilter_occupancy_track = eventcuts.cfgTrackOccupancyMin <= o2::aod::evsel::trackOccupancyInTimeRange && o2::aod::evsel::trackOccupancyInTimeRange < eventcuts.cfgTrackOccupancyMax;
872+
Filter collisionFilter_occupancy_ft0c = eventcuts.cfgFT0COccupancyMin <= o2::aod::evsel::ft0cOccupancyInTimeRange && o2::aod::evsel::ft0cOccupancyInTimeRange < eventcuts.cfgFT0COccupancyMax;
855873
Filter collisionFilter_centrality = (cfgCentMin < o2::aod::cent::centFT0M && o2::aod::cent::centFT0M < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0A && o2::aod::cent::centFT0A < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0C && o2::aod::cent::centFT0C < cfgCentMax);
856874
using FilteredMyCollisions = soa::Filtered<MyCollisions>;
857875

PWGEM/PhotonMeson/Core/Pi0EtaToGammaGammaMC.h

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,10 @@ struct Pi0EtaToGammaGammaMC {
105105
Configurable<bool> cfgRequireGoodZvtxFT0vsPV{"cfgRequireGoodZvtxFT0vsPV", false, "require good Zvtx between FT0 vs. PV in event cut"};
106106
Configurable<bool> cfgRequireEMCReadoutInMB{"cfgRequireEMCReadoutInMB", false, "require the EMC to be read out in an MB collision (kTVXinEMC)"};
107107
Configurable<bool> cfgRequireEMCHardwareTriggered{"cfgRequireEMCHardwareTriggered", false, "require the EMC to be hardware triggered (kEMC7 or kDMC7)"};
108-
Configurable<int> cfgOccupancyMin{"cfgOccupancyMin", -1, "min. occupancy"};
109-
Configurable<int> cfgOccupancyMax{"cfgOccupancyMax", 1000000000, "max. occupancy"};
108+
Configurable<int> cfgTrackOccupancyMin{"cfgTrackOccupancyMin", -2, "min. occupancy"};
109+
Configurable<int> cfgTrackOccupancyMax{"cfgTrackOccupancyMax", 1000000000, "max. occupancy"};
110+
Configurable<float> cfgFT0COccupancyMin{"cfgFT0COccupancyMin", -2, "min. FT0C occupancy"};
111+
Configurable<float> cfgFT0COccupancyMax{"cfgFT0COccupancyMax", 1000000000, "max. FT0C occupancy"};
110112
Configurable<bool> onlyKeepWeightedEvents{"onlyKeepWeightedEvents", false, "flag to keep only weighted events (for JJ MCs) and remove all MB events (with weight = 1)"};
111113
} eventcuts;
112114

@@ -135,6 +137,8 @@ struct Pi0EtaToGammaGammaMC {
135137
Configurable<float> cfg_max_chi2its{"cfg_max_chi2its", 5.0, "max chi2/NclsITS"};
136138
Configurable<float> cfg_min_TPCNsigmaEl{"cfg_min_TPCNsigmaEl", -3.0, "min. TPC n sigma for electron"};
137139
Configurable<float> cfg_max_TPCNsigmaEl{"cfg_max_TPCNsigmaEl", +3.0, "max. TPC n sigma for electron"};
140+
Configurable<bool> cfg_disable_itsonly_track{"cfg_disable_itsonly_track", false, "flag to disable ITSonly tracks"};
141+
Configurable<bool> cfg_disable_tpconly_track{"cfg_disable_tpconly_track", false, "flag to disable TPConly tracks"};
138142
} pcmcuts;
139143

140144
DalitzEECut fDileptonCut;
@@ -315,6 +319,9 @@ struct Pi0EtaToGammaGammaMC {
315319
fV0PhotonCut.SetChi2PerClusterTPC(0.0, pcmcuts.cfg_max_chi2tpc);
316320
fV0PhotonCut.SetTPCNsigmaElRange(pcmcuts.cfg_min_TPCNsigmaEl, pcmcuts.cfg_max_TPCNsigmaEl);
317321
fV0PhotonCut.SetChi2PerClusterITS(-1e+10, pcmcuts.cfg_max_chi2its);
322+
fV0PhotonCut.SetDisableITSonly(pcmcuts.cfg_disable_itsonly_track);
323+
fV0PhotonCut.SetDisableTPConly(pcmcuts.cfg_disable_tpconly_track);
324+
318325
if (pcmcuts.cfg_reject_v0_on_itsib) {
319326
fV0PhotonCut.SetNClustersITS(2, 4);
320327
} else {
@@ -685,7 +692,8 @@ struct Pi0EtaToGammaGammaMC {
685692
} // end of collision loop
686693
}
687694

688-
Filter collisionFilter_occupancy = eventcuts.cfgOccupancyMin <= o2::aod::evsel::trackOccupancyInTimeRange && o2::aod::evsel::trackOccupancyInTimeRange < eventcuts.cfgOccupancyMax;
695+
Filter collisionFilter_occupancy_track = eventcuts.cfgTrackOccupancyMin <= o2::aod::evsel::trackOccupancyInTimeRange && o2::aod::evsel::trackOccupancyInTimeRange < eventcuts.cfgTrackOccupancyMax;
696+
Filter collisionFilter_occupancy_ft0c = eventcuts.cfgFT0COccupancyMin <= o2::aod::evsel::ft0cOccupancyInTimeRange && o2::aod::evsel::ft0cOccupancyInTimeRange < eventcuts.cfgFT0COccupancyMax;
689697
Filter collisionFilter_centrality = (cfgCentMin < o2::aod::cent::centFT0M && o2::aod::cent::centFT0M < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0A && o2::aod::cent::centFT0A < cfgCentMax) || (cfgCentMin < o2::aod::cent::centFT0C && o2::aod::cent::centFT0C < cfgCentMax);
690698
using FilteredMyCollisions = soa::Filtered<MyCollisions>;
691699

PWGEM/PhotonMeson/Core/V0PhotonCut.cxx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,3 +240,9 @@ void V0PhotonCut::SetDisableITSonly(bool flag)
240240
mDisableITSonly = flag;
241241
LOG(info) << "V0 Photon Cut, disable ITS only track: " << mDisableITSonly;
242242
}
243+
244+
void V0PhotonCut::SetDisableTPConly(bool flag)
245+
{
246+
mDisableTPConly = flag;
247+
LOG(info) << "V0 Photon Cut, disable TPC only track: " << mDisableTPConly;
248+
}

PWGEM/PhotonMeson/Core/V0PhotonCut.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,9 @@ class V0PhotonCut : public TNamed
150150
if (mDisableITSonly && isITSonlyTrack(track)) {
151151
return false;
152152
}
153+
if (mDisableTPConly && isTPConlyTrack(track)) {
154+
return false;
155+
}
153156

154157
if (mRejectITSib) {
155158
auto hits_ib = std::count_if(its_ib_Requirement.second.begin(), its_ib_Requirement.second.end(), [&](auto&& requiredLayer) { return track.itsClusterMap() & (1 << requiredLayer); });
@@ -476,6 +479,7 @@ class V0PhotonCut : public TNamed
476479
void SetRequireTPCTOF(bool flag);
477480
void SetRequireTPCTRDTOF(bool flag);
478481
void SetDisableITSonly(bool flag);
482+
void SetDisableTPConly(bool flag);
479483

480484
private:
481485
static const std::pair<int8_t, std::set<uint8_t>> its_ib_Requirement;
@@ -527,6 +531,7 @@ class V0PhotonCut : public TNamed
527531
bool mRequireTPCTOF{false};
528532
bool mRequireTPCTRDTOF{false};
529533
bool mDisableITSonly{false};
534+
bool mDisableTPConly{false};
530535

531536
ClassDef(V0PhotonCut, 1);
532537
};

PWGEM/PhotonMeson/DataModel/gammaTables.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ DECLARE_SOA_COLUMN(SigmaPz2, sigmaPz2, float); //! erro
237237
DECLARE_SOA_COLUMN(SigmaPxPy, sigmaPxPy, float); //! error of px x py in covariant matrix
238238
DECLARE_SOA_COLUMN(SigmaPyPz, sigmaPyPz, float); //! error of py x pz in covariant matrix
239239
DECLARE_SOA_COLUMN(SigmaPzPx, sigmaPzPx, float); //! error of pz x px in covariant matrix
240+
DECLARE_SOA_COLUMN(PrefilterBitDerived, pfbderived, uint16_t); //!
240241

241242
DECLARE_SOA_DYNAMIC_COLUMN(E, e, [](float px, float py, float pz, float m = 0) -> float { return RecoDecay::sqrtSumOfSquares(px, py, pz, m); }); //! energy of v0 photn, mass to be given as argument when getter is called!
242243
DECLARE_SOA_DYNAMIC_COLUMN(Pt, pt, [](float px, float py) -> float { return RecoDecay::sqrtSumOfSquares(px, py); });
@@ -274,6 +275,10 @@ DECLARE_SOA_TABLE(V0PhotonsKFCov, "AOD", "V0PHOTONKFCOV", //! To be joined with
274275
// iterators
275276
using V0PhotonKFCov = V0PhotonsKFCov::iterator;
276277

278+
DECLARE_SOA_TABLE(V0PhotonsKFPrefilterBitDerived, "AOD", "V0PHOTONKFPFBPI0", v0photonkf::PrefilterBitDerived); // To be joined with V0PhotonsKF table at analysis level.
279+
// iterators
280+
using V0PhotonKFPrefilterBitDerived = V0PhotonsKFPrefilterBitDerived::iterator;
281+
277282
DECLARE_SOA_TABLE(EMPrimaryElectronsFromDalitz, "AOD", "EMPRIMARYELDA", //!
278283
o2::soa::Index<>, emprimaryelectron::CollisionId,
279284
emprimaryelectron::TrackId, emprimaryelectron::Sign,

0 commit comments

Comments
 (0)