@@ -173,15 +173,12 @@ struct Dilepton {
173173 Configurable<bool > cfg_apply_detadphi{" cfg_apply_detadphi" , false , " flag to apply deta-dphi elliptic cut" };
174174 Configurable<float > cfg_min_deta{" cfg_min_deta" , 0.02 , " min deta between 2 electrons (elliptic cut)" };
175175 Configurable<float > cfg_min_dphi{" cfg_min_dphi" , 0.2 , " min dphi between 2 electrons (elliptic cut)" };
176- Configurable<bool > cfg_apply_dzrdphi_geom{" cfg_apply_dzrdphi_geom" , false , " flag to apply generator dz-rdphi elliptic cut" };
177- Configurable<float > cfg_min_dz_geom{" cfg_min_dz_geom" , 5 , " geometrical min dz between 2 electrons (elliptic cut) in cm" };
178- Configurable<float > cfg_min_rdphi_geom{" cfg_min_rdphi_geom" , 20 , " geometrical min rdphi between 2 electrons (elliptic cut) in cm" };
179176 Configurable<float > cfg_min_opang{" cfg_min_opang" , 0.0 , " min opening angle" };
180177 Configurable<float > cfg_max_opang{" cfg_max_opang" , 6.4 , " max opening angle" };
181178 Configurable<bool > cfg_require_diff_sides{" cfg_require_diff_sides" , false , " flag to require 2 tracks are from different sides." };
182179
183180 Configurable<bool > cfg_apply_cuts_from_prefilter{" cfg_apply_cuts_from_prefilter" , false , " flag to apply phiv cut inherited from prefilter" };
184- Configurable<uint16_t > cfg_prefilter_bits{" cfg_prefilter_bits" , 0 , " prefilter bits [kNone : 0, kMee : 1, kPhiV : 2, kSplitOrMergedTrackLS : 4, kSplitOrMergedTrackULS : 8, kSplitOrMergedTrackLSGeom : 16, kSplitOrMergedTrackULSGeom : 32 ] Please consider logical-OR among them." }; // see PairUtilities.h
181+ Configurable<uint16_t > cfg_prefilter_bits{" cfg_prefilter_bits" , 0 , " prefilter bits [kNone : 0, kMee : 1, kPhiV : 2, kSplitOrMergedTrackLS : 4, kSplitOrMergedTrackULS : 8] Please consider logical-OR among them." }; // see PairUtilities.h
185182
186183 Configurable<float > cfg_min_pt_track{" cfg_min_pt_track" , 0.2 , " min pT for single track" };
187184 Configurable<float > cfg_max_pt_track{" cfg_max_pt_track" , 1e+10 , " max pT for single track" };
@@ -206,7 +203,6 @@ struct Dilepton {
206203 Configurable<float > cfg_max_p_its_cluster_size{" cfg_max_p_its_cluster_size" , 0.0 , " max p to apply ITS cluster size cut" };
207204 Configurable<float > cfg_min_rel_diff_pin{" cfg_min_rel_diff_pin" , -1e+10 , " min rel. diff. between pin and ppv" };
208205 Configurable<float > cfg_max_rel_diff_pin{" cfg_max_rel_diff_pin" , +1e+10 , " max rel. diff. between pin and ppv" };
209- Configurable<float > cfg_x_to_go{" cfg_x_to_go" , -1 , " x (cm) to be propagated in local coordinate" };
210206
211207 Configurable<int > cfg_pid_scheme{" cfg_pid_scheme" , static_cast <int >(DielectronCut::PIDSchemes::kTPChadrejORTOFreq ), " pid scheme [kTOFreq : 0, kTPChadrej : 1, kTPChadrejORTOFreq : 2, kTPConly : 3, kTOFif : 4, kPIDML : 5, kTPChadrejORTOFreq_woTOFif : 6]" };
212208 Configurable<float > cfg_min_TPCNsigmaEl{" cfg_min_TPCNsigmaEl" , -2.0 , " min. TPC n sigma for electron inclusion" };
@@ -532,7 +528,6 @@ struct Dilepton {
532528 if (cfgAnalysisType == static_cast <int >(o2::aod::pwgem::dilepton::utils::pairutil::DileptonAnalysisType::kQC )) {
533529 fRegistry .add (" Pair/same/uls/hs" , " dilepton" , kTHnSparseD , {axis_mass, axis_pt, axis_dca}, true );
534530 fRegistry .add (" Pair/same/uls/hDeltaEtaDeltaPhi" , " #Delta#eta-#Delta#varphi between 2 tracks;#Delta#varphi (rad.);#Delta#eta;" , kTH2D , {{180 , -M_PI, M_PI}, {200 , -1 , +1 }}, true );
535- fRegistry .add (" Pair/same/uls/hGeomDeltaZRDeltaPhi" , Form (" difference in z-r#varphi plane between 2 tracks at r = %2.1f cm;r#Delta#varphi (cm);#Deltaz (cm);" , dielectroncuts.cfg_x_to_go .value ), kTH2D , {{200 , -100 , 100 }, {200 , -10 , 10 }}, true );
536531 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
537532 fRegistry .add (" Pair/same/uls/hMvsPhiV" , " m_{ee} vs. #varphi_{V};#varphi_{V} (rad.);m_{ee} (GeV/c^{2})" , kTH2D , {{90 , 0 , M_PI}, {100 , 0 .0f , 1 .0f }}, true ); // phiv is only for dielectron
538533 fRegistry .add (" Pair/same/uls/hMvsOpAng" , " m_{ee} vs. angle between 2 tracks;#omega (rad.);m_{ee} (GeV/c^{2})" , kTH2D , {{90 , 0 , M_PI}, {100 , 0 .0f , 1 .0f }}, true );
@@ -776,28 +771,6 @@ struct Dilepton {
776771 }
777772 }
778773
779- std::map<std::tuple<int , int , int >, float > map_z_prop; // map <dfId, collisionId, trackId> -> geometrical z position at propagated point
780- std::map<std::tuple<int , int , int >, float > map_phi_prop; // map <dfId, collisionId, trackId> -> geometrical phi position at propagated point
781-
782- template <typename TTracks>
783- void propagateElectron (TTracks const & tracks)
784- {
785- // this has to be called after initCCDB for bz.
786- for (auto & track : tracks) {
787- auto track_par_cov = getTrackParCov (track);
788- track_par_cov.setPID (o2::track::PID::Electron);
789- o2::base::Propagator::Instance ()->propagateToX (track_par_cov, dielectroncuts.cfg_x_to_go , d_bz, o2::base::PropagatorImpl<float >::MAX_SIN_PHI, o2::base::PropagatorImpl<float >::MAX_STEP, matCorr);
790- auto xyz = track_par_cov.getXYZGlo ();
791- // float eta = RecoDecay::eta(std::array{xyz.X(), xyz.Y(), xyz.Z()});
792- float phi = RecoDecay::phi (std::array{xyz.X (), xyz.Y ()});
793- o2::math_utils::bringTo02Pi (phi);
794- map_z_prop[std::make_tuple (ndf, track.emeventId (), track.globalIndex ())] = xyz.Z ();
795- map_phi_prop[std::make_tuple (ndf, track.emeventId (), track.globalIndex ())] = phi;
796- // std::array<float, 3> pxpypz_prop = {0, 0, 0}; // px, py, pz
797- // getPxPyPz(track_par_cov, pxpypz_prop);
798- }
799- }
800-
801774 template <int ev_id, typename TCollision, typename TTrack1, typename TTrack2, typename TCut>
802775 bool fillPairInfo (TCollision const & collision, TTrack1 const & t1, TTrack2 const & t2, TCut const & cut)
803776 {
@@ -843,25 +816,10 @@ struct Dilepton {
843816 }
844817 }
845818
846- float dphi_geom = 999 .f , dz_geom = 999 .f , rdphi_geom = 999 .f ;
847819 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
848820 if (!cut.template IsSelectedPair (t1, t2, d_bz)) {
849821 return false ;
850822 }
851- if constexpr (ev_id == 0 ) {
852- dz_geom = t1.sign () * t1.pt () > t2.sign () * t2.pt () ? map_z_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())] - map_z_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] : map_z_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] - map_z_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())];
853- dphi_geom = t1.sign () * t1.pt () > t2.sign () * t2.pt () ? map_phi_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())] - map_phi_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] : map_phi_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] - map_phi_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())];
854- o2::math_utils::bringToPMPi (dphi_geom);
855- rdphi_geom = dielectroncuts.cfg_x_to_go * dphi_geom;
856- } else { // mixed event
857- dz_geom = t1.sign () * t1.pt () > t2.sign () * t2.pt () ? map_z_prop[std::make_tuple (t1.dfId (), t1.collisionId (), t1.globalIndex ())] - map_z_prop[std::make_tuple (t2.dfId (), t2.collisionId (), t2.globalIndex ())] : map_z_prop[std::make_tuple (t2.dfId (), t2.collisionId (), t2.globalIndex ())] - map_z_prop[std::make_tuple (t1.dfId (), t1.collisionId (), t1.globalIndex ())];
858- dphi_geom = t1.sign () * t1.pt () > t2.sign () * t2.pt () ? map_phi_prop[std::make_tuple (t1.dfId (), t1.collisionId (), t1.globalIndex ())] - map_phi_prop[std::make_tuple (t2.dfId (), t2.collisionId (), t2.globalIndex ())] : map_phi_prop[std::make_tuple (t2.dfId (), t2.collisionId (), t2.globalIndex ())] - map_phi_prop[std::make_tuple (t1.dfId (), t1.collisionId (), t1.globalIndex ())];
859- o2::math_utils::bringToPMPi (dphi_geom);
860- rdphi_geom = dielectroncuts.cfg_x_to_go * dphi_geom;
861- }
862- if (dielectroncuts.cfg_x_to_go > 0 .f && dielectroncuts.cfg_apply_dzrdphi_geom && std::pow (dz_geom / dielectroncuts.cfg_min_dz_geom , 2 ) + std::pow (rdphi_geom / dielectroncuts.cfg_min_rdphi_geom , 2 ) < 1 .f ) {
863- return false ;
864- }
865823 } else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon ) {
866824 if (!cut.template IsSelectedPair (t1, t2)) {
867825 return false ;
@@ -921,23 +879,20 @@ struct Dilepton {
921879 if (t1.sign () * t2.sign () < 0 ) { // ULS
922880 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hs" ), v12.M (), v12.Pt (), pair_dca, weight);
923881 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
924- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hGeomDeltaZRDeltaPhi" ), rdphi_geom, dz_geom, weight);
925882 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
926883 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hMvsPhiV" ), phiv, v12.M (), weight);
927884 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" uls/hMvsOpAng" ), opAng, v12.M (), weight);
928885 }
929886 } else if (t1.sign () > 0 && t2.sign () > 0 ) { // LS++
930887 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hs" ), v12.M (), v12.Pt (), pair_dca, weight);
931888 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
932- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hGeomDeltaZRDeltaPhi" ), rdphi_geom, dz_geom, weight);
933889 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
934890 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hMvsPhiV" ), phiv, v12.M (), weight);
935891 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lspp/hMvsOpAng" ), opAng, v12.M (), weight);
936892 }
937893 } else if (t1.sign () < 0 && t2.sign () < 0 ) { // LS--
938894 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hs" ), v12.M (), v12.Pt (), pair_dca, weight);
939895 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hDeltaEtaDeltaPhi" ), dphi, deta, weight);
940- fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hGeomDeltaZRDeltaPhi" ), rdphi_geom, dz_geom, weight);
941896 if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
942897 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hMvsPhiV" ), phiv, v12.M (), weight);
943898 fRegistry .fill (HIST (" Pair/" ) + HIST (event_pair_types[ev_id]) + HIST (" lsmm/hMvsOpAng" ), opAng, v12.M (), weight);
@@ -1139,9 +1094,7 @@ struct Dilepton {
11391094 ifnode ((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kMee ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbpi0 & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kMee ))) <= static_cast<uint16_t>(0 ), true) &&
11401095 ifnode((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kPhiV ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbpi0 & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kPhiV ))) <= static_cast<uint16_t>(0 ), true) &&
11411096 ifnode((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackLS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbpi0 & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackLS ))) <= static_cast<uint16_t>(0 ), true) &&
1142- ifnode((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackULS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbpi0 & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackULS ))) <= static_cast<uint16_t>(0 ), true) &&
1143- ifnode((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackLSGeom ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbpi0 & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackLSGeom ))) <= static_cast<uint16_t>(0 ), true) &&
1144- ifnode((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackULSGeom ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbpi0 & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackULSGeom ))) <= static_cast<uint16_t>(0 ), true),
1097+ ifnode((dielectroncuts.cfg_prefilter_bits.node() & static_cast<uint16_t>(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackULS ))) > static_cast<uint16_t>(0 ), (o2::aod::emprimaryelectron::pfbpi0 & static_cast <uint16_t >(1 << int (o2::aod::pwgem::dilepton::utils::pairutil::DileptonPrefilterBit::kSplitOrMergedTrackULS ))) <= static_cast<uint16_t>(0 ), true),
11451098 o2::aod::emprimaryelectron::pfbpi0 >= static_cast<uint16_t>(0 ));
11461099
11471100 Partition<FilteredMyElectrons> positive_electrons = o2::aod::emprimaryelectron::sign > int8_t (0 );
@@ -1236,13 +1189,6 @@ struct Dilepton {
12361189 auto negTracks_per_coll = negTracks.sliceByCached (perCollision, collision.globalIndex (), cache);
12371190 // LOGF(info, "collision.globalIndex() = %d , collision.posZ() = %f , collision.numContrib() = %d, centrality = %f , posTracks_per_coll.size() = %d, negTracks_per_coll.size() = %d", collision.globalIndex(), collision.posZ(), collision.numContrib(), centralities[cfgCentEstimator], posTracks_per_coll.size(), negTracks_per_coll.size());
12381191
1239- if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
1240- if (dielectroncuts.cfg_x_to_go > 0 .f ) {
1241- propagateElectron (posTracks_per_coll);
1242- propagateElectron (negTracks_per_coll);
1243- }
1244- }
1245-
12461192 int nuls = 0 , nlspp = 0 , nlsmm = 0 ;
12471193 for (auto & [pos, neg] : combinations (CombinationsFullIndexPolicy (posTracks_per_coll, negTracks_per_coll))) { // ULS
12481194 bool is_pair_ok = fillPairInfo<0 >(collision, pos, neg, cut);
@@ -1393,14 +1339,6 @@ struct Dilepton {
13931339 if (!cut.template IsSelectedPair (t1, t2, d_bz)) {
13941340 return false ;
13951341 }
1396- float dz_geom = t1.sign () * t1.pt () > t2.sign () * t2.pt () ? map_z_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())] - map_z_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] : map_z_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] - map_z_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())];
1397- float dphi_geom = t1.sign () * t1.pt () > t2.sign () * t2.pt () ? map_phi_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())] - map_phi_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] : map_phi_prop[std::make_tuple (ndf, t2.emeventId (), t2.globalIndex ())] - map_phi_prop[std::make_tuple (ndf, t1.emeventId (), t1.globalIndex ())];
1398- o2::math_utils::bringToPMPi (dphi_geom);
1399- float rdphi_geom = dielectroncuts.cfg_x_to_go * dphi_geom;
1400-
1401- if (dielectroncuts.cfg_x_to_go > 0 .f && dielectroncuts.cfg_apply_dzrdphi_geom && std::pow (dz_geom / dielectroncuts.cfg_min_dz_geom , 2 ) + std::pow (rdphi_geom / dielectroncuts.cfg_min_rdphi_geom , 2 ) < 1 .f ) {
1402- return false ;
1403- }
14041342 } else if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDimuon ) {
14051343 if (!cut.template IsSelectedPair (t1, t2)) {
14061344 return false ;
@@ -1459,12 +1397,6 @@ struct Dilepton {
14591397
14601398 auto posTracks_per_coll = posTracks.sliceByCached (perCollision, collision.globalIndex (), cache);
14611399 auto negTracks_per_coll = negTracks.sliceByCached (perCollision, collision.globalIndex (), cache);
1462- if constexpr (pairtype == o2::aod::pwgem::dilepton::utils::pairutil::DileptonPairType::kDielectron ) {
1463- if (dielectroncuts.cfg_x_to_go > 0 .f ) {
1464- propagateElectron (posTracks_per_coll);
1465- propagateElectron (negTracks_per_coll);
1466- }
1467- }
14681400
14691401 for (auto & [pos, neg] : combinations (CombinationsFullIndexPolicy (posTracks_per_coll, negTracks_per_coll))) { // ULS
14701402 if (isPairOK (collision, pos, neg, cut)) {
@@ -1597,6 +1529,18 @@ struct Dilepton {
15971529 if (collision.selection_bit (o2::aod::evsel::kNoCollInTimeRangeStandard )) {
15981530 fRegistry .fill (HIST (" Event/norm/hCollisionCounter" ), 12.0 );
15991531 }
1532+ if (collision.selection_bit (o2::aod::evsel::kNoCollInTimeRangeStrict )) {
1533+ fRegistry .fill (HIST (" Event/norm/hCollisionCounter" ), 13.0 );
1534+ }
1535+ if (collision.selection_bit (o2::aod::evsel::kNoCollInRofStandard )) {
1536+ fRegistry .fill (HIST (" Event/norm/hCollisionCounter" ), 14.0 );
1537+ }
1538+ if (collision.selection_bit (o2::aod::evsel::kNoCollInRofStrict )) {
1539+ fRegistry .fill (HIST (" Event/norm/hCollisionCounter" ), 15.0 );
1540+ }
1541+ if (collision.selection_bit (o2::aod::evsel::kNoHighMultCollInPrevRof )) {
1542+ fRegistry .fill (HIST (" Event/norm/hCollisionCounter" ), 16.0 );
1543+ }
16001544 if (!fEMEventCut .IsSelected (collision)) {
16011545 continue ;
16021546 }
0 commit comments