Skip to content

Commit cf4faf5

Browse files
remove runEventSelectionWithFilter and pair cuts, and add a Prefilter
1 parent b5ea9e1 commit cf4faf5

File tree

1 file changed

+16
-173
lines changed

1 file changed

+16
-173
lines changed

PWGDQ/Tasks/tableReader_withAssoc_direct.cxx

Lines changed: 16 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,6 @@ DECLARE_SOA_TABLE(BmesonCandidates, "AOD", "DQBMESONS",
218218
using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra>;
219219
using MyEventsSelected = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::EventCuts>;
220220
using MyEventsHashSelected = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::EventCuts, aod::MixingHashes>;
221-
using MyEventsWithDqFilter = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::DQEventFilter>;
222221

223222
using MyBarrelTracksWithCov = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA,
224223
aod::pidTPCFullEl, aod::pidTPCFullMu, aod::pidTPCFullPi,
@@ -526,131 +525,6 @@ struct AnalysisEventSelection {
526525
}
527526
}
528527

529-
// Variant of runEventSelection that first checks the DqFilters EMu prefilter bit.
530-
// Events not passing the EMu filter bit are skipped entirely, reducing track/muon
531-
// propagation and PID computation for the majority of collisions.
532-
template <uint32_t TEventFillMap, typename TEvents>
533-
void runEventSelectionWithFilter(TEvents const& events, BCsWithTimestamps const& bcs)
534-
{
535-
536-
if (bcs.size() > 0 && fCurrentRun != bcs.begin().runNumber()) {
537-
if (fConfigPostCalibTPC.fConfigComputeTPCpostCalib) {
538-
auto calibList = fCCDB->getForTimeStamp<TList>(fConfigCCDB.fConfigCcdbPathTPC.value, bcs.begin().timestamp());
539-
VarManager::SetCalibrationObject(VarManager::kTPCElectronMean, calibList->FindObject("mean_map_electron"));
540-
VarManager::SetCalibrationObject(VarManager::kTPCElectronSigma, calibList->FindObject("sigma_map_electron"));
541-
VarManager::SetCalibrationObject(VarManager::kTPCPionMean, calibList->FindObject("mean_map_pion"));
542-
VarManager::SetCalibrationObject(VarManager::kTPCPionSigma, calibList->FindObject("sigma_map_pion"));
543-
VarManager::SetCalibrationObject(VarManager::kTPCProtonMean, calibList->FindObject("mean_map_proton"));
544-
VarManager::SetCalibrationObject(VarManager::kTPCProtonSigma, calibList->FindObject("sigma_map_proton"));
545-
if (fConfigPostCalibTPC.fConfigComputeTPCpostCalibKaon) {
546-
VarManager::SetCalibrationObject(VarManager::kTPCKaonMean, calibList->FindObject("mean_map_kaon"));
547-
VarManager::SetCalibrationObject(VarManager::kTPCKaonSigma, calibList->FindObject("sigma_map_kaon"));
548-
}
549-
if (fConfigPostCalibTPC.fConfigTPCpostCalibType == 2) {
550-
VarManager::SetCalibrationObject(VarManager::kTPCElectronStatus, calibList->FindObject("status_map_electron"));
551-
VarManager::SetCalibrationObject(VarManager::kTPCPionStatus, calibList->FindObject("status_map_pion"));
552-
VarManager::SetCalibrationObject(VarManager::kTPCProtonStatus, calibList->FindObject("status_map_proton"));
553-
if (fConfigPostCalibTPC.fConfigComputeTPCpostCalibKaon) {
554-
VarManager::SetCalibrationObject(VarManager::kTPCKaonStatus, calibList->FindObject("status_map_kaon"));
555-
}
556-
}
557-
VarManager::SetCalibrationType(fConfigPostCalibTPC.fConfigTPCpostCalibType, fConfigPostCalibTPC.fConfigTPCuseInterpolatedCalib);
558-
}
559-
if (fIsRun2 == true) {
560-
fGrpMagRun2 = fCCDB->getForTimeStamp<o2::parameters::GRPObject>(fConfigCCDB.fConfigGrpMagPathRun2, bcs.begin().timestamp());
561-
if (fGrpMagRun2 != nullptr) {
562-
o2::base::Propagator::initFieldFromGRP(fGrpMagRun2);
563-
}
564-
} else {
565-
fGrpMag = fCCDB->getForTimeStamp<o2::parameters::GRPMagField>(fConfigCCDB.fConfigGrpMagPath, bcs.begin().timestamp());
566-
auto* fZShift = fCCDB->getForTimeStamp<std::vector<float>>(fConfigCCDB.fZShiftPath, bcs.begin().timestamp());
567-
if (fGrpMag != nullptr) {
568-
o2::base::Propagator::initFieldFromGRP(fGrpMag);
569-
VarManager::SetMagneticField(fGrpMag->getNominalL3Field());
570-
}
571-
if (fZShift != nullptr && !fZShift->empty()) {
572-
VarManager::SetZShift((*fZShift)[0]);
573-
}
574-
}
575-
std::map<std::string, std::string> metadataRCT, header;
576-
header = fCCDBApi.retrieveHeaders(Form("RCT/Info/RunInformation/%i", bcs.begin().runNumber()), metadataRCT, -1);
577-
uint64_t sor = std::atol(header["SOR"].c_str());
578-
uint64_t eor = std::atol(header["EOR"].c_str());
579-
VarManager::SetSORandEOR(sor, eor);
580-
581-
fCurrentRun = bcs.begin().runNumber();
582-
} // end updating the CCDB quantities at change of run
583-
584-
VarManager::ResetValues(0, VarManager::kNEventWiseVariables);
585-
VarManager::FillTimeFrame(bcs);
586-
VarManager::FillTimeFrame(events);
587-
if (fConfigQA) {
588-
fHistMan->FillHistClass("TimeFrameStats", VarManager::fgValues);
589-
}
590-
591-
fSelMap.clear();
592-
fBCCollMap.clear();
593-
594-
for (auto& event : events) {
595-
// Skip events that did not pass any filterPP selection.
596-
// The bit position depends on filterPP config (fNBarrelCuts + fNMuonCuts + emu_index),
597-
// so check eventFilter != 0 rather than a hardcoded bit.
598-
if (event.eventFilter() == 0) {
599-
continue;
600-
}
601-
602-
auto bc = event.template bc_as<BCsWithTimestamps>();
603-
604-
VarManager::ResetValues(VarManager::kNTFWiseVariables, VarManager::kNEventWiseVariables);
605-
VarManager::FillBC(bc);
606-
VarManager::FillEvent<TEventFillMap>(event);
607-
608-
bool decision = false;
609-
if (fConfigQA) {
610-
fHistMan->FillHistClass("Event_BeforeCuts", VarManager::fgValues);
611-
}
612-
613-
if (fConfigZorro.fConfigRunZorro) {
614-
zorro.setBaseCCDBPath(fConfigZorro.fConfigCcdbPathZorro.value);
615-
zorro.setBCtolerance(fConfigZorro.fBcTolerance);
616-
zorro.initCCDB(fCCDB.service, fCurrentRun, bc.timestamp(), fConfigZorro.fConfigZorroTrigMask.value);
617-
zorro.populateExternalHists(fCurrentRun, reinterpret_cast<TH2D*>(fStatsList->At(kStatsZorroInfo)), reinterpret_cast<TH2D*>(fStatsList->At(kStatsZorroSel)));
618-
619-
if (!fEventCut->IsSelected(VarManager::fgValues) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(event))) {
620-
continue;
621-
}
622-
623-
bool zorroSel = zorro.isSelected(bc.globalBC(), fConfigZorro.fBcTolerance, reinterpret_cast<TH2D*>(fStatsList->At(kStatsZorroSel)));
624-
if (fConfigZorro.fConfigRunZorroSel && (!zorroSel)) {
625-
continue;
626-
}
627-
} else {
628-
629-
if (!fEventCut->IsSelected(VarManager::fgValues) || (fConfigRCT.fConfigUseRCT.value && !rctChecker(event))) {
630-
continue;
631-
}
632-
}
633-
634-
decision = true;
635-
if (fConfigQA) {
636-
fHistMan->FillHistClass("Event_AfterCuts", VarManager::fgValues);
637-
}
638-
639-
fSelMap[event.globalIndex()] = decision;
640-
if (fBCCollMap.find(bc.globalBC()) == fBCCollMap.end()) {
641-
std::vector<int64_t> evIndices = {event.globalIndex()};
642-
fBCCollMap[bc.globalBC()] = evIndices;
643-
} else {
644-
auto& evIndices = fBCCollMap[bc.globalBC()];
645-
evIndices.push_back(event.globalIndex());
646-
}
647-
if (fMixHandler != nullptr) {
648-
int hh = fMixHandler->FindEventCategory(VarManager::fgValues);
649-
hash(hh);
650-
}
651-
}
652-
}
653-
654528
template <uint32_t TEventFillMap, typename TEvents>
655529
void publishSelections(TEvents const& events)
656530
{
@@ -736,16 +610,9 @@ struct AnalysisEventSelection {
736610
publishSelections<gkEventFillMapWithMults>(events);
737611
}
738612

739-
void processDirectWithFilter(MyEventsWithDqFilter const& events, BCsWithTimestamps const& bcs)
740-
{
741-
runEventSelectionWithFilter<gkEventFillMapWithMults>(events, bcs);
742-
publishSelections<gkEventFillMapWithMults>(events);
743-
}
744-
745613
void processDummy(aod::Collisions&) {}
746614

747615
PROCESS_SWITCH(AnalysisEventSelection, processDirect, "Run event selection on framework AO2Ds", false);
748-
PROCESS_SWITCH(AnalysisEventSelection, processDirectWithFilter, "Run event selection on framework AO2Ds with DqFilters EMu prefilter", false);
749616
PROCESS_SWITCH(AnalysisEventSelection, processDummy, "Dummy function", true);
750617
};
751618

