diff --git a/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectron.cxx b/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectron.cxx index 7ddcadb3dc2..c838228edcf 100644 --- a/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectron.cxx +++ b/PWGEM/Dilepton/TableProducer/skimmerPrimaryElectron.cxx @@ -682,6 +682,7 @@ struct skimmerPrimaryElectron { { stored_trackIds.reserve(tracks.size()); + initCCDB(bcs.iteratorAt(0)); mTOFResponse->processSetup(bcs.iteratorAt(0)); calculateTOFNSigmaWithReassociation(collisions, bcs, tracks, nullptr); @@ -738,10 +739,7 @@ struct skimmerPrimaryElectron { { stored_trackIds.reserve(tracks.size() * 2); - // for (const auto& collision : collisions) { - // auto bc = collision.template foundBC_as(); - // initCCDB(bc); - // } + initCCDB(bcs.iteratorAt(0)); mTOFResponse->processSetup(bcs.iteratorAt(0)); for (const auto& track : tracks) { @@ -805,6 +803,7 @@ struct skimmerPrimaryElectron { void processRec_SA_SWT(MyCollisionsWithSWT const& collisions, aod::BCsWithTimestamps const& bcs, MyFilteredTracks const& tracks) { stored_trackIds.reserve(tracks.size()); + initCCDB(bcs.iteratorAt(0)); mTOFResponse->processSetup(bcs.iteratorAt(0)); calculateTOFNSigmaWithReassociation(collisions, bcs, tracks, nullptr); @@ -863,6 +862,7 @@ struct skimmerPrimaryElectron { void processRec_TTCA_SWT(MyCollisionsWithSWT const& collisions, aod::BCsWithTimestamps const& bcs, MyTracks const& tracks, aod::TrackAssoc const& trackIndices) { stored_trackIds.reserve(tracks.size() * 2); + initCCDB(bcs.iteratorAt(0)); mTOFResponse->processSetup(bcs.iteratorAt(0)); for (const auto& track : tracks) { if (mapCollisionTime.find(track.collisionId()) == mapCollisionTime.end()) { @@ -933,6 +933,7 @@ struct skimmerPrimaryElectron { void processMC_SA(soa::Join const& collisions, aod::McCollisions const&, aod::BCsWithTimestamps const& bcs, MyFilteredTracksMC const& tracks, aod::McParticles const&) { stored_trackIds.reserve(tracks.size()); + initCCDB(bcs.iteratorAt(0)); mTOFResponse->processSetup(bcs.iteratorAt(0)); calculateTOFNSigmaWithReassociation(collisions, bcs, tracks, nullptr); @@ -989,6 +990,7 @@ struct skimmerPrimaryElectron { void processMC_TTCA(soa::Join const& collisions, aod::McCollisions const&, aod::BCsWithTimestamps const& bcs, MyTracksMC const& tracks, aod::TrackAssoc const& trackIndices, aod::McParticles const&) { stored_trackIds.reserve(tracks.size() * 2); + initCCDB(bcs.iteratorAt(0)); mTOFResponse->processSetup(bcs.iteratorAt(0)); for (const auto& track : tracks) { if (mapCollisionTime.find(track.collisionId()) == mapCollisionTime.end()) { diff --git a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx index cdc1c3e5668..2303ba632a9 100644 --- a/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx +++ b/PWGEM/Dilepton/TableProducer/skimmerPrimaryMuon.cxx @@ -560,6 +560,12 @@ struct skimmerPrimaryMuon { float phiMatchedMCHMID = propmuonAtPV_Matched.getPhi(); o2::math_utils::bringTo02Pi(phiMatchedMCHMID); + o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = propagateMuon(fwdtrack, fwdtrack, collision, propagationPoint::kToDCA, matchingZ, mBz, mZShift); + float dcaX_Matched = propmuonAtDCA_Matched.getX() - collision.posX(); + float dcaY_Matched = propmuonAtDCA_Matched.getY() - collision.posY(); + float dcaXY_Matched = std::sqrt(dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched); + float pDCA = fwdtrack.p() * dcaXY_Matched; + float min_chi2MatchMCHMFT = 1e+10; std::tuple tupleIds_at_min_chi2mftmch; for (const auto& muon_tmp : muons_per_MCHMID) { @@ -587,12 +593,6 @@ struct skimmerPrimaryMuon { float dcaY = propmuonAtPV.getY() - collision.posY(); float dcaXY = std::sqrt(dcaX * dcaX + dcaY * dcaY); - o2::dataformats::GlobalFwdTrack propmuonAtDCA_Matched = propagateMuon(mchtrack, mchtrack, collision, propagationPoint::kToDCA, matchingZ, mBz, mZShift); - float dcaX_Matched = propmuonAtDCA_Matched.getX() - collision.posX(); - float dcaY_Matched = propmuonAtDCA_Matched.getY() - collision.posY(); - float dcaXY_Matched = std::sqrt(dcaX_Matched * dcaX_Matched + dcaY_Matched * dcaY_Matched); - float pDCA = mchtrack.p() * dcaXY_Matched; - // LOGF(info, "muon_tmp.globalIndex() = %d, muon_tmp.matchMCHTrackId() = %d, muon_tmp.matchMFTTrackId() = %d, muon_tmp.chi2MatchMCHMFT() = %f", muon_tmp.globalIndex(), muon_tmp.matchMCHTrackId(), muon_tmp.matchMFTTrackId(), muon_tmp.chi2MatchMCHMFT()); if (cfgApplyPreselectionInBestMatch && !isSelected(pt, eta, muon_tmp.rAtAbsorberEnd(), pDCA, muon_tmp.chi2() / ndf, muon_tmp.trackType(), dcaXY)) { @@ -613,37 +613,37 @@ struct skimmerPrimaryMuon { // LOGF(info, "min: muon_tmp.globalIndex() = %d, muon_tmp.matchMCHTrackId() = %d, muon_tmp.matchMFTTrackId() = %d, muon_tmp.chi2MatchMCHMFT() = %f", std::get<0>(tupleIds_at_min), std::get<1>(tupleIds_at_min), std::get<2>(tupleIds_at_min), min_chi2MatchMCHMFT); } - // PresliceUnsorted perMFTTrack = o2::aod::fwdtrack::matchMFTTrackId; - template - bool isBestMatch(TFwdTrack const& fwdtrack, TFwdTracks const& fwdtracks, TMFTTracks const&) - { - if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) { - std::map map_chi2MCHMFT; - map_chi2MCHMFT[fwdtrack.globalIndex()] = fwdtrack.chi2MatchMCHMFT(); // add myself - // LOGF(info, "add myself: fwdtrack.globalIndex() = %d, fwdtrack.chi2MatchMCHMFT() = %f", fwdtrack.globalIndex(), fwdtrack.chi2MatchMCHMFT()); - - auto glMuonsPerMFT = std::views::filter(vec_min_chi2MatchMCHMFT, [&](std::tuple t) { return std::get<2>(t) == fwdtrack.matchMFTTrackId() && std::get<1>(t) != fwdtrack.matchMCHTrackId() && std::get<0>(t) != fwdtrack.globalIndex(); }); - for (const auto& candidate : glMuonsPerMFT) { - map_chi2MCHMFT[std::get<0>(candidate)] = fwdtracks.rawIteratorAt(std::get<0>(candidate)).chi2MatchMCHMFT(); - // LOGF(info, "same MFT found: candidate.globalIndex() = %d, candidate.chi2MatchMCHMFT() = %f", std::get<0>(candidate), fwdtracks.rawIteratorAt(std::get<0>(candidate)).chi2MatchMCHMFT()); - } - - auto it = std::min_element(map_chi2MCHMFT.begin(), map_chi2MCHMFT.end(), [](decltype(map_chi2MCHMFT)::value_type& l, decltype(map_chi2MCHMFT)::value_type& r) -> bool { return l.second < r.second; }); - - // LOGF(info, "min: globalIndex = %d, chi2 = %f", it->first, it->second); - // LOGF(info, "bool = %d", it->first == fwdtrack.globalIndex()); - - if (it->first == fwdtrack.globalIndex()) { // search for minimum matching-chi2 - map_chi2MCHMFT.clear(); - return true; - } else { - map_chi2MCHMFT.clear(); - return false; - } - } else { - return true; - } - } + // // PresliceUnsorted perMFTTrack = o2::aod::fwdtrack::matchMFTTrackId; + // template + // bool isBestMatch(TFwdTrack const& fwdtrack, TFwdTracks const& fwdtracks, TMFTTracks const&) + // { + // if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack) { + // std::map map_chi2MCHMFT; + // map_chi2MCHMFT[fwdtrack.globalIndex()] = fwdtrack.chi2MatchMCHMFT(); // add myself + // // LOGF(info, "add myself: fwdtrack.globalIndex() = %d, fwdtrack.chi2MatchMCHMFT() = %f", fwdtrack.globalIndex(), fwdtrack.chi2MatchMCHMFT()); + + // auto glMuonsPerMFT = std::views::filter(vec_min_chi2MatchMCHMFT, [&](std::tuple t) { return std::get<2>(t) == fwdtrack.matchMFTTrackId() && std::get<1>(t) != fwdtrack.matchMCHTrackId() && std::get<0>(t) != fwdtrack.globalIndex(); }); + // for (const auto& candidate : glMuonsPerMFT) { + // map_chi2MCHMFT[std::get<0>(candidate)] = fwdtracks.rawIteratorAt(std::get<0>(candidate)).chi2MatchMCHMFT(); + // // LOGF(info, "same MFT found: candidate.globalIndex() = %d, candidate.chi2MatchMCHMFT() = %f", std::get<0>(candidate), fwdtracks.rawIteratorAt(std::get<0>(candidate)).chi2MatchMCHMFT()); + // } + + // auto it = std::min_element(map_chi2MCHMFT.begin(), map_chi2MCHMFT.end(), [](decltype(map_chi2MCHMFT)::value_type& l, decltype(map_chi2MCHMFT)::value_type& r) -> bool { return l.second < r.second; }); + + // // LOGF(info, "min: globalIndex = %d, chi2 = %f", it->first, it->second); + // // LOGF(info, "bool = %d", it->first == fwdtrack.globalIndex()); + + // if (it->first == fwdtrack.globalIndex()) { // search for minimum matching-chi2 + // map_chi2MCHMFT.clear(); + // return true; + // } else { + // map_chi2MCHMFT.clear(); + // return false; + // } + // } else { + // return true; + // } + // } SliceCache cache; Preslice perCollision = o2::aod::fwdtrack::collisionId; @@ -684,9 +684,9 @@ struct skimmerPrimaryMuon { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, nullptr, false)) { continue; @@ -770,9 +770,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, nullptr, mapAmb[fwdtrack.globalIndex()])) { continue; @@ -861,9 +861,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, mftCovs, mapAmb[fwdtrack.globalIndex()])) { continue; @@ -943,9 +943,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, nullptr, false)) { continue; @@ -1031,9 +1031,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, nullptr, mapAmb[fwdtrack.globalIndex()])) { continue; @@ -1123,9 +1123,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, mftCovs, mapAmb[fwdtrack.globalIndex()])) { continue; @@ -1206,9 +1206,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, nullptr, false)) { continue; @@ -1297,9 +1297,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, nullptr, mapAmb[fwdtrack.globalIndex()])) { continue; @@ -1392,9 +1392,9 @@ struct skimmerPrimaryMuon { if (fwdtrack.trackType() == o2::aod::fwdtrack::ForwardTrackTypeEnum::GlobalMuonTrack && std::find(vec_min_chi2MatchMCHMFT.begin(), vec_min_chi2MatchMCHMFT.end(), std::make_tuple(fwdtrack.globalIndex(), fwdtrack.matchMCHTrackId(), fwdtrack.matchMFTTrackId())) == vec_min_chi2MatchMCHMFT.end()) { continue; } - if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { - continue; - } + // if (!isBestMatch(fwdtrack, fwdtracks, mfttracks)) { + // continue; + // } if (!fillFwdTrackTable(collision, fwdtrack, mftCovs, mapAmb[fwdtrack.globalIndex()])) { continue;