88// In applying this license CERN does not waive the privileges and immunities
99// granted to it by virtue of its status as an Intergovernmental Organization
1010// or submit itself to any jurisdiction.
11- #include < vector>
11+ #include " PWGCF/DataModel/CorrelationsDerived.h"
12+
13+ #include " Common/DataModel/Centrality.h"
14+ #include " Common/DataModel/EventSelection.h"
15+ #include " Common/DataModel/TrackSelectionTables.h"
1216
13- #include " Framework/runDataProcessing.h"
14- #include " Framework/AnalysisTask.h"
15- #include " Framework/AnalysisDataModel.h"
1617#include " Framework/ASoAHelpers.h"
18+ #include " Framework/AnalysisDataModel.h"
19+ #include " Framework/AnalysisTask.h"
1720#include " Framework/O2DatabasePDGPlugin.h"
18-
21+ # include " Framework/runDataProcessing.h "
1922#include " MathUtils/detail/TypeTruncation.h"
2023
21- #include " PWGCF/DataModel/CorrelationsDerived.h"
22- #include " Common/DataModel/EventSelection.h"
23- #include " Common/DataModel/TrackSelectionTables.h"
24- #include " Common/DataModel/Centrality.h"
25-
2624#include < TH3F.h>
2725
26+ #include < vector>
27+
2828using namespace o2 ;
2929using namespace o2 ::framework;
3030using namespace o2 ::framework::expressions;
@@ -66,6 +66,7 @@ struct FilterCF {
6666 O2_DEFINE_CONFIGURABLE (cfgCollisionFlags, uint16_t , aod::collision::CollisionFlagsRun2::Run2VertexerTracks, " Request collision flags if non-zero (0 = off, 1 = Run2VertexerTracks)" )
6767 O2_DEFINE_CONFIGURABLE (cfgTransientTables, bool , false , " Output transient tables for collision and track IDs to enable successive filtering tasks" )
6868 O2_DEFINE_CONFIGURABLE (cfgTrackSelection, int , 0 , " Type of track selection (0 = Run 2/3 without systematics | 1 = Run 3 with systematics)" )
69+ O2_DEFINE_CONFIGURABLE (cfgStorePid, bool , false , " Store PID information for tracks (TPC and TOF n-sigma for protons)" )
6970 O2_DEFINE_CONFIGURABLE (cfgMinMultiplicity, float , -1 , " Minimum multiplicity considered for filtering (if value positive)" )
7071 O2_DEFINE_CONFIGURABLE (cfgMcSpecialPDGs, std::vector<int >, {}, " Special MC PDG codes to include in the MC primary particle output (additional to charged particles). Empty = charged particles only." ) // needed for some neutral particles
7172
@@ -75,7 +76,7 @@ struct FilterCF {
7576
7677 // TODO how to have this in the second task? For now they are copied
7778 Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPt);
78- Filter trackSelection = (requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t ) true );
79+ Filter trackSelection = (requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t )true );
7980
8081 Filter mcCollisionFilter = nabs(aod::mccollision::posZ) < cfgCutVertex;
8182
@@ -155,7 +156,7 @@ struct FilterCF {
155156 return 0 ;
156157 }
157158
158- 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>> const & tracks)
159+ 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 >> const & tracks)
159160 {
160161 if (cfgVerbosity > 0 ) {
161162 LOGF (info, " processData: Tracks for collision: %d | Vertex: %.1f (%d) | INT7: %d | Multiplicity: %.1f" , tracks.size (), collision.posZ (), collision.flags (), collision.sel7 (), collision.multiplicity ());
@@ -172,7 +173,11 @@ struct FilterCF {
172173 outputCollRefs (collision.globalIndex ());
173174
174175 for (auto & track : tracks) {
175- outputTracks (outputCollisions.lastIndex (), track.pt (), track.eta (), track.phi (), track.sign (), getTrackType (track));
176+ if (cfgStorePid) {
177+ outputTracks (outputCollisions.lastIndex (), track.pt (), track.eta (), track.phi (), track.sign (), getTrackType (track), track.tpcNsigmaPr (), track.tofNsigmaPr ());
178+ } else {
179+ outputTracks (outputCollisions.lastIndex (), track.pt (), track.eta (), track.phi (), track.sign (), getTrackType (track), -999 .0f , -999 .0f );
180+ }
176181 if (cfgTransientTables)
177182 outputTrackRefs (collision.globalIndex (), track.globalIndex ());
178183
@@ -287,7 +292,7 @@ struct FilterCF {
287292 }
288293 }
289294 outputTracks (outputCollisions.lastIndex (),
290- truncateFloatFraction (track.pt ()), truncateFloatFraction (track.eta ()), truncateFloatFraction (track.phi ()), track.sign (), getTrackType (track));
295+ truncateFloatFraction (track.pt ()), truncateFloatFraction (track.eta ()), truncateFloatFraction (track.phi ()), track.sign (), getTrackType (track), - 999 . 0f , - 999 . 0f );
291296 outputTrackLabels (mcParticleId);
292297 if (cfgTransientTables)
293298 outputTrackRefs (collision.globalIndex (), track.globalIndex ());
@@ -326,7 +331,7 @@ struct MultiplicitySelector {
326331 O2_DEFINE_CONFIGURABLE (cfgCutEta, float , 0 .8f , " Eta range for tracks" )
327332
328333 Filter trackFilter = (nabs(aod::track::eta) < cfgCutEta) && (aod::track::pt > cfgCutPt);
329- Filter trackSelection = (requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t ) true );
334+ Filter trackSelection = (requireGlobalTrackInFilter()) || (aod::track::isGlobalTrackSDD == (uint8_t )true );
330335
331336 void init (InitContext&)
332337 {
0 commit comments