@@ -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
0 commit comments