@@ -218,7 +218,6 @@ DECLARE_SOA_TABLE(BmesonCandidates, "AOD", "DQBMESONS",
218218using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra>;
219219using MyEventsSelected = soa::Join<aod::Collisions, aod::EvSels, aod::Mults, aod::MultsExtra, aod::EventCuts>;
220220using 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
223222using 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