Skip to content

Commit f8fb960

Browse files
authored
[PWGEM/Dilepton] update createResolutionMap.cxx (#13157)
1 parent 449dba6 commit f8fb960

File tree

1 file changed

+55
-40
lines changed

1 file changed

+55
-40
lines changed

PWGEM/Dilepton/Tasks/createResolutionMap.cxx

Lines changed: 55 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,17 @@ struct CreateResolutionMap {
7171
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
7272
Configurable<bool> cfg_require_true_mc_collision_association{"cfg_require_true_mc_collision_association", false, "flag to require true mc collision association"};
7373
Configurable<bool> cfg_reject_fake_match_its_tpc{"cfg_reject_fake_match_its_tpc", false, "flag to reject fake match between ITS-TPC"};
74-
// Configurable<bool> cfg_reject_fake_match_its_tpc_tof{"cfg_reject_fake_match_its_tpc_tof", false, "flag to reject fake match between ITS-TPC-TOF"};
7574
Configurable<bool> cfg_reject_fake_match_mft_mch{"cfg_reject_fake_match_mft_mch", false, "flag to reject fake match between MFT-MCH"};
7675

7776
ConfigurableAxis ConfPtGenBins{"ConfPtGenBins", {VARIABLE_WIDTH, 0.00, 0.05, 0.06, 0.07, 0.08, 0.09, 0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18, 0.19, 0.20, 0.21, 0.22, 0.23, 0.24, 0.25, 0.26, 0.27, 0.28, 0.29, 0.30, 0.31, 0.32, 0.33, 0.34, 0.35, 0.36, 0.37, 0.38, 0.39, 0.40, 0.41, 0.42, 0.43, 0.44, 0.45, 0.46, 0.47, 0.48, 0.49, 0.50, 0.51, 0.52, 0.53, 0.54, 0.55, 0.56, 0.57, 0.58, 0.59, 0.60, 0.61, 0.62, 0.63, 0.64, 0.65, 0.66, 0.67, 0.68, 0.69, 0.70, 0.71, 0.72, 0.73, 0.74, 0.75, 0.76, 0.77, 0.78, 0.79, 0.80, 0.81, 0.82, 0.83, 0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.90, 0.91, 0.92, 0.93, 0.94, 0.95, 0.96, 0.97, 0.98, 0.99, 1.00, 1.10, 1.20, 1.30, 1.40, 1.50, 1.60, 1.70, 1.80, 1.90, 2.00, 2.10, 2.20, 2.30, 2.40, 2.50, 2.60, 2.70, 2.80, 2.90, 3.00, 3.10, 3.20, 3.30, 3.40, 3.50, 3.60, 3.70, 3.80, 3.90, 4.00, 4.10, 4.20, 4.30, 4.40, 4.50, 4.60, 4.70, 4.80, 4.90, 5.00, 5.50, 6.00, 6.50, 7.00, 7.50, 8.00, 8.50, 9.00, 9.50, 10.00, 11.00, 12.00, 13.00, 14.00, 15.00, 16.00, 17.00, 18.00, 19.00, 20.00}, "gen. pT bins for output histograms"};
7877
ConfigurableAxis ConfCentBins{"ConfCentBins", {VARIABLE_WIDTH, 0, 10, 30, 50, 110}, "centrality (%) bins for output histograms"};
7978

8079
ConfigurableAxis ConfEtaCBGenBins{"ConfEtaCBGenBins", {30, -1.5, +1.5}, "gen. eta bins at midrapidity for output histograms"};
8180
ConfigurableAxis ConfEtaFWDGenBins{"ConfEtaFWDGenBins", {40, -5.5, -1.5}, "gen. eta bins at forward rapidity for output histograms"};
82-
ConfigurableAxis ConfPhiGenBins{"ConfPhiGenBins", {72, 0, 2.f * M_PI}, "gen. eta bins at forward rapidity for output histograms"};
81+
ConfigurableAxis ConfPhiGenBins{"ConfPhiGenBins", {72, 0, 2.f * M_PI}, "gen. phi bins at forward rapidity for output histograms"};
82+
ConfigurableAxis ConfPhiPositionCBGenBins{"ConfPhiPositionCBGenBins", {VARIABLE_WIDTH, 2.3 - M_PI, 0.85, 2.3, 0.85 + M_PI, 2.3 + M_PI}, "gen. phi psotion bins at forward rapidity for output histograms"}; // default is adjusted at R = 0.50 m
83+
ConfigurableAxis ConfPhiPositionFWDGenBins{"ConfPhiPositionFWDGenBins", {1, 0, 2 * M_PI}, "gen. phi psotion bins at forward rapidity for output histograms"};
84+
Configurable<float> cfgRefR{"cfgRefR", 0.50, "ref. radius (m) for calculating phi position"}; // 0.50 +/- 0.06 can be syst. unc.
8385

8486
ConfigurableAxis ConfRelDeltaPtBins{"ConfRelDeltaPtBins", {200, -1.f, +1.f}, "rel. dpt for output histograms"};
8587
ConfigurableAxis ConfDeltaEtaCBBins{"ConfDeltaEtaCBBins", {200, -0.5f, +0.5f}, "deta bins for output histograms"};
@@ -184,6 +186,13 @@ struct CreateResolutionMap {
184186
o2::dataformats::VertexBase mVtx;
185187
const o2::dataformats::MeanVertexObject* mMeanVtx = nullptr;
186188
o2::base::MatLayerCylSet* lut = nullptr;
189+
std::vector<float> phiPosition_bin_edges;
190+
191+
~CreateResolutionMap()
192+
{
193+
phiPosition_bin_edges.clear();
194+
phiPosition_bin_edges.shrink_to_fit();
195+
}
187196

188197
void init(o2::framework::InitContext&)
189198
{
@@ -207,6 +216,23 @@ struct CreateResolutionMap {
207216
mRunNumber = 0;
208217
d_bz = 0;
209218

219+
if (ConfPhiPositionCBGenBins.value[0] == VARIABLE_WIDTH) {
220+
phiPosition_bin_edges = std::vector<float>(ConfPhiPositionCBGenBins.value.begin(), ConfPhiPositionCBGenBins.value.end());
221+
phiPosition_bin_edges.erase(phiPosition_bin_edges.begin());
222+
// for (const auto& edge : phiPosition_bin_edges) {
223+
// LOGF(info, "VARIABLE_WIDTH: phiPosition_bin_edges = %f", edge);
224+
// }
225+
} else { // FIXED bin width
226+
int nbins = static_cast<int>(ConfPhiPositionCBGenBins.value[0]);
227+
float xmin = static_cast<float>(ConfPhiPositionCBGenBins.value[1]);
228+
float xmax = static_cast<float>(ConfPhiPositionCBGenBins.value[2]);
229+
phiPosition_bin_edges.resize(nbins + 1);
230+
for (int i = 0; i < nbins + 1; i++) {
231+
phiPosition_bin_edges[i] = (xmax - xmin) / (nbins)*i + xmin;
232+
// LOGF(info, "FIXED_WIDTH: phiPosition_bin_edges[%d] = %f", i, phiPosition_bin_edges[i]);
233+
}
234+
}
235+
210236
const AxisSpec axis_cent{ConfCentBins, "centrality (%)"};
211237
const AxisSpec axis_pt_gen{ConfPtGenBins, "p_{T,l}^{gen} (GeV/c)"};
212238
const AxisSpec axis_eta_cb_gen{ConfEtaCBGenBins, "#eta_{l}^{gen}"};
@@ -217,6 +243,8 @@ struct CreateResolutionMap {
217243
const AxisSpec axis_deta_fwd{ConfDeltaEtaFWDBins, "#eta_{l}^{gen} - #eta_{l}^{rec}"};
218244
const AxisSpec axis_dphi{ConfDeltaPhiBins, "#varphi_{l}^{gen} - #varphi_{l}^{rec} (rad.)"};
219245
const AxisSpec axis_charge_gen{3, -1.5, +1.5, "true sign"};
246+
const AxisSpec axis_phiPositionCB_gen{ConfPhiPositionCBGenBins, Form("#varphi^{*, gen} (rad.) at r_{xy} = %3.2f m", cfgRefR.value)};
247+
const AxisSpec axis_phiPositionFWD_gen{ConfPhiPositionFWDGenBins, "#varphi^{*, gen} (rad.)"};
220248

221249
// registry.add("Event/Electron/hImpPar_Centrality", "true imapact parameter vs. estimated centrality;impact parameter (fm);centrality (%)", kTH2F, {{200, 0, 20}, {110, 0, 110}}, true);
222250
// registry.add("Event/Electron/hImpPar_Centrality", "true imapact parameter vs. estimated centrality;impact parameter (fm);centrality (%)", kTH2F, {{200, 0, 20}, {110, 0, 110}}, true);
@@ -241,9 +269,9 @@ struct CreateResolutionMap {
241269
}
242270

243271
if (cfgFillTHnSparse) {
244-
registry.add("Electron/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_cb_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta_cb, axis_dphi}, true);
245-
registry.add("StandaloneMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta_fwd, axis_dphi}, true);
246-
registry.add("GlobalMuon/hs_reso", "8D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_charge_gen, axis_dpt, axis_deta_fwd, axis_dphi}, true);
272+
registry.add("Electron/hs_reso", "9D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_cb_gen, axis_phi_gen, axis_phiPositionCB_gen, axis_charge_gen, axis_dpt, axis_deta_cb, axis_dphi}, true);
273+
registry.add("StandaloneMuon/hs_reso", "9D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_phiPositionFWD_gen, axis_charge_gen, axis_dpt, axis_deta_fwd, axis_dphi}, true);
274+
registry.add("GlobalMuon/hs_reso", "9D resolution", kTHnSparseF, {axis_cent, axis_pt_gen, axis_eta_fwd_gen, axis_phi_gen, axis_phiPositionFWD_gen, axis_charge_gen, axis_dpt, axis_deta_fwd, axis_dphi}, true);
247275
}
248276
}
249277

@@ -474,19 +502,17 @@ struct CreateResolutionMap {
474502
return false;
475503
}
476504

477-
if (track.hasITS() && !track.hasTPC() && !track.hasTOF() && !track.hasTRD()) { // only for ITSsa
478-
int total_cluster_size = 0, nl = 0;
479-
for (unsigned int layer = 0; layer < 7; layer++) {
480-
int cluster_size_per_layer = track.itsClsSizeInLayer(layer);
481-
if (cluster_size_per_layer > 0) {
482-
nl++;
483-
}
484-
total_cluster_size += cluster_size_per_layer;
505+
int total_cluster_size = 0, nl = 0;
506+
for (unsigned int layer = 0; layer < 7; layer++) {
507+
int cluster_size_per_layer = track.itsClsSizeInLayer(layer);
508+
if (cluster_size_per_layer > 0) {
509+
nl++;
485510
}
511+
total_cluster_size += cluster_size_per_layer;
512+
}
486513

487-
if (electroncuts.maxMeanITSClusterSize < static_cast<float>(total_cluster_size) / static_cast<float>(nl) * std::cos(std::atan(tgl))) {
488-
return false;
489-
}
514+
if (electroncuts.maxMeanITSClusterSize < static_cast<float>(total_cluster_size) / static_cast<float>(nl) * std::cos(std::atan(tgl))) {
515+
return false;
490516
}
491517

492518
return true;
@@ -609,7 +635,7 @@ struct CreateResolutionMap {
609635
return;
610636
}
611637
if (cfgFillTHnSparse) {
612-
registry.fill(HIST("StandaloneMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
638+
registry.fill(HIST("StandaloneMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), 1.f, -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
613639
}
614640

615641
if (cfgFillTH2) {
@@ -628,7 +654,7 @@ struct CreateResolutionMap {
628654
return;
629655
}
630656
if (cfgFillTHnSparse) {
631-
registry.fill(HIST("GlobalMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
657+
registry.fill(HIST("GlobalMuon/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), 1.f, -mcparticle.pdgCode() / 13, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
632658
}
633659
if (cfgFillTH2) {
634660
registry.fill(HIST("GlobalMuon/hPt"), pt);
@@ -699,7 +725,7 @@ struct CreateResolutionMap {
699725
}
700726

701727
SliceCache cache;
702-
Preslice<aod::Tracks> perCollision_mid = o2::aod::track::collisionId;
728+
Preslice<aod::TracksIU> perCollision_mid = o2::aod::track::collisionId;
703729
Preslice<aod::FwdTracks> perCollision_fwd = o2::aod::fwdtrack::collisionId;
704730

705731
using MyCollisions = Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels, aod::CentFT0Ms, aod::CentFT0As, aod::CentFT0Cs>;
@@ -720,7 +746,7 @@ struct CreateResolutionMap {
720746
if (cfgRequireGoodRCT && !rctCheckerCB.checkTable(collision)) {
721747
return;
722748
}
723-
auto mcparticle = track.template mcParticle_as<aod::McParticles>();
749+
const auto& mcparticle = track.template mcParticle_as<aod::McParticles>();
724750

725751
if (std::abs(mcparticle.pdgCode()) != 11 || !(mcparticle.isPhysicalPrimary() || mcparticle.producedByGenerator())) {
726752
return;
@@ -751,12 +777,15 @@ struct CreateResolutionMap {
751777
float phi = trackParCov.getPhi();
752778
o2::math_utils::bringTo02Pi(phi);
753779

780+
float phiPosition = mcparticle.phi() + std::asin(-0.30282 * (-mcparticle.pdgCode() / 11) * (d_bz * 0.1) * cfgRefR / (2.f * mcparticle.pt()));
781+
phiPosition = RecoDecay::constrainAngle(phiPosition, phiPosition_bin_edges[0], 1U);
782+
754783
if (!isSelectedTrackWithKine(track, pt, eta, trackParCov.getTgl(), dcaXY, dcaZ)) {
755784
return;
756785
}
757786

758787
if (cfgFillTHnSparse) {
759-
registry.fill(HIST("Electron/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), -mcparticle.pdgCode() / 11, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
788+
registry.fill(HIST("Electron/hs_reso"), centrality, mcparticle.pt(), mcparticle.eta(), mcparticle.phi(), phiPosition, -mcparticle.pdgCode() / 11, (mcparticle.pt() - pt) / mcparticle.pt(), mcparticle.eta() - eta, mcparticle.phi() - phi);
760789
}
761790
if (cfgFillTH2) {
762791
registry.fill(HIST("Electron/hPt"), pt);
@@ -843,10 +872,10 @@ struct CreateResolutionMap {
843872
}
844873
PROCESS_SWITCH(CreateResolutionMap, processElectronTTCA, "create resolution map for electron at midrapidity", false);
845874

846-
Partition<MyFwdTracks> sa_muons = o2::aod::fwdtrack::trackType == uint8_t(o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack); // MCH-MID
847-
Partition<MyFwdTracks> global_muons = o2::aod::fwdtrack::trackType == uint8_t(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack); // MFT-MCH-MID
875+
// Partition<MyFwdTracks> sa_muons = o2::aod::fwdtrack::trackType == uint8_t(o2::aod::fwdtrack::ForwardTrackTypeEnum::MuonStandaloneTrack); // MCH-MID
876+
// Partition<MyFwdTracks> global_muons = o2::aod::fwdtrack::trackType == uint8_t(o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack); // MFT-MCH-MID
848877

849-
void processMuonSA(MyCollisions const& collisions, aod::BCsWithTimestamps const&, MyFwdTracks const&, MyMFTTracks const&, aod::McCollisions const&, aod::McParticles const&)
878+
void processMuonSA(MyCollisions const& collisions, aod::BCsWithTimestamps const&, MyFwdTracks const& fwdtracks, MyMFTTracks const&, aod::McCollisions const&, aod::McParticles const&)
850879
{
851880
for (const auto& collision : collisions) {
852881
auto bc = collision.template foundBC_as<aod::BCsWithTimestamps>();
@@ -864,10 +893,8 @@ struct CreateResolutionMap {
864893
// auto mccollision = collision.template mcCollision_as<aod::McCollisions>();
865894
// registry.fill(HIST("Event/Muon/hImpPar_Centrality"), mccollision.impactParameter(), centrality);
866895

867-
auto sa_muons_per_coll = sa_muons->sliceByCached(o2::aod::fwdtrack::collisionId, collision.globalIndex(), cache);
868-
auto global_muons_per_coll = global_muons->sliceByCached(o2::aod::fwdtrack::collisionId, collision.globalIndex(), cache);
869-
870-
for (const auto& muon : sa_muons_per_coll) {
896+
const auto& fwdtracks_per_coll = fwdtracks.sliceBy(perCollision_fwd, collision.globalIndex());
897+
for (const auto& muon : fwdtracks_per_coll) {
871898
if (!muon.has_mcParticle()) {
872899
continue;
873900
}
@@ -880,18 +907,6 @@ struct CreateResolutionMap {
880907
fillMuon(collision, muon, centrality);
881908
} // end of standalone muon loop
882909

883-
for (const auto& muon : global_muons_per_coll) {
884-
if (!muon.has_mcParticle()) {
885-
continue;
886-
}
887-
auto mctrack = muon.template mcParticle_as<aod::McParticles>();
888-
auto mccollision_from_mctrack = mctrack.template mcCollision_as<aod::McCollisions>();
889-
if (cfgEventGeneratorType >= 0 && mccollision_from_mctrack.getSubGeneratorId() != cfgEventGeneratorType) {
890-
continue;
891-
}
892-
fillMuon(collision, muon, centrality);
893-
} // end of global muon loop
894-
895910
} // end of collision loop
896911
}
897912
PROCESS_SWITCH(CreateResolutionMap, processMuonSA, "create resolution map for muon at forward rapidity", true);

0 commit comments

Comments
 (0)