diff --git a/PWGEM/Dilepton/DataModel/dileptonTables.h b/PWGEM/Dilepton/DataModel/dileptonTables.h index 7bbce9eeef0..a3a7d52b4e2 100644 --- a/PWGEM/Dilepton/DataModel/dileptonTables.h +++ b/PWGEM/Dilepton/DataModel/dileptonTables.h @@ -691,13 +691,20 @@ DECLARE_SOA_COLUMN(PrefilterBit, pfb, uint8_t); //! DECLARE_SOA_COLUMN(PrefilterBitDerived, pfbderived, uint16_t); //! DECLARE_SOA_COLUMN(ProbElBDT, probElBDT, float); //! -DECLARE_SOA_COLUMN(BDTScorePrompt, bdtScorePrompt, std::vector); //! -DECLARE_SOA_COLUMN(BDTScorePromptHc, bdtScorePromptHc, std::vector); //! -DECLARE_SOA_COLUMN(BDTScoreNonpromptHc, bdtScoreNonpromptHc, std::vector); //! -DECLARE_SOA_COLUMN(BDTScoreHb, bdtScoreHb, std::vector); //! -DECLARE_SOA_COLUMN(HadronType, hadronType, std::vector); //! 0:track, 1:K0S, 2:Lambda, 3:AntiLambda, 4:XiMinus, 5:XiPlus, 6:OmegaMinus, 7:OmegaPlus - -DECLARE_SOA_DYNAMIC_COLUMN(ProbaSCT, probaSCT, [](std::vector p0, std::vector p1, std::vector p2, std::vector p3, std::vector type, int index) -> std::array { return std::array{p0[index], p1[index], p2[index], p3[index], static_cast(type[index])}; }); +DECLARE_SOA_COLUMN(BDTScorePromptUINT8, bdtScorePromptUINT8, std::vector); //! scaling factor is 255. +DECLARE_SOA_COLUMN(BDTScorePromptHcUINT8, bdtScorePromptHcUINT8, std::vector); //! scaling factor is 255. +DECLARE_SOA_COLUMN(BDTScoreNonpromptHcUINT8, bdtScoreNonpromptHcUINT8, std::vector); //! scaling factor is 255. +DECLARE_SOA_COLUMN(BDTScoreHbUINT8, bdtScoreHbUINT8, std::vector); //! scaling factor is 255. +DECLARE_SOA_COLUMN(HadronType, hadronType, std::vector); //! 0:track, 1:K0S, 2:Lambda, 3:AntiLambda, 4:XiMinus, 5:XiPlus, 6:OmegaMinus, 7:OmegaPlus + +DECLARE_SOA_DYNAMIC_COLUMN(ProbaSCT, probaSCT, [](std::vector p0, std::vector p1, std::vector p2, std::vector p3, std::vector type, int index) -> std::array { + return std::array{ + std::nextafter(p0[index] / 255.f, std::numeric_limits::infinity()), + std::nextafter(p1[index] / 255.f, std::numeric_limits::infinity()), + std::nextafter(p2[index] / 255.f, std::numeric_limits::infinity()), + std::nextafter(p3[index] / 255.f, std::numeric_limits::infinity()), + static_cast(type[index])}; +}); DECLARE_SOA_DYNAMIC_COLUMN(NSV, nSV, [](std::vector type) -> size_t { return type.size(); }); DECLARE_SOA_COLUMN(ITSNSigmaEl, itsNSigmaEl, float); //! @@ -1017,9 +1024,9 @@ DECLARE_SOA_TABLE(EMPrimaryElectronsPrefilterBitDerived, "AOD", "PRMELPFBDERIVED using EMPrimaryElectronPrefilterBitDerived = EMPrimaryElectronsPrefilterBitDerived::iterator; DECLARE_SOA_TABLE(EMPrimaryElectronsBDTSCT, "AOD", "ELBDTSCT", // To be joined with EMPrimaryElectrons table at analysis level. - emprimaryelectron::BDTScorePrompt, emprimaryelectron::BDTScorePromptHc, emprimaryelectron::BDTScoreNonpromptHc, emprimaryelectron::BDTScoreHb, emprimaryelectron::HadronType, + emprimaryelectron::BDTScorePromptUINT8, emprimaryelectron::BDTScorePromptHcUINT8, emprimaryelectron::BDTScoreNonpromptHcUINT8, emprimaryelectron::BDTScoreHbUINT8, emprimaryelectron::HadronType, emprimaryelectron::NSV, - emprimaryelectron::ProbaSCT); + emprimaryelectron::ProbaSCT); // iterators using EMPrimaryElectronBDTSCT = EMPrimaryElectronsBDTSCT::iterator; diff --git a/PWGEM/Dilepton/DataModel/lmeeMLTables.h b/PWGEM/Dilepton/DataModel/lmeeMLTables.h index 77245cee69d..8f6cac72a92 100644 --- a/PWGEM/Dilepton/DataModel/lmeeMLTables.h +++ b/PWGEM/Dilepton/DataModel/lmeeMLTables.h @@ -219,13 +219,14 @@ DECLARE_SOA_COLUMN(ImpParCZYL, impParCZYL, float); //! sigma of i DECLARE_SOA_COLUMN(ImpParCZZL, impParCZZL, float); //! sigma of impact parameter for lepton in Z DECLARE_SOA_COLUMN(PdgCodeMother, pdgCodeMother, int); //! pdg code of mother of lepton DECLARE_SOA_COLUMN(IsCorrectCollision, isCorrectCollision, bool); //! LH pair is associated to correct collision. +DECLARE_SOA_COLUMN(MotherId, motherId, int); //! globalIndex of mother of lepton } // namespace emmltrack DECLARE_SOA_TABLE(EMMLLeptons, "AOD", "EMMLLEPTON", //! o2::soa::Index<>, emmltrack::EMMLEventId, emmlevent::SubGeneratorId, emmltrack::Signed1PtL, emmltrack::EtaL, emmltrack::PhiL, emmltrack::ImpParXYL, emmltrack::ImpParZL, emmltrack::ImpParCYYL, emmltrack::ImpParCZYL, emmltrack::ImpParCZZL, - emmltrack::IsMotherFromBeauty, emmltrack::PdgCodeMother, emmltrack::IsCorrectCollision); + emmltrack::IsMotherFromBeauty, emmltrack::PdgCodeMother, emmltrack::MotherId, emmltrack::IsCorrectCollision); // iterators using EMMLLepton = EMMLLeptons::iterator; @@ -248,7 +249,7 @@ DECLARE_SOA_COLUMN(ImpParCZZH, impParCZZH, float); //! sigma of impact parameter DECLARE_SOA_COLUMN(V0CPA, v0cpa, float); //! cosPA of V0 DECLARE_SOA_COLUMN(V0CPAXY, v0cpaXY, float); //! cosPA of V0 in XY plane -DECLARE_SOA_COLUMN(V0CPARZ, v0cpaRZ, float); //! cosPA of V0 in XY plane +DECLARE_SOA_COLUMN(V0CPARZ, v0cpaRZ, float); //! cosPA of V0 in RZ plane DECLARE_SOA_COLUMN(CascCPA, casccpa, float); //! cosPA of Cascade DECLARE_SOA_COLUMN(CascCPAXY, casccpaXY, float); //! cosPA of Cascade in XY plane @@ -259,11 +260,24 @@ DECLARE_SOA_COLUMN(CascadeType, cascadeType, uint8_t); //! cascade type, 0 = XiM // LH pair variables DECLARE_SOA_COLUMN(MassLH, massLH, float); //! invariant mass of LH assuming pion -DECLARE_SOA_COLUMN(PtLH, ptLH, float); //! pT of LH pair -DECLARE_SOA_COLUMN(DcaLH, dcalh, float); //! DCA between lepton and hadron -DECLARE_SOA_COLUMN(CPA, cpa, float); //! cosine of pointing angle of LH pair -DECLARE_SOA_COLUMN(CPAXY, cpaXY, float); //! cosine of pointing angle of LH pair in XY -DECLARE_SOA_COLUMN(CPARZ, cpaRZ, float); //! cosine of pointing angle of LH pair in RZ + +DECLARE_SOA_COLUMN(PtSVL, ptSVL, float); //! pT of lepton at SV +DECLARE_SOA_COLUMN(PlSVL, plSVL, float); //! pL of lepton at SV +DECLARE_SOA_COLUMN(PtSVH, ptSVH, float); //! pT of associated hadron at SV +DECLARE_SOA_COLUMN(PlSVH, plSVH, float); //! pL of associated hadron at SV + +DECLARE_SOA_COLUMN(PtFDL, ptFDL, float); //! pT of lepton perpendicular to flight direction +DECLARE_SOA_COLUMN(PlFDL, plFDL, float); //! pL of lepton in parallel to flight direction +DECLARE_SOA_COLUMN(PtFDH, ptFDH, float); //! pT of associated hadron perpendicular to flight direction +DECLARE_SOA_COLUMN(PlFDH, plFDH, float); //! pL of associated hadron in parallel to flight direction + +DECLARE_SOA_COLUMN(PtFD, ptFD, float); //! visible momentum of LH pair perpendicular to flight direction = - missing pT due to neutrino perpendicular to flight direction +DECLARE_SOA_COLUMN(PlFD, plFD, float); //! visible momentum of LH pair in parallel to flight direction + +DECLARE_SOA_COLUMN(DcaLH, dcalh, float); //! DCA between lepton and hadron +DECLARE_SOA_COLUMN(CPA, cpa, float); //! cosine of pointing angle of LH pair +DECLARE_SOA_COLUMN(CPAXY, cpaXY, float); //! cosine of pointing angle of LH pair in XY +DECLARE_SOA_COLUMN(CPARZ, cpaRZ, float); //! cosine of pointing angle of LH pair in RZ DECLARE_SOA_COLUMN(Lxy, lxy, float); //! decay length of LH pair DECLARE_SOA_COLUMN(Lz, lz, float); //! decay length of LH pair @@ -287,10 +301,12 @@ DECLARE_SOA_TABLE(EMMLLTPairs, "AOD", "EMMLLTPAIR", //! emmllhpair::EMMLLeptonId, emmllhpair::Signed1PtH, emmllhpair::EtaH, emmllhpair::ImpParXYH, emmllhpair::ImpParZH, emmllhpair::ImpParCYYH, emmllhpair::ImpParCZYH, emmllhpair::ImpParCZZH, - pidtpc::TPCNSigmaPi, pidtof::TOFNSigmaPi, + // pidtpc::TPCNSigmaPi, pidtof::TOFNSigmaPi, pidtpc::TPCNSigmaKa, pidtof::TOFNSigmaKa, - pidtpc::TPCNSigmaPr, pidtof::TOFNSigmaPr, - emmllhpair::MassLH, emmllhpair::PtLH, emmllhpair::DcaLH, emmllhpair::CPA, emmllhpair::CPAXY, emmllhpair::CPARZ, + // pidtpc::TPCNSigmaPr, pidtof::TOFNSigmaPr, + emmllhpair::MassLH, emmllhpair::PtSVL, emmllhpair::PlSVL, emmllhpair::PtSVH, emmllhpair::PlSVH, + emmllhpair::PtFD, emmllhpair::PlFD, emmllhpair::PtFDL, emmllhpair::PlFDL, emmllhpair::PtFDH, emmllhpair::PlFDH, + emmllhpair::DcaLH, emmllhpair::CPA, emmllhpair::CPAXY, emmllhpair::CPARZ, emmllhpair::Lxy, emmllhpair::Lz, emmllhpair::Lxyz, emmllhpair::LxyErr, emmllhpair::LzErr, emmllhpair::LxyzErr, emmllhpair::ImpParXY, emmllhpair::ImpParZ, emmllhpair::ImpParCYY, emmllhpair::ImpParCZY, emmllhpair::ImpParCZZ, emmllhpair::PdgCodeH, emmllhpair::PdgCodeIM, emmllhpair::FoundCommonMother); @@ -302,7 +318,9 @@ DECLARE_SOA_TABLE(EMMLLV0Pairs, "AOD", "EMMLLV0PAIR", //! emmllhpair::PtH, emmllhpair::RapidityV0, emmllhpair::V0CPA, emmllhpair::V0CPAXY, emmllhpair::V0CPARZ, emmllhpair::ImpParXYH, emmllhpair::ImpParZH, emmllhpair::ImpParCYYH, emmllhpair::ImpParCZYH, emmllhpair::ImpParCZZH, - emmllhpair::MassLH, emmllhpair::PtLH, emmllhpair::DcaLH, emmllhpair::CPA, emmllhpair::CPAXY, emmllhpair::CPARZ, + emmllhpair::MassLH, emmllhpair::PtSVL, emmllhpair::PlSVL, emmllhpair::PtSVH, emmllhpair::PlSVH, + emmllhpair::PtFD, emmllhpair::PlFD, emmllhpair::PtFDL, emmllhpair::PlFDL, emmllhpair::PtFDH, emmllhpair::PlFDH, + emmllhpair::DcaLH, emmllhpair::CPA, emmllhpair::CPAXY, emmllhpair::CPARZ, emmllhpair::Lxy, emmllhpair::Lz, emmllhpair::Lxyz, emmllhpair::LxyErr, emmllhpair::LzErr, emmllhpair::LxyzErr, emmllhpair::ImpParXY, emmllhpair::ImpParZ, emmllhpair::ImpParCYY, emmllhpair::ImpParCZY, emmllhpair::ImpParCZZ, emmllhpair::PdgCodeH, emmllhpair::PdgCodeIM, emmllhpair::FoundCommonMother); @@ -314,7 +332,9 @@ DECLARE_SOA_TABLE(EMMLLCascPairs, "AOD", "EMMLLCPAIR", //! emmllhpair::Signed1PtH, emmllhpair::RapidityC, emmllhpair::CascCPA, emmllhpair::CascCPAXY, emmllhpair::CascCPARZ, emmllhpair::ImpParXYH, emmllhpair::ImpParZH, emmllhpair::ImpParCYYH, emmllhpair::ImpParCZYH, emmllhpair::ImpParCZZH, - emmllhpair::MassLH, emmllhpair::PtLH, emmllhpair::DcaLH, emmllhpair::CPA, emmllhpair::CPAXY, emmllhpair::CPARZ, + emmllhpair::MassLH, emmllhpair::PtSVL, emmllhpair::PlSVL, emmllhpair::PtSVH, emmllhpair::PlSVH, + emmllhpair::PtFD, emmllhpair::PlFD, emmllhpair::PtFDL, emmllhpair::PlFDL, emmllhpair::PtFDH, emmllhpair::PlFDH, + emmllhpair::DcaLH, emmllhpair::CPA, emmllhpair::CPAXY, emmllhpair::CPARZ, emmllhpair::Lxy, emmllhpair::Lz, emmllhpair::Lxyz, emmllhpair::LxyErr, emmllhpair::LzErr, emmllhpair::LxyzErr, emmllhpair::ImpParXY, emmllhpair::ImpParZ, emmllhpair::ImpParCYY, emmllhpair::ImpParCZY, emmllhpair::ImpParCZZ, emmllhpair::PdgCodeH, emmllhpair::PdgCodeIM, emmllhpair::FoundCommonMother); diff --git a/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSCT.cxx b/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSCT.cxx index 2836feae3db..53467cfbca6 100644 --- a/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSCT.cxx +++ b/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectronSCT.cxx @@ -66,16 +66,10 @@ #include -// using namespace o2; -// using namespace o2::soa; -// using namespace o2::framework; -// using namespace o2::framework::expressions; -// using namespace o2::constants::physics; -// using namespace o2::common::core; - struct skimmerPrimaryElectronSCT { - 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; @@ -207,28 +201,44 @@ struct skimmerPrimaryElectronSCT { void processRec_SA(MyCollisions const& collisions, MyBCs const& bcs, MyTracks const& tracks, filteredMyV0s const& v0s, filteredMyCascades const& cascades) { - initCCDB(bcs.begin()); + if (bcs.size() == 0) { + return; + } + auto bc = bcs.begin(); + initCCDB(bc); electronModule.processWithoutTTCA(bcs, collisions, tracks, v0s, cascades, nullptr, products, mRegistry); } PROCESS_SWITCH(skimmerPrimaryElectronSCT, 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) { - initCCDB(bcs.begin()); + 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); } PROCESS_SWITCH(skimmerPrimaryElectronSCT, 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) { - initCCDB(bcs.begin()); + if (bcs.size() == 0) { + return; + } + auto bc = bcs.begin(); + initCCDB(bc); electronModule.processWithoutTTCA(bcs, collisions, tracks, v0s, cascades, nullptr, products, mRegistry); } PROCESS_SWITCH(skimmerPrimaryElectronSCT, 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) { - initCCDB(bcs.begin()); + 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); } PROCESS_SWITCH(skimmerPrimaryElectronSCT, processRec_TTCA_SWT, "process reconstructed info only", false); // with TTCA with swt @@ -237,14 +247,22 @@ struct skimmerPrimaryElectronSCT { 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) { - initCCDB(bcs.begin()); + if (bcs.size() == 0) { + return; + } + auto bc = bcs.begin(); + initCCDB(bc); electronModule.processWithoutTTCA(bcs, collisions, tracks, v0s, cascades, mcParticles, products, mRegistry); } PROCESS_SWITCH(skimmerPrimaryElectronSCT, 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) { - initCCDB(bcs.begin()); + 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); } PROCESS_SWITCH(skimmerPrimaryElectronSCT, processMC_TTCA, "process reconstructed info only", false); // with TTCA in MC diff --git a/PWGEM/Dilepton/Tasks/taggingHFE.cxx b/PWGEM/Dilepton/Tasks/taggingHFE.cxx index 8c12b5b11f3..0b25521a7b6 100644 --- a/PWGEM/Dilepton/Tasks/taggingHFE.cxx +++ b/PWGEM/Dilepton/Tasks/taggingHFE.cxx @@ -1706,7 +1706,7 @@ struct taggingHFE { npos++; leptonTable(eventTable.lastIndex() + 1, mcCollision_mcpos.getSubGeneratorId(), leptonParCov.getQ2Pt(), leptonParCov.getEta(), RecoDecay::constrainAngle(leptonParCov.getPhi(), 0, 1U), dcaXY_lepton, dcaZ_lepton, leptonParCov.getSigmaY2(), leptonParCov.getSigmaZY(), leptonParCov.getSigmaZ2(), - isMotherFromB, mcMother.pdgCode(), isCorrectCollision); + isMotherFromB, mcMother.pdgCode(), mcMother.globalIndex(), isCorrectCollision); // D0 -> e+ nu_e K-, br = 0.03538, ctau = 123.01 um, m = 1864 MeV/c2 for (const auto& kaonId : kaonMinusIds) { @@ -1753,16 +1753,18 @@ struct taggingHFE { continue; } - float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; - float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; emmlltpair(leptonTable.lastIndex(), trackParCov.getQ2Pt(), trackParCov.getEta(), dcaXY_kaon, dcaZ_kaon, trackParCov.getSigmaY2(), trackParCov.getSigmaZY(), trackParCov.getSigmaZ2(), - kaon.tpcNSigmaPi(), tofNSigmaPi, + // kaon.tpcNSigmaPi(), tofNSigmaPi, kaon.tpcNSigmaKa(), tofNSigmaKa, - kaon.tpcNSigmaPr(), tofNSigmaPr, - eKpair.mass, eKpair.pt, eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, + // kaon.tpcNSigmaPr(), tofNSigmaPr, + eKpair.mass, eKpair.ptSVL, eKpair.plSVL, eKpair.ptSVH, eKpair.plSVH, + eKpair.ptFD, eKpair.plFD, eKpair.ptFDL, eKpair.plFDL, eKpair.ptFDH, eKpair.plFDH, + eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, eKpair.lxy, eKpair.lz, eKpair.lxyz, eKpair.lxyErr, eKpair.lzErr, eKpair.lxyzErr, eKpair.impParXY, eKpair.impParZ, eKpair.impParCYY, eKpair.impParCZY, eKpair.impParCZZ, mckaon.pdgCode(), pdgCodeIM, foundCommonMother); @@ -1812,16 +1814,18 @@ struct taggingHFE { continue; } - float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; - float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; emmlltpair(leptonTable.lastIndex(), trackParCov.getQ2Pt(), trackParCov.getEta(), dcaXY_kaon, dcaZ_kaon, trackParCov.getSigmaY2(), trackParCov.getSigmaZY(), trackParCov.getSigmaZ2(), - kaon.tpcNSigmaPi(), tofNSigmaPi, + // kaon.tpcNSigmaPi(), tofNSigmaPi, kaon.tpcNSigmaKa(), tofNSigmaKa, - kaon.tpcNSigmaPr(), tofNSigmaPr, - eKpair.mass, eKpair.pt, eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, + // kaon.tpcNSigmaPr(), tofNSigmaPr, + eKpair.mass, eKpair.ptSVL, eKpair.plSVL, eKpair.ptSVH, eKpair.plSVH, + eKpair.ptFD, eKpair.plFD, eKpair.ptFDL, eKpair.plFDL, eKpair.ptFDH, eKpair.plFDH, + eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, eKpair.lxy, eKpair.lz, eKpair.lxyz, eKpair.lxyErr, eKpair.lzErr, eKpair.lxyzErr, eKpair.impParXY, eKpair.impParZ, eKpair.impParCYY, eKpair.impParCZY, eKpair.impParCZZ, mckaon.pdgCode(), pdgCodeIM, foundCommonMother); @@ -1898,7 +1902,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), impactParameterV0.getY(), impactParameterV0.getZ(), impactParameterV0.getSigmaY2(), impactParameterV0.getSigmaYZ(), impactParameterV0.getSigmaZ2(), - eV0pair.mass, eV0pair.pt, eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, + eV0pair.mass, eV0pair.ptSVL, eV0pair.plSVL, eV0pair.ptSVH, eV0pair.plSVH, + eV0pair.ptFD, eV0pair.plFD, eV0pair.ptFDL, eV0pair.plFDL, eV0pair.ptFDH, eV0pair.plFDH, + eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, eV0pair.lxy, eV0pair.lz, eV0pair.lxyz, eV0pair.lxyErr, eV0pair.lzErr, eV0pair.lxyzErr, eV0pair.impParXY, eV0pair.impParZ, eV0pair.impParCYY, eV0pair.impParCZY, eV0pair.impParCZZ, pdgCodeV0, pdgCodeIM, foundCommonMother); @@ -1959,7 +1965,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), impactParameterV0.getY(), impactParameterV0.getZ(), impactParameterV0.getSigmaY2(), impactParameterV0.getSigmaYZ(), impactParameterV0.getSigmaZ2(), - eV0pair.mass, eV0pair.pt, eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, + eV0pair.mass, eV0pair.ptSVL, eV0pair.plSVL, eV0pair.ptSVH, eV0pair.plSVH, + eV0pair.ptFD, eV0pair.plFD, eV0pair.ptFDL, eV0pair.plFDL, eV0pair.ptFDH, eV0pair.plFDH, + eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, eV0pair.lxy, eV0pair.lz, eV0pair.lxyz, eV0pair.lxyErr, eV0pair.lzErr, eV0pair.lxyzErr, eV0pair.impParXY, eV0pair.impParZ, eV0pair.impParCYY, eV0pair.impParCZY, eV0pair.impParCZZ, pdgCodeV0, pdgCodeIM, foundCommonMother); @@ -2025,7 +2033,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), impactParameterCasc.getY(), impactParameterCasc.getZ(), impactParameterCasc.getSigmaY2(), impactParameterCasc.getSigmaYZ(), impactParameterCasc.getSigmaZ2(), - eCpair.mass, eCpair.pt, eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, + eCpair.mass, eCpair.ptSVL, eCpair.plSVL, eCpair.ptSVH, eCpair.plSVH, + eCpair.ptFD, eCpair.plFD, eCpair.ptFDL, eCpair.plFDL, eCpair.ptFDH, eCpair.plFDH, + eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, eCpair.lxy, eCpair.lz, eCpair.lxyz, eCpair.lxyErr, eCpair.lzErr, eCpair.lxyzErr, eCpair.impParXY, eCpair.impParZ, eCpair.impParCYY, eCpair.impParCZY, eCpair.impParCZZ, pdgCodeCascade, pdgCodeIM, foundCommonMother); @@ -2091,7 +2101,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), impactParameterCasc.getY(), impactParameterCasc.getZ(), impactParameterCasc.getSigmaY2(), impactParameterCasc.getSigmaYZ(), impactParameterCasc.getSigmaZ2(), - eCpair.mass, eCpair.pt, eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, + eCpair.mass, eCpair.ptSVL, eCpair.plSVL, eCpair.ptSVH, eCpair.plSVH, + eCpair.ptFD, eCpair.plFD, eCpair.ptFDL, eCpair.plFDL, eCpair.ptFDH, eCpair.plFDH, + eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, eCpair.lxy, eCpair.lz, eCpair.lxyz, eCpair.lxyErr, eCpair.lzErr, eCpair.lxyzErr, eCpair.impParXY, eCpair.impParZ, eCpair.impParCYY, eCpair.impParCZY, eCpair.impParCZZ, pdgCodeCascade, pdgCodeIM, foundCommonMother); @@ -2131,7 +2143,7 @@ struct taggingHFE { nele++; leptonTable(eventTable.lastIndex() + 1, mcCollision_mcele.getSubGeneratorId(), leptonParCov.getQ2Pt(), leptonParCov.getEta(), RecoDecay::constrainAngle(leptonParCov.getPhi(), 0, 1U), dcaXY_lepton, dcaZ_lepton, leptonParCov.getSigmaY2(), leptonParCov.getSigmaZY(), leptonParCov.getSigmaZ2(), - isMotherFromB, mcMother.pdgCode(), isCorrectCollision); + isMotherFromB, mcMother.pdgCode(), mcMother.globalIndex(), isCorrectCollision); for (const auto& kaonId : kaonMinusIds) { auto kaon = tracks.rawIteratorAt(kaonId); @@ -2177,16 +2189,18 @@ struct taggingHFE { continue; } - float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; - float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; emmlltpair(leptonTable.lastIndex(), trackParCov.getQ2Pt(), trackParCov.getEta(), dcaXY_kaon, dcaZ_kaon, trackParCov.getSigmaY2(), trackParCov.getSigmaZY(), trackParCov.getSigmaZ2(), - kaon.tpcNSigmaPi(), tofNSigmaPi, + // kaon.tpcNSigmaPi(), tofNSigmaPi, kaon.tpcNSigmaKa(), tofNSigmaKa, - kaon.tpcNSigmaPr(), tofNSigmaPr, - eKpair.mass, eKpair.pt, eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, + // kaon.tpcNSigmaPr(), tofNSigmaPr, + eKpair.mass, eKpair.ptSVL, eKpair.plSVL, eKpair.ptSVH, eKpair.plSVH, + eKpair.ptFD, eKpair.plFD, eKpair.ptFDL, eKpair.plFDL, eKpair.ptFDH, eKpair.plFDH, + eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, eKpair.lxy, eKpair.lz, eKpair.lxyz, eKpair.lxyErr, eKpair.lzErr, eKpair.lxyzErr, eKpair.impParXY, eKpair.impParZ, eKpair.impParCYY, eKpair.impParCZY, eKpair.impParCZZ, mckaon.pdgCode(), pdgCodeIM, foundCommonMother); @@ -2237,16 +2251,18 @@ struct taggingHFE { continue; } - float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPi = mapTOFNsigmaPiReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; float tofNSigmaKa = mapTOFNsigmaKaReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; - float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; + // float tofNSigmaPr = mapTOFNsigmaPrReassociated[std::make_pair(collision.globalIndex(), kaon.globalIndex())]; emmlltpair(leptonTable.lastIndex(), trackParCov.getQ2Pt(), trackParCov.getEta(), dcaXY_kaon, dcaZ_kaon, trackParCov.getSigmaY2(), trackParCov.getSigmaZY(), trackParCov.getSigmaZ2(), - kaon.tpcNSigmaPi(), tofNSigmaPi, + // kaon.tpcNSigmaPi(), tofNSigmaPi, kaon.tpcNSigmaKa(), tofNSigmaKa, - kaon.tpcNSigmaPr(), tofNSigmaPr, - eKpair.mass, eKpair.pt, eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, + // kaon.tpcNSigmaPr(), tofNSigmaPr, + eKpair.mass, eKpair.ptSVL, eKpair.plSVL, eKpair.ptSVH, eKpair.plSVH, + eKpair.ptFD, eKpair.plFD, eKpair.ptFDL, eKpair.plFDL, eKpair.ptFDH, eKpair.plFDH, + eKpair.dca2legs, eKpair.cospa, eKpair.cospaXY, eKpair.cospaRZ, eKpair.lxy, eKpair.lz, eKpair.lxyz, eKpair.lxyErr, eKpair.lzErr, eKpair.lxyzErr, eKpair.impParXY, eKpair.impParZ, eKpair.impParCYY, eKpair.impParCZY, eKpair.impParCZZ, mckaon.pdgCode(), pdgCodeIM, foundCommonMother); @@ -2322,7 +2338,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), impactParameterV0.getY(), impactParameterV0.getZ(), impactParameterV0.getSigmaY2(), impactParameterV0.getSigmaYZ(), impactParameterV0.getSigmaZ2(), - eV0pair.mass, eV0pair.pt, eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, + eV0pair.mass, eV0pair.ptSVL, eV0pair.plSVL, eV0pair.ptSVH, eV0pair.plSVH, + eV0pair.ptFD, eV0pair.plFD, eV0pair.ptFDL, eV0pair.plFDL, eV0pair.ptFDH, eV0pair.plFDH, + eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, eV0pair.lxy, eV0pair.lz, eV0pair.lxyz, eV0pair.lxyErr, eV0pair.lzErr, eV0pair.lxyzErr, eV0pair.impParXY, eV0pair.impParZ, eV0pair.impParCYY, eV0pair.impParCZY, eV0pair.impParCZZ, pdgCodeV0, pdgCodeIM, foundCommonMother); @@ -2383,7 +2401,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{v0.x(), v0.y(), v0.z()}, std::array{v0.px(), v0.py(), v0.pz()}), impactParameterV0.getY(), impactParameterV0.getZ(), impactParameterV0.getSigmaY2(), impactParameterV0.getSigmaYZ(), impactParameterV0.getSigmaZ2(), - eV0pair.mass, eV0pair.pt, eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, + eV0pair.mass, eV0pair.ptSVL, eV0pair.plSVL, eV0pair.ptSVH, eV0pair.plSVH, + eV0pair.ptFD, eV0pair.plFD, eV0pair.ptFDL, eV0pair.plFDL, eV0pair.ptFDH, eV0pair.plFDH, + eV0pair.dca2legs, eV0pair.cospa, eV0pair.cospaXY, eV0pair.cospaRZ, eV0pair.lxy, eV0pair.lz, eV0pair.lxyz, eV0pair.lxyErr, eV0pair.lzErr, eV0pair.lxyzErr, eV0pair.impParXY, eV0pair.impParZ, eV0pair.impParCYY, eV0pair.impParCZY, eV0pair.impParCZZ, pdgCodeV0, pdgCodeIM, foundCommonMother); @@ -2449,7 +2469,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), impactParameterCasc.getY(), impactParameterCasc.getZ(), impactParameterCasc.getSigmaY2(), impactParameterCasc.getSigmaYZ(), impactParameterCasc.getSigmaZ2(), - eCpair.mass, eCpair.pt, eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, + eCpair.mass, eCpair.ptSVL, eCpair.plSVL, eCpair.ptSVH, eCpair.plSVH, + eCpair.ptFD, eCpair.plFD, eCpair.ptFDL, eCpair.plFDL, eCpair.ptFDH, eCpair.plFDH, + eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, eCpair.lxy, eCpair.lz, eCpair.lxyz, eCpair.lxyErr, eCpair.lzErr, eCpair.lxyzErr, eCpair.impParXY, eCpair.impParZ, eCpair.impParCYY, eCpair.impParCZY, eCpair.impParCZZ, pdgCodeCascade, pdgCodeIM, foundCommonMother); @@ -2515,7 +2537,9 @@ struct taggingHFE { RecoDecay::cpaXY(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), RecoDecay::cpaRZ(std::array{collision.posX(), collision.posY(), collision.posZ()}, std::array{cascade.x(), cascade.y(), cascade.z()}, std::array{cascade.px(), cascade.py(), cascade.pz()}), impactParameterCasc.getY(), impactParameterCasc.getZ(), impactParameterCasc.getSigmaY2(), impactParameterCasc.getSigmaYZ(), impactParameterCasc.getSigmaZ2(), - eCpair.mass, eCpair.pt, eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, + eCpair.mass, eCpair.ptSVL, eCpair.plSVL, eCpair.ptSVH, eCpair.plSVH, + eCpair.ptFD, eCpair.plFD, eCpair.ptFDL, eCpair.plFDL, eCpair.ptFDH, eCpair.plFDH, + eCpair.dca2legs, eCpair.cospa, eCpair.cospaXY, eCpair.cospaRZ, eCpair.lxy, eCpair.lz, eCpair.lxyz, eCpair.lxyErr, eCpair.lzErr, eCpair.lxyzErr, eCpair.impParXY, eCpair.impParZ, eCpair.impParCYY, eCpair.impParCZY, eCpair.impParCZZ, pdgCodeCascade, pdgCodeIM, foundCommonMother); diff --git a/PWGEM/Dilepton/Utils/ElectronModule.h b/PWGEM/Dilepton/Utils/ElectronModule.h index f71f7d3d7a9..c2d7d343c75 100644 --- a/PWGEM/Dilepton/Utils/ElectronModule.h +++ b/PWGEM/Dilepton/Utils/ElectronModule.h @@ -276,9 +276,9 @@ struct cfgDFeT : o2::framework::ConfigurableGroup { 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.2, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; + 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", "tpcNSigmaKa", "signedMassLH", "cpa", "cpaXY", "dcaLH", "impPar3DinSigma", "decayLength3DinSigma", "decayLengthXYinSigma"}, "Names of ML model input features"}; + o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "tpcNSigmaKa", "signedMassLH", "dcaLH", "cpa", "cpaXY", "impPar3DinSigma", "decayLength3DinSigma", "decayLengthXYinSigma"}, "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)"}; @@ -293,9 +293,9 @@ struct cfgDFeV0 : o2::framework::ConfigurableGroup { 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.2, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; + 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", "cpa", "cpaXY", "dcaLH", "impPar3DinSigma", "decayLength3DinSigma", "decayLengthXYinSigma"}, "Names of ML model input features"}; + o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "dcaLH", "cpa", "cpaXY", "impPar3DinSigma", "decayLength3DinSigma", "decayLengthXYinSigma"}, "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)"}; @@ -310,9 +310,9 @@ struct cfgDFeC : o2::framework::ConfigurableGroup { 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.2, 0.4, 0.8, 1.0, 2.0, 4, 20}, "Bin limits for ML application"}; + 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", "cpa", "cpaXY", "dcaLH", "impPar3DinSigma", "decayLength3DinSigma", "decayLengthXYinSigma"}, "Names of ML model input features"}; + o2::framework::Configurable> namesInputFeatures{"namesInputFeatures", std::vector{"ptH", "impPar3DHinSigma", "massLH", "dcaLH", "cpa", "cpaXY", "impPar3DinSigma", "decayLength3DinSigma", "decayLengthXYinSigma"}, "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)"}; @@ -330,11 +330,11 @@ class ElectronModule // destructor } - struct looseElectron { - float pt{1e+10}; - float eta{1e+10}; - float phi{1e+10}; - }; + // struct looseElectron { + // float pt{1e+10}; + // float eta{1e+10}; + // 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) @@ -402,6 +402,7 @@ class ElectronModule // initialize MLResponse if (fElectronCut.usePIDML) { + LOGF(info, "loading ONNX for ML PID"); static constexpr int nClassesMl = 2; const std::vector cutDirMl = {o2::cuts_ml::CutNot, o2::cuts_ml::CutSmaller}; const std::vector labelsClasses = {"Background", "Signal"}; @@ -426,9 +427,10 @@ class ElectronModule } // end of ML PID if (fConfigDFeT.useML) { + LOGF(info, "loading ONNX for SCT eT"); 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 = {"prompt", "prompthc", "nonprompthc", "hb"}; + const std::vector labelsClasses = {"background", "prompthc", "nonprompthc", "hb"}; const uint32_t nBinsMl = fConfigDFeT.binsMl.value.size() - 1; const std::vector labelsBins(nBinsMl, "bin"); double cutsMlArr[nBinsMl][nClassesMl]; @@ -452,9 +454,10 @@ class ElectronModule } // 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 = {"prompt", "prompthc", "nonprompthc", "hb"}; + 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]; @@ -478,9 +481,10 @@ class ElectronModule } // end of ML SCTeV0 if (fConfigDFeC.useML) { - 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 = {"prompt", "prompthc", "nonprompthc", "hb"}; + 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]; @@ -488,7 +492,6 @@ class ElectronModule 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}; @@ -1348,7 +1351,11 @@ class ElectronModule 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) { - initCCDB(bcs.begin()); + if (bcs.size() == 0) { + return; + } + auto bc = bcs.begin(); + initCCDB(bc); calculateTOFNSigmaWithReassociation(collisions, bcs, tracks, trackIndices, cache, perColTrack, trackIndicesPerCollision); @@ -1625,10 +1632,10 @@ class ElectronModule products.electronPFTable(pfb); // perform SCT from here - std::vector bdtScorePrompt; - std::vector bdtScorePromptHc; - std::vector bdtScoreNonpromptHc; - std::vector bdtScoreHb; + std::vector bdtScorePrompt; + std::vector bdtScorePromptHc; + std::vector bdtScoreNonpromptHc; + std::vector bdtScoreHb; std::vector hadronType; bdtScorePrompt.reserve(hadronIds.size() + k0sIds.size() + lambdaIds.size() + antilambdaIds.size()); @@ -1674,15 +1681,11 @@ class ElectronModule pbin = static_cast(fConfigDFeT.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeT.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeT.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeT.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeT.getModelOutput(inputFeatures, pbin)[3]; - - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeT.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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(0); } } // end of charged track loop @@ -1717,6 +1720,7 @@ class ElectronModule o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); candidate.ptL = trackParCov.getPt(); + candidate.massH = o2::constants::physics::MassK0Short; std::vector inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); @@ -1728,14 +1732,11 @@ class ElectronModule pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[3]; - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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 @@ -1771,6 +1772,7 @@ class ElectronModule o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); candidate.ptL = trackParCov.getPt(); + candidate.massH = o2::constants::physics::MassLambda; std::vector inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); @@ -1782,14 +1784,11 @@ class ElectronModule pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[3]; - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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 @@ -1825,6 +1824,7 @@ class ElectronModule o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); + candidate.massH = o2::constants::physics::MassXiMinus; std::vector inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); @@ -1836,14 +1836,11 @@ class ElectronModule pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[3]; - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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 @@ -1879,6 +1876,7 @@ class ElectronModule o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); + candidate.massH = o2::constants::physics::MassOmegaMinus; std::vector inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); @@ -1890,14 +1888,11 @@ class ElectronModule pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[3]; - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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 @@ -1933,6 +1928,7 @@ class ElectronModule o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eV0pair, v0ParCov, impactParameterV0); candidate.ptL = trackParCov.getPt(); + candidate.massH = o2::constants::physics::MassLambda; std::vector inputFeatures = mlResponseSCTeV0.getInputFeatures(candidate); float binningFeature = mlResponseSCTeV0.getBinningFeature(candidate); @@ -1944,14 +1940,11 @@ class ElectronModule pbin = static_cast(fConfigDFeV0.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin)[3]; - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeV0.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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 @@ -1987,6 +1980,7 @@ class ElectronModule o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); + candidate.massH = o2::constants::physics::MassXiMinus; std::vector inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); @@ -1998,14 +1992,11 @@ class ElectronModule pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[3]; - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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 @@ -2041,6 +2032,7 @@ class ElectronModule o2::analysis::pwgem::dilepton::sct::candidate candidate; fillCandidate(candidate, eCpair, cascadeParCov, impactParameterCasc); candidate.ptL = trackParCov.getPt(); + candidate.massH = o2::constants::physics::MassOmegaMinus; std::vector inputFeatures = mlResponseSCTeC.getInputFeatures(candidate); float binningFeature = mlResponseSCTeC.getBinningFeature(candidate); @@ -2052,14 +2044,11 @@ class ElectronModule pbin = static_cast(fConfigDFeC.binsMl.value.size()) - 2; } - float probaPrompt = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[0]; - float probaPromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[1]; - float probaNonpromptHc = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[2]; - float probaHb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin)[3]; - bdtScorePrompt.emplace_back(probaPrompt); - bdtScorePromptHc.emplace_back(probaPromptHc); - bdtScoreNonpromptHc.emplace_back(probaNonpromptHc); - bdtScoreHb.emplace_back(probaHb); + auto vecProb = mlResponseSCTeC.getModelOutput(inputFeatures, pbin); + bdtScorePrompt.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 @@ -2108,37 +2097,36 @@ class ElectronModule } template - void processWithoutTTCA(TBCs const& bcs, TCollisions const& collisions, TTracks const&, TV0s const&, TCascades const&, TMCParticles const&, TProducts&, THistoregistry&) + void processWithoutTTCA(TBCs const&, TCollisions const&, TTracks const&, TV0s const&, TCascades const&, TMCParticles const&, TProducts&, THistoregistry&) { LOGF(info, "processWithoutTTCA is not supported. Bye."); - return; - initCCDB(bcs.begin()); - // calculateTOFNSigmaWithReassociation(collisions, bcs, tracks, nullptr); + // initCCDB(bcs.begin()); + // // calculateTOFNSigmaWithReassociation(collisions, bcs, tracks, nullptr); - for (const auto& collision : collisions) { - auto bc = collision.template bc_as(); - initCCDB(bc); + // for (const auto& collision : collisions) { + // auto bc = collision.template bc_as(); + // initCCDB(bc); - if constexpr (isMC) { - if (!collision.has_mcCollision()) { - continue; - } - } + // if constexpr (isMC) { + // if (!collision.has_mcCollision()) { + // continue; + // } + // } - if (!collision.isSelected()) { - continue; - } + // if (!collision.isSelected()) { + // continue; + // } - if constexpr (isTriggerAnalysis) { - if (collision.swtaliastmp_raw() == 0) { - continue; - } - } + // if constexpr (isTriggerAnalysis) { + // if (collision.swtaliastmp_raw() == 0) { + // continue; + // } + // } - } // end of collision loop + // } // end of collision loop - clear(); + // clear(); } void clear() @@ -2180,7 +2168,6 @@ class ElectronModule candidate.signLH = 0; candidate.dcaLH = pair.dca2legs; candidate.massLH = pair.mass; - candidate.ptLH = pair.pt; candidate.signedMassLH = pair.mass; candidate.cpa = pair.cospa; candidate.cpaXY = pair.cospaXY; diff --git a/PWGEM/Dilepton/Utils/MlResponseSCT.h b/PWGEM/Dilepton/Utils/MlResponseSCT.h index d0c1353e443..8a00659ecc0 100644 --- a/PWGEM/Dilepton/Utils/MlResponseSCT.h +++ b/PWGEM/Dilepton/Utils/MlResponseSCT.h @@ -53,6 +53,7 @@ enum class InputFeaturesSCT : uint8_t { impParZLinSigma, impPar3DLinSigma, ptH, + massH, tpcNSigmaKa, impParXYH, impParZH, @@ -63,8 +64,9 @@ enum class InputFeaturesSCT : uint8_t { signLH, dcaLH, massLH, - ptLH, signedMassLH, + missingPtNuPerpToFD, + correctedMass, cpa, cpaXY, impParXY, @@ -95,6 +97,7 @@ struct candidate { // hadron information float ptH{0}; + float massH{0}; // only for V0s and Cascades float tpcNSigmaKa{0}; float impParXYH{0}; float impParZH{0}; @@ -107,8 +110,9 @@ struct candidate { int signLH{0}; float dcaLH{0}; float massLH{0}; - float ptLH{0}; float signedMassLH{0}; + float missingPtNuPerpToFD{0}; + float correctedMass{0}; float cpa{0}; float cpaXY{0}; float impParXY{0}; @@ -148,6 +152,7 @@ class MlResponseSCT : public MlResponse CHECK_AND_FILL_TRACK(impParZLinSigma); CHECK_AND_FILL_TRACK(impPar3DLinSigma); CHECK_AND_FILL_TRACK(ptH); + CHECK_AND_FILL_TRACK(massH); CHECK_AND_FILL_TRACK(tpcNSigmaKa); CHECK_AND_FILL_TRACK(impParXYH); CHECK_AND_FILL_TRACK(impParZH); @@ -158,8 +163,9 @@ class MlResponseSCT : public MlResponse CHECK_AND_FILL_TRACK(signLH); CHECK_AND_FILL_TRACK(dcaLH); CHECK_AND_FILL_TRACK(massLH); - CHECK_AND_FILL_TRACK(ptLH); CHECK_AND_FILL_TRACK(signedMassLH); + CHECK_AND_FILL_TRACK(missingPtNuPerpToFD); + CHECK_AND_FILL_TRACK(correctedMass); CHECK_AND_FILL_TRACK(cpa); CHECK_AND_FILL_TRACK(cpaXY); CHECK_AND_FILL_TRACK(impParXY); @@ -224,6 +230,7 @@ class MlResponseSCT : public MlResponse FILL_MAP_TRACK(impParZLinSigma), FILL_MAP_TRACK(impPar3DLinSigma), FILL_MAP_TRACK(ptH), + FILL_MAP_TRACK(massH), FILL_MAP_TRACK(tpcNSigmaKa), FILL_MAP_TRACK(impParXYH), FILL_MAP_TRACK(impParZH), @@ -234,8 +241,9 @@ class MlResponseSCT : public MlResponse FILL_MAP_TRACK(signLH), FILL_MAP_TRACK(dcaLH), FILL_MAP_TRACK(massLH), - FILL_MAP_TRACK(ptLH), FILL_MAP_TRACK(signedMassLH), + FILL_MAP_TRACK(missingPtNuPerpToFD), + FILL_MAP_TRACK(correctedMass), FILL_MAP_TRACK(cpa), FILL_MAP_TRACK(cpaXY), FILL_MAP_TRACK(impParXY), diff --git a/PWGEM/Dilepton/Utils/SemiCharmTag.h b/PWGEM/Dilepton/Utils/SemiCharmTag.h index 75607042ca6..a174ca3fedc 100644 --- a/PWGEM/Dilepton/Utils/SemiCharmTag.h +++ b/PWGEM/Dilepton/Utils/SemiCharmTag.h @@ -23,8 +23,6 @@ #include #include #include -// #include -// #include #include #include // IWYU pragma: keep (do not replace with Math/Vector4Dfwd.h) @@ -37,7 +35,6 @@ namespace o2::aod::pwgem::dilepton::utils struct LHPair { // struct to store electron-hadron pair information float mass{-999.f}; - float pt{-999.f}; float dca2legs{-999.f}; float cospa{-999.f}; float cospaXY{-999.f}; @@ -53,6 +50,20 @@ struct LHPair { // struct to store electron-hadron pair information float impParCYY{-999.f}; float impParCZY{-999.f}; float impParCZZ{-999.f}; + + float ptSVL{-999.f}; + float plSVL{-999.f}; + float ptSVH{-999.f}; + float plSVH{-999.f}; + + float ptFDL{-999.f}; + float plFDL{-999.f}; + float ptFDH{-999.f}; + float plFDH{-999.f}; + + float ptFD{-999.f}; + float plFD{-999.f}; + bool isOK{false}; }; @@ -95,6 +106,11 @@ LHPair makePairLeptonTrack(TFitter& fitter, TCollision const& collision, TLepton fitter.getTrack(1).getPxPyPzGlo(pvec1); // track std::array pvecSum = {pvec0[0] + pvec1[0], pvec0[1] + pvec1[1], pvec0[2] + pvec1[2]}; + pair.ptSVL = RecoDecay::sqrtSumOfSquares(pvec0[0], pvec0[1]); + pair.ptSVH = RecoDecay::sqrtSumOfSquares(pvec1[0], pvec1[1]); + pair.plSVL = pvec0[2]; + pair.plSVH = pvec1[2]; + pair.cospa = RecoDecay::cpa(vertex, svpos, pvecSum); pair.cospaXY = RecoDecay::cpaXY(vertex, svpos, pvecSum); pair.cospaRZ = RecoDecay::cpaRZ(vertex, svpos, pvecSum); @@ -104,12 +120,21 @@ LHPair makePairLeptonTrack(TFitter& fitter, TCollision const& collision, TLepton pair.lxyz = std::sqrt(std::pow(svpos[0] - collision.posX(), 2) + std::pow(svpos[1] - collision.posY(), 2) + std::pow(svpos[2] - collision.posZ(), 2)); auto primaryVertex = getPrimaryVertex(collision); - std::array covVtxLK = fitter.calcPCACovMatrixFlat(); - double phiLH{}, thetaLK{}; - getPointDirection(std::array{primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ()}, svpos, phiLH, thetaLK); - pair.lxyzErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), phiLH, thetaLK) + getRotatedCovMatrixXX(covVtxLK, phiLH, thetaLK)); - pair.lxyErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), phiLH, 0.) + getRotatedCovMatrixXX(covVtxLK, phiLH, 0.)); - pair.lzErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), 0, thetaLK) + getRotatedCovMatrixXX(covVtxLK, 0, thetaLK)); + std::array covVtxLH = fitter.calcPCACovMatrixFlat(); + double phiLH{}, thetaLH{}; + getPointDirection(std::array{primaryVertex.getX(), primaryVertex.getY(), primaryVertex.getZ()}, svpos, phiLH, thetaLH); + pair.lxyzErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), phiLH, thetaLH) + getRotatedCovMatrixXX(covVtxLH, phiLH, thetaLH)); + pair.lxyErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), phiLH, 0.) + getRotatedCovMatrixXX(covVtxLH, phiLH, 0.)); + pair.lzErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), 0, thetaLH) + getRotatedCovMatrixXX(covVtxLH, 0, thetaLH)); + + std::array uvFD = {(svpos[0] - collision.posX()) / pair.lxyz, (svpos[1] - collision.posY()) / pair.lxyz, (svpos[2] - collision.posZ()) / pair.lxyz}; // unit vector of flight direction + pair.plFD = RecoDecay::dotProd(pvecSum, uvFD); + pair.ptFD = RecoDecay::sqrtSumOfSquares(pvecSum[0] - pair.plFD * uvFD[0], pvecSum[1] - pair.plFD * uvFD[1], pvecSum[2] - pair.plFD * uvFD[2]); + + pair.plFDL = RecoDecay::dotProd(pvec0, uvFD); + pair.plFDH = RecoDecay::dotProd(pvec1, uvFD); + pair.ptFDL = RecoDecay::sqrtSumOfSquares(pvec0[0] - pair.plFDL * uvFD[0], pvec0[1] - pair.plFDL * uvFD[1], pvec0[2] - pair.plFDL * uvFD[2]); + pair.ptFDH = RecoDecay::sqrtSumOfSquares(pvec1[0] - pair.plFDH * uvFD[0], pvec1[1] - pair.plFDH * uvFD[1], pvec1[2] - pair.plFDH * uvFD[2]); // propagate the 2 prongs to the secondary vertex leptonParCov.propagateTo(vtx[0], fitter.getBz()); @@ -139,10 +164,12 @@ LHPair makePairLeptonTrack(TFitter& fitter, TCollision const& collision, TLepton return pair; } - ROOT::Math::PxPyPzMVector v2(pvec1[0], pvec1[1], pvec1[2], o2::constants::physics::MassPionCharged); + ROOT::Math::PxPyPzMVector v2(pvec1[0], pvec1[1], pvec1[2], o2::constants::physics::MassKaonCharged); ROOT::Math::PxPyPzMVector v12 = v1 + v2; pair.mass = v12.M(); - pair.pt = v12.Pt(); + + // float tmp = v12.P() * std::sin(std::acos(pair.cospa)); + // LOGF(info, "pair.ptFD = %f, tmp = %f", pair.ptFD, tmp); pair.isOK = true; return pair; @@ -193,10 +220,15 @@ LHPair makePairLeptonV0(TFitter& fitter, TCollision const& collision, TLepton co for (int i = 0; i < 3; i++) { svpos[i] = vtx[i]; } - fitter.getTrack(0).getPxPyPzGlo(pvec0); // electron + fitter.getTrack(0).getPxPyPzGlo(pvec0); // lepton fitter.getTrack(1).getPxPyPzGlo(pvec1); // v0 std::array pvecSum = {pvec0[0] + pvec1[0], pvec0[1] + pvec1[1], pvec0[2] + pvec1[2]}; + pair.ptSVL = RecoDecay::sqrtSumOfSquares(pvec0[0], pvec0[1]); + pair.ptSVH = RecoDecay::sqrtSumOfSquares(pvec1[0], pvec1[1]); + pair.plSVL = pvec0[2]; + pair.plSVH = pvec1[2]; + pair.cospa = RecoDecay::cpa(vertex, svpos, pvecSum); pair.cospaXY = RecoDecay::cpaXY(vertex, svpos, pvecSum); pair.cospaRZ = RecoDecay::cpaRZ(vertex, svpos, pvecSum); @@ -213,6 +245,15 @@ LHPair makePairLeptonV0(TFitter& fitter, TCollision const& collision, TLepton co pair.lxyErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), phiLV0, 0.) + getRotatedCovMatrixXX(covVtxLV0, phiLV0, 0.)); pair.lzErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), 0, thetaLV0) + getRotatedCovMatrixXX(covVtxLV0, 0, thetaLV0)); + std::array uvFD = {(svpos[0] - collision.posX()) / pair.lxyz, (svpos[1] - collision.posY()) / pair.lxyz, (svpos[2] - collision.posZ()) / pair.lxyz}; // unit vector of flight direction + pair.plFD = RecoDecay::dotProd(pvecSum, uvFD); + pair.ptFD = RecoDecay::sqrtSumOfSquares(pvecSum[0] - pair.plFD * uvFD[0], pvecSum[1] - pair.plFD * uvFD[1], pvecSum[2] - pair.plFD * uvFD[2]); + + pair.plFDL = RecoDecay::dotProd(pvec0, uvFD); + pair.plFDH = RecoDecay::dotProd(pvec1, uvFD); + pair.ptFDL = RecoDecay::sqrtSumOfSquares(pvec0[0] - pair.plFDL * uvFD[0], pvec0[1] - pair.plFDL * uvFD[1], pvec0[2] - pair.plFDL * uvFD[2]); + pair.ptFDH = RecoDecay::sqrtSumOfSquares(pvec1[0] - pair.plFDH * uvFD[0], pvec1[1] - pair.plFDH * uvFD[1], pvec1[2] - pair.plFDH * uvFD[2]); + // propagate the 2 prongs to the secondary vertex leptonParCov.propagateTo(vtx[0], fitter.getBz()); v0ParCov.propagateTo(vtx[0], fitter.getBz()); @@ -252,7 +293,6 @@ LHPair makePairLeptonV0(TFitter& fitter, TCollision const& collision, TLepton co ROOT::Math::PxPyPzMVector v12 = v1 + v2; pair.mass = v12.M(); - pair.pt = v12.Pt(); pair.isOK = true; return pair; @@ -307,10 +347,15 @@ LHPair makePairLeptonCascade(TFitter& fitter, TCollision const& collision, TLept for (int i = 0; i < 3; i++) { svpos[i] = vtx[i]; } - fitter.getTrack(0).getPxPyPzGlo(pvec0); // electron - fitter.getTrack(1).getPxPyPzGlo(pvec1); // v0 + fitter.getTrack(0).getPxPyPzGlo(pvec0); // lepton + fitter.getTrack(1).getPxPyPzGlo(pvec1); // cascade std::array pvecSum = {pvec0[0] + pvec1[0], pvec0[1] + pvec1[1], pvec0[2] + pvec1[2]}; + pair.ptSVL = RecoDecay::sqrtSumOfSquares(pvec0[0], pvec0[1]); + pair.ptSVH = RecoDecay::sqrtSumOfSquares(pvec1[0], pvec1[1]); + pair.plSVL = pvec0[2]; + pair.plSVH = pvec1[2]; + pair.cospa = RecoDecay::cpa(vertex, svpos, pvecSum); pair.cospaXY = RecoDecay::cpaXY(vertex, svpos, pvecSum); pair.cospaRZ = RecoDecay::cpaRZ(vertex, svpos, pvecSum); @@ -327,6 +372,15 @@ LHPair makePairLeptonCascade(TFitter& fitter, TCollision const& collision, TLept pair.lzErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), 0, thetaLC) + getRotatedCovMatrixXX(covVtxLC, 0, thetaLC)); pair.lxyzErr = std::sqrt(getRotatedCovMatrixXX(primaryVertex.getCov(), phiLC, thetaLC) + getRotatedCovMatrixXX(covVtxLC, phiLC, thetaLC)); + std::array uvFD = {(svpos[0] - collision.posX()) / pair.lxyz, (svpos[1] - collision.posY()) / pair.lxyz, (svpos[2] - collision.posZ()) / pair.lxyz}; // unit vector of flight direction + pair.plFD = RecoDecay::dotProd(pvecSum, uvFD); + pair.ptFD = RecoDecay::sqrtSumOfSquares(pvecSum[0] - pair.plFD * uvFD[0], pvecSum[1] - pair.plFD * uvFD[1], pvecSum[2] - pair.plFD * uvFD[2]); + + pair.plFDL = RecoDecay::dotProd(pvec0, uvFD); + pair.plFDH = RecoDecay::dotProd(pvec1, uvFD); + pair.ptFDL = RecoDecay::sqrtSumOfSquares(pvec0[0] - pair.plFDL * uvFD[0], pvec0[1] - pair.plFDL * uvFD[1], pvec0[2] - pair.plFDL * uvFD[2]); + pair.ptFDH = RecoDecay::sqrtSumOfSquares(pvec1[0] - pair.plFDH * uvFD[0], pvec1[1] - pair.plFDH * uvFD[1], pvec1[2] - pair.plFDH * uvFD[2]); + // propagate the 2 prongs to the secondary vertex leptonParCov.propagateTo(vtx[0], fitter.getBz()); cascParCov.propagateTo(vtx[0], fitter.getBz()); @@ -365,9 +419,7 @@ LHPair makePairLeptonCascade(TFitter& fitter, TCollision const& collision, TLept } ROOT::Math::PxPyPzMVector v12 = v1 + v2; - pair.mass = v12.M(); - pair.pt = v12.Pt(); pair.isOK = true; return pair;