Skip to content

Commit

Permalink
PWGEM/PhotonMeson: update pcmQCMC (AliceO2Group#6518)
Browse files Browse the repository at this point in the history
  • Loading branch information
dsekihat authored and echizzal committed Jul 18, 2024
1 parent 9f2a299 commit 6a10281
Show file tree
Hide file tree
Showing 6 changed files with 464 additions and 294 deletions.
9 changes: 2 additions & 7 deletions PWGEM/PhotonMeson/Core/Pi0EtaToGammaGamma.h
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,7 @@ struct Pi0EtaToGammaGamma {
// for track
fV0PhotonCut.SetTrackPtRange(pcmcuts.cfg_min_pt_v0 * 0.4, 1e+10f);
fV0PhotonCut.SetTrackEtaRange(-pcmcuts.cfg_max_eta_v0, +pcmcuts.cfg_max_eta_v0);
fV0PhotonCut.SetMinNClustersTPC(pcmcuts.cfg_min_ncluster_tpc);
fV0PhotonCut.SetMinNCrossedRowsTPC(pcmcuts.cfg_min_ncrossedrows);
fV0PhotonCut.SetMinNCrossedRowsOverFindableClustersTPC(0.8);
fV0PhotonCut.SetChi2PerClusterTPC(0.0, pcmcuts.cfg_max_chi2tpc);
Expand Down Expand Up @@ -553,7 +554,7 @@ struct Pi0EtaToGammaGamma {
used_photonIds.emplace_back(pair_tmp_id1);
}
if (std::find(used_photonIds.begin(), used_photonIds.end(), pair_tmp_id2) == used_photonIds.end()) {
emh2->AddTrackToEventPool(key_df_collision, EMTrack(collision.globalIndex(), g2.globalIndex(), g2.pt(), g2.eta(), g2.phi(), 0, 0, 0, std::vector<int>{}));
emh1->AddTrackToEventPool(key_df_collision, EMTrack(collision.globalIndex(), g2.globalIndex(), g2.pt(), g2.eta(), g2.phi(), 0, 0, 0, std::vector<int>{}));
used_photonIds.emplace_back(pair_tmp_id2);
}
ndiphoton++;
Expand Down Expand Up @@ -724,8 +725,6 @@ struct Pi0EtaToGammaGamma {
auto collisionIds2_in_mixing_pool = emh2->GetCollisionIdsFromEventPool(key_bin);

if constexpr (pairtype == PairType::kPCMPCM || pairtype == PairType::kPHOSPHOS || pairtype == PairType::kEMCEMC) { // same kinds pairing
selected_photons1_in_this_event.insert(selected_photons1_in_this_event.end(), selected_photons2_in_this_event.begin(), selected_photons2_in_this_event.end());

for (auto& mix_dfId_collisionId : collisionIds1_in_mixing_pool) {
int mix_dfId = mix_dfId_collisionId.first;
int64_t mix_collisionId = mix_dfId_collisionId.second;
Expand All @@ -735,8 +734,6 @@ struct Pi0EtaToGammaGamma {
}

auto photons1_from_event_pool = emh1->GetTracksPerCollision(mix_dfId_collisionId);
auto photons2_from_event_pool = emh2->GetTracksPerCollision(mix_dfId_collisionId);
photons1_from_event_pool.insert(photons1_from_event_pool.end(), photons2_from_event_pool.begin(), photons2_from_event_pool.end());
// LOGF(info, "Do event mixing: current event (%d, %d), ngamma = %d | event pool (%d, %d), ngamma = %d", ndf, collision.globalIndex(), selected_photons1_in_this_event.size(), mix_dfId, mix_collisionId, photons1_from_event_pool.size());

for (auto& g1 : selected_photons1_in_this_event) {
Expand All @@ -753,7 +750,6 @@ struct Pi0EtaToGammaGamma {
} // end of loop over mixed event pool

} else { //[photon1 from event1, photon2 from event2] and [photon1 from event2, photon2 from event1]

for (auto& mix_dfId_collisionId : collisionIds2_in_mixing_pool) {
int mix_dfId = mix_dfId_collisionId.first;
int64_t mix_collisionId = mix_dfId_collisionId.second;
Expand All @@ -780,7 +776,6 @@ struct Pi0EtaToGammaGamma {
}
}
} // end of loop over mixed event pool

for (auto& mix_dfId_collisionId : collisionIds1_in_mixing_pool) {
int mix_dfId = mix_dfId_collisionId.first;
int64_t mix_collisionId = mix_dfId_collisionId.second;
Expand Down
5 changes: 0 additions & 5 deletions PWGEM/PhotonMeson/Core/Pi0EtaToGammaGammaMC.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,6 @@ struct Pi0EtaToGammaGammaMC {
Configurable<float> cfgCentMax{"cfgCentMax", 999, "max. centrality"};
// Configurable<bool> cfgDoFlow{"cfgDoFlow", false, "flag to analyze vn"};
Configurable<float> maxY_rec{"maxY_rec", 0.9, "maximum rapidity for reconstructed particles"};
Configurable<bool> cfgDoMix{"cfgDoMix", true, "flag for event mixing"};
Configurable<int> ndepth{"ndepth", 10, "depth for event mixing"};
ConfigurableAxis ConfVtxBins{"ConfVtxBins", {VARIABLE_WIDTH, -10.0f, -8.f, -6.f, -4.f, -2.f, 0.f, 2.f, 4.f, 6.f, 8.f, 10.f}, "Mixing bins - z-vertex"};
ConfigurableAxis ConfCentBins{"ConfCentBins", {VARIABLE_WIDTH, 0.0f, 5.0f, 10.0f, 20.0f, 30.0f, 40.0f, 50.0f, 60.0f, 70.0f, 80.0f, 90.0f, 100.f, 999.f}, "Mixing bins - centrality"};
ConfigurableAxis ConfEPBins{"ConfEPBins", {VARIABLE_WIDTH, -M_PI / 2, -M_PI / 4, 0.0f, +M_PI / 4, +M_PI / 2}, "Mixing bins - event plane angle"};
Configurable<std::string> fd_k0s_to_pi0{"fd_k0s_pi0", "1.0", "feed down correction to pi0"};

EMEventCut fEMEventCut;
Expand Down
4 changes: 2 additions & 2 deletions PWGEM/PhotonMeson/Tasks/dielectronQC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,8 @@ struct dielectronQC {
const AxisSpec axis_pt{ConfPteeBins, "p_{T,ee} (GeV/c)"};
const AxisSpec axis_dca{ConfDCAeeBins, "DCA_{ee}^{3D} (#sigma)"};

fRegistry.add("Pair/same/uls/hs", "hs pair", kTHnSparseF, {axis_mass, axis_pt, axis_dca}, true);
fRegistry.add("Pair/same/uls/hMvsPhiV", "m_{ee} vs. #varphi_{V};#varphi (rad.);m_{ee} (GeV/c^{2})", kTH2F, {{90, 0, M_PI}, {100, 0.0f, 0.1f}}, true);
fRegistry.add("Pair/same/uls/hs", "hs pair", kTHnSparseD, {axis_mass, axis_pt, axis_dca}, true);
fRegistry.add("Pair/same/uls/hMvsPhiV", "m_{ee} vs. #varphi_{V};#varphi (rad.);m_{ee} (GeV/c^{2})", kTH2D, {{90, 0, M_PI}, {100, 0.0f, 0.1f}}, true);
fRegistry.addClone("Pair/same/uls/", "Pair/same/lspp/");
fRegistry.addClone("Pair/same/uls/", "Pair/same/lsmm/");
fRegistry.addClone("Pair/same/", "Pair/mix/");
Expand Down
125 changes: 67 additions & 58 deletions PWGEM/PhotonMeson/Tasks/pcmQC.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -43,37 +43,44 @@ struct PCMQC {
Configurable<float> cfgCentMax{"cfgCentMax", 999.f, "max. centrality"};

EMEventCut fEMEventCut;
Configurable<float> cfgZvtxMax{"cfgZvtxMax", 10.f, "max. Zvtx"};
Configurable<bool> cfgRequireSel8{"cfgRequireSel8", true, "require sel8 in event cut"};
Configurable<bool> cfgRequireFT0AND{"cfgRequireFT0AND", true, "require FT0AND in event cut"};
Configurable<bool> cfgRequireNoTFB{"cfgRequireNoTFB", false, "require No time frame border in event cut"};
Configurable<bool> cfgRequireNoITSROFB{"cfgRequireNoITSROFB", false, "require no ITS readout frame border in event cut"};
Configurable<bool> cfgRequireNoSameBunchPileup{"cfgRequireNoSameBunchPileup", false, "require no same bunch pileup in event cut"};
Configurable<bool> cfgRequireVertexITSTPC{"cfgRequireVertexITSTPC", false, "require Vertex ITSTPC in event cut"}; // ITS-TPC matched track contributes PV.
Configurable<bool> cfgRequireGoodZvtxFT0vsPV{"cfgRequireGoodZvtxFT0vsPV", false, "require good Zvtx between FT0 vs. PV in event cut"};
struct : ConfigurableGroup {
std::string prefix = "eventcut_group";
Configurable<float> cfgZvtxMax{"cfgZvtxMax", 10.f, "max. Zvtx"};
Configurable<bool> cfgRequireSel8{"cfgRequireSel8", true, "require sel8 in event cut"};
Configurable<bool> cfgRequireFT0AND{"cfgRequireFT0AND", true, "require FT0AND in event cut"};
Configurable<bool> cfgRequireNoTFB{"cfgRequireNoTFB", false, "require No time frame border in event cut"};
Configurable<bool> cfgRequireNoITSROFB{"cfgRequireNoITSROFB", false, "require no ITS readout frame border in event cut"};
Configurable<bool> cfgRequireNoSameBunchPileup{"cfgRequireNoSameBunchPileup", false, "require no same bunch pileup in event cut"};
Configurable<bool> cfgRequireVertexITSTPC{"cfgRequireVertexITSTPC", false, "require Vertex ITSTPC in event cut"}; // ITS-TPC matched track contributes PV.
Configurable<bool> cfgRequireGoodZvtxFT0vsPV{"cfgRequireGoodZvtxFT0vsPV", false, "require good Zvtx between FT0 vs. PV in event cut"};
Configurable<int> cfgOccupancyMin{"cfgOccupancyMin", -1, "min. occupancy"};
Configurable<int> cfgOccupancyMax{"cfgOccupancyMax", 1000000000, "max. occupancy"};
} eventcuts;

V0PhotonCut fV0PhotonCut;
Configurable<bool> cfg_require_v0_with_itstpc{"cfg_require_v0_with_itstpc", false, "flag to select V0s with ITS-TPC matched tracks"};
Configurable<bool> cfg_require_v0_with_itsonly{"cfg_require_v0_with_itsonly", false, "flag to select V0s with ITSonly tracks"};
Configurable<bool> cfg_require_v0_with_tpconly{"cfg_require_v0_with_tpconly", false, "flag to select V0s with TPConly tracks"};
Configurable<bool> cfg_require_v0_on_wwire_ib{"cfg_require_v0_on_wwire_ib", false, "flag to select V0s on W wires ITSib"};
Configurable<float> cfg_min_pt_v0{"cfg_min_pt_v0", 0.1, "min pT for v0 photons at PV"};
Configurable<float> cfg_max_eta_v0{"cfg_max_eta_v0", 0.9, "max eta for v0 photons at PV"};
Configurable<float> cfg_min_v0radius{"cfg_min_v0radius", 4.0, "min v0 radius"};
Configurable<float> cfg_max_v0radius{"cfg_max_v0radius", 90.0, "max v0 radius"};
Configurable<float> cfg_max_alpha_ap{"cfg_max_alpha_ap", 0.95, "max alpha for AP cut"};
Configurable<float> cfg_max_qt_ap{"cfg_max_qt_ap", 0.01, "max qT for AP cut"};
Configurable<float> cfg_min_cospa{"cfg_min_cospa", 0.99, "min V0 CosPA"};
Configurable<float> cfg_max_pca{"cfg_max_pca", 3.0, "max distance btween 2 legs"};
Configurable<bool> cfg_require_v0_with_correct_xz{"cfg_require_v0_with_correct_xz", true, "flag to select V0s with correct xz"};
Configurable<bool> cfg_reject_v0_on_itsib{"cfg_reject_v0_on_itsib", true, "flag to reject V0s on ITSib"};

Configurable<int> cfg_min_ncluster_tpc{"cfg_min_ncluster_tpc", 10, "min ncluster tpc"};
Configurable<int> cfg_min_ncrossedrows{"cfg_min_ncrossedrows", 20, "min ncrossed rows"};
Configurable<float> cfg_max_chi2tpc{"cfg_max_chi2tpc", 4.0, "max chi2/NclsTPC"};
Configurable<float> cfg_max_chi2its{"cfg_max_chi2its", 5.0, "max chi2/NclsITS"};
Configurable<float> cfg_min_TPCNsigmaEl{"cfg_min_TPCNsigmaEl", -3.0, "min. TPC n sigma for electron"};
Configurable<float> cfg_max_TPCNsigmaEl{"cfg_max_TPCNsigmaEl", +3.0, "max. TPC n sigma for electron"};
struct : ConfigurableGroup {
std::string prefix = "pcmcut_group";
Configurable<bool> cfg_require_v0_with_itstpc{"cfg_require_v0_with_itstpc", false, "flag to select V0s with ITS-TPC matched tracks"};
Configurable<bool> cfg_require_v0_with_itsonly{"cfg_require_v0_with_itsonly", false, "flag to select V0s with ITSonly tracks"};
Configurable<bool> cfg_require_v0_with_tpconly{"cfg_require_v0_with_tpconly", false, "flag to select V0s with TPConly tracks"};
Configurable<bool> cfg_require_v0_on_wwire_ib{"cfg_require_v0_on_wwire_ib", false, "flag to select V0s on W wires ITSib"};
Configurable<float> cfg_min_pt_v0{"cfg_min_pt_v0", 0.1, "min pT for v0 photons at PV"};
Configurable<float> cfg_max_eta_v0{"cfg_max_eta_v0", 0.9, "max eta for v0 photons at PV"};
Configurable<float> cfg_min_v0radius{"cfg_min_v0radius", 4.0, "min v0 radius"};
Configurable<float> cfg_max_v0radius{"cfg_max_v0radius", 90.0, "max v0 radius"};
Configurable<float> cfg_max_alpha_ap{"cfg_max_alpha_ap", 0.95, "max alpha for AP cut"};
Configurable<float> cfg_max_qt_ap{"cfg_max_qt_ap", 0.01, "max qT for AP cut"};
Configurable<float> cfg_min_cospa{"cfg_min_cospa", 0.997, "min V0 CosPA"};
Configurable<float> cfg_max_pca{"cfg_max_pca", 3.0, "max distance btween 2 legs"};
Configurable<bool> cfg_require_v0_with_correct_xz{"cfg_require_v0_with_correct_xz", true, "flag to select V0s with correct xz"};
Configurable<bool> cfg_reject_v0_on_itsib{"cfg_reject_v0_on_itsib", true, "flag to reject V0s on ITSib"};
Configurable<int> cfg_min_ncluster_tpc{"cfg_min_ncluster_tpc", 0, "min ncluster tpc"};
Configurable<int> cfg_min_ncrossedrows{"cfg_min_ncrossedrows", 40, "min ncrossed rows"};
Configurable<float> cfg_max_chi2tpc{"cfg_max_chi2tpc", 4.0, "max chi2/NclsTPC"};
Configurable<float> cfg_max_chi2its{"cfg_max_chi2its", 5.0, "max chi2/NclsITS"};
Configurable<float> cfg_min_TPCNsigmaEl{"cfg_min_TPCNsigmaEl", -3.0, "min. TPC n sigma for electron"};
Configurable<float> cfg_max_TPCNsigmaEl{"cfg_max_TPCNsigmaEl", +3.0, "max. TPC n sigma for electron"};
} pcmcuts;

static constexpr std::string_view event_types[2] = {"before/", "after/"};
HistogramRegistry fRegistry{"output", {}, OutputObjHandlingPolicy::AnalysisObject, false, false};
Expand Down Expand Up @@ -156,61 +163,63 @@ struct PCMQC {
void DefineEMEventCut()
{
fEMEventCut = EMEventCut("fEMEventCut", "fEMEventCut");
fEMEventCut.SetRequireSel8(cfgRequireSel8);
fEMEventCut.SetRequireFT0AND(cfgRequireFT0AND);
fEMEventCut.SetZvtxRange(-cfgZvtxMax, +cfgZvtxMax);
fEMEventCut.SetRequireNoTFB(cfgRequireNoTFB);
fEMEventCut.SetRequireNoITSROFB(cfgRequireNoITSROFB);
fEMEventCut.SetRequireNoSameBunchPileup(cfgRequireNoSameBunchPileup);
fEMEventCut.SetRequireVertexITSTPC(cfgRequireVertexITSTPC);
fEMEventCut.SetRequireGoodZvtxFT0vsPV(cfgRequireGoodZvtxFT0vsPV);
fEMEventCut.SetRequireSel8(eventcuts.cfgRequireSel8);
fEMEventCut.SetRequireFT0AND(eventcuts.cfgRequireFT0AND);
fEMEventCut.SetZvtxRange(-eventcuts.cfgZvtxMax, +eventcuts.cfgZvtxMax);
fEMEventCut.SetRequireNoTFB(eventcuts.cfgRequireNoTFB);
fEMEventCut.SetRequireNoITSROFB(eventcuts.cfgRequireNoITSROFB);
fEMEventCut.SetRequireNoSameBunchPileup(eventcuts.cfgRequireNoSameBunchPileup);
fEMEventCut.SetRequireVertexITSTPC(eventcuts.cfgRequireVertexITSTPC);
fEMEventCut.SetRequireGoodZvtxFT0vsPV(eventcuts.cfgRequireGoodZvtxFT0vsPV);
fEMEventCut.SetOccupancyRange(eventcuts.cfgOccupancyMin, eventcuts.cfgOccupancyMax);
}

void DefinePCMCut()
{
fV0PhotonCut = V0PhotonCut("fV0PhotonCut", "fV0PhotonCut");

// for v0
fV0PhotonCut.SetV0PtRange(cfg_min_pt_v0, 1e10f);
fV0PhotonCut.SetV0EtaRange(-cfg_max_eta_v0, +cfg_max_eta_v0);
fV0PhotonCut.SetMinCosPA(cfg_min_cospa);
fV0PhotonCut.SetMaxPCA(cfg_max_pca);
fV0PhotonCut.SetRxyRange(cfg_min_v0radius, cfg_max_v0radius);
fV0PhotonCut.SetAPRange(cfg_max_alpha_ap, cfg_max_qt_ap);
fV0PhotonCut.RejectITSib(cfg_reject_v0_on_itsib);
fV0PhotonCut.SetV0PtRange(pcmcuts.cfg_min_pt_v0, 1e10f);
fV0PhotonCut.SetV0EtaRange(-pcmcuts.cfg_max_eta_v0, +pcmcuts.cfg_max_eta_v0);
fV0PhotonCut.SetMinCosPA(pcmcuts.cfg_min_cospa);
fV0PhotonCut.SetMaxPCA(pcmcuts.cfg_max_pca);
fV0PhotonCut.SetRxyRange(pcmcuts.cfg_min_v0radius, pcmcuts.cfg_max_v0radius);
fV0PhotonCut.SetAPRange(pcmcuts.cfg_max_alpha_ap, pcmcuts.cfg_max_qt_ap);
fV0PhotonCut.RejectITSib(pcmcuts.cfg_reject_v0_on_itsib);

// for track
fV0PhotonCut.SetTrackPtRange(cfg_min_pt_v0 * 0.4, 1e+10f);
fV0PhotonCut.SetTrackEtaRange(-cfg_max_eta_v0, +cfg_max_eta_v0);
fV0PhotonCut.SetMinNCrossedRowsTPC(cfg_min_ncrossedrows);
fV0PhotonCut.SetTrackPtRange(pcmcuts.cfg_min_pt_v0 * 0.4, 1e+10f);
fV0PhotonCut.SetTrackEtaRange(-pcmcuts.cfg_max_eta_v0, +pcmcuts.cfg_max_eta_v0);
fV0PhotonCut.SetMinNClustersTPC(pcmcuts.cfg_min_ncluster_tpc);
fV0PhotonCut.SetMinNCrossedRowsTPC(pcmcuts.cfg_min_ncrossedrows);
fV0PhotonCut.SetMinNCrossedRowsOverFindableClustersTPC(0.8);
fV0PhotonCut.SetChi2PerClusterTPC(0.0, cfg_max_chi2tpc);
fV0PhotonCut.SetTPCNsigmaElRange(cfg_min_TPCNsigmaEl, cfg_max_TPCNsigmaEl);
fV0PhotonCut.SetChi2PerClusterITS(-1e+10, cfg_max_chi2its);
if (cfg_reject_v0_on_itsib) {
fV0PhotonCut.SetChi2PerClusterTPC(0.0, pcmcuts.cfg_max_chi2tpc);
fV0PhotonCut.SetTPCNsigmaElRange(pcmcuts.cfg_min_TPCNsigmaEl, pcmcuts.cfg_max_TPCNsigmaEl);
fV0PhotonCut.SetChi2PerClusterITS(-1e+10, pcmcuts.cfg_max_chi2its);
if (pcmcuts.cfg_reject_v0_on_itsib) {
fV0PhotonCut.SetNClustersITS(2, 4);
} else {
fV0PhotonCut.SetNClustersITS(0, 7);
}
fV0PhotonCut.SetMeanClusterSizeITSob(0.0, 16.0);
fV0PhotonCut.SetIsWithinBeamPipe(cfg_require_v0_with_correct_xz);
fV0PhotonCut.SetIsWithinBeamPipe(pcmcuts.cfg_require_v0_with_correct_xz);

if (cfg_require_v0_with_itstpc) {
if (pcmcuts.cfg_require_v0_with_itstpc) {
fV0PhotonCut.SetRequireITSTPC(true);
fV0PhotonCut.SetMaxPCA(1.0);
fV0PhotonCut.SetRxyRange(4, 40);
}
if (cfg_require_v0_with_itsonly) {
if (pcmcuts.cfg_require_v0_with_itsonly) {
fV0PhotonCut.SetRequireITSonly(true);
fV0PhotonCut.SetMaxPCA(1.0);
fV0PhotonCut.SetRxyRange(4, 24);
}
if (cfg_require_v0_with_tpconly) {
if (pcmcuts.cfg_require_v0_with_tpconly) {
fV0PhotonCut.SetRequireTPConly(true);
fV0PhotonCut.SetMaxPCA(3.0);
fV0PhotonCut.SetRxyRange(36, 90);
}
if (cfg_require_v0_on_wwire_ib) {
if (pcmcuts.cfg_require_v0_on_wwire_ib) {
fV0PhotonCut.SetMaxPCA(0.3);
fV0PhotonCut.SetOnWwireIB(true);
fV0PhotonCut.SetOnWwireOB(false);
Expand Down Expand Up @@ -259,7 +268,7 @@ struct PCMQC {
}

template <typename TV0>
void fillV0Info(TV0 const& v0, const float /*weight*/ = 1.f)
void fillV0Info(TV0 const& v0)
{
fRegistry.fill(HIST("V0/hPt"), v0.pt());
fRegistry.fill(HIST("V0/hEtaPhi"), v0.phi(), v0.eta());
Expand All @@ -281,7 +290,7 @@ struct PCMQC {
}

template <typename TLeg>
void fillV0LegInfo(TLeg const& leg, const float /*weight*/ = 1.f)
void fillV0LegInfo(TLeg const& leg)
{
fRegistry.fill(HIST("V0Leg/hPt"), leg.pt());
fRegistry.fill(HIST("V0Leg/hQoverPt"), leg.sign() / leg.pt());
Expand Down
Loading

0 comments on commit 6a10281

Please sign in to comment.