@@ -1474,7 +1341,7 @@ struct AnalysisSameEventPairing {
14741341
std::vector<TString> fMuonCuts; // muon cut names, used in EMu histogram filling
14751342

14761343
Preslice<soa::Join<aod::TrackAssoc, aod::BarrelTrackCuts, aod::Prefilter>> trackAssocsPerCollision = aod::track_association::collisionId;
1477-
Preslice<soa::Join<aod::TrackAssoc, aod::BarrelTrackCuts>> trackEmuAssocsPerCollision = aod::track_association::collisionId;
1344+
Preslice<soa::Join<aod::TrackAssoc, aod::BarrelTrackCuts, aod::Prefilter>> trackEmuAssocsPerCollision = aod::track_association::collisionId;
14781345
Preslice<soa::Join<aod::FwdTrackAssoc, aod::MuonTrackCuts>> muonAssocsPerCollision = aod::track_association::collisionId;
14791346

14801347
void init(o2::framework::InitContext& context)
@@ -1617,24 +1484,8 @@ struct AnalysisSameEventPairing {
16171484
Form("PairsEleMuSEMM_%s_%s", trackCutName.Data(), tempStr.Data())};
16181485
histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data());
16191486

1620-
// pair-cut variants
1621-
TString pairCutsStr = fConfigOptions.pair.value;
1622-
if (!pairCutsStr.IsNull()) {
1623-
std::unique_ptr<TObjArray> objArrayPair(pairCutsStr.Tokenize(","));
1624-
int nPairCuts = objArrayPair->GetEntries();
1625-
for (int iPairCut = 0; iPairCut < nPairCuts; ++iPairCut) {
1626-
names = {
1627-
Form("PairsEleMuSEPM_%s_%s_%s", trackCutName.Data(), tempStr.Data(), objArrayPair->At(iPairCut)->GetName()),
1628-
Form("PairsEleMuSEPP_%s_%s_%s", trackCutName.Data(), tempStr.Data(), objArrayPair->At(iPairCut)->GetName()),
1629-
Form("PairsEleMuSEMM_%s_%s_%s", trackCutName.Data(), tempStr.Data(), objArrayPair->At(iPairCut)->GetName())};
1630-
histNames += Form("%s;%s;%s;", names[0].Data(), names[1].Data(), names[2].Data());
1631-
int index = iTrack * (fNCutsMuon * nPairCuts) + icut * nPairCuts + iPairCut;
1632-
fTrackMuonHistNames[index] = names;
1633-
}
1634-
} else {
1635-
int index = iTrack * fNCutsMuon + icut;
1636-
fTrackMuonHistNames[index] = names;
1637-
}
1487+
int index = iTrack * fNCutsMuon + icut;
1488+
fTrackMuonHistNames[index] = names;
16381489
} // end loop barrel cuts
16391490
} // end if fEnableBarrelMuonHistos
16401491
}
@@ -1962,7 +1813,6 @@ struct AnalysisSameEventPairing {
19621813
}
19631814

