2121#include " Common/DataModel/EventSelection.h"
2222#include " Common/Core/TrackSelection.h"
2323#include " Common/DataModel/TrackSelectionTables.h"
24+ #include " Common/Core/TrackSelectionDefaults.h"
2425#include " Common/DataModel/PIDResponse.h"
2526#include " CommonConstants/MathConstants.h"
2627#include " CCDB/BasicCCDBManager.h"
@@ -52,6 +53,7 @@ struct qaMatchEff {
5253 //
5354 // Track selections
5455 Configurable<bool > b_useTrackSelections{" b_useTrackSelections" , false , " Boolean to switch the track selections on/off." };
56+ Configurable<int > filterbitTrackSelections{" filterbitTrackSelections" , 0 , " Track selection: 0 -> No Cut, 1 -> kGlobalTrack, 2 -> kGlobalTrackWoPtEta, 3 -> kGlobalTrackWoDCA, 4 -> kQualityTracks, 5 -> kInAcceptanceTracks" };
5557 // kinematics
5658 Configurable<float > ptMinCutInnerWallTPC{" ptMinCutInnerWallTPC" , 0 .1f , " Minimum transverse momentum calculated at the inner wall of TPC (GeV/c)" };
5759 Configurable<float > ptMinCut{" ptMinCut" , 0 .1f , " Minimum transverse momentum (GeV/c)" };
@@ -149,9 +151,6 @@ struct qaMatchEff {
149151 // Tracks selection object
150152 TrackSelection cutObject;
151153 //
152- // pt calculated at the inner wall of TPC
153- float trackPtInParamTPC = -1 .;
154- //
155154 // do you want pt comparison 2d's ?
156155 Configurable<bool > makept2d{" makept2d" , false , " choose if produce pt reco/TPC derived pt 2dims " };
157156 //
@@ -167,10 +166,16 @@ struct qaMatchEff {
167166 // ****** BE VERY CAREFUL! -- FILTERS !!! *****
168167 //
169168 Filter zPrimVtxLim = nabs(aod::collision::posZ) < zPrimVtxMax;
169+ Filter trackFilter = (filterbitTrackSelections.node() == 0 ) ||
170+ ((filterbitTrackSelections.node() == 1 ) && requireGlobalTrackInFilter()) || // / filterbit 4 track selections + tight DCA cuts
171+ ((filterbitTrackSelections.node() == 2 ) && requireGlobalTrackWoPtEtaInFilter()) ||
172+ ((filterbitTrackSelections.node() == 3 ) && requireGlobalTrackWoDCAInFilter()) ||
173+ ((filterbitTrackSelections.node() == 4 ) && requireQualityTracksInFilter()) ||
174+ ((filterbitTrackSelections.node() == 5 ) && requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks ));
170175 //
171176 //
172177 //
173- // Init function
178+ // Init function
174179 //
175180 void init (o2::framework::InitContext&)
176181 {
@@ -183,9 +188,9 @@ struct qaMatchEff {
183188 else
184189 initData ();
185190
186- if ((!isitMC && (doprocessMC || doprocessMCNoColl || doprocessTrkIUMC)) || (isitMC && (doprocessData && doprocessDataNoColl && doprocessTrkIUMC)))
191+ if ((!isitMC && (doprocessMCFilteredTracks || doprocessMC || doprocessMCNoColl || doprocessTrkIUMC)) || (isitMC && (doprocessDataFilteredTracks || doprocessData || doprocessDataNoColl || doprocessTrkIUMC)))
187192 LOGF (fatal, " Initialization set for MC and processData function flagged (or viceversa)! Fix the configuration." );
188- if ((doprocessMC && doprocessMCNoColl && doprocessTrkIUMC) || (doprocessData && doprocessDataNoColl && doprocessTrkIUData))
193+ if ((doprocessMCFilteredTracks && doprocessMC && doprocessMCNoColl && doprocessTrkIUMC) || (doprocessDataFilteredTracks && doprocessData && doprocessDataNoColl && doprocessTrkIUData))
189194 LOGF (fatal, " Cannot process for both without collision tag and with collision tag at the same time! Fix the configuration." );
190195 if (doprocessTrkIUMC && makethn) {
191196 LOGF (fatal, " No DCA for IU tracks. Put makethn = false." );
@@ -1896,6 +1901,13 @@ struct qaMatchEff {
18961901 }
18971902 PROCESS_SWITCH (qaMatchEff, processMC, " process MC" , false );
18981903
1904+ void processMCFilteredTracks (soa::Filtered<aod::Collisions>::iterator const & collision, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA, aod::McTrackLabels>> const & tracks, aod::McParticles const & mcParticles)
1905+ {
1906+ fillHistograms<true >(tracks, mcParticles, mcParticles); // / 3rd argument non-sense in this case
1907+ fillGeneralHistos<true >(collision);
1908+ }
1909+ PROCESS_SWITCH (qaMatchEff, processMCFilteredTracks, " process MC with filtered tracks with filterbit selections" , false );
1910+
18991911 // //////////////////////////////////////////////////////////
19001912 // / Process MC with collision grouping and IU tracks ///
19011913 // //////////////////////////////////////////////////////////
@@ -1929,6 +1941,17 @@ struct qaMatchEff {
19291941 }
19301942 PROCESS_SWITCH (qaMatchEff, processData, " process data" , true );
19311943
1944+ void processDataFilteredTracks (soa::Filtered<aod::Collisions>::iterator const & collision, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr>> const & tracks, BCsWithTimeStamp const & bcs)
1945+ {
1946+ if (enableMonitorVsTime) {
1947+ // tracks.rawIteratorAt(0).collision().bc_as<BCsWithTimeStamp>().timestamp(); /// NB: in ms
1948+ setUpTimeMonitoring (bcs);
1949+ }
1950+ fillHistograms<false >(tracks, tracks, bcs); // 2nd argument not used in this case
1951+ fillGeneralHistos<false >(collision);
1952+ }
1953+ PROCESS_SWITCH (qaMatchEff, processDataFilteredTracks, " process data with filtered tracks with filterbit selections" , false );
1954+
19321955 // ///////////////////////////////////////////////////////////
19331956 // / Process data with collision grouping and IU tracks ///
19341957 // ///////////////////////////////////////////////////////////
0 commit comments