@@ -118,11 +118,14 @@ using MyEMH_muon = o2::aod::pwgem::dilepton::utils::EventMixingHandler<std::tupl
118118
119119template <o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType pairtype, bool withSCT, typename TEMH , typename ... Types>
120120struct DileptonSV {
121-
122121 // Configurables
123122 o2::framework::Configurable<std::string> ccdburl{" ccdb-url" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
124123 o2::framework::Configurable<std::string> grpPath{" grpPath" , " GLO/GRP/GRP" , " Path of the grp file" };
125124 o2::framework::Configurable<std::string> grpmagPath{" grpmagPath" , " GLO/Config/GRPMagField" , " CCDB path of the GRPMagField object" };
125+ o2::framework::Configurable<std::string> lutPath{" lutPath" , " GLO/Param/MatLUT" , " Path of the Lut parametrization" };
126+ o2::framework::Configurable<std::string> geoPath{" geoPath" , " GLO/Config/GeometryAligned" , " Path of the geometry file" };
127+ o2::framework::Configurable<int > matCorrType{" matCorrType" , 1 , " 0: none, 1: TGeo, 2: LUT, else: none" };
128+
126129 o2::framework::Configurable<bool > cfgApplySPresolution{" cfgApplySPresolution" , false , " flag to apply resolution correction for flow analysis" };
127130 o2::framework::Configurable<std::string> spresoPath{" spresoPath" , " Users/d/dsekihat/PWGEM/dilepton/Qvector/resolution/LHC23zzh/pass3/test" , " Path to SP resolution file" };
128131 o2::framework::Configurable<std::string> spresoHistName{" spresoHistName" , " h1_R2_FT0M_BPos_BNeg" , " histogram name of SP resolution file" };
@@ -138,6 +141,8 @@ struct DileptonSV {
138141 o2::framework::ConfigurableAxis ConfPtllBins{" ConfPtllBins" , {o2::framework::VARIABLE_WIDTH , 0.00 , 0.10 , 0.20 , 0.30 , 0.40 , 0.50 , 0.60 , 0.70 , 0.80 , 0.90 , 1.00 , 1.10 , 1.20 , 1.30 , 1.40 , 1.50 , 1.60 , 1.70 , 1.80 , 1.90 , 2.00 , 2.50 , 3.00 , 3.50 , 4.00 , 4.50 , 5.00 , 6.00 , 7.00 , 8.00 , 9.00 , 10.00 }, " pTll bins for output histograms" };
139142 o2::framework::ConfigurableAxis ConfDCAllBins{" ConfDCAllBins" , {o2::framework::VARIABLE_WIDTH , 0.0 , 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.9 , 1.0 , 1.1 , 1.2 , 1.3 , 1.4 , 1.5 , 1.6 , 1.7 , 1.8 , 1.9 , 2.0 , 2.5 , 3.0 , 3.5 , 4.0 , 4.5 , 5.0 , 6.0 , 7.0 , 8.0 , 9.0 , 10.0 }, " DCAll bins for output histograms" };
140143 o2::framework::ConfigurableAxis ConfYllBins{" ConfYllBins" , {1 , -1 .f , 1 .f }, " yll bins for output histograms" }; // pair rapidity
144+ o2::framework::ConfigurableAxis ConfLog10Chi2PCABins{" ConfLog10Chi2PCABins" , {1 , -12 .f , 0 .f }, " log10 of chi2PCA bins for output histograms" };
145+ o2::framework::ConfigurableAxis ConfDLBins{" ConfDLBins" , {1 , 0 .f , 10 .f }, " decay length bins for output histograms" };
141146 o2::framework::ConfigurableAxis ConfCPABins{" ConfCPABins" , {o2::framework::VARIABLE_WIDTH , -1 , -0.95 , -0.9 , -0.85 , -0.8 , -0.7 , -0.6 , -0.5 , -0.4 , -0.3 , -0.2 , -0.1 , 0 , 0.1 , 0.2 , 0.3 , 0.4 , 0.5 , 0.6 , 0.7 , 0.8 , 0.85 , 0.9 , 0.95 , 1 }, " cpa bins for output histograms" };
142147
143148 o2::framework::ConfigurableAxis ConfSPBins{" ConfSPBins" , {200 , -5 , 5 }, " SP bins for flow analysis" };
@@ -542,6 +547,36 @@ struct DileptonSV {
542547 mFwdDCAFitter .setMinParamChange (fdfGroup.minParamChange );
543548 mFwdDCAFitter .setMinRelChi2Change (fdfGroup.minRelChi2Change );
544549 mFwdDCAFitter .setUseAbsDCA (fdfGroup.useAbsDCA );
550+
551+ if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon ) {
552+ switch (matCorrType.value ) {
553+ case static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::MatCorrType::kNone ):
554+ mFwdDCAFitter .setTGeoMat (false );
555+ break ;
556+ case static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::MatCorrType::kTGeo ):
557+ LOGF (info, " TGeo correction requested, loading geometry" );
558+ if (!o2::base::GeometryManager::isGeometryLoaded ()) {
559+ ccdb->get <TGeoManager>(geoPath);
560+ }
561+ // matCorr = o2::base::Propagator::MatCorrType::USEMatCorrTGeo;
562+ mFwdDCAFitter .setTGeoMat (true );
563+ break ;
564+ case static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::MatCorrType::kLUT ): {
565+ LOGF (info, " LUT correction requested, loading LUT" );
566+ o2::base::MatLayerCylSet* lut = o2::base::MatLayerCylSet::rectifyPtrFromFile (ccdb->get <o2::base::MatLayerCylSet>(lutPath));
567+ // matCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT;
568+ mFwdDCAFitter .setTGeoMat (false );
569+ mFwdDCAFitter .setMatLUT (lut);
570+ break ;
571+ }
572+ default :
573+ LOGF (info, " no correction requested, loading LUT by default!" );
574+ // lut = o2::base::MatLayerCylSet::rectifyPtrFromFile(ccdb->get<o2::base::MatLayerCylSet>(lutPath));
575+ // matCorr = o2::base::Propagator::MatCorrType::USEMatCorrLUT;
576+ mFwdDCAFitter .setTGeoMat (false );
577+ break ;
578+ }
579+ }
545580 }
546581
547582 template <bool isTriggerAnalysis, typename TCollision>
@@ -657,10 +692,12 @@ struct DileptonSV {
657692 const o2::framework::AxisSpec axis_pt{ConfPtllBins, pair_pt_axis_title};
658693 const o2::framework::AxisSpec axis_dca{ConfDCAllBins, pair_dca_axis_title};
659694 const o2::framework::AxisSpec axis_y{ConfYllBins, pair_y_axis_title};
695+ const o2::framework::AxisSpec axis_chi2PCA{ConfLog10Chi2PCABins, " log_{10}(#chi^{2}_{PCA})" };
696+ const o2::framework::AxisSpec axis_dl{ConfDLBins, " decay length (#sigma)" };
660697 const o2::framework::AxisSpec axis_cpa{ConfCPABins, " cos(#theta_{p})" };
661698
662699 if (cfgAnalysisType == static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::DileptonAnalysisType::kQC )) {
663- fRegistry .add (" Pair/same/uls/hs" , " dilepton" , o2::framework::HistType::kTHnSparseD , {axis_mass, axis_pt, axis_dca, axis_y, axis_cpa}, true );
700+ fRegistry .add (" Pair/same/uls/hs" , " dilepton" , o2::framework::HistType::kTHnSparseD , {axis_mass, axis_pt, axis_dca, axis_y, axis_chi2PCA, axis_dl, axis_cpa}, true );
664701 fRegistry .add (" Pair/same/uls/hDeltaEtaDeltaPhi" , " #Delta#eta-#Delta#varphi between 2 tracks;#Delta#varphi (rad.);#Delta#eta;" , o2::framework::HistType::kTH2D , {{360 , -M_PI , M_PI }, {400 , -2 , +2 }}, true );
665702
666703 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
@@ -716,7 +753,7 @@ struct DileptonSV {
716753 const o2::framework::AxisSpec axis_cos_theta{ConfPolarizationCosThetaBins, Form (" cos(#theta^{%s})" , frameName.data ())};
717754 const o2::framework::AxisSpec axis_phi{ConfPolarizationPhiBins, Form (" #varphi^{%s} (rad.)" , frameName.data ())};
718755 const o2::framework::AxisSpec axis_quadmom{ConfPolarizationQuadMomBins, Form (" #frac{3 cos^{2}(#theta^{%s}) -1}{2}" , frameName.data ())};
719- fRegistry .add (" Pair/same/uls/hs" , " dilepton" , o2::framework::HistType::kTHnSparseD , {axis_mass, axis_pt, axis_dca, axis_y, axis_cos_theta, axis_phi, axis_quadmom, axis_cpa }, true );
756+ fRegistry .add (" Pair/same/uls/hs" , " dilepton" , o2::framework::HistType::kTHnSparseD , {axis_mass, axis_pt, axis_dca, axis_y, axis_cos_theta, axis_phi, axis_quadmom}, true );
720757
721758 fRegistry .addClone (" Pair/same/uls/" , " Pair/same/lspp/" );
722759 fRegistry .addClone (" Pair/same/uls/" , " Pair/same/lsmm/" );
@@ -1157,19 +1194,19 @@ struct DileptonSV {
11571194 float phiv = o2::aod::pwgem::dilepton::utils::pairutil::getPhivPair (t1.px (), t1.py (), t1.pz (), t2.px (), t2.py (), t2.pz (), t1.sign (), t2.sign (), d_bz);
11581195
11591196 if (t1.sign () * t2.sign () < 0 ) { // ULS
1160- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), candidate.cpa , weight);
1197+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), std::log10 (candidate. chi2PCA ), candidate. lxyz / candidate. lxyzErr , candidate.cpa , weight);
11611198 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
11621199 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
11631200 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hMvsPhiV" ), phiv, v12.M (), weight);
11641201 }
11651202 } else if (t1.sign () > 0 && t2.sign () > 0 ) { // LS++
1166- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), candidate.cpa , weight);
1203+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), std::log10 (candidate. chi2PCA ), candidate. lxyz / candidate. lxyzErr , candidate.cpa , weight);
11671204 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
11681205 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
11691206 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hMvsPhiV" ), phiv, v12.M (), weight);
11701207 }
11711208 } else if (t1.sign () < 0 && t2.sign () < 0 ) { // LS--
1172- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), candidate.cpa , weight);
1209+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), std::log10 (candidate. chi2PCA ), candidate. lxyz / candidate. lxyzErr , candidate.cpa , weight);
11731210 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
11741211 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
11751212 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hMvsPhiV" ), phiv, v12.M (), weight);
@@ -1251,11 +1288,11 @@ struct DileptonSV {
12511288 float quadmom = (3 .f * std::pow (cos_thetaPol, 2 ) - 1 .f ) / 2 .f ;
12521289
12531290 if (t1.sign () * t2.sign () < 0 ) { // ULS
1254- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), cos_thetaPol, phiPol, quadmom, candidate. cpa , weight);
1291+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), cos_thetaPol, phiPol, quadmom, weight);
12551292 } else if (t1.sign () > 0 && t2.sign () > 0 ) { // LS++
1256- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), cos_thetaPol, phiPol, quadmom, candidate. cpa , weight);
1293+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), cos_thetaPol, phiPol, quadmom, weight);
12571294 } else if (t1.sign () < 0 && t2.sign () < 0 ) { // LS--
1258- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), cos_thetaPol, phiPol, quadmom, candidate. cpa , weight);
1295+ fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hs" ), v12.M (), v12.Pt (), pair_dca, v12.Rapidity (), cos_thetaPol, phiPol, quadmom, weight);
12591296 }
12601297 } else if (cfgAnalysisType == static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::DileptonAnalysisType::kHFll )) {
12611298 float dphi = v1.Phi () - v2.Phi ();
@@ -1467,9 +1504,8 @@ struct DileptonSV {
14671504 ifnode((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kElFromPi0_140MeV ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfb & static_cast <uint8_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kElFromPi0_140MeV ))) <= static_cast<uint8_t>(0 ), true),
14681505 o2::aod::emprimaryelectron::pfb >= static_cast<uint8_t>(0 ));
14691506
1470- using TElectronType = std::tuple_element_t <0 , std::tuple<Types...>>;
1471- o2::framework::Partition<TElectronType> positive_electrons = o2::aod::emprimaryelectron::sign > int8_t (0 );
1472- o2::framework::Partition<TElectronType> negative_electrons = o2::aod::emprimaryelectron::sign < int8_t (0 );
1507+ o2::framework::Partition<FilteredMyElectrons> positive_electrons = o2::aod::emprimaryelectron::sign > int8_t (0 );
1508+ o2::framework::Partition<FilteredMyElectrons> negative_electrons = o2::aod::emprimaryelectron::sign < int8_t (0 );
14731509
14741510 o2::framework::Preslice<o2::aod::EMPrimaryMuonEMEventIds> perCollision_muon = o2::aod::emprimarymuon::emeventId;
14751511 o2::framework::expressions::Filter trackFilter_muon = o2::aod::fwdtrack::trackType == dimuoncuts.cfg_track_type && dimuoncuts.cfg_min_pt_track < o2::aod::fwdtrack::pt && o2::aod::fwdtrack::pt < dimuoncuts.cfg_max_pt_track && dimuoncuts.cfg_min_eta_track < o2::aod::fwdtrack::eta && o2::aod::fwdtrack::eta < dimuoncuts.cfg_max_eta_track;
0 commit comments