diff --git a/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSV.cxx b/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSV.cxx index 3402faa2e42..c1285af6166 100644 --- a/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSV.cxx +++ b/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSV.cxx @@ -14,7 +14,7 @@ #include "PWGEM/Dilepton/DataModel/dileptonTables.h" #include "PWGEM/Dilepton/Utils/ElectronModule.h" -#include "PWGLF/DataModel/LFStrangenessTables.h" +// #include "PWGLF/DataModel/LFStrangenessTables.h" #include "Common/DataModel/CollisionAssociationTables.h" #include "Common/DataModel/EventSelection.h" @@ -39,7 +39,7 @@ #include #include -#include // IWYU pragma: keep (do not replace with Math/Vector4Dfwd.h) +// #include // IWYU pragma: keep (do not replace with Math/Vector4Dfwd.h) #include #include @@ -49,9 +49,7 @@ #include struct skimmerPrimaryElectronSV { - - // using MyBCs = o2::soa::Join; - using MyBCs = o2::soa::Join; + using MyBCs = o2::soa::Join; using MyCollisions = o2::soa::Join; using MyCollisionsWithSWT = o2::soa::Join; @@ -62,8 +60,8 @@ struct skimmerPrimaryElectronSV { using MyTracksMC = o2::soa::Join; using MyTrackMC = MyTracksMC::iterator; - using MyV0s = o2::soa::Join; - using MyCascades = o2::soa::Join; + // using MyV0s = o2::soa::Join; + // using MyCascades = o2::soa::Join; struct : o2::framework::ConfigurableGroup { o2::framework::Configurable ccdburl{"ccdb-url", "http://alice-ccdb.cern.ch", "url of the ccdb repository"}; @@ -73,19 +71,18 @@ struct skimmerPrimaryElectronSV { o2::framework::Configurable mVtxPath{"mVtxPath", "GLO/Calib/MeanVertex", "Path of the mean vertex file"}; } ccdbConfig; - o2::framework::Configurable doSCTwithTracks{"doSCTwithTracks", true, "flag to tag electrons with tracks"}; - o2::framework::Configurable doSCTwithV0s{"doSCTwithV0s", false, "flag to tag electrons with v0s"}; - o2::framework::Configurable doSCTwithCascades{"doSCTwithCascades", false, "flag to tag electrons with cascades"}; + o2::framework::Configurable doSCTwithTracks{"doSCTwithTracks", false, "flag to tag electrons with tracks"}; + // o2::framework::Configurable doSCTwithV0s{"doSCTwithV0s", false, "flag to tag electrons with v0s"}; + // o2::framework::Configurable doSCTwithCascades{"doSCTwithCascades", false, "flag to tag electrons with cascades"}; o2::framework::Service ccdb; - o2::ccdb::CcdbApi ccdbApi; o2::framework::Service mTOFResponse; o2::framework::SliceCache cache; o2::framework::Preslice perCol_track = o2::aod::track::collisionId; o2::framework::Preslice trackIndicesPerCollision = o2::aod::track_association::collisionId; - o2::framework::Preslice perCol_v0 = o2::aod::v0data::collisionId; - o2::framework::Preslice perCol_casc = o2::aod::cascdata::collisionId; + // o2::framework::Preslice perCol_v0 = o2::aod::v0data::collisionId; + // o2::framework::Preslice perCol_casc = o2::aod::cascdata::collisionId; void init(o2::framework::InitContext& initContext) { @@ -97,18 +94,14 @@ struct skimmerPrimaryElectronSV { ccdb->setCaching(true); ccdb->setLocalObjectValidityChecking(); ccdb->setFatalWhenNull(false); - // ccdbApi.init(ccdbConfig.ccdburl); - // mTOFResponse->initSetup(ccdb, initContext); LOGF(info, "initializing electronModule"); - electronModule.init(cfgEelectronCut, cfgEelectronPFCut, cfgHadronCut, cfgV0Cut, cfgCascadeCut, cfgDFeT, cfgDFeV0, cfgDFeC, initContext, ccdb, mTOFResponse, ccdbConfig.ccdburl.value); - // electronModule.setTOFResponse(mTOFResponse); + electronModule.init(cfgEelectronCut, cfgEelectronPFCut, cfgHadronCut, /*cfgV0Cut, cfgCascadeCut,*/ cfgDFeT, /*cfgDFeV0, cfgDFeC,*/ initContext, ccdb, mTOFResponse, ccdbConfig.ccdburl.value); electronModule.addHistograms(mRegistry); - // electronModule.doPFB(doPF.value); electronModule.doSCTwithTracks(doSCTwithTracks.value); - electronModule.doSCTwithV0s(doSCTwithV0s.value); - electronModule.doSCTwithCascades(doSCTwithCascades.value); + // electronModule.doSCTwithV0s(doSCTwithV0s.value); + // electronModule.doSCTwithCascades(doSCTwithCascades.value); } o2::pwgem::dilepton::utils::ElectronModule electronModule; @@ -116,11 +109,11 @@ struct skimmerPrimaryElectronSV { o2::pwgem::dilepton::utils::electronCut cfgEelectronCut; o2::pwgem::dilepton::utils::electronPFCut cfgEelectronPFCut; o2::pwgem::dilepton::utils::hadronCut cfgHadronCut; - o2::pwgem::dilepton::utils::v0Cut cfgV0Cut; - o2::pwgem::dilepton::utils::cascadeCut cfgCascadeCut; + // o2::pwgem::dilepton::utils::v0Cut cfgV0Cut; + // o2::pwgem::dilepton::utils::cascadeCut cfgCascadeCut; o2::pwgem::dilepton::utils::cfgDFeT cfgDFeT; - o2::pwgem::dilepton::utils::cfgDFeV0 cfgDFeV0; - o2::pwgem::dilepton::utils::cfgDFeC cfgDFeC; + // o2::pwgem::dilepton::utils::cfgDFeV0 cfgDFeV0; + // o2::pwgem::dilepton::utils::cfgDFeC cfgDFeC; o2::framework::HistogramRegistry mRegistry{"output", {}, o2::framework::OutputObjHandlingPolicy::AnalysisObject, false, false}; // ---------- for data ---------- @@ -174,78 +167,78 @@ struct skimmerPrimaryElectronSV { mRunNumber = bc.runNumber(); } - //! type of V0. 0: built solely for cascades (does not pass standard V0 cut), 1: standard 2, 3: photon-like with TPC-only use. Regular analysis should always use type 1. - o2::framework::expressions::Filter v0Filter = o2::aod::v0data::v0Type == uint8_t(1) && o2::aod::v0data::v0cosPA > cfgV0Cut.cfg_min_cospa&& o2::aod::v0data::dcaV0daughters cfgV0Cut.cfg_min_dcaxy&& nabs(o2::aod::v0data::dcanegtopv) > cfgV0Cut.cfg_min_dcaxy; - using filteredMyV0s = o2::soa::Filtered; + // //! type of V0. 0: built solely for cascades (does not pass standard V0 cut), 1: standard 2, 3: photon-like with TPC-only use. Regular analysis should always use type 1. + // o2::framework::expressions::Filter v0Filter = o2::aod::v0data::v0Type == uint8_t(1) && o2::aod::v0data::v0cosPA > cfgV0Cut.cfg_min_cospa&& o2::aod::v0data::dcaV0daughters cfgV0Cut.cfg_min_dcaxy&& nabs(o2::aod::v0data::dcanegtopv) > cfgV0Cut.cfg_min_dcaxy; + // using filteredMyV0s = o2::soa::Filtered; - o2::framework::expressions::Filter cascadeFilter = nabs(o2::aod::cascdata::dcanegtopv) > cfgCascadeCut.cfg_min_dcaxy_v0leg&& nabs(o2::aod::cascdata::dcanegtopv) > cfgCascadeCut.cfg_min_dcaxy_v0leg&& nabs(o2::aod::cascdata::dcabachtopv) > cfgCascadeCut.cfg_min_dcaxy_bachelor&& o2::aod::cascdata::dcacascdaughters < cfgCascadeCut.cfg_max_dcadau&& o2::aod::cascdata::dcaV0daughters < cfgCascadeCut.cfg_max_dcadau_v0; - using filteredMyCascades = o2::soa::Filtered; + // o2::framework::expressions::Filter cascadeFilter = nabs(o2::aod::cascdata::dcanegtopv) > cfgCascadeCut.cfg_min_dcaxy_v0leg&& nabs(o2::aod::cascdata::dcanegtopv) > cfgCascadeCut.cfg_min_dcaxy_v0leg&& nabs(o2::aod::cascdata::dcabachtopv) > cfgCascadeCut.cfg_min_dcaxy_bachelor&& o2::aod::cascdata::dcacascdaughters < cfgCascadeCut.cfg_max_dcadau&& o2::aod::cascdata::dcaV0daughters < cfgCascadeCut.cfg_max_dcadau_v0; + // using filteredMyCascades = o2::soa::Filtered; - void processRec_SA(MyCollisions const& collisions, MyBCs const& bcs, MyTracks const& tracks, filteredMyV0s const& v0s, filteredMyCascades const& cascades) + void processRec_SA(MyCollisions const& collisions, MyBCs const& bcs, MyTracks const& tracks /*, filteredMyV0s const& v0s, filteredMyCascades const& cascades*/) { if (bcs.size() == 0) { return; } auto bc = bcs.begin(); initCCDB(bc); - electronModule.processWithoutTTCA(bcs, collisions, tracks, v0s, cascades, nullptr, products, mRegistry); + electronModule.processWithoutTTCA(bcs, collisions, tracks, /*v0s, cascades,*/ nullptr, products, mRegistry); } PROCESS_SWITCH(skimmerPrimaryElectronSV, processRec_SA, "process reconstructed info only", true); // standalone - void processRec_TTCA(MyCollisions const& collisions, MyBCs const& bcs, MyTracks const& tracks, o2::aod::TrackAssoc const& trackIndices, filteredMyV0s const& v0s, filteredMyCascades const& cascades) + void processRec_TTCA(MyCollisions const& collisions, MyBCs const& bcs, MyTracks const& tracks, o2::aod::TrackAssoc const& trackIndices /*, filteredMyV0s const& v0s, filteredMyCascades const& cascades*/) { if (bcs.size() == 0) { return; } auto bc = bcs.begin(); initCCDB(bc); - electronModule.processWithTTCA(bcs, collisions, tracks, v0s, cascades, trackIndices, nullptr, products, mRegistry, cache, perCol_track, trackIndicesPerCollision, perCol_v0, perCol_casc); + electronModule.processWithTTCA(bcs, collisions, tracks, /*v0s, cascades,*/ trackIndices, nullptr, products, mRegistry, cache, perCol_track, trackIndicesPerCollision /*, perCol_v0, perCol_casc*/); } PROCESS_SWITCH(skimmerPrimaryElectronSV, processRec_TTCA, "process reconstructed info only", false); // with TTCA - void processRec_SA_SWT(MyCollisionsWithSWT const& collisions, MyBCs const& bcs, MyTracks const& tracks, filteredMyV0s const& v0s, filteredMyCascades const& cascades) + void processRec_SA_SWT(MyCollisionsWithSWT const& collisions, MyBCs const& bcs, MyTracks const& tracks /*, filteredMyV0s const& v0s, filteredMyCascades const& cascades*/) { if (bcs.size() == 0) { return; } auto bc = bcs.begin(); initCCDB(bc); - electronModule.processWithoutTTCA(bcs, collisions, tracks, v0s, cascades, nullptr, products, mRegistry); + electronModule.processWithoutTTCA(bcs, collisions, tracks, /*v0s, cascades,*/ nullptr, products, mRegistry); } PROCESS_SWITCH(skimmerPrimaryElectronSV, processRec_SA_SWT, "process reconstructed info only", false); // standalone with swt - void processRec_TTCA_SWT(MyCollisionsWithSWT const& collisions, MyBCs const& bcs, MyTracks const& tracks, o2::aod::TrackAssoc const& trackIndices, filteredMyV0s const& v0s, filteredMyCascades const& cascades) + void processRec_TTCA_SWT(MyCollisionsWithSWT const& collisions, MyBCs const& bcs, MyTracks const& tracks, o2::aod::TrackAssoc const& trackIndices /*, filteredMyV0s const& v0s, filteredMyCascades const& cascades*/) { if (bcs.size() == 0) { return; } auto bc = bcs.begin(); initCCDB(bc); - electronModule.processWithTTCA(bcs, collisions, tracks, v0s, cascades, trackIndices, nullptr, products, mRegistry, cache, perCol_track, trackIndicesPerCollision, perCol_v0, perCol_casc); + electronModule.processWithTTCA(bcs, collisions, tracks, /*v0s, cascades,*/ trackIndices, nullptr, products, mRegistry, cache, perCol_track, trackIndicesPerCollision /*, perCol_v0, perCol_casc*/); } PROCESS_SWITCH(skimmerPrimaryElectronSV, processRec_TTCA_SWT, "process reconstructed info only", false); // with TTCA with swt // ---------- for MC ---------- - void processMC_SA(o2::soa::Join const& collisions, MyBCs const& bcs, MyTracksMC const& tracks, filteredMyV0s const& v0s, filteredMyCascades const& cascades, o2::aod::McParticles const& mcParticles) + void processMC_SA(o2::soa::Join const& collisions, MyBCs const& bcs, MyTracksMC const& tracks, /*filteredMyV0s const& v0s, filteredMyCascades const& cascades,*/ o2::aod::McParticles const& mcParticles) { if (bcs.size() == 0) { return; } auto bc = bcs.begin(); initCCDB(bc); - electronModule.processWithoutTTCA(bcs, collisions, tracks, v0s, cascades, mcParticles, products, mRegistry); + electronModule.processWithoutTTCA(bcs, collisions, tracks, /*v0s, cascades,*/ mcParticles, products, mRegistry); } PROCESS_SWITCH(skimmerPrimaryElectronSV, processMC_SA, "process reconstructed and MC info ", false); // without TTCA in MC - void processMC_TTCA(o2::soa::Join const& collisions, MyBCs const& bcs, MyTracksMC const& tracks, o2::aod::TrackAssoc const& trackIndices, filteredMyV0s const& v0s, filteredMyCascades const& cascades, o2::aod::McParticles const& mcParticles) + void processMC_TTCA(o2::soa::Join const& collisions, MyBCs const& bcs, MyTracksMC const& tracks, o2::aod::TrackAssoc const& trackIndices, /*filteredMyV0s const& v0s, filteredMyCascades const& cascades,*/ o2::aod::McParticles const& mcParticles) { if (bcs.size() == 0) { return; } auto bc = bcs.begin(); initCCDB(bc); - electronModule.processWithTTCA(bcs, collisions, tracks, v0s, cascades, trackIndices, mcParticles, products, mRegistry, cache, perCol_track, trackIndicesPerCollision, perCol_v0, perCol_casc); + electronModule.processWithTTCA(bcs, collisions, tracks, /*v0s, cascades,*/ trackIndices, mcParticles, products, mRegistry, cache, perCol_track, trackIndicesPerCollision /*, perCol_v0, perCol_casc*/); } PROCESS_SWITCH(skimmerPrimaryElectronSV, processMC_TTCA, "process reconstructed info only", false); // with TTCA in MC }; diff --git a/PWGEM/Dilepton/Utils/ElectronModule.h b/PWGEM/Dilepton/Utils/ElectronModule.h index a1a259163a9..c51563adb0f 100644 --- a/PWGEM/Dilepton/Utils/ElectronModule.h +++ b/PWGEM/Dilepton/Utils/ElectronModule.h @@ -95,7 +95,7 @@ struct electronCut : o2::framework::ConfigurableGroup { o2::framework::Configurable minchi2tpc{"minchi2tpc", 0.0, "min. chi2/NclsTPC"}; o2::framework::Configurable minchi2its{"minchi2its", 0.0, "min. chi2/NclsITS"}; o2::framework::Configurable maxchi2tpc{"maxchi2tpc", 5.0, "max. chi2/NclsTPC"}; - o2::framework::Configurable maxchi2its{"maxchi2its", 6.0, "max. chi2/NclsITS"}; + o2::framework::Configurable maxchi2its{"maxchi2its", 36.0, "max. chi2/NclsITS"}; o2::framework::Configurable minpt{"minpt", 0.05, "min pt"}; o2::framework::Configurable maxeta{"maxeta", 0.9, "max eta"}; o2::framework::Configurable dca_xy_max{"dca_xy_max", 1.0, "max DCAxy in cm"}; @@ -112,7 +112,7 @@ struct electronCut : o2::framework::ConfigurableGroup { o2::framework::Configurable requireTOF{"requireTOF", false, "require TOF hit"}; o2::framework::Configurable min_pin_for_pion_rejection{"min_pin_for_pion_rejection", 0.0, "pion rejection is applied above this pin"}; // this is used only in TOFreq o2::framework::Configurable max_pin_for_pion_rejection{"max_pin_for_pion_rejection", 0.5, "pion rejection is applied below this pin"}; - o2::framework::Configurable max_frac_shared_clusters_tpc{"max_frac_shared_clusters_tpc", 999.f, "max fraction of shared clusters in TPC"}; + o2::framework::Configurable max_frac_shared_clusters_tpc{"max_frac_shared_clusters_tpc", 0.7f, "max fraction of shared clusters in TPC"}; o2::framework::Configurable maxMeanITSClusterSize{"maxMeanITSClusterSize", 16, "max x cos(lambda)"}; o2::framework::Configurable storeOnlyTrueElectronMC{"storeOnlyTrueElectronMC", false, "Flag to store only true electron in MC"}; o2::framework::Configurable minNelectron{"minNelectron", 0, "min number of electron candidates per collision"}; @@ -189,83 +189,68 @@ struct hadronCut : o2::framework::ConfigurableGroup { o2::framework::Configurable cfg_max_dcaz{"cfg_max_dcaz", 1.0, "max dca Z for single track in cm"}; o2::framework::Configurable cfg_min_TPCNsigmaPi{"cfg_min_TPCNsigmaPi", -3, "min n sigma pi in TPC"}; o2::framework::Configurable cfg_max_TPCNsigmaPi{"cfg_max_TPCNsigmaPi", +3, "max n sigma pi in TPC"}; - // o2::framework::Configurable cfg_min_TOFNsigmaPi{"cfg_min_TOFNsigmaPi", -3, "min n sigma pi in TOF"}; - // o2::framework::Configurable cfg_max_TOFNsigmaPi{"cfg_max_TOFNsigmaPi", +3, "max n sigma pi in TOF"}; o2::framework::Configurable cfg_min_TPCNsigmaKa{"cfg_min_TPCNsigmaKa", -3, "min n sigma ka in TPC"}; o2::framework::Configurable cfg_max_TPCNsigmaKa{"cfg_max_TPCNsigmaKa", +3, "max n sigma ka in TPC"}; - // o2::framework::Configurable cfg_min_TOFNsigmaKa{"cfg_min_TOFNsigmaKa", -3, "min n sigma ka in TOF"}; - // o2::framework::Configurable cfg_max_TOFNsigmaKa{"cfg_max_TOFNsigmaKa", +3, "max n sigma ka in TOF"}; - // o2::framework::Configurable cfg_min_TPCNsigmaPr{"cfg_min_TPCNsigmaPr", -3, "min n sigma pr in TPC"}; - // o2::framework::Configurable cfg_max_TPCNsigmaPr{"cfg_max_TPCNsigmaPr", +3, "max n sigma pr in TPC"}; - // // o2::framework::Configurable cfg_min_TOFNsigmaPr{"cfg_min_TOFNsigmaPr", -3, "min n sigma pr in TOF"}; - // // o2::framework::Configurable cfg_max_TOFNsigmaPr{"cfg_max_TOFNsigmaPr", +3, "max n sigma pr in TOF"}; o2::framework::Configurable requirePiKa{"requirePiKa", true, "require hadron to be pion or kaon"}; // protons are not involved in semileptonic decays of HF hadrons. }; -struct v0Cut : o2::framework::ConfigurableGroup { - std::string prefix = "v0Cut"; - o2::framework::Configurable cfg_min_mass_k0s{"cfg_min_mass_k0s", 0.48, "min mass for K0S"}; - o2::framework::Configurable cfg_max_mass_k0s{"cfg_max_mass_k0s", 0.51, "max mass for K0S"}; - o2::framework::Configurable cfg_min_mass_k0s_veto{"cfg_min_mass_k0s_veto", 0.48, "min mass for K0S veto for Lambda"}; - o2::framework::Configurable cfg_max_mass_k0s_veto{"cfg_max_mass_k0s_veto", 0.51, "max mass for K0S veto for Lambda"}; - o2::framework::Configurable cfg_min_mass_lambda{"cfg_min_mass_lambda", 1.11, "min mass for Lambda"}; - o2::framework::Configurable cfg_max_mass_lambda{"cfg_max_mass_lambda", 1.12, "max mass for Lambda"}; - o2::framework::Configurable cfg_min_mass_lambda_veto{"cfg_min_mass_lambda_veto", 1.11, "min mass for Lambda veto for K0S"}; - o2::framework::Configurable cfg_max_mass_lambda_veto{"cfg_max_mass_lambda_veto", 1.12, "max mass for Lambda veto for K0S"}; - o2::framework::Configurable cfg_min_cospa{"cfg_min_cospa", 0.95, "min cospa for v0"}; - o2::framework::Configurable cfg_max_dca2legs{"cfg_max_dca2legs", 0.1, "max distance between 2 legs for v0"}; - o2::framework::Configurable cfg_min_radius{"cfg_min_radius", 0.1, "min rxy for v"}; - o2::framework::Configurable cfg_min_cr2findable_ratio_tpc{"cfg_min_cr2findable_ratio_tpc", 0.f, "min. TPC Ncr/Nf ratio"}; - o2::framework::Configurable cfg_max_frac_shared_clusters_tpc{"cfg_max_frac_shared_clusters_tpc", 999.f, "max fraction of shared clusters in TPC"}; - o2::framework::Configurable cfg_min_ncrossedrows_tpc{"cfg_min_ncrossedrows_tpc", 70, "min ncrossed rows"}; - o2::framework::Configurable cfg_min_ncluster_tpc{"cfg_min_ncluster_tpc", 0, "min ncluster tpc"}; - o2::framework::Configurable cfg_max_chi2tpc{"cfg_max_chi2tpc", 4.0, "max chi2/NclsTPC"}; - o2::framework::Configurable cfg_max_chi2its{"cfg_max_chi2its", 36.0, "max chi2/NclsITS"}; - o2::framework::Configurable cfg_min_ncluster_its{"cfg_min_ncluster_its", 2, "min ncluster its"}; - o2::framework::Configurable cfg_min_ncluster_itsib{"cfg_min_ncluster_itsib", 0, "min ncluster itsib"}; - o2::framework::Configurable cfg_min_dcaxy{"cfg_min_dcaxy", 0.1, "min dca XY for v0 legs in cm"}; - - o2::framework::Configurable cfg_max_alpha_veto{"cfg_max_alpha_veto", 0.95, "max alpha for photon conversion rejection"}; - o2::framework::Configurable cfg_max_qt_veto{"cfg_max_qt_veto", 0.01, "max qT for photon conversion rejection"}; - - // for both v0 and cascade - o2::framework::Configurable cfg_min_TPCNsigmaPi{"cfg_min_TPCNsigmaPi", -3, "min n sigma pi in TPC"}; - o2::framework::Configurable cfg_max_TPCNsigmaPi{"cfg_max_TPCNsigmaPi", +3, "max n sigma pi in TPC"}; - o2::framework::Configurable cfg_min_TPCNsigmaKa{"cfg_min_TPCNsigmaKa", -3, "min n sigma ka in TPC"}; - o2::framework::Configurable cfg_max_TPCNsigmaKa{"cfg_max_TPCNsigmaKa", +3, "max n sigma ka in TPC"}; - o2::framework::Configurable cfg_min_TPCNsigmaPr{"cfg_min_TPCNsigmaPr", -3, "min n sigma pr in TPC"}; - o2::framework::Configurable cfg_max_TPCNsigmaPr{"cfg_max_TPCNsigmaPr", +3, "max n sigma pr in TPC"}; - // o2::framework::Configurable cfg_min_TOFNsigmaPi{"cfg_min_TOFNsigmaPi", -3, "min n sigma pi in TOF"}; - // o2::framework::Configurable cfg_max_TOFNsigmaPi{"cfg_max_TOFNsigmaPi", +3, "max n sigma pi in TOF"}; - // o2::framework::Configurable cfg_min_TOFNsigmaKa{"cfg_min_TOFNsigmaKa", -3, "min n sigma ka in TOF"}; - // o2::framework::Configurable cfg_max_TOFNsigmaKa{"cfg_max_TOFNsigmaKa", +3, "max n sigma ka in TOF"}; - // o2::framework::Configurable cfg_min_TOFNsigmaPr{"cfg_min_TOFNsigmaPr", -3, "min n sigma pr in TOF"}; - // o2::framework::Configurable cfg_max_TOFNsigmaPr{"cfg_max_TOFNsigmaPr", +3, "max n sigma pr in TOF"}; - // o2::framework::Configurable applyTOFif{"applyTOFif", false, "apply TOFif for hadron identification"}; -}; - -struct cascadeCut : o2::framework::ConfigurableGroup { - std::string prefix = "cascadeCut"; - o2::framework::Configurable cfg_min_mass_lambda{"cfg_min_mass_lambda", 1.11, "min mass for lambda in cascade"}; - o2::framework::Configurable cfg_max_mass_lambda{"cfg_max_mass_lambda", 1.12, "max mass for lambda in cascade"}; - o2::framework::Configurable cfg_min_mass_Xi{"cfg_min_mass_Xi", 1.314, "min mass for Xi"}; - o2::framework::Configurable cfg_max_mass_Xi{"cfg_max_mass_Xi", 1.328, "max mass for Xi"}; - o2::framework::Configurable cfg_min_mass_Xi_veto{"cfg_min_mass_Xi_veto", 1.31, "min mass for Xi veto"}; - o2::framework::Configurable cfg_max_mass_Xi_veto{"cfg_max_mass_Xi_veto", 1.33, "max mass for Xi veto"}; - o2::framework::Configurable cfg_min_mass_Omega{"cfg_min_mass_Omega", 1.668, "min mass for Omega"}; - o2::framework::Configurable cfg_max_mass_Omega{"cfg_max_mass_Omega", 1.678, "max mass for Omega"}; - o2::framework::Configurable cfg_min_mass_Omega_veto{"cfg_min_mass_Omega_veto", 1.665, "min mass for Omega veto"}; - o2::framework::Configurable cfg_max_mass_Omega_veto{"cfg_max_mass_Omega_veto", 1.680, "max mass for Omega veto"}; - o2::framework::Configurable cfg_min_cospa_v0{"cfg_min_cospa_v0", 0.95, "minimum V0 CosPA in cascade"}; - o2::framework::Configurable cfg_max_dcadau_v0{"cfg_max_dcadau_v0", 0.1, "max distance between V0 Daughters in cascade"}; - o2::framework::Configurable cfg_min_cospa{"cfg_min_cospa", 0.95, "minimum cascade CosPA"}; - o2::framework::Configurable cfg_max_dcadau{"cfg_max_dcadau", 0.1, "max distance between bachelor and V0"}; - o2::framework::Configurable cfg_min_rxy_v0{"cfg_min_rxy_v0", 0.1, "minimum V0 rxy in cascade"}; - o2::framework::Configurable cfg_min_rxy{"cfg_min_rxy", 0.1, "minimum V0 rxy in cascade"}; - o2::framework::Configurable cfg_min_dcaxy_v0leg{"cfg_min_dcaxy_v0leg", 0.1, "min dca XY for v0 legs in cm"}; - o2::framework::Configurable cfg_min_dcaxy_bachelor{"cfg_min_dcaxy_bachelor", 0.05, "min dca XY for bachelor in cm"}; - o2::framework::Configurable cfg_min_dcaxy_v0{"cfg_min_dcaxy_v0", 0.0, "min dca XY for V0 in cm"}; -}; +// struct v0Cut : o2::framework::ConfigurableGroup { +// std::string prefix = "v0Cut"; +// o2::framework::Configurable cfg_min_mass_k0s{"cfg_min_mass_k0s", 0.48, "min mass for K0S"}; +// o2::framework::Configurable cfg_max_mass_k0s{"cfg_max_mass_k0s", 0.51, "max mass for K0S"}; +// o2::framework::Configurable cfg_min_mass_k0s_veto{"cfg_min_mass_k0s_veto", 0.48, "min mass for K0S veto for Lambda"}; +// o2::framework::Configurable cfg_max_mass_k0s_veto{"cfg_max_mass_k0s_veto", 0.51, "max mass for K0S veto for Lambda"}; +// o2::framework::Configurable cfg_min_mass_lambda{"cfg_min_mass_lambda", 1.11, "min mass for Lambda"}; +// o2::framework::Configurable cfg_max_mass_lambda{"cfg_max_mass_lambda", 1.12, "max mass for Lambda"}; +// o2::framework::Configurable cfg_min_mass_lambda_veto{"cfg_min_mass_lambda_veto", 1.11, "min mass for Lambda veto for K0S"}; +// o2::framework::Configurable cfg_max_mass_lambda_veto{"cfg_max_mass_lambda_veto", 1.12, "max mass for Lambda veto for K0S"}; +// o2::framework::Configurable cfg_min_cospa{"cfg_min_cospa", 0.95, "min cospa for v0"}; +// o2::framework::Configurable cfg_max_dca2legs{"cfg_max_dca2legs", 0.1, "max distance between 2 legs for v0"}; +// o2::framework::Configurable cfg_min_radius{"cfg_min_radius", 0.1, "min rxy for v"}; +// o2::framework::Configurable cfg_min_cr2findable_ratio_tpc{"cfg_min_cr2findable_ratio_tpc", 0.f, "min. TPC Ncr/Nf ratio"}; +// o2::framework::Configurable cfg_max_frac_shared_clusters_tpc{"cfg_max_frac_shared_clusters_tpc", 999.f, "max fraction of shared clusters in TPC"}; +// o2::framework::Configurable cfg_min_ncrossedrows_tpc{"cfg_min_ncrossedrows_tpc", 70, "min ncrossed rows"}; +// o2::framework::Configurable cfg_min_ncluster_tpc{"cfg_min_ncluster_tpc", 0, "min ncluster tpc"}; +// o2::framework::Configurable cfg_max_chi2tpc{"cfg_max_chi2tpc", 4.0, "max chi2/NclsTPC"}; +// o2::framework::Configurable cfg_max_chi2its{"cfg_max_chi2its", 36.0, "max chi2/NclsITS"}; +// o2::framework::Configurable cfg_min_ncluster_its{"cfg_min_ncluster_its", 2, "min ncluster its"}; +// o2::framework::Configurable cfg_min_ncluster_itsib{"cfg_min_ncluster_itsib", 0, "min ncluster itsib"}; +// o2::framework::Configurable cfg_min_dcaxy{"cfg_min_dcaxy", 0.1, "min dca XY for v0 legs in cm"}; +// +// o2::framework::Configurable cfg_max_alpha_veto{"cfg_max_alpha_veto", 0.95, "max alpha for photon conversion rejection"}; +// o2::framework::Configurable cfg_max_qt_veto{"cfg_max_qt_veto", 0.01, "max qT for photon conversion rejection"}; +// +// // for both v0 and cascade +// o2::framework::Configurable cfg_min_TPCNsigmaPi{"cfg_min_TPCNsigmaPi", -3, "min n sigma pi in TPC"}; +// o2::framework::Configurable cfg_max_TPCNsigmaPi{"cfg_max_TPCNsigmaPi", +3, "max n sigma pi in TPC"}; +// o2::framework::Configurable cfg_min_TPCNsigmaKa{"cfg_min_TPCNsigmaKa", -3, "min n sigma ka in TPC"}; +// o2::framework::Configurable cfg_max_TPCNsigmaKa{"cfg_max_TPCNsigmaKa", +3, "max n sigma ka in TPC"}; +// o2::framework::Configurable cfg_min_TPCNsigmaPr{"cfg_min_TPCNsigmaPr", -3, "min n sigma pr in TPC"}; +// o2::framework::Configurable cfg_max_TPCNsigmaPr{"cfg_max_TPCNsigmaPr", +3, "max n sigma pr in TPC"}; +// }; +// +// struct cascadeCut : o2::framework::ConfigurableGroup { +// std::string prefix = "cascadeCut"; +// o2::framework::Configurable cfg_min_mass_lambda{"cfg_min_mass_lambda", 1.11, "min mass for lambda in cascade"}; +// o2::framework::Configurable cfg_max_mass_lambda{"cfg_max_mass_lambda", 1.12, "max mass for lambda in cascade"}; +// o2::framework::Configurable cfg_min_mass_Xi{"cfg_min_mass_Xi", 1.314, "min mass for Xi"}; +// o2::framework::Configurable cfg_max_mass_Xi{"cfg_max_mass_Xi", 1.328, "max mass for Xi"}; +// o2::framework::Configurable cfg_min_mass_Xi_veto{"cfg_min_mass_Xi_veto", 1.31, "min mass for Xi veto"}; +// o2::framework::Configurable cfg_max_mass_Xi_veto{"cfg_max_mass_Xi_veto", 1.33, "max mass for Xi veto"}; +// o2::framework::Configurable cfg_min_mass_Omega{"cfg_min_mass_Omega", 1.668, "min mass for Omega"}; +// o2::framework::Configurable cfg_max_mass_Omega{"cfg_max_mass_Omega", 1.678, "max mass for Omega"}; +// o2::framework::Configurable cfg_min_mass_Omega_veto{"cfg_min_mass_Omega_veto", 1.665, "min mass for Omega veto"}; +// o2::framework::Configurable cfg_max_mass_Omega_veto{"cfg_max_mass_Omega_veto", 1.680, "max mass for Omega veto"}; +// o2::framework::Configurable cfg_min_cospa_v0{"cfg_min_cospa_v0", 0.95, "minimum V0 CosPA in cascade"}; +// o2::framework::Configurable cfg_max_dcadau_v0{"cfg_max_dcadau_v0", 0.1, "max distance between V0 Daughters in cascade"}; +// o2::framework::Configurable cfg_min_cospa{"cfg_min_cospa", 0.95, "minimum cascade CosPA"}; +// o2::framework::Configurable cfg_max_dcadau{"cfg_max_dcadau", 0.1, "max distance between bachelor and V0"}; +// o2::framework::Configurable cfg_min_rxy_v0{"cfg_min_rxy_v0", 0.1, "minimum V0 rxy in cascade"}; +// o2::framework::Configurable cfg_min_rxy{"cfg_min_rxy", 0.1, "minimum V0 rxy in cascade"}; +// o2::framework::Configurable cfg_min_dcaxy_v0leg{"cfg_min_dcaxy_v0leg", 0.1, "min dca XY for v0 legs in cm"}; +// o2::framework::Configurable cfg_min_dcaxy_bachelor{"cfg_min_dcaxy_bachelor", 0.05, "min dca XY for bachelor in cm"}; +// o2::framework::Configurable cfg_min_dcaxy_v0{"cfg_min_dcaxy_v0", 0.0, "min dca XY for V0 in cm"}; +// }; struct cfgDFeT : o2::framework::ConfigurableGroup { std::string prefix = "cfgDFeT"; @@ -285,41 +270,41 @@ struct cfgDFeT : o2::framework::ConfigurableGroup { o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; }; -struct cfgDFeV0 : o2::framework::ConfigurableGroup { - std::string prefix = "cfgDFeV0"; - o2::framework::Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; - o2::framework::Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; - o2::framework::Configurable maxChi2PCA{"maxChi2PCA", 1.0, "max chi2 at PCA"}; - o2::framework::Configurable maxMassLH{"maxMassLH", 5.5, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. - // configuration for PID ML - o2::framework::Configurable useML{"useML", false, "Flag to use PID ML"}; - o2::framework::Configurable> onnxFileNames{"onnxFileNames", std::vector{"filename"}, "ONNX file names for each bin (if not from CCDB full path)"}; - o2::framework::Configurable> onnxPathsCCDB{"onnxPathsCCDB", std::vector{"path"}, "Paths of models on CCDB"}; - o2::framework::Configurable> binsMl{"binsMl", std::vector{0.1, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; - // o2::framework::Configurable> cutsMl{"cutsMl", std::vector{0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9}, "ML cuts per bin"}; - o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "logChi2PCA", "cpa", "cpaXY", "decayLength3DinSigma"}, "Names of ML model input features"}; - o2::framework::Configurable nameBinningFeature{"nameBinningFeature", "ptL", "Names of ML model binning feature"}; - o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; - o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; -}; - -struct cfgDFeC : o2::framework::ConfigurableGroup { - std::string prefix = "cfgDFeC"; - o2::framework::Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; - o2::framework::Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; - o2::framework::Configurable maxChi2PCA{"maxChi2PCA", 1.0, "max chi2 at PCA"}; - o2::framework::Configurable maxMassLH{"maxMassLH", 5.5, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. - // configuration for PID ML - o2::framework::Configurable useML{"useML", false, "Flag to use PID ML"}; - o2::framework::Configurable> onnxFileNames{"onnxFileNames", std::vector{"filename"}, "ONNX file names for each bin (if not from CCDB full path)"}; - o2::framework::Configurable> onnxPathsCCDB{"onnxPathsCCDB", std::vector{"path"}, "Paths of models on CCDB"}; - o2::framework::Configurable> binsMl{"binsMl", std::vector{0.1, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; - // o2::framework::Configurable> cutsMl{"cutsMl", std::vector{0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9}, "ML cuts per bin"}; - o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "logChi2PCA", "cpa", "cpaXY", "decayLength3DinSigma"}, "Names of ML model input features"}; - o2::framework::Configurable nameBinningFeature{"nameBinningFeature", "ptL", "Names of ML model binning feature"}; - o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; - o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; -}; +// struct cfgDFeV0 : o2::framework::ConfigurableGroup { +// std::string prefix = "cfgDFeV0"; +// o2::framework::Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; +// o2::framework::Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; +// o2::framework::Configurable maxChi2PCA{"maxChi2PCA", 1.0, "max chi2 at PCA"}; +// o2::framework::Configurable maxMassLH{"maxMassLH", 5.5, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. +// // configuration for PID ML +// o2::framework::Configurable useML{"useML", false, "Flag to use PID ML"}; +// o2::framework::Configurable> onnxFileNames{"onnxFileNames", std::vector{"filename"}, "ONNX file names for each bin (if not from CCDB full path)"}; +// o2::framework::Configurable> onnxPathsCCDB{"onnxPathsCCDB", std::vector{"path"}, "Paths of models on CCDB"}; +// o2::framework::Configurable> binsMl{"binsMl", std::vector{0.1, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; +// // o2::framework::Configurable> cutsMl{"cutsMl", std::vector{0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9}, "ML cuts per bin"}; +// o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "logChi2PCA", "cpa", "cpaXY", "decayLength3DinSigma"}, "Names of ML model input features"}; +// o2::framework::Configurable nameBinningFeature{"nameBinningFeature", "ptL", "Names of ML model binning feature"}; +// o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; +// o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; +// }; +// +// struct cfgDFeC : o2::framework::ConfigurableGroup { +// std::string prefix = "cfgDFeC"; +// o2::framework::Configurable useAbsDCA{"useAbsDCA", true, "Minimise abs. distance rather than chi2"}; +// o2::framework::Configurable useWeightedFinalPCA{"useWeightedFinalPCA", false, "Recalculate vertex position using track covariances, effective only if useAbsDCA is true"}; +// o2::framework::Configurable maxChi2PCA{"maxChi2PCA", 1.0, "max chi2 at PCA"}; +// o2::framework::Configurable maxMassLH{"maxMassLH", 5.5, "max massLH in GeV/c2"}; // set hb mass. SVs whose mass is above this mass cannot be HF hadrons. +// // configuration for PID ML +// o2::framework::Configurable useML{"useML", false, "Flag to use PID ML"}; +// o2::framework::Configurable> onnxFileNames{"onnxFileNames", std::vector{"filename"}, "ONNX file names for each bin (if not from CCDB full path)"}; +// o2::framework::Configurable> onnxPathsCCDB{"onnxPathsCCDB", std::vector{"path"}, "Paths of models on CCDB"}; +// o2::framework::Configurable> binsMl{"binsMl", std::vector{0.1, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; +// // o2::framework::Configurable> cutsMl{"cutsMl", std::vector{0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9}, "ML cuts per bin"}; +// o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "logChi2PCA", "cpa", "cpaXY", "decayLength3DinSigma"}, "Names of ML model input features"}; +// o2::framework::Configurable nameBinningFeature{"nameBinningFeature", "ptL", "Names of ML model binning feature"}; +// o2::framework::Configurable loadModelsFromCCDB{"loadModelsFromCCDB", false, "Flag to enable or disable the loading of models from CCDB"}; +// o2::framework::Configurable enableOptimizations{"enableOptimizations", false, "Enables the ONNX extended model-optimization: sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_EXTENDED)"}; +// }; class ElectronModule { @@ -339,8 +324,8 @@ class ElectronModule // float phi{1e+10}; // }; - template - void init(TElectronCut const& eCut, TElectronPFCut const& ePFCut, THadronCut const& hCut, TV0Cut const& v0Cut, TCascadeCut const& cascadeCut, TDFConfigET const& cfgET, TDFConfigEV0 const& cfgEV0, TDFConfigEC const& cfgEC, TInitContext& initContext, TCCDB& ccdb, TTOFResponse const& tofResponse, std::string const& ccdburl) + template + void init(TElectronCut const& eCut, TElectronPFCut const& ePFCut, THadronCut const& hCut, /*TV0Cut const& v0Cut, TCascadeCut const& cascadeCut,*/ TDFConfigET const& cfgET, /*TDFConfigEV0 const& cfgEV0, TDFConfigEC const& cfgEC,*/ TInitContext& initContext, TCCDB& ccdb, TTOFResponse const& tofResponse, std::string const& ccdburl) { mRunNumber = 0; d_bz = 0; @@ -351,15 +336,14 @@ class ElectronModule fElectronCut = eCut; fElectronPFCut = ePFCut; fHadronCut = hCut; - fV0Cut = v0Cut; - fCascadeCut = cascadeCut; + // fV0Cut = v0Cut; + // fCascadeCut = cascadeCut; fConfigDFeT = cfgET; - fConfigDFeV0 = cfgEV0; - fConfigDFeC = cfgEC; + // fConfigDFeV0 = cfgEV0; + // fConfigDFeC = cfgEC; LOGF(info, "intializing TOFResponse"); mTOFResponse = tofResponse; - // mTOFResponse->initSetup(&ccdb->instance(), initContext); mTOFResponse->initSetup(ccdb, initContext); dfeT.setPropagateToPCA(true); @@ -372,25 +356,25 @@ class ElectronModule dfeT.setWeightedFinalPCA(fConfigDFeT.useWeightedFinalPCA); dfeT.setMatCorrType(matCorr); - dfeV0.setPropagateToPCA(true); - dfeV0.setMaxR(200.f); - dfeV0.setMinParamChange(1e-3); - dfeV0.setMinRelChi2Change(0.9); - dfeV0.setMaxDZIni(1e9); - dfeV0.setMaxChi2(1e9); - dfeV0.setUseAbsDCA(fConfigDFeV0.useAbsDCA); - dfeV0.setWeightedFinalPCA(fConfigDFeV0.useWeightedFinalPCA); - dfeV0.setMatCorrType(matCorr); - - dfeC.setPropagateToPCA(true); - dfeC.setMaxR(200.f); - dfeC.setMinParamChange(1e-3); - dfeC.setMinRelChi2Change(0.9); - dfeC.setMaxDZIni(1e9); - dfeC.setMaxChi2(1e9); - dfeC.setUseAbsDCA(fConfigDFeC.useAbsDCA); - dfeC.setWeightedFinalPCA(fConfigDFeC.useWeightedFinalPCA); - dfeC.setMatCorrType(matCorr); + // dfeV0.setPropagateToPCA(true); + // dfeV0.setMaxR(200.f); + // dfeV0.setMinParamChange(1e-3); + // dfeV0.setMinRelChi2Change(0.9); + // dfeV0.setMaxDZIni(1e9); + // dfeV0.setMaxChi2(1e9); + // dfeV0.setUseAbsDCA(fConfigDFeV0.useAbsDCA); + // dfeV0.setWeightedFinalPCA(fConfigDFeV0.useWeightedFinalPCA); + // dfeV0.setMatCorrType(matCorr); + + // dfeC.setPropagateToPCA(true); + // dfeC.setMaxR(200.f); + // dfeC.setMinParamChange(1e-3); + // dfeC.setMinRelChi2Change(0.9); + // dfeC.setMaxDZIni(1e9); + // dfeC.setMaxChi2(1e9); + // dfeC.setUseAbsDCA(fConfigDFeC.useAbsDCA); + // dfeC.setWeightedFinalPCA(fConfigDFeC.useWeightedFinalPCA); + // dfeC.setMatCorrType(matCorr); } template @@ -403,6 +387,10 @@ class ElectronModule d_bz = o2::base::Propagator::Instance()->getNominalBz(); LOG(info) << "Configuring for timestamp " << bc.timestamp() << " with magnetic field of " << d_bz << " kG"; + dfeT.setBz(d_bz); + // dfeV0.setBz(d_bz); + // dfeC.setBz(d_bz); + // initialize MLResponse if (fElectronCut.usePIDML) { LOGF(info, "loading ONNX for ML PID"); @@ -456,58 +444,58 @@ class ElectronModule mlResponseSCTeT.init(fConfigDFeT.enableOptimizations); } // end of ML SCTeT - if (fConfigDFeV0.useML) { - LOGF(info, "loading ONNX for SCT eV0"); - static constexpr int nClassesMl = 4; - const std::vector cutDirMl = {o2::cuts_ml::CutNot, o2::cuts_ml::CutNot, o2::cuts_ml::CutNot, o2::cuts_ml::CutNot}; - const std::vector labelsClasses = {"background", "prompthc", "nonprompthc", "hb"}; - const uint32_t nBinsMl = fConfigDFeV0.binsMl.value.size() - 1; - const std::vector labelsBins(nBinsMl, "bin"); - double cutsMlArr[nBinsMl][nClassesMl]; - for (uint32_t i = 0; i < nBinsMl; i++) { - cutsMlArr[i][0] = 0.0; - cutsMlArr[i][1] = 0.0; - cutsMlArr[i][2] = 0.0; - cutsMlArr[i][3] = 0.0; - } - o2::framework::LabeledArray cutsMltmp = {cutsMlArr[0], nBinsMl, nClassesMl, labelsBins, labelsClasses}; + // if (fConfigDFeV0.useML) { + // LOGF(info, "loading ONNX for SCT eV0"); + // static constexpr int nClassesMl = 4; + // const std::vector cutDirMl = {o2::cuts_ml::CutNot, o2::cuts_ml::CutNot, o2::cuts_ml::CutNot, o2::cuts_ml::CutNot}; + // const std::vector labelsClasses = {"background", "prompthc", "nonprompthc", "hb"}; + // const uint32_t nBinsMl = fConfigDFeV0.binsMl.value.size() - 1; + // const std::vector labelsBins(nBinsMl, "bin"); + // double cutsMlArr[nBinsMl][nClassesMl]; + // for (uint32_t i = 0; i < nBinsMl; i++) { + // cutsMlArr[i][0] = 0.0; + // cutsMlArr[i][1] = 0.0; + // cutsMlArr[i][2] = 0.0; + // cutsMlArr[i][3] = 0.0; + // } + // o2::framework::LabeledArray cutsMltmp = {cutsMlArr[0], nBinsMl, nClassesMl, labelsBins, labelsClasses}; - mlResponseSCTeV0.configure(fConfigDFeV0.binsMl.value, cutsMltmp, cutDirMl, nClassesMl); - if (fConfigDFeV0.loadModelsFromCCDB) { - mlResponseSCTeV0.setModelPathsCCDB(fConfigDFeV0.onnxFileNames, ccdbApi, fConfigDFeV0.onnxPathsCCDB, bc.timestamp()); - } else { - mlResponseSCTeV0.setModelPathsLocal(fConfigDFeV0.onnxFileNames); - } - mlResponseSCTeV0.cacheInputFeaturesIndices(fConfigDFeV0.namesInputFeatures); - mlResponseSCTeV0.cacheBinningIndex(fConfigDFeV0.nameBinningFeature); - mlResponseSCTeV0.init(fConfigDFeV0.enableOptimizations); - } // end of ML SCTeV0 - - if (fConfigDFeC.useML) { - LOGF(info, "loading ONNX for SCT eC"); - static constexpr int nClassesMl = 3; - const std::vector cutDirMl = {o2::cuts_ml::CutNot, o2::cuts_ml::CutNot, o2::cuts_ml::CutNot}; - const std::vector labelsClasses = {"background", "prompthc", "nonprompthc"}; - const uint32_t nBinsMl = fConfigDFeC.binsMl.value.size() - 1; - const std::vector labelsBins(nBinsMl, "bin"); - double cutsMlArr[nBinsMl][nClassesMl]; - for (uint32_t i = 0; i < nBinsMl; i++) { - cutsMlArr[i][0] = 0.0; - cutsMlArr[i][1] = 0.0; - cutsMlArr[i][2] = 0.0; - } - o2::framework::LabeledArray cutsMltmp = {cutsMlArr[0], nBinsMl, nClassesMl, labelsBins, labelsClasses}; + // mlResponseSCTeV0.configure(fConfigDFeV0.binsMl.value, cutsMltmp, cutDirMl, nClassesMl); + // if (fConfigDFeV0.loadModelsFromCCDB) { + // mlResponseSCTeV0.setModelPathsCCDB(fConfigDFeV0.onnxFileNames, ccdbApi, fConfigDFeV0.onnxPathsCCDB, bc.timestamp()); + // } else { + // mlResponseSCTeV0.setModelPathsLocal(fConfigDFeV0.onnxFileNames); + // } + // mlResponseSCTeV0.cacheInputFeaturesIndices(fConfigDFeV0.namesInputFeatures); + // mlResponseSCTeV0.cacheBinningIndex(fConfigDFeV0.nameBinningFeature); + // mlResponseSCTeV0.init(fConfigDFeV0.enableOptimizations); + // } // end of ML SCTeV0 + + // if (fConfigDFeC.useML) { + // LOGF(info, "loading ONNX for SCT eC"); + // static constexpr int nClassesMl = 3; + // const std::vector cutDirMl = {o2::cuts_ml::CutNot, o2::cuts_ml::CutNot, o2::cuts_ml::CutNot}; + // const std::vector labelsClasses = {"background", "prompthc", "nonprompthc"}; + // const uint32_t nBinsMl = fConfigDFeC.binsMl.value.size() - 1; + // const std::vector labelsBins(nBinsMl, "bin"); + // double cutsMlArr[nBinsMl][nClassesMl]; + // for (uint32_t i = 0; i < nBinsMl; i++) { + // cutsMlArr[i][0] = 0.0; + // cutsMlArr[i][1] = 0.0; + // cutsMlArr[i][2] = 0.0; + // } + // o2::framework::LabeledArray cutsMltmp = {cutsMlArr[0], nBinsMl, nClassesMl, labelsBins, labelsClasses}; - mlResponseSCTeC.configure(fConfigDFeC.binsMl.value, cutsMltmp, cutDirMl, nClassesMl); - if (fConfigDFeC.loadModelsFromCCDB) { - mlResponseSCTeC.setModelPathsCCDB(fConfigDFeC.onnxFileNames, ccdbApi, fConfigDFeC.onnxPathsCCDB, bc.timestamp()); - } else { - mlResponseSCTeC.setModelPathsLocal(fConfigDFeC.onnxFileNames); - } - mlResponseSCTeC.cacheInputFeaturesIndices(fConfigDFeC.namesInputFeatures); - mlResponseSCTeC.cacheBinningIndex(fConfigDFeC.nameBinningFeature); - mlResponseSCTeC.init(fConfigDFeC.enableOptimizations); - } // end of ML SCTeC + // mlResponseSCTeC.configure(fConfigDFeC.binsMl.value, cutsMltmp, cutDirMl, nClassesMl); + // if (fConfigDFeC.loadModelsFromCCDB) { + // mlResponseSCTeC.setModelPathsCCDB(fConfigDFeC.onnxFileNames, ccdbApi, fConfigDFeC.onnxPathsCCDB, bc.timestamp()); + // } else { + // mlResponseSCTeC.setModelPathsLocal(fConfigDFeC.onnxFileNames); + // } + // mlResponseSCTeC.cacheInputFeaturesIndices(fConfigDFeC.namesInputFeatures); + // mlResponseSCTeC.cacheBinningIndex(fConfigDFeC.nameBinningFeature); + // mlResponseSCTeC.init(fConfigDFeC.enableOptimizations); + // } // end of ML SCTeC mRunNumber = bc.runNumber(); mTOFResponse->processSetup(bc); @@ -1166,191 +1154,191 @@ class ElectronModule return is_pi_included_TPC || is_ka_included_TPC; } - template - bool isSelectedV0Leg(TTrack const& track) - { - if constexpr (isMC) { - if (!track.has_mcParticle()) { - return false; - } - } - - if (!track.hasITS() || !track.hasTPC()) { - return false; - } - - if (track.itsChi2NCl() > fV0Cut.cfg_max_chi2its) { - return false; - } - - if (track.itsNCls() < fV0Cut.cfg_min_ncluster_its) { - return false; - } - - if (track.itsNClsInnerBarrel() < fV0Cut.cfg_min_ncluster_itsib) { - return false; - } - - if (track.tpcChi2NCl() > fV0Cut.cfg_max_chi2tpc) { - return false; - } - - if (track.tpcNClsFound() < fV0Cut.cfg_min_ncluster_tpc) { - return false; - } - - if (track.tpcNClsCrossedRows() < fV0Cut.cfg_min_ncrossedrows_tpc) { - return false; - } - - if (track.tpcCrossedRowsOverFindableCls() < fV0Cut.cfg_min_cr2findable_ratio_tpc) { - return false; - } - - if (track.tpcFractionSharedCls() > fV0Cut.cfg_max_frac_shared_clusters_tpc) { - return false; - } - - return true; - } - - template - bool isPion(TTrack const& track) - { - return fV0Cut.cfg_min_TPCNsigmaPi < track.tpcNSigmaPi() && track.tpcNSigmaPi() < fV0Cut.cfg_max_TPCNsigmaPi; - } - - template - bool isKaon(TTrack const& track) - { - return fV0Cut.cfg_min_TPCNsigmaKa < track.tpcNSigmaKa() && track.tpcNSigmaKa() < fV0Cut.cfg_max_TPCNsigmaKa; - } - - template - bool isProton(TTrack const& track) - { - return fV0Cut.cfg_min_TPCNsigmaPr < track.tpcNSigmaPr() && track.tpcNSigmaPr() < fV0Cut.cfg_max_TPCNsigmaPr; - } - - template - bool isK0S(TV0 const& v0) - { - return (fV0Cut.cfg_min_mass_k0s < v0.mK0Short() && v0.mK0Short() < fV0Cut.cfg_max_mass_k0s) && (v0.mLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mLambda()) && (v0.mAntiLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mAntiLambda()); - } - - template - bool isLambda(TV0 const& v0) - { - return (fV0Cut.cfg_min_mass_lambda < v0.mLambda() && v0.mLambda() < fV0Cut.cfg_max_mass_lambda) && (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()); - } - - template - bool isAntiLambda(TV0 const& v0) - { - return (fV0Cut.cfg_min_mass_lambda < v0.mAntiLambda() && v0.mAntiLambda() < fV0Cut.cfg_max_mass_lambda) && (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()); - } - - template - bool isXi(TCascade const& cascade) - { - return (fCascadeCut.cfg_min_mass_Xi < cascade.mXi() && cascade.mXi() < fCascadeCut.cfg_max_mass_Xi) && (cascade.mOmega() < fCascadeCut.cfg_min_mass_Omega_veto || fCascadeCut.cfg_max_mass_Omega_veto < cascade.mOmega()); - } - - template - bool isOmega(TCascade const& cascade) - { - return (fCascadeCut.cfg_min_mass_Omega < cascade.mOmega() && cascade.mOmega() < fCascadeCut.cfg_max_mass_Omega) && (cascade.mXi() < fCascadeCut.cfg_min_mass_Xi_veto || fCascadeCut.cfg_max_mass_Xi_veto < cascade.mXi()); - } - - template - void fillV0Histograms(TCollision const&, TV0 const& v0, THistoregistry& registry) - { - auto pos = v0.template posTrack_as(); - auto neg = v0.template negTrack_as(); - registry.fill(HIST("SCT/V0/hPt"), v0.pt()); - registry.fill(HIST("SCT/V0/hAP"), v0.alpha(), v0.qtarm()); - registry.fill(HIST("SCT/V0/hCosPA"), v0.v0cosPA()); - registry.fill(HIST("SCT/V0/hLxy"), v0.v0radius()); - registry.fill(HIST("SCT/V0/hDCA2Legs"), v0.dcaV0daughters()); - - if (isPion(pos) && isPion(neg)) { - if ((v0.mLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mLambda()) && (v0.mAntiLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mAntiLambda())) { - registry.fill(HIST("SCT/V0/hMassK0S"), v0.mK0Short()); - registry.fill(HIST("SCT/V0/hYPhi_K0S"), v0.phi(), v0.yK0Short()); - } - registry.fill(HIST("SCT/V0/hMassGamma_misid"), v0.mGamma()); - registry.fill(HIST("SCT/V0/hMassLambda_misid"), v0.mLambda()); - registry.fill(HIST("SCT/V0/hMassAntiLambda_misid"), v0.mAntiLambda()); - } - - if (isProton(pos) && isPion(neg)) { - if (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()) { - registry.fill(HIST("SCT/V0/hMassLambda"), v0.mLambda()); - registry.fill(HIST("SCT/V0/hYPhi_Lambda"), v0.phi(), v0.yLambda()); - } - registry.fill(HIST("SCT/V0/hMassGamma_misid"), v0.mGamma()); - registry.fill(HIST("SCT/V0/hMassK0S_misid"), v0.mK0Short()); - } - - if (isProton(neg) && isPion(pos)) { - if (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()) { - registry.fill(HIST("SCT/V0/hMassAntiLambda"), v0.mAntiLambda()); - registry.fill(HIST("SCT/V0/hYPhi_Lambda"), v0.phi(), v0.yLambda()); - } - registry.fill(HIST("SCT/V0/hMassGamma_misid"), v0.mGamma()); - registry.fill(HIST("SCT/V0/hMassK0S_misid"), v0.mK0Short()); - } - } - - template - void fillCascadeHistograms(TCollision const& collision, TCascade const& cascade, THistoregistry& registry) - { - auto pos = cascade.template posTrack_as(); - auto neg = cascade.template negTrack_as(); - auto bachelor = cascade.template bachelor_as(); - - registry.fill(HIST("SCT/Cascade/hPt"), cascade.pt()); - registry.fill(HIST("SCT/Cascade/hMassLambda"), cascade.mLambda()); - registry.fill(HIST("SCT/Cascade/hCosPA"), cascade.casccosPA(collision.posX(), collision.posY(), collision.posZ())); - registry.fill(HIST("SCT/Cascade/hDCA2Legs"), cascade.dcacascdaughters()); - registry.fill(HIST("SCT/Cascade/hV0CosPA"), cascade.v0cosPA(collision.posX(), collision.posY(), collision.posZ())); - registry.fill(HIST("SCT/Cascade/hV0DCA2Legs"), cascade.dcaV0daughters()); - - if (cascade.sign() < 0) { // Xi- or Omega- - if (isPion(bachelor) && isProton(pos) && isPion(neg)) { - if (cascade.mOmega() < fCascadeCut.cfg_min_mass_Omega_veto || fCascadeCut.cfg_max_mass_Omega_veto < cascade.mOmega()) { - registry.fill(HIST("SCT/Cascade/hMassXi"), cascade.mXi()); - registry.fill(HIST("SCT/Cascade/hYPhi_Xi"), cascade.phi(), cascade.yXi()); - } - registry.fill(HIST("SCT/Cascade/hMassOmega_misid"), cascade.mOmega()); - } - if (isKaon(bachelor) && isProton(pos) && isPion(neg)) { - if (cascade.mXi() < fCascadeCut.cfg_min_mass_Xi_veto || fCascadeCut.cfg_max_mass_Xi_veto < cascade.mXi()) { - registry.fill(HIST("SCT/Cascade/hMassOmega"), cascade.mOmega()); - registry.fill(HIST("SCT/Cascade/hYPhi_Omega"), cascade.phi(), cascade.yOmega()); - } - registry.fill(HIST("SCT/Cascade/hMassXi_misid"), cascade.mXi()); - } - } else { // Xi+ or Omega+ - if (isPion(bachelor) && isProton(neg) && isPion(pos)) { - if (cascade.mOmega() < fCascadeCut.cfg_min_mass_Omega_veto || fCascadeCut.cfg_max_mass_Omega_veto < cascade.mOmega()) { - registry.fill(HIST("SCT/Cascade/hMassXi"), cascade.mXi()); - registry.fill(HIST("SCT/Cascade/hYPhi_Xi"), cascade.phi(), cascade.yXi()); - } - registry.fill(HIST("SCT/Cascade/hMassOmega_misid"), cascade.mOmega()); - } - if (isKaon(bachelor) && isProton(neg) && isPion(pos)) { - if (cascade.mXi() < fCascadeCut.cfg_min_mass_Xi_veto || fCascadeCut.cfg_max_mass_Xi_veto < cascade.mXi()) { - registry.fill(HIST("SCT/Cascade/hMassOmega"), cascade.mOmega()); - registry.fill(HIST("SCT/Cascade/hYPhi_Omega"), cascade.phi(), cascade.yOmega()); - } - registry.fill(HIST("SCT/Cascade/hMassXi_misid"), cascade.mXi()); - } - } - } - - template - void processWithTTCA(TBCs const& bcs, TCollisions const& collisions, TTracks const& tracks, TV0s const& v0s, TCascades const& cascades, TTrackAssoc const& trackIndices, TMCParticles const&, TProducts& products, THistoregistry& registry, TSliceCache& cache, TPresliceTrack const& perColTrack, TPresliceTrackAssoc const& trackIndicesPerCollision, TPresliceV0 const& perColV0, TPresliceCascade const& perColCasc) + // template + // bool isSelectedV0Leg(TTrack const& track) + // { + // if constexpr (isMC) { + // if (!track.has_mcParticle()) { + // return false; + // } + // } + + // if (!track.hasITS() || !track.hasTPC()) { + // return false; + // } + + // if (track.itsChi2NCl() > fV0Cut.cfg_max_chi2its) { + // return false; + // } + + // if (track.itsNCls() < fV0Cut.cfg_min_ncluster_its) { + // return false; + // } + + // if (track.itsNClsInnerBarrel() < fV0Cut.cfg_min_ncluster_itsib) { + // return false; + // } + + // if (track.tpcChi2NCl() > fV0Cut.cfg_max_chi2tpc) { + // return false; + // } + + // if (track.tpcNClsFound() < fV0Cut.cfg_min_ncluster_tpc) { + // return false; + // } + + // if (track.tpcNClsCrossedRows() < fV0Cut.cfg_min_ncrossedrows_tpc) { + // return false; + // } + + // if (track.tpcCrossedRowsOverFindableCls() < fV0Cut.cfg_min_cr2findable_ratio_tpc) { + // return false; + // } + + // if (track.tpcFractionSharedCls() > fV0Cut.cfg_max_frac_shared_clusters_tpc) { + // return false; + // } + + // return true; + // } + + // template + // bool isPion(TTrack const& track) + // { + // return fV0Cut.cfg_min_TPCNsigmaPi < track.tpcNSigmaPi() && track.tpcNSigmaPi() < fV0Cut.cfg_max_TPCNsigmaPi; + // } + + // template + // bool isKaon(TTrack const& track) + // { + // return fV0Cut.cfg_min_TPCNsigmaKa < track.tpcNSigmaKa() && track.tpcNSigmaKa() < fV0Cut.cfg_max_TPCNsigmaKa; + // } + + // template + // bool isProton(TTrack const& track) + // { + // return fV0Cut.cfg_min_TPCNsigmaPr < track.tpcNSigmaPr() && track.tpcNSigmaPr() < fV0Cut.cfg_max_TPCNsigmaPr; + // } + + // template + // bool isK0S(TV0 const& v0) + // { + // return (fV0Cut.cfg_min_mass_k0s < v0.mK0Short() && v0.mK0Short() < fV0Cut.cfg_max_mass_k0s) && (v0.mLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mLambda()) && (v0.mAntiLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mAntiLambda()); + // } + + // template + // bool isLambda(TV0 const& v0) + // { + // return (fV0Cut.cfg_min_mass_lambda < v0.mLambda() && v0.mLambda() < fV0Cut.cfg_max_mass_lambda) && (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()); + // } + + // template + // bool isAntiLambda(TV0 const& v0) + // { + // return (fV0Cut.cfg_min_mass_lambda < v0.mAntiLambda() && v0.mAntiLambda() < fV0Cut.cfg_max_mass_lambda) && (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()); + // } + + // template + // bool isXi(TCascade const& cascade) + // { + // return (fCascadeCut.cfg_min_mass_Xi < cascade.mXi() && cascade.mXi() < fCascadeCut.cfg_max_mass_Xi) && (cascade.mOmega() < fCascadeCut.cfg_min_mass_Omega_veto || fCascadeCut.cfg_max_mass_Omega_veto < cascade.mOmega()); + // } + + // template + // bool isOmega(TCascade const& cascade) + // { + // return (fCascadeCut.cfg_min_mass_Omega < cascade.mOmega() && cascade.mOmega() < fCascadeCut.cfg_max_mass_Omega) && (cascade.mXi() < fCascadeCut.cfg_min_mass_Xi_veto || fCascadeCut.cfg_max_mass_Xi_veto < cascade.mXi()); + // } + + // template + // void fillV0Histograms(TCollision const&, TV0 const& v0, THistoregistry& registry) + // { + // auto pos = v0.template posTrack_as(); + // auto neg = v0.template negTrack_as(); + // registry.fill(HIST("SCT/V0/hPt"), v0.pt()); + // registry.fill(HIST("SCT/V0/hAP"), v0.alpha(), v0.qtarm()); + // registry.fill(HIST("SCT/V0/hCosPA"), v0.v0cosPA()); + // registry.fill(HIST("SCT/V0/hLxy"), v0.v0radius()); + // registry.fill(HIST("SCT/V0/hDCA2Legs"), v0.dcaV0daughters()); + + // if (isPion(pos) && isPion(neg)) { + // if ((v0.mLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mLambda()) && (v0.mAntiLambda() < fV0Cut.cfg_min_mass_lambda_veto || fV0Cut.cfg_max_mass_lambda_veto < v0.mAntiLambda())) { + // registry.fill(HIST("SCT/V0/hMassK0S"), v0.mK0Short()); + // registry.fill(HIST("SCT/V0/hYPhi_K0S"), v0.phi(), v0.yK0Short()); + // } + // registry.fill(HIST("SCT/V0/hMassGamma_misid"), v0.mGamma()); + // registry.fill(HIST("SCT/V0/hMassLambda_misid"), v0.mLambda()); + // registry.fill(HIST("SCT/V0/hMassAntiLambda_misid"), v0.mAntiLambda()); + // } + + // if (isProton(pos) && isPion(neg)) { + // if (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()) { + // registry.fill(HIST("SCT/V0/hMassLambda"), v0.mLambda()); + // registry.fill(HIST("SCT/V0/hYPhi_Lambda"), v0.phi(), v0.yLambda()); + // } + // registry.fill(HIST("SCT/V0/hMassGamma_misid"), v0.mGamma()); + // registry.fill(HIST("SCT/V0/hMassK0S_misid"), v0.mK0Short()); + // } + + // if (isProton(neg) && isPion(pos)) { + // if (v0.mK0Short() < fV0Cut.cfg_min_mass_k0s_veto || fV0Cut.cfg_max_mass_k0s_veto < v0.mK0Short()) { + // registry.fill(HIST("SCT/V0/hMassAntiLambda"), v0.mAntiLambda()); + // registry.fill(HIST("SCT/V0/hYPhi_Lambda"), v0.phi(), v0.yLambda()); + // } + // registry.fill(HIST("SCT/V0/hMassGamma_misid"), v0.mGamma()); + // registry.fill(HIST("SCT/V0/hMassK0S_misid"), v0.mK0Short()); + // } + // } + + // template + // void fillCascadeHistograms(TCollision const& collision, TCascade const& cascade, THistoregistry& registry) + // { + // auto pos = cascade.template posTrack_as(); + // auto neg = cascade.template negTrack_as(); + // auto bachelor = cascade.template bachelor_as(); + + // registry.fill(HIST("SCT/Cascade/hPt"), cascade.pt()); + // registry.fill(HIST("SCT/Cascade/hMassLambda"), cascade.mLambda()); + // registry.fill(HIST("SCT/Cascade/hCosPA"), cascade.casccosPA(collision.posX(), collision.posY(), collision.posZ())); + // registry.fill(HIST("SCT/Cascade/hDCA2Legs"), cascade.dcacascdaughters()); + // registry.fill(HIST("SCT/Cascade/hV0CosPA"), cascade.v0cosPA(collision.posX(), collision.posY(), collision.posZ())); + // registry.fill(HIST("SCT/Cascade/hV0DCA2Legs"), cascade.dcaV0daughters()); + + // if (cascade.sign() < 0) { // Xi- or Omega- + // if (isPion(bachelor) && isProton(pos) && isPion(neg)) { + // if (cascade.mOmega() < fCascadeCut.cfg_min_mass_Omega_veto || fCascadeCut.cfg_max_mass_Omega_veto < cascade.mOmega()) { + // registry.fill(HIST("SCT/Cascade/hMassXi"), cascade.mXi()); + // registry.fill(HIST("SCT/Cascade/hYPhi_Xi"), cascade.phi(), cascade.yXi()); + // } + // registry.fill(HIST("SCT/Cascade/hMassOmega_misid"), cascade.mOmega()); + // } + // if (isKaon(bachelor) && isProton(pos) && isPion(neg)) { + // if (cascade.mXi() < fCascadeCut.cfg_min_mass_Xi_veto || fCascadeCut.cfg_max_mass_Xi_veto < cascade.mXi()) { + // registry.fill(HIST("SCT/Cascade/hMassOmega"), cascade.mOmega()); + // registry.fill(HIST("SCT/Cascade/hYPhi_Omega"), cascade.phi(), cascade.yOmega()); + // } + // registry.fill(HIST("SCT/Cascade/hMassXi_misid"), cascade.mXi()); + // } + // } else { // Xi+ or Omega+ + // if (isPion(bachelor) && isProton(neg) && isPion(pos)) { + // if (cascade.mOmega() < fCascadeCut.cfg_min_mass_Omega_veto || fCascadeCut.cfg_max_mass_Omega_veto < cascade.mOmega()) { + // registry.fill(HIST("SCT/Cascade/hMassXi"), cascade.mXi()); + // registry.fill(HIST("SCT/Cascade/hYPhi_Xi"), cascade.phi(), cascade.yXi()); + // } + // registry.fill(HIST("SCT/Cascade/hMassOmega_misid"), cascade.mOmega()); + // } + // if (isKaon(bachelor) && isProton(neg) && isPion(pos)) { + // if (cascade.mXi() < fCascadeCut.cfg_min_mass_Xi_veto || fCascadeCut.cfg_max_mass_Xi_veto < cascade.mXi()) { + // registry.fill(HIST("SCT/Cascade/hMassOmega"), cascade.mOmega()); + // registry.fill(HIST("SCT/Cascade/hYPhi_Omega"), cascade.phi(), cascade.yOmega()); + // } + // registry.fill(HIST("SCT/Cascade/hMassXi_misid"), cascade.mXi()); + // } + // } + // } + + template + void processWithTTCA(TBCs const& bcs, TCollisions const& collisions, TTracks const& tracks, /*TV0s const& v0s, TCascades const& cascades,*/ TTrackAssoc const& trackIndices, TMCParticles const&, TProducts& products, THistoregistry& registry, TSliceCache& cache, TPresliceTrack const& perColTrack, TPresliceTrackAssoc const& trackIndicesPerCollision /*, TPresliceV0 const& perColV0, TPresliceCascade const& perColCasc*/) { if (bcs.size() == 0) { return; @@ -1415,136 +1403,136 @@ class ElectronModule } std::vector hadronIds; - std::vector k0sIds; - std::vector lambdaIds; - std::vector antilambdaIds; - std::vector xiMinusIds; - std::vector xiPlusIds; - std::vector omegaMinusIds; - std::vector omegaPlusIds; + // std::vector k0sIds; + // std::vector lambdaIds; + // std::vector antilambdaIds; + // std::vector xiMinusIds; + // std::vector xiPlusIds; + // std::vector omegaMinusIds; + // std::vector omegaPlusIds; if (fDoSCTwithTracks) { hadronIds.reserve(trackIdsThisCollision.size()); } - if (fDoSCTwithV0s) { - auto v0s_per_collision = v0s.sliceBy(perColV0, collision.globalIndex()); - k0sIds.reserve(v0s_per_collision.size()); - lambdaIds.reserve(v0s_per_collision.size()); - antilambdaIds.reserve(v0s_per_collision.size()); - - for (const auto& v0 : v0s_per_collision) { - auto pos = v0.template posTrack_as(); - auto neg = v0.template negTrack_as(); - - if (pos.sign() * neg.sign() > 0) { - continue; - } - if (!isSelectedV0Leg(pos) || !isSelectedV0Leg(neg)) { - continue; - } - - if (v0.dcaV0daughters() > fV0Cut.cfg_max_dca2legs) { - continue; - } - - if (v0.v0radius() < fV0Cut.cfg_min_radius) { - continue; - } - - if (v0.v0cosPA() < fV0Cut.cfg_min_cospa) { - continue; - } - - if (std::sqrt(std::pow(v0.alpha() / fV0Cut.cfg_max_alpha_veto, 2) + std::pow(v0.qtarm() / fV0Cut.cfg_max_qt_veto, 2)) < 1.f) { // photon conversion rejection at small qT - continue; - } - - fillV0Histograms(collision, v0, registry); - - if (isK0S(v0) && isPion(pos) && isPion(neg)) { - k0sIds.emplace_back(v0.globalIndex()); - } - - if (isLambda(v0) && isProton(pos) && isPion(neg)) { - lambdaIds.emplace_back(v0.globalIndex()); - } else if (isAntiLambda(v0) && isProton(neg) && isPion(pos)) { - antilambdaIds.emplace_back(v0.globalIndex()); - } - - } // end of v0 loop - } - - if (fDoSCTwithCascades) { - auto cascades_per_collision = cascades.sliceBy(perColCasc, collision.globalIndex()); - xiMinusIds.reserve(cascades_per_collision.size()); - xiPlusIds.reserve(cascades_per_collision.size()); - omegaMinusIds.reserve(cascades_per_collision.size()); - omegaPlusIds.reserve(cascades_per_collision.size()); - - for (const auto& cascade : cascades_per_collision) { - auto pos = cascade.template posTrack_as(); - auto neg = cascade.template negTrack_as(); - auto bachelor = cascade.template bachelor_as(); - if (pos.sign() * neg.sign() > 0) { - continue; - } - if (cascade.mLambda() < fCascadeCut.cfg_min_mass_lambda || fCascadeCut.cfg_max_mass_lambda < cascade.mLambda()) { - continue; - } - - if (!isSelectedV0Leg(pos) || !isSelectedV0Leg(neg) || !isSelectedV0Leg(bachelor)) { - continue; - } - - if (cascade.casccosPA(collision.posX(), collision.posY(), collision.posZ()) < fCascadeCut.cfg_min_cospa) { - continue; - } - if (cascade.v0cosPA(collision.posX(), collision.posY(), collision.posZ()) < fCascadeCut.cfg_min_cospa_v0) { - continue; - } - - if (cascade.cascradius() > cascade.v0radius()) { - continue; - } - - if (cascade.dcaV0daughters() > fCascadeCut.cfg_max_dcadau_v0) { - continue; - } - if (cascade.v0radius() < fCascadeCut.cfg_min_rxy_v0) { - continue; - } - if (cascade.cascradius() < fCascadeCut.cfg_min_rxy) { - continue; - } - - if (cascade.dcacascdaughters() > fCascadeCut.cfg_max_dcadau) { - continue; - } - - if (std::fabs(cascade.dcav0topv(collision.posX(), collision.posY(), collision.posZ())) < fCascadeCut.cfg_min_dcaxy_v0) { - continue; - } - - fillCascadeHistograms(collision, cascade, registry); - - if (cascade.sign() < 0) { // Xi- or Omega- - if (isXi(cascade) && isPion(bachelor) && isProton(pos) && isPion(neg)) { - xiMinusIds.emplace_back(cascade.globalIndex()); - } - if (isOmega(cascade) && isKaon(bachelor) && isProton(pos) && isPion(neg)) { - omegaMinusIds.emplace_back(cascade.globalIndex()); - } - } else { // Xi+ or Omega+ - if (isXi(cascade) && isPion(bachelor) && isProton(neg) && isPion(pos)) { - xiPlusIds.emplace_back(cascade.globalIndex()); - } - if (isOmega(cascade) && isKaon(bachelor) && isProton(neg) && isPion(pos)) { - omegaPlusIds.emplace_back(cascade.globalIndex()); - } - } - } // end of cascade loop - } + // if (fDoSCTwithV0s) { + // auto v0s_per_collision = v0s.sliceBy(perColV0, collision.globalIndex()); + // k0sIds.reserve(v0s_per_collision.size()); + // lambdaIds.reserve(v0s_per_collision.size()); + // antilambdaIds.reserve(v0s_per_collision.size()); + + // for (const auto& v0 : v0s_per_collision) { + // auto pos = v0.template posTrack_as(); + // auto neg = v0.template negTrack_as(); + + // if (pos.sign() * neg.sign() > 0) { + // continue; + // } + // if (!isSelectedV0Leg(pos) || !isSelectedV0Leg(neg)) { + // continue; + // } + + // if (v0.dcaV0daughters() > fV0Cut.cfg_max_dca2legs) { + // continue; + // } + + // if (v0.v0radius() < fV0Cut.cfg_min_radius) { + // continue; + // } + + // if (v0.v0cosPA() < fV0Cut.cfg_min_cospa) { + // continue; + // } + + // if (std::sqrt(std::pow(v0.alpha() / fV0Cut.cfg_max_alpha_veto, 2) + std::pow(v0.qtarm() / fV0Cut.cfg_max_qt_veto, 2)) < 1.f) { // photon conversion rejection at small qT + // continue; + // } + + // fillV0Histograms(collision, v0, registry); + + // if (isK0S(v0) && isPion(pos) && isPion(neg)) { + // k0sIds.emplace_back(v0.globalIndex()); + // } + + // if (isLambda(v0) && isProton(pos) && isPion(neg)) { + // lambdaIds.emplace_back(v0.globalIndex()); + // } else if (isAntiLambda(v0) && isProton(neg) && isPion(pos)) { + // antilambdaIds.emplace_back(v0.globalIndex()); + // } + + // } // end of v0 loop + // } + + // if (fDoSCTwithCascades) { + // auto cascades_per_collision = cascades.sliceBy(perColCasc, collision.globalIndex()); + // xiMinusIds.reserve(cascades_per_collision.size()); + // xiPlusIds.reserve(cascades_per_collision.size()); + // omegaMinusIds.reserve(cascades_per_collision.size()); + // omegaPlusIds.reserve(cascades_per_collision.size()); + + // for (const auto& cascade : cascades_per_collision) { + // auto pos = cascade.template posTrack_as(); + // auto neg = cascade.template negTrack_as(); + // auto bachelor = cascade.template bachelor_as(); + // if (pos.sign() * neg.sign() > 0) { + // continue; + // } + // if (cascade.mLambda() < fCascadeCut.cfg_min_mass_lambda || fCascadeCut.cfg_max_mass_lambda < cascade.mLambda()) { + // continue; + // } + + // if (!isSelectedV0Leg(pos) || !isSelectedV0Leg(neg) || !isSelectedV0Leg(bachelor)) { + // continue; + // } + + // if (cascade.casccosPA(collision.posX(), collision.posY(), collision.posZ()) < fCascadeCut.cfg_min_cospa) { + // continue; + // } + // if (cascade.v0cosPA(collision.posX(), collision.posY(), collision.posZ()) < fCascadeCut.cfg_min_cospa_v0) { + // continue; + // } + + // if (cascade.cascradius() > cascade.v0radius()) { + // continue; + // } + + // if (cascade.dcaV0daughters() > fCascadeCut.cfg_max_dcadau_v0) { + // continue; + // } + // if (cascade.v0radius() < fCascadeCut.cfg_min_rxy_v0) { + // continue; + // } + // if (cascade.cascradius() < fCascadeCut.cfg_min_rxy) { + // continue; + // } + + // if (cascade.dcacascdaughters() > fCascadeCut.cfg_max_dcadau) { + // continue; + // } + + // if (std::fabs(cascade.dcav0topv(collision.posX(), collision.posY(), collision.posZ())) < fCascadeCut.cfg_min_dcaxy_v0) { + // continue; + // } + + // fillCascadeHistograms(collision, cascade, registry); + + // if (cascade.sign() < 0) { // Xi- or Omega- + // if (isXi(cascade) && isPion(bachelor) && isProton(pos) && isPion(neg)) { + // xiMinusIds.emplace_back(cascade.globalIndex()); + // } + // if (isOmega(cascade) && isKaon(bachelor) && isProton(pos) && isPion(neg)) { + // omegaMinusIds.emplace_back(cascade.globalIndex()); + // } + // } else { // Xi+ or Omega+ + // if (isXi(cascade) && isPion(bachelor) && isProton(neg) && isPion(pos)) { + // xiPlusIds.emplace_back(cascade.globalIndex()); + // } + // if (isOmega(cascade) && isKaon(bachelor) && isProton(neg) && isPion(pos)) { + // omegaPlusIds.emplace_back(cascade.globalIndex()); + // } + // } + // } // end of cascade loop + // } for (const auto& trackId : trackIdsThisCollision) { auto track = trackId.template track_as(); @@ -1639,11 +1627,11 @@ class ElectronModule std::vector bdtScoreHb; std::vector hadronType; - bdtScoreBkg.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); - bdtScorePromptHc.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); - bdtScoreNonpromptHc.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); - bdtScoreHb.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); - hadronType.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); + bdtScoreBkg.reserve(hadronIds.size() /*+ k0sIds.size() + lambdaIds.size() + antilambdaIds.size()*/); + bdtScorePromptHc.reserve(hadronIds.size() /*+ k0sIds.size() + lambdaIds.size() + antilambdaIds.size()*/); + bdtScoreNonpromptHc.reserve(hadronIds.size() /*+ k0sIds.size() + lambdaIds.size() + antilambdaIds.size()*/); + bdtScoreHb.reserve(hadronIds.size() /*+ k0sIds.size() + lambdaIds.size() + antilambdaIds.size()*/); + hadronType.reserve(hadronIds.size() /*+ k0sIds.size() + lambdaIds.size() + antilambdaIds.size()*/); // eTrack pair for (const auto& hadronId : hadronIds) { @@ -1690,361 +1678,361 @@ class ElectronModule } } // end of charged track loop - // eK0S pair - for (const auto& k0sId : k0sIds) { - auto v0 = v0s.rawIteratorAt(k0sId); - if (v0.posTrackId() == electron.globalIndex() || v0.negTrackId() == electron.globalIndex()) { - continue; - } - const std::array vertexV0 = {v0.x(), v0.y(), v0.z()}; - const std::array momV0 = {v0.px(), v0.py(), v0.pz()}; - std::array covV0 = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covV0[MomInd[i]] = v0.momentumCovMat()[i]; - covV0[i] = v0.positionCovMat()[i]; - } - auto v0ParCov = o2::track::TrackParCov(vertexV0, momV0, covV0, 0, true); - v0ParCov.setAbsCharge(0); - v0ParCov.setPID(o2::track::PID::K0); - o2::dataformats::DCA impactParameterV0; - o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, v0ParCov, 2.f, matCorr, &impactParameterV0); // v0ParCov is TrackParCov object - - auto eV0pair = o2::aod::pwgem::dilepton::utils::makePairLeptonV0(dfeV0, collision, electron, v0, o2::track::PID::Electron, o2::track::PID::K0); - registry.fill(HIST("SCT/eV0/hDecayLength"), eV0pair.lxy, eV0pair.lz); - registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); - registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); - registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); - if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { - o2::analysis::pwgem::dilepton::sct::candidate candidate; - fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); - candidate.ptL = trackParCov.getPt(); - candidate.massH = o2::constants::physics::MassK0Short; - - auto inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); - float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); - - int pbin = lower_bound(fConfigDFeV0.binsMl.value.begin(), fConfigDFeV0.binsMl.value.end(), binningFeature) - fConfigDFeV0.binsMl.value.begin() - 1; - if (pbin < 0) { - pbin = 0; - } else if (static_cast(fConfigDFeV0.binsMl.value.size()) - 2 < pbin) { - pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; - } - - auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); - bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); - bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); - bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); - bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); - hadronType.emplace_back(1); - } - } // end of k0s loop + // // eK0S pair + // for (const auto& k0sId : k0sIds) { + // auto v0 = v0s.rawIteratorAt(k0sId); + // if (v0.posTrackId() == electron.globalIndex() || v0.negTrackId() == electron.globalIndex()) { + // continue; + // } + // const std::array vertexV0 = {v0.x(), v0.y(), v0.z()}; + // const std::array momV0 = {v0.px(), v0.py(), v0.pz()}; + // std::array covV0 = {0.}; + // constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + // for (int i = 0; i < 6; i++) { + // covV0[MomInd[i]] = v0.momentumCovMat()[i]; + // covV0[i] = v0.positionCovMat()[i]; + // } + // auto v0ParCov = o2::track::TrackParCov(vertexV0, momV0, covV0, 0, true); + // v0ParCov.setAbsCharge(0); + // v0ParCov.setPID(o2::track::PID::K0); + // o2::dataformats::DCA impactParameterV0; + // o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, v0ParCov, 2.f, matCorr, &impactParameterV0); // v0ParCov is TrackParCov object + + // auto eV0pair = o2::aod::pwgem::dilepton::utils::makePairLeptonV0(dfeV0, collision, electron, v0, o2::track::PID::Electron, o2::track::PID::K0); + // registry.fill(HIST("SCT/eV0/hDecayLength"), eV0pair.lxy, eV0pair.lz); + // registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); + // registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); + // registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); + // if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { + // o2::analysis::pwgem::dilepton::sct::candidate candidate; + // fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); + // candidate.ptL = trackParCov.getPt(); + // candidate.massH = o2::constants::physics::MassK0Short; + + // auto inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); + // float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); + + // int pbin = lower_bound(fConfigDFeV0.binsMl.value.begin(), fConfigDFeV0.binsMl.value.end(), binningFeature) - fConfigDFeV0.binsMl.value.begin() - 1; + // if (pbin < 0) { + // pbin = 0; + // } else if (static_cast(fConfigDFeV0.binsMl.value.size()) - 2 < pbin) { + // pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; + // } + + // auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); + // bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); + // bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); + // bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); + // bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); + // hadronType.emplace_back(1); + // } + // } // end of k0s loop if (electron.sign() > 0) { // positron // eL pair // sign is restricted in baryon decay: Lc+ -> e+ nu_e Lambda - for (const auto& lambdaId : lambdaIds) { - auto v0 = v0s.rawIteratorAt(lambdaId); - if (v0.posTrackId() == electron.globalIndex() || v0.negTrackId() == electron.globalIndex()) { - continue; - } - const std::array vertexV0 = {v0.x(), v0.y(), v0.z()}; - const std::array momV0 = {v0.px(), v0.py(), v0.pz()}; - std::array covV0 = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covV0[MomInd[i]] = v0.momentumCovMat()[i]; - covV0[i] = v0.positionCovMat()[i]; - } - auto v0ParCov = o2::track::TrackParCov(vertexV0, momV0, covV0, 0, true); - v0ParCov.setAbsCharge(0); - v0ParCov.setPID(o2::track::PID::Lambda); - o2::dataformats::DCA impactParameterV0; - o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, v0ParCov, 2.f, matCorr, &impactParameterV0); // v0ParCov is TrackParCov object - - auto eV0pair = o2::aod::pwgem::dilepton::utils::makePairLeptonV0(dfeV0, collision, electron, v0, o2::track::PID::Electron, o2::track::PID::Lambda); - registry.fill(HIST("SCT/eV0/hDecayLength"), eV0pair.lxy, eV0pair.lz); - registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); - registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); - registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); - if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { - o2::analysis::pwgem::dilepton::sct::candidate candidate; - fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); - candidate.ptL = trackParCov.getPt(); - candidate.massH = o2::constants::physics::MassLambda; - - auto inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); - float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); - - int pbin = lower_bound(fConfigDFeV0.binsMl.value.begin(), fConfigDFeV0.binsMl.value.end(), binningFeature) - fConfigDFeV0.binsMl.value.begin() - 1; - if (pbin < 0) { - pbin = 0; - } else if (static_cast(fConfigDFeV0.binsMl.value.size()) - 2 < pbin) { - pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; - } - - auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); - bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); - bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); - bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); - bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); - hadronType.emplace_back(2); - } - } // end of lambda loop + // for (const auto& lambdaId : lambdaIds) { + // auto v0 = v0s.rawIteratorAt(lambdaId); + // if (v0.posTrackId() == electron.globalIndex() || v0.negTrackId() == electron.globalIndex()) { + // continue; + // } + // const std::array vertexV0 = {v0.x(), v0.y(), v0.z()}; + // const std::array momV0 = {v0.px(), v0.py(), v0.pz()}; + // std::array covV0 = {0.}; + // constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + // for (int i = 0; i < 6; i++) { + // covV0[MomInd[i]] = v0.momentumCovMat()[i]; + // covV0[i] = v0.positionCovMat()[i]; + // } + // auto v0ParCov = o2::track::TrackParCov(vertexV0, momV0, covV0, 0, true); + // v0ParCov.setAbsCharge(0); + // v0ParCov.setPID(o2::track::PID::Lambda); + // o2::dataformats::DCA impactParameterV0; + // o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, v0ParCov, 2.f, matCorr, &impactParameterV0); // v0ParCov is TrackParCov object + + // auto eV0pair = o2::aod::pwgem::dilepton::utils::makePairLeptonV0(dfeV0, collision, electron, v0, o2::track::PID::Electron, o2::track::PID::Lambda); + // registry.fill(HIST("SCT/eV0/hDecayLength"), eV0pair.lxy, eV0pair.lz); + // registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); + // registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); + // registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); + // if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { + // o2::analysis::pwgem::dilepton::sct::candidate candidate; + // fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); + // candidate.ptL = trackParCov.getPt(); + // candidate.massH = o2::constants::physics::MassLambda; + + // auto inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); + // float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); + + // int pbin = lower_bound(fConfigDFeV0.binsMl.value.begin(), fConfigDFeV0.binsMl.value.end(), binningFeature) - fConfigDFeV0.binsMl.value.begin() - 1; + // if (pbin < 0) { + // pbin = 0; + // } else if (static_cast(fConfigDFeV0.binsMl.value.size()) - 2 < pbin) { + // pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; + // } + + // auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); + // bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); + // bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); + // bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); + // bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); + // hadronType.emplace_back(2); + // } + // } // end of lambda loop // eXi pair // sign is restricted in baryon decay: Xic0 -> e+ nu_e Xi- - for (const auto& xiId : xiMinusIds) { - auto cascade = cascades.rawIteratorAt(xiId); - if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { - continue; - } - - const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; - const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; - std::array covCasc = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; - covCasc[i] = cascade.positionCovMat()[i]; - } - auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); - cascadeParCov.setAbsCharge(1); - cascadeParCov.setPID(o2::track::PID::XiMinus); - o2::dataformats::DCA impactParameterCasc; - o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object - - auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::XiMinus); - registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); - registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); - registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); - registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { - o2::analysis::pwgem::dilepton::sct::candidate candidate; - fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); - candidate.ptL = trackParCov.getPt(); - candidate.massH = o2::constants::physics::MassXiMinus; - - auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); - float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); - - int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; - if (pbin < 0) { - pbin = 0; - } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { - pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; - } - - auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); - bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); - bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); - bdtScoreHb.emplace_back(static_cast(0)); - hadronType.emplace_back(4); - } - } // end of Xi- loop - - // eOmega pair // sign is restricted in baryon decay: Omegac0 -> e+ nu_e Omega- - for (const auto& omegaId : omegaMinusIds) { - auto cascade = cascades.rawIteratorAt(omegaId); - if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { - continue; - } - - const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; - const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; - std::array covCasc = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; - covCasc[i] = cascade.positionCovMat()[i]; - } - auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); - cascadeParCov.setAbsCharge(1); - cascadeParCov.setPID(o2::track::PID::OmegaMinus); - o2::dataformats::DCA impactParameterCasc; - o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object - - auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::OmegaMinus); - registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); - registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); - registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); - registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { - o2::analysis::pwgem::dilepton::sct::candidate candidate; - fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); - candidate.ptL = trackParCov.getPt(); - candidate.massH = o2::constants::physics::MassOmegaMinus; - - auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); - float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); - - int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; - if (pbin < 0) { - pbin = 0; - } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { - pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; - } - - auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); - bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); - bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); - bdtScoreHb.emplace_back(static_cast(0)); - hadronType.emplace_back(6); - } - } // end of Omega- loop + // for (const auto& xiId : xiMinusIds) { + // auto cascade = cascades.rawIteratorAt(xiId); + // if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { + // continue; + // } + + // const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; + // const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; + // std::array covCasc = {0.}; + // constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + // for (int i = 0; i < 6; i++) { + // covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; + // covCasc[i] = cascade.positionCovMat()[i]; + // } + // auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); + // cascadeParCov.setAbsCharge(1); + // cascadeParCov.setPID(o2::track::PID::XiMinus); + // o2::dataformats::DCA impactParameterCasc; + // o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object + + // auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::XiMinus); + // registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); + // registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); + // registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); + // registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); + // if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { + // o2::analysis::pwgem::dilepton::sct::candidate candidate; + // fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); + // candidate.ptL = trackParCov.getPt(); + // candidate.massH = o2::constants::physics::MassXiMinus; + + // auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); + // float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); + + // int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; + // if (pbin < 0) { + // pbin = 0; + // } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { + // pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; + // } + + // auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + // bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); + // bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); + // bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); + // bdtScoreHb.emplace_back(static_cast(0)); + // hadronType.emplace_back(4); + // } + // } // end of Xi- loop + + // // eOmega pair // sign is restricted in baryon decay: Omegac0 -> e+ nu_e Omega- + // for (const auto& omegaId : omegaMinusIds) { + // auto cascade = cascades.rawIteratorAt(omegaId); + // if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { + // continue; + // } + + // const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; + // const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; + // std::array covCasc = {0.}; + // constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + // for (int i = 0; i < 6; i++) { + // covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; + // covCasc[i] = cascade.positionCovMat()[i]; + // } + // auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); + // cascadeParCov.setAbsCharge(1); + // cascadeParCov.setPID(o2::track::PID::OmegaMinus); + // o2::dataformats::DCA impactParameterCasc; + // o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object + + // auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::OmegaMinus); + // registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); + // registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); + // registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); + // registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); + // if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { + // o2::analysis::pwgem::dilepton::sct::candidate candidate; + // fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); + // candidate.ptL = trackParCov.getPt(); + // candidate.massH = o2::constants::physics::MassOmegaMinus; + + // auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); + // float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); + + // int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; + // if (pbin < 0) { + // pbin = 0; + // } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { + // pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; + // } + + // auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + // bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); + // bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); + // bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); + // bdtScoreHb.emplace_back(static_cast(0)); + // hadronType.emplace_back(6); + // } + // } // end of Omega- loop } else { // electron // eL pair // sign is restricted in baryon decay: Lc- -> e- anti_nu_e antiLambda - for (const auto& antilambdaId : antilambdaIds) { - auto v0 = v0s.rawIteratorAt(antilambdaId); - if (v0.posTrackId() == electron.globalIndex() || v0.negTrackId() == electron.globalIndex()) { - continue; - } - const std::array vertexV0 = {v0.x(), v0.y(), v0.z()}; - const std::array momV0 = {v0.px(), v0.py(), v0.pz()}; - std::array covV0 = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covV0[MomInd[i]] = v0.momentumCovMat()[i]; - covV0[i] = v0.positionCovMat()[i]; - } - auto v0ParCov = o2::track::TrackParCov(vertexV0, momV0, covV0, 0, true); - v0ParCov.setAbsCharge(0); - v0ParCov.setPID(o2::track::PID::Lambda); - o2::dataformats::DCA impactParameterV0; - o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, v0ParCov, 2.f, matCorr, &impactParameterV0); // v0ParCov is TrackParCov object - - auto eV0pair = o2::aod::pwgem::dilepton::utils::makePairLeptonV0(dfeV0, collision, electron, v0, o2::track::PID::Electron, o2::track::PID::Lambda); - registry.fill(HIST("SCT/eV0/hDecayLength"), eV0pair.lxy, eV0pair.lz); - registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); - registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); - registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); - if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { - o2::analysis::pwgem::dilepton::sct::candidate candidate; - fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); - candidate.ptL = trackParCov.getPt(); - candidate.massH = o2::constants::physics::MassLambda; - - auto inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); - float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); - - int pbin = lower_bound(fConfigDFeV0.binsMl.value.begin(), fConfigDFeV0.binsMl.value.end(), binningFeature) - fConfigDFeV0.binsMl.value.begin() - 1; - if (pbin < 0) { - pbin = 0; - } else if (static_cast(fConfigDFeV0.binsMl.value.size()) - 2 < pbin) { - pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; - } - - auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); - bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); - bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); - bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); - bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); - hadronType.emplace_back(3); - } - } // end of antilambda loop - - // eXi pair // sign is restricted in baryon decay: Xic0bar -> e- anti_nu_e Xi+ - for (const auto& xiId : xiPlusIds) { - auto cascade = cascades.rawIteratorAt(xiId); - if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { - continue; - } - - const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; - const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; - std::array covCasc = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; - covCasc[i] = cascade.positionCovMat()[i]; - } - auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); - cascadeParCov.setAbsCharge(1); - cascadeParCov.setPID(o2::track::PID::XiMinus); - o2::dataformats::DCA impactParameterCasc; - o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object - - auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::XiMinus); - registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); - registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); - registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); - registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { - o2::analysis::pwgem::dilepton::sct::candidate candidate; - fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); - candidate.ptL = trackParCov.getPt(); - candidate.massH = o2::constants::physics::MassXiMinus; - - auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); - float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); - - int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; - if (pbin < 0) { - pbin = 0; - } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { - pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; - } - - auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); - bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); - bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); - bdtScoreHb.emplace_back(static_cast(0)); - hadronType.emplace_back(5); - } - } // end of Xi- loop - - // eOmega pair // sign is restricted in baryon decay: Omegac0bar -> e- anti_nu_e Omega+ - for (const auto& omegaId : omegaPlusIds) { - auto cascade = cascades.rawIteratorAt(omegaId); - if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { - continue; - } - - const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; - const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; - std::array covCasc = {0.}; - constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component - for (int i = 0; i < 6; i++) { - covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; - covCasc[i] = cascade.positionCovMat()[i]; - } - auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); - cascadeParCov.setAbsCharge(1); - cascadeParCov.setPID(o2::track::PID::OmegaMinus); - o2::dataformats::DCA impactParameterCasc; - o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object - - auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::OmegaMinus); - registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); - registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); - registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); - registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); - if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { - o2::analysis::pwgem::dilepton::sct::candidate candidate; - fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); - candidate.ptL = trackParCov.getPt(); - candidate.massH = o2::constants::physics::MassOmegaMinus; - - auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); - float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); - - int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; - if (pbin < 0) { - pbin = 0; - } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { - pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; - } - - auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); - bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); - bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); - bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); - bdtScoreHb.emplace_back(static_cast(0)); - hadronType.emplace_back(7); - } - } // end of Omega- loop + // for (const auto& antilambdaId : antilambdaIds) { + // auto v0 = v0s.rawIteratorAt(antilambdaId); + // if (v0.posTrackId() == electron.globalIndex() || v0.negTrackId() == electron.globalIndex()) { + // continue; + // } + // const std::array vertexV0 = {v0.x(), v0.y(), v0.z()}; + // const std::array momV0 = {v0.px(), v0.py(), v0.pz()}; + // std::array covV0 = {0.}; + // constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + // for (int i = 0; i < 6; i++) { + // covV0[MomInd[i]] = v0.momentumCovMat()[i]; + // covV0[i] = v0.positionCovMat()[i]; + // } + // auto v0ParCov = o2::track::TrackParCov(vertexV0, momV0, covV0, 0, true); + // v0ParCov.setAbsCharge(0); + // v0ParCov.setPID(o2::track::PID::Lambda); + // o2::dataformats::DCA impactParameterV0; + // o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, v0ParCov, 2.f, matCorr, &impactParameterV0); // v0ParCov is TrackParCov object + + // auto eV0pair = o2::aod::pwgem::dilepton::utils::makePairLeptonV0(dfeV0, collision, electron, v0, o2::track::PID::Electron, o2::track::PID::Lambda); + // registry.fill(HIST("SCT/eV0/hDecayLength"), eV0pair.lxy, eV0pair.lz); + // registry.fill(HIST("SCT/eV0/hCosPA"), eV0pair.cospa); + // registry.fill(HIST("SCT/eV0/hDCA2legs"), eV0pair.dca2legs); + // registry.fill(HIST("SCT/eV0/hMass"), eV0pair.mass); + // if (eV0pair.isOK && fConfigDFeV0.useML && eV0pair.chi2PCA < fConfigDFeV0.maxChi2PCA && eV0pair.mass < fConfigDFeV0.maxMassLH) { + // o2::analysis::pwgem::dilepton::sct::candidate candidate; + // fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); + // candidate.ptL = trackParCov.getPt(); + // candidate.massH = o2::constants::physics::MassLambda; + + // auto inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); + // float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); + + // int pbin = lower_bound(fConfigDFeV0.binsMl.value.begin(), fConfigDFeV0.binsMl.value.end(), binningFeature) - fConfigDFeV0.binsMl.value.begin() - 1; + // if (pbin < 0) { + // pbin = 0; + // } else if (static_cast(fConfigDFeV0.binsMl.value.size()) - 2 < pbin) { + // pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; + // } + + // auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); + // bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); + // bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); + // bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); + // bdtScoreHb.emplace_back(static_cast(vecProb[3] * 255.f)); + // hadronType.emplace_back(3); + // } + // } // end of antilambda loop + + // // eXi pair // sign is restricted in baryon decay: Xic0bar -> e- anti_nu_e Xi+ + // for (const auto& xiId : xiPlusIds) { + // auto cascade = cascades.rawIteratorAt(xiId); + // if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { + // continue; + // } + + // const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; + // const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; + // std::array covCasc = {0.}; + // constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + // for (int i = 0; i < 6; i++) { + // covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; + // covCasc[i] = cascade.positionCovMat()[i]; + // } + // auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); + // cascadeParCov.setAbsCharge(1); + // cascadeParCov.setPID(o2::track::PID::XiMinus); + // o2::dataformats::DCA impactParameterCasc; + // o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object + + // auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::XiMinus); + // registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); + // registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); + // registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); + // registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); + // if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { + // o2::analysis::pwgem::dilepton::sct::candidate candidate; + // fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); + // candidate.ptL = trackParCov.getPt(); + // candidate.massH = o2::constants::physics::MassXiMinus; + + // auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); + // float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); + + // int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; + // if (pbin < 0) { + // pbin = 0; + // } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { + // pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; + // } + + // auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + // bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); + // bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); + // bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); + // bdtScoreHb.emplace_back(static_cast(0)); + // hadronType.emplace_back(5); + // } + // } // end of Xi- loop + + // // eOmega pair // sign is restricted in baryon decay: Omegac0bar -> e- anti_nu_e Omega+ + // for (const auto& omegaId : omegaPlusIds) { + // auto cascade = cascades.rawIteratorAt(omegaId); + // if (cascade.posTrackId() == electron.globalIndex() || cascade.negTrackId() == electron.globalIndex() || cascade.bachelorId() == electron.globalIndex()) { + // continue; + // } + + // const std::array vertexCasc = {cascade.x(), cascade.y(), cascade.z()}; + // const std::array momCasc = {cascade.px(), cascade.py(), cascade.pz()}; + // std::array covCasc = {0.}; + // constexpr int MomInd[6] = {9, 13, 14, 18, 19, 20}; // cov matrix elements for momentum component + // for (int i = 0; i < 6; i++) { + // covCasc[MomInd[i]] = cascade.momentumCovMat()[i]; + // covCasc[i] = cascade.positionCovMat()[i]; + // } + // auto cascadeParCov = o2::track::TrackParCov(vertexCasc, momCasc, covCasc, cascade.sign(), true); + // cascadeParCov.setAbsCharge(1); + // cascadeParCov.setPID(o2::track::PID::OmegaMinus); + // o2::dataformats::DCA impactParameterCasc; + // o2::base::Propagator::Instance()->propagateToDCABxByBz(mVtx, cascadeParCov, 2.f, matCorr, &impactParameterCasc); // cascadeParCov is TrackParCov object + + // auto eCpair = o2::aod::pwgem::dilepton::utils::makePairLeptonCascade(dfeC, collision, electron, cascade, o2::track::PID::Electron, o2::track::PID::OmegaMinus); + // registry.fill(HIST("SCT/eC/hDecayLength"), eCpair.lxy, eCpair.lz); + // registry.fill(HIST("SCT/eC/hCosPA"), eCpair.cospa); + // registry.fill(HIST("SCT/eC/hDCA2legs"), eCpair.dca2legs); + // registry.fill(HIST("SCT/eC/hMass"), eCpair.mass); + // if (eCpair.isOK && fConfigDFeC.useML && eCpair.chi2PCA < fConfigDFeC.maxChi2PCA && eCpair.mass < fConfigDFeC.maxMassLH) { + // o2::analysis::pwgem::dilepton::sct::candidate candidate; + // fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); + // candidate.ptL = trackParCov.getPt(); + // candidate.massH = o2::constants::physics::MassOmegaMinus; + + // auto inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); + // float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); + + // int pbin = lower_bound(fConfigDFeC.binsMl.value.begin(), fConfigDFeC.binsMl.value.end(), binningFeature) - fConfigDFeC.binsMl.value.begin() - 1; + // if (pbin < 0) { + // pbin = 0; + // } else if (static_cast(fConfigDFeC.binsMl.value.size()) - 2 < pbin) { + // pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; + // } + + // auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + // bdtScoreBkg.emplace_back(static_cast(vecProb[0] * 255.f)); + // bdtScorePromptHc.emplace_back(static_cast(vecProb[1] * 255.f)); + // bdtScoreNonpromptHc.emplace_back(static_cast(vecProb[2] * 255.f)); + // bdtScoreHb.emplace_back(static_cast(0)); + // hadronType.emplace_back(7); + // } + // } // end of Omega- loop } products.sctTable(/*bdtScoreBkg,*/ bdtScorePromptHc, bdtScoreNonpromptHc, bdtScoreHb, hadronType); @@ -2064,23 +2052,23 @@ class ElectronModule hadronIds.clear(); hadronIds.shrink_to_fit(); - k0sIds.clear(); - k0sIds.shrink_to_fit(); + // k0sIds.clear(); + // k0sIds.shrink_to_fit(); - lambdaIds.clear(); - lambdaIds.shrink_to_fit(); - antilambdaIds.clear(); - antilambdaIds.shrink_to_fit(); + // lambdaIds.clear(); + // lambdaIds.shrink_to_fit(); + // antilambdaIds.clear(); + // antilambdaIds.shrink_to_fit(); - xiMinusIds.clear(); - xiMinusIds.shrink_to_fit(); - xiPlusIds.clear(); - xiPlusIds.shrink_to_fit(); + // xiMinusIds.clear(); + // xiMinusIds.shrink_to_fit(); + // xiPlusIds.clear(); + // xiPlusIds.shrink_to_fit(); - omegaMinusIds.clear(); - omegaMinusIds.shrink_to_fit(); - omegaPlusIds.clear(); - omegaPlusIds.shrink_to_fit(); + // omegaMinusIds.clear(); + // omegaMinusIds.shrink_to_fit(); + // omegaPlusIds.clear(); + // omegaPlusIds.shrink_to_fit(); looseElectronIds.clear(); looseElectronIds.shrink_to_fit(); @@ -2092,8 +2080,8 @@ class ElectronModule clear(); } - template - void processWithoutTTCA(TBCs const&, TCollisions const&, TTracks const&, TV0s const&, TCascades const&, TMCParticles const&, TProducts&, THistoregistry&) + template + void processWithoutTTCA(TBCs const&, TCollisions const&, TTracks const&, /*TV0s const&, TCascades const&,*/ TMCParticles const&, TProducts&, THistoregistry&) { LOGF(info, "processWithoutTTCA is not supported. Bye."); @@ -2137,8 +2125,8 @@ class ElectronModule } void doSCTwithTracks(const bool flag) { fDoSCTwithTracks = flag; } - void doSCTwithV0s(const bool flag) { fDoSCTwithV0s = flag; } - void doSCTwithCascades(const bool flag) { fDoSCTwithCascades = flag; } + // void doSCTwithV0s(const bool flag) { fDoSCTwithV0s = flag; } + // void doSCTwithCascades(const bool flag) { fDoSCTwithCascades = flag; } float dca3DinSigmaOTF(const float dcaXY, const float dcaZ, const float cYY, const float cZZ, const float cZY) { @@ -2186,11 +2174,11 @@ class ElectronModule electronCut fElectronCut; electronPFCut fElectronPFCut; hadronCut fHadronCut; - v0Cut fV0Cut; - cascadeCut fCascadeCut; + // v0Cut fV0Cut; + // cascadeCut fCascadeCut; cfgDFeT fConfigDFeT; - cfgDFeV0 fConfigDFeV0; - cfgDFeC fConfigDFeC; + // cfgDFeV0 fConfigDFeV0; + // cfgDFeC fConfigDFeC; std::map, float> fMapProbaEl; // map pair(collisionId, trackId) -> probaEl std::map, float> fMapTOFNsigmaElReassociated; // map pair(collisionId, trackId) -> tof n sigma el @@ -2206,16 +2194,16 @@ class ElectronModule o2::framework::Service mTOFResponse; o2::analysis::MlResponsePID mlResponsePID; o2::analysis::MlResponseSCT mlResponseSCTeT; - o2::analysis::MlResponseSCT mlResponseSCTeV0; - o2::analysis::MlResponseSCT mlResponseSCTeC; + // o2::analysis::MlResponseSCT mlResponseSCTeV0; + // o2::analysis::MlResponseSCT mlResponseSCTeC; bool fDoSCTwithTracks{false}; - bool fDoSCTwithV0s{false}; - bool fDoSCTwithCascades{false}; + // bool fDoSCTwithV0s{false}; + // bool fDoSCTwithCascades{false}; const std::vector max_mee_vec{0.02, 0.04, 0.06, 0.08, 0.10, 0.12, 0.14}; o2::vertexing::DCAFitterN<2> dfeT; - o2::vertexing::DCAFitterN<2> dfeV0; - o2::vertexing::DCAFitterN<2> dfeC; + // o2::vertexing::DCAFitterN<2> dfeV0; + // o2::vertexing::DCAFitterN<2> dfeC; o2::ccdb::CcdbApi ccdbApi; }; // end ElectronModule