@@ -51,13 +51,13 @@ using CFMultiplicity = CFMultiplicities::iterator;
5151struct FilterCF {
5252 Service<o2::framework::O2DatabasePDG> pdg;
5353
54- enum TrackSelectionCuts : uint8_t {
54+ enum TrackSelectionCuts1 : uint8_t {
5555 kTrackSelected = BIT (0 ),
5656 kITS5Clusters = BIT (1 ),
5757 kTPCCrossedRows = BIT (2 ),
5858 };
5959
60- enum PIDCuts : uint8_t {
60+ enum TrackSelectionCuts2 : uint8_t {
6161 kPIDProton = BIT (1 )
6262 };
6363
@@ -80,9 +80,8 @@ struct FilterCF {
8080 O2_DEFINE_CONFIGURABLE (nsigmaCutTOFProton, float , 3 , " proton nsigma TOF" )
8181 O2_DEFINE_CONFIGURABLE (ITSProtonselection, bool , false , " flag for ITS proton nsigma selection" )
8282 O2_DEFINE_CONFIGURABLE (nsigmaCutITSProton, float , 3 , " proton nsigma ITS" )
83- O2_DEFINE_CONFIGURABLE (dcaselection, bool , false , " flag for applying dca selection on tracks" )
84- O2_DEFINE_CONFIGURABLE (dcaxymax, float , 0 .1f , " dcaxy of tracks" )
85- O2_DEFINE_CONFIGURABLE (dcazmax, float , 0 .1f , " dcaz of tracks" )
83+ O2_DEFINE_CONFIGURABLE (dcaxymax, float , 999 .f, " maximum dcaxy of tracks" )
84+ O2_DEFINE_CONFIGURABLE (dcazmax, float , 999 .f, " maximum dcaz of tracks" )
8685 O2_DEFINE_CONFIGURABLE (itsnclusters, int , 5 , " minimum number of ITS clusters for tracks" )
8786 O2_DEFINE_CONFIGURABLE (tpcncrossedrows, int , 80 , " minimum number of TPC crossed rows for tracks" )
8887
@@ -174,10 +173,7 @@ struct FilterCF {
174173 }
175174 return false ;
176175 }
177- /*
178- template <typename T>
179- using HasProtonPID = decltype(selectionPIDProton(std::declval<T&>()));
180- */
176+
181177 template <typename T, typename = void >
182178 struct HasProtonPID : std::false_type {
183179 };
@@ -233,7 +229,11 @@ struct FilterCF {
233229 return 0 ;
234230 }
235231
236- void processData (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CFMultiplicities>>::iterator const & collision, aod::BCsWithTimestamps const &, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::pidTPCPr, aod::pidTOFPr, aod::TracksDCA>> const & tracks)
232+ // / \brief Templetized process data for a given collision and its associated tracks
233+ // / \param collision The collision object containing information about the collision
234+ // / \param tracks The collection of tracks associated with the collision
235+ template <typename C1, typename T1>
236+ void processDataT (const C1& collision, const T1& tracks)
237237 {
238238 if (cfgVerbosity > 0 ) {
239239 LOGF (info, " processData: Tracks for collision: %d | Vertex: %.1f (%d) | INT7: %d | Multiplicity: %.1f" , tracks.size (), collision.posZ (), collision.flags (), collision.sel7 (), collision.multiplicity ());
@@ -243,16 +243,16 @@ struct FilterCF {
243243 return ;
244244 }
245245
246- auto bc = collision.bc_as <aod::BCsWithTimestamps>();
246+ auto bc = collision.template bc_as <aod::BCsWithTimestamps>();
247247 outputCollisions (bc.runNumber (), collision.posZ (), collision.multiplicity (), bc.timestamp ());
248248
249249 if (cfgTransientTables)
250250 outputCollRefs (collision.globalIndex ());
251251 for (auto & track : tracks) {
252- if (dcaselection && std::abs (track.dcaXY ()) > dcaxymax)
253- continue ;
254- if (dcaselection && std::abs (track.dcaZ ()) > dcazmax)
252+ if ((std::abs (track.dcaXY ()) > dcaxymax) || (std::abs (track.dcaZ ()) > dcazmax)) {
255253 continue ;
254+ }
255+
256256
257257 outputTracks (outputCollisions.lastIndex (), track.pt (), track.eta (), track.phi (), track.sign (), getTrackType (track));
258258 if (cfgTransientTables)
@@ -262,8 +262,19 @@ struct FilterCF {
262262 etaphi->Fill (collision.multiplicity (), track.eta (), track.phi ());
263263 }
264264 }
265+
266+ void processData (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CFMultiplicities>>::iterator const & collision, aod::BCsWithTimestamps const &, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::TracksDCA>> const & tracks)
267+ {
268+ processDataT (collision, tracks);
269+ }
265270 PROCESS_SWITCH (FilterCF, processData, " Process data" , true );
266271
272+ void processDataPid (soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CFMultiplicities>>::iterator const & collision, aod::BCsWithTimestamps const &, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtra, aod::TrackSelection, aod::pidTPCPr, aod::pidTOFPr, aod::TracksDCA>> const & tracks)
273+ {
274+ processDataT (collision, tracks);
275+ }
276+ PROCESS_SWITCH (FilterCF, processDataPid, " Process data with PID" , false );
277+
267278 // NOTE not filtering collisions here because in that case there can be tracks referring to MC particles which are not part of the selected MC collisions
268279 Preslice<aod::McParticles> perMcCollision = aod::mcparticle::mcCollisionId;
269280 Preslice<aod::Tracks> perCollision = aod::track::collisionId;
0 commit comments