19641815
const auto& histNames = fTrackMuonHistNames;
1965-
int nPairCuts = (fPairCuts.size() > 0) ? static_cast<int>(fPairCuts.size()) : 1;
19661816

19671817
electronmuonList.reserve(1);
19681818

@@ -1989,7 +1839,7 @@ struct AnalysisSameEventPairing {
19891839
continue;
19901840

19911841
for (auto& [a1, a2] : o2::soa::combinations(soa::CombinationsFullIndexPolicy(groupedAssocs1, groupedAssocs2))) {
1992-
if (!(a1.isBarrelSelected_raw() & fTrackFilterMask))
1842+
if (!(a1.isBarrelSelected_raw() & a1.isBarrelSelectedPrefilter_raw() & fTrackFilterMask))
19931843
continue;
19941844
if (!(a2.isMuonSelected_raw() & fMuonFilterMask))
19951845
continue;
@@ -2035,24 +1885,17 @@ struct AnalysisSameEventPairing {
20351885
for (int iMuon = 0; iMuon < fNCutsMuon; ++iMuon) {
20361886
if (!(a2.isMuonSelected_raw() & (1u << iMuon)))
20371887
continue;
2038-
for (unsigned int iPairCut = 0; iPairCut < (fPairCuts.empty() ? 1u : static_cast<unsigned int>(fPairCuts.size())); iPairCut++) {
2039-
if (!fPairCuts.empty()) {
2040-
AnalysisCompositeCut cut = fPairCuts.at(iPairCut);
2041-
if (!cut.IsSelected(VarManager::fgValues))
2042-
continue;
2043-
}
2044-
int index = iTrack * (fNCutsMuon * nPairCuts) + iMuon * nPairCuts + static_cast<int>(iPairCut);
2045-
auto itHist = histNames.find(index);
2046-
if (itHist == histNames.end())
2047-
continue;
2048-
if (sign1 * sign2 < 0) {
2049-
fHistMan->FillHistClass(itHist->second[0].Data(), VarManager::fgValues);
2050-
} else if (sign1 > 0) {
2051-
fHistMan->FillHistClass(itHist->second[1].Data(), VarManager::fgValues);
2052-
} else {
2053-
fHistMan->FillHistClass(itHist->second[2].Data(), VarManager::fgValues);
2054-
}
2055-
} // end pair cut loop
1888+
int index = iTrack * fNCutsMuon + iMuon;
1889+
auto itHist = histNames.find(index);
1890+
if (itHist == histNames.end())
1891+
continue;
1892+
if (sign1 * sign2 < 0) {
1893+
fHistMan->FillHistClass(itHist->second[0].Data(), VarManager::fgValues);
1894+
} else if (sign1 > 0) {
1895+
fHistMan->FillHistClass(itHist->second[1].Data(), VarManager::fgValues);
1896+
} else {
1897+
fHistMan->FillHistClass(itHist->second[2].Data(), VarManager::fgValues);
1898+
}
20561899
} // end muon cut loop
20571900
} // end barrel cut loop
20581901

@@ -2069,7 +1912,7 @@ struct AnalysisSameEventPairing {
20691912

20701913
void processElectronMuonDirect(
20711914
MyEventsSelected const& events, BCsWithTimestamps const& bcs,
2072-
soa::Join<aod::TrackAssoc, aod::BarrelTrackCuts> const& barrelAssocs,
1915+
soa::Join<aod::TrackAssoc, aod::BarrelTrackCuts, aod::Prefilter> const& barrelAssocs,
20731916
MyBarrelTracksWithCovWithAmbiguities const& barrelTracks,
20741917
soa::Join<aod::FwdTrackAssoc, aod::MuonTrackCuts> const& muonAssocs,
20751918
MyMuonTracksWithCovWithAmbiguities const& muons)

0 commit comments

Comments
 (0)