Skip to content

Commit 8c1b951

Browse files
mfagginMattia Faggin
andauthored
Add option to select tracks with filterbits. (#3626)
* Add option to select tracks with filterbits. * Remove useless data member. --------- Co-authored-by: Mattia Faggin <mfaggin@cern.ch>
1 parent d7732d1 commit 8c1b951

1 file changed

Lines changed: 29 additions & 6 deletions

File tree

DPG/Tasks/AOTTrack/qaMatchEff.cxx

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
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

Comments
 (0)