Skip to content

Commit ec847ba

Browse files
committed
PWGEM/PhotonMeson: add dilepton v2
1 parent e3bbd32 commit ec847ba

5 files changed

Lines changed: 99 additions & 50 deletions

File tree

PWGEM/PhotonMeson/Core/Pi0EtaToGammaGamma.h

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -786,13 +786,7 @@ struct Pi0EtaToGammaGamma {
786786
if (abs(v12.Rapidity()) > maxY) {
787787
continue;
788788
}
789-
if (cfgDoFlow) {
790-
std::array<float, 2> u2_gg = {static_cast<float>(std::cos(2 * v12.Phi())), static_cast<float>(std::sin(2 * v12.Phi()))};
791-
std::array<float, 2> u3_gg = {static_cast<float>(std::cos(3 * v12.Phi())), static_cast<float>(std::sin(3 * v12.Phi()))};
792-
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), RecoDecay::dotProd(u2_gg, q2vector[cfgQvecEstimator]), RecoDecay::dotProd(u3_gg, q3vector[cfgQvecEstimator]));
793-
} else {
794-
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), 0.0, 0.0);
795-
}
789+
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), 0.0, 0.0);
796790
}
797791
}
798792
} // end of loop over mixed event pool
@@ -820,13 +814,7 @@ struct Pi0EtaToGammaGamma {
820814
if (abs(v12.Rapidity()) > maxY) {
821815
continue;
822816
}
823-
if (cfgDoFlow) {
824-
std::array<float, 2> u2_gg = {static_cast<float>(std::cos(2 * v12.Phi())), static_cast<float>(std::sin(2 * v12.Phi()))};
825-
std::array<float, 2> u3_gg = {static_cast<float>(std::cos(3 * v12.Phi())), static_cast<float>(std::sin(3 * v12.Phi()))};
826-
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), RecoDecay::dotProd(u2_gg, q2vector[cfgQvecEstimator]), RecoDecay::dotProd(u3_gg, q3vector[cfgQvecEstimator]));
827-
} else {
828-
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), 0.0, 0.0);
829-
}
817+
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), 0.0, 0.0);
830818
}
831819
}
832820
} // end of loop over mixed event pool
@@ -852,13 +840,7 @@ struct Pi0EtaToGammaGamma {
852840
if (abs(v12.Rapidity()) > maxY) {
853841
continue;
854842
}
855-
if (cfgDoFlow) {
856-
std::array<float, 2> u2_gg = {static_cast<float>(std::cos(2 * v12.Phi())), static_cast<float>(std::sin(2 * v12.Phi()))};
857-
std::array<float, 2> u3_gg = {static_cast<float>(std::cos(3 * v12.Phi())), static_cast<float>(std::sin(3 * v12.Phi()))};
858-
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), RecoDecay::dotProd(u2_gg, q2vector[cfgQvecEstimator]), RecoDecay::dotProd(u3_gg, q3vector[cfgQvecEstimator]));
859-
} else {
860-
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), 0.0, 0.0);
861-
}
843+
fRegistry.fill(HIST("Pair/mix/hs"), v12.M(), v12.Pt(), 0.0, 0.0);
862844
}
863845
}
864846
} // end of loop over mixed event pool

PWGEM/PhotonMeson/Tasks/dielectronQC.cxx

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ struct dielectronQC {
6868
Configurable<bool> skipGRPOquery{"skipGRPOquery", true, "skip grpo query"};
6969
Configurable<float> d_bz_input{"d_bz_input", -999, "bz field in kG, -999 is automatic"};
7070

71+
Configurable<int> cfgQvecEstimator{"cfgQvecEstimator", 0, "FT0M:0, FT0A:1, FT0C:2"};
7172
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
7273
Configurable<float> cfgCentMin{"cfgCentMin", 0, "min. centrality"};
7374
Configurable<float> cfgCentMax{"cfgCentMax", 999.f, "max. centrality"};
@@ -263,13 +264,24 @@ struct dielectronQC {
263264
const AxisSpec axis_mass{ConfMeeBins, "m_{ee} (GeV/c^{2})"};
264265
const AxisSpec axis_pt{ConfPteeBins, "p_{T,ee} (GeV/c)"};
265266
const AxisSpec axis_dca{ConfDCAeeBins, "DCA_{ee}^{3D} (#sigma)"};
266-
const AxisSpec axis_pca{ConfPCAeeBins, "PCA (mm)"}; // particle closest approach
267267

268-
fRegistry.add("Pair/same/uls/hs", "dielectron", kTHnSparseD, {axis_mass, axis_pt, axis_dca, axis_pca}, true);
268+
std::string_view qvec_det_names[3] = {"FT0M", "FT0A", "FT0C"};
269+
int nbin_sp = 1;
270+
if (cfgDoFlow) {
271+
nbin_sp = 100;
272+
}
273+
const AxisSpec axis_sp2{nbin_sp, -5.f, 5.f, Form("u_{2}^{ee} #upoint Q_{2}^{%s}", qvec_det_names[cfgQvecEstimator].data())};
274+
const AxisSpec axis_sp_dummy{1, -5.f, 5.f, Form("u_{3}^{ee} #upoint Q_{3}^{%s}", qvec_det_names[cfgQvecEstimator].data())};
275+
276+
fRegistry.add("Pair/same/uls/hs", "dielectron", kTHnSparseD, {axis_mass, axis_pt, axis_dca, axis_sp2}, true);
269277
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);
270278
fRegistry.addClone("Pair/same/uls/", "Pair/same/lspp/");
271279
fRegistry.addClone("Pair/same/uls/", "Pair/same/lsmm/");
272-
fRegistry.addClone("Pair/same/", "Pair/mix/");
280+
281+
fRegistry.add("Pair/mix/uls/hs", "dielectron", kTHnSparseD, {axis_mass, axis_pt, axis_dca, axis_sp_dummy}, true);
282+
fRegistry.add("Pair/mix/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);
283+
fRegistry.addClone("Pair/mix/uls/", "Pair/mix/lspp/");
284+
fRegistry.addClone("Pair/mix/uls/", "Pair/mix/lsmm/");
273285

274286
// for track info
275287
fRegistry.add("Track/hPt", "pT;p_{T} (GeV/c)", kTH1F, {{1000, 0.0f, 10}}, false);
@@ -404,8 +416,13 @@ struct dielectronQC {
404416
return false;
405417
}
406418

407-
float pca = 999.f, lxy = 999.f; // in unit of cm
408-
o2::aod::pwgem::dilepton::utils::pairutil::isSVFound(fitter, collision, t1, t2, pca, lxy);
419+
// float pca = 999.f, lxy = 999.f; // in unit of cm
420+
// o2::aod::pwgem::dilepton::utils::pairutil::isSVFound(fitter, collision, t1, t2, pca, lxy);
421+
422+
std::array<float, 2> q2ft0m = {collision.q2xft0m(), collision.q2yft0m()};
423+
std::array<float, 2> q2ft0a = {collision.q2xft0a(), collision.q2yft0a()};
424+
std::array<float, 2> q2ft0c = {collision.q2xft0c(), collision.q2yft0c()};
425+
const std::array<float, 2> q2vector[3] = {q2ft0m, q2ft0a, q2ft0c};
409426

410427
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassElectron);
411428
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassElectron);
@@ -419,14 +436,24 @@ struct dielectronQC {
419436
float dca_ee_3d = std::sqrt((dca_t1_3d * dca_t1_3d + dca_t2_3d * dca_t2_3d) / 2.);
420437
float phiv = getPhivPair(t1.px(), t1.py(), t1.pz(), t2.px(), t2.py(), t2.pz(), t1.sign(), t2.sign(), d_bz);
421438

439+
float sp2 = 0.f;
440+
if constexpr (ev_id == 0) {
441+
if (cfgDoFlow) {
442+
std::array<float, 2> u2_gg = {static_cast<float>(std::cos(2 * v12.Phi())), static_cast<float>(std::sin(2 * v12.Phi()))};
443+
sp2 = RecoDecay::dotProd(u2_gg, q2vector[cfgQvecEstimator]);
444+
}
445+
} else if constexpr (ev_id == 1) {
446+
sp2 = 0.f;
447+
}
448+
422449
if (t1.sign() * t2.sign() < 0) { // ULS
423-
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("uls/hs"), v12.M(), v12.Pt(), dca_ee_3d, pca * 10);
450+
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("uls/hs"), v12.M(), v12.Pt(), dca_ee_3d, sp2);
424451
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("uls/hMvsPhiV"), phiv, v12.M());
425452
} else if (t1.sign() > 0 && t2.sign() > 0) { // LS++
426-
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lspp/hs"), v12.M(), v12.Pt(), dca_ee_3d, pca * 10);
453+
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lspp/hs"), v12.M(), v12.Pt(), dca_ee_3d, sp2);
427454
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lspp/hMvsPhiV"), phiv, v12.M());
428455
} else if (t1.sign() < 0 && t2.sign() < 0) { // LS--
429-
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lsmm/hs"), v12.M(), v12.Pt(), dca_ee_3d, pca * 10);
456+
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lsmm/hs"), v12.M(), v12.Pt(), dca_ee_3d, sp2);
430457
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lsmm/hMvsPhiV"), phiv, v12.M());
431458
}
432459

PWGEM/PhotonMeson/Tasks/dimuonQC.cxx

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ struct dimuonQC {
7575
Configurable<bool> skipGRPOquery{"skipGRPOquery", true, "skip grpo query"};
7676
Configurable<float> d_bz_input{"d_bz_input", -999, "bz field in kG, -999 is automatic"};
7777

78+
Configurable<int> cfgQvecEstimator{"cfgQvecEstimator", 3, "FT0M:0, FT0A:1, FT0C:2, BTOT:3"};
7879
Configurable<int> cfgCentEstimator{"cfgCentEstimator", 2, "FT0M:0, FT0A:1, FT0C:2"};
7980
Configurable<float> cfgCentMin{"cfgCentMin", 0, "min. centrality"};
8081
Configurable<float> cfgCentMax{"cfgCentMax", 999.f, "max. centrality"};
@@ -254,12 +255,23 @@ struct dimuonQC {
254255
const AxisSpec axis_mass{ConfMmumuBins, "m_{#mu#mu} (GeV/c^{2})"};
255256
const AxisSpec axis_pt{ConfPtmumuBins, "p_{T,#mu#mu} (GeV/c)"};
256257
const AxisSpec axis_dca{ConfDCAmumuBins, "DCA_{#mu#mu}^{xy} (#sigma)"};
257-
const AxisSpec axis_pca{ConfPCAmumuBins, "PCA (mm)"}; // particle closest approach
258+
// const AxisSpec axis_pca{ConfPCAmumuBins, "PCA (mm)"}; // particle closest approach
258259

259-
fRegistry.add("Pair/same/uls/hs", "dimuon", kTHnSparseD, {axis_mass, axis_pt, axis_dca, axis_pca}, true);
260+
std::string_view qvec_det_names[4] = {"FT0M", "FT0A", "FT0C", "BTOT"};
261+
int nbin_sp = 1;
262+
if (cfgDoFlow) {
263+
nbin_sp = 100;
264+
}
265+
const AxisSpec axis_sp2{nbin_sp, -5.f, 5.f, Form("u_{2}^{#mu#mu} #upoint Q_{2}^{%s}", qvec_det_names[cfgQvecEstimator].data())};
266+
const AxisSpec axis_sp_dummy{1, -5.f, 5.f, Form("u_{3}^{#mu#mu} #upoint Q_{3}^{%s}", qvec_det_names[cfgQvecEstimator].data())};
267+
268+
fRegistry.add("Pair/same/uls/hs", "dimuon", kTHnSparseD, {axis_mass, axis_pt, axis_dca, axis_sp2}, true);
260269
fRegistry.addClone("Pair/same/uls/", "Pair/same/lspp/");
261270
fRegistry.addClone("Pair/same/uls/", "Pair/same/lsmm/");
262-
fRegistry.addClone("Pair/same/", "Pair/mix/");
271+
272+
fRegistry.add("Pair/mix/uls/hs", "dimuon", kTHnSparseD, {axis_mass, axis_pt, axis_dca, axis_sp_dummy}, true);
273+
fRegistry.addClone("Pair/mix/uls/", "Pair/mix/lspp/");
274+
fRegistry.addClone("Pair/mix/uls/", "Pair/mix/lsmm/");
263275

264276
// for track info
265277
fRegistry.add("Track/hPt", "pT;p_{T} (GeV/c)", kTH1F, {{1000, 0.0f, 10}}, false);
@@ -342,8 +354,14 @@ struct dimuonQC {
342354
return false;
343355
}
344356

345-
float pca = 999.f, lxy = 999.f; // in unit of cm
346-
o2::aod::pwgem::dilepton::utils::pairutil::isSVFoundFwd(fitter, collision, t1, t2, pca, lxy);
357+
// float pca = 999.f, lxy = 999.f; // in unit of cm
358+
// o2::aod::pwgem::dilepton::utils::pairutil::isSVFoundFwd(fitter, collision, t1, t2, pca, lxy);
359+
360+
std::array<float, 2> q2ft0m = {collision.q2xft0m(), collision.q2yft0m()};
361+
std::array<float, 2> q2ft0a = {collision.q2xft0a(), collision.q2yft0a()};
362+
std::array<float, 2> q2ft0c = {collision.q2xft0c(), collision.q2yft0c()};
363+
std::array<float, 2> q2btot = {collision.q2xbtot(), collision.q2ybtot()};
364+
const std::array<float, 2> q2vector[4] = {q2ft0m, q2ft0a, q2ft0c, q2btot};
347365

348366
ROOT::Math::PtEtaPhiMVector v1(t1.pt(), t1.eta(), t1.phi(), o2::constants::physics::MassMuon);
349367
ROOT::Math::PtEtaPhiMVector v2(t2.pt(), t2.eta(), t2.phi(), o2::constants::physics::MassMuon);
@@ -356,12 +374,21 @@ struct dimuonQC {
356374
float dca_xy_t2 = fwdDcaXYinSigma(t2);
357375
float dca_mumu_xy = std::sqrt((dca_xy_t1 * dca_xy_t1 + dca_xy_t2 * dca_xy_t2) / 2.);
358376

377+
float sp2 = 0.f;
378+
if constexpr (ev_id == 0) {
379+
if (cfgDoFlow) {
380+
std::array<float, 2> u2_gg = {static_cast<float>(std::cos(2 * v12.Phi())), static_cast<float>(std::sin(2 * v12.Phi()))};
381+
sp2 = RecoDecay::dotProd(u2_gg, q2vector[cfgQvecEstimator]);
382+
}
383+
} else if constexpr (ev_id == 1) {
384+
sp2 = 0.f;
385+
}
359386
if (t1.sign() * t2.sign() < 0) { // ULS
360-
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("uls/hs"), v12.M(), v12.Pt(), dca_mumu_xy, pca * 10);
387+
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("uls/hs"), v12.M(), v12.Pt(), dca_mumu_xy, sp2);
361388
} else if (t1.sign() > 0 && t2.sign() > 0) { // LS++
362-
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lspp/hs"), v12.M(), v12.Pt(), dca_mumu_xy, pca * 10);
389+
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lspp/hs"), v12.M(), v12.Pt(), dca_mumu_xy, sp2);
363390
} else if (t1.sign() < 0 && t2.sign() < 0) { // LS--
364-
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lsmm/hs"), v12.M(), v12.Pt(), dca_mumu_xy, pca * 10);
391+
fRegistry.fill(HIST("Pair/") + HIST(event_pair_types[ev_id]) + HIST("lsmm/hs"), v12.M(), v12.Pt(), dca_mumu_xy, sp2);
365392
}
366393

367394
// store tracks for event mixing without double counting

0 commit comments

Comments
 (0)