@@ -78,13 +78,15 @@ struct H2fromLbFilter {
7878 o2::framework::Configurable<float > ptThresholdPid{" ptThresholdPid" , 1 .0f , " pT threshold to switch between ITS and TOF PID" };
7979
8080 o2::framework::Service<o2::ccdb::BasicCCDBManager> ccdb;
81+ o2::framework::Service<o2::pid::tof::TOFResponse> tofResponse;
8182
82- void init (o2::framework::InitContext&)
83+ void init (o2::framework::InitContext& initContext )
8384 {
8485 ccdb->setURL (" http://alice-ccdb.cern.ch" ); // Set CCDB URL to get magnetic field
8586 ccdb->setCaching (true );
8687 ccdb->setLocalObjectValidityChecking ();
8788 ccdb->setCreatedNotAfter (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now ().time_since_epoch ()).count ());
89+ tofResponse->initSetup (ccdb, initContext);
8890
8991 o2::framework::AxisSpec ptAxis = {100 , 0 .0f , 10 .0f , " #it{p}_{T} (GeV/#it{c})" };
9092
@@ -111,7 +113,10 @@ struct H2fromLbFilter {
111113
112114 // Tables
113115 using CollisionCandidates = o2::soa::Join<o2::aod::Collisions, o2::aod::EvSels>;
114- using TrackCandidates = o2::soa::Join<o2::aod::Tracks, o2::aod::TracksCov, o2::aod::TracksExtra, o2::aod::TracksDCA, o2::aod::TrackSelection, o2::aod::pidTPCFullDe, o2::aod::pidTOFFullDe>;
116+ using TrackCandidates = o2::soa::Join<o2::aod::Tracks, o2::aod::TracksCov, o2::aod::TracksExtra,
117+ o2::aod::TracksDCA, o2::aod::TrackSelection,
118+ o2::aod::pidTPCFullDe, o2::aod::pidTOFFullDe,
119+ o2::aod::TOFSignal, o2::aod::TOFEvTime>;
115120
116121 // Single-Track Selection
117122 template <typename T1>
@@ -155,9 +160,10 @@ struct H2fromLbFilter {
155160 void process (CollisionCandidates const & collisions,
156161 o2::aod::TrackAssoc const & trackIndices,
157162 TrackCandidates const & tracks,
158- o2::aod::BCsWithTimestamps const &)
163+ o2::aod::BCsWithTimestamps const & bcs )
159164 {
160- for (const auto & collision : collisions) // start loop over collisions
165+ tofResponse->processSetup (bcs.iteratorAt (0 )); // Update the response parameters
166+ for (const auto & collision : collisions) // start loop over collisions
161167 {
162168 if (mCurrentRun != collision.bc_as <o2::aod::BCsWithTimestamps>().runNumber ()) { // If the run is new then we need to initialize the propagator field
163169 o2::parameters::GRPMagField* grpo = ccdb->getForTimeStamp <o2::parameters::GRPMagField>(" GLO/Config/GRPMagField" , collision.bc_as <o2::aod::BCsWithTimestamps>().timestamp ());
@@ -195,6 +201,22 @@ struct H2fromLbFilter {
195201 const auto & trackIdsThisCollision = trackIndices.sliceBy (trackIndicesPerCollision, collision.globalIndex ());
196202 auto tracksWithItsPid = o2::soa::Attach<TrackCandidates, o2::aod::pidits::ITSNSigmaDe>(tracks);
197203
204+ float tofEventTime = 0 .f ;
205+ float tofEventTimeErr = 0 .f ;
206+
207+ for (const auto & trackId : trackIdsThisCollision) { // start loop over tracks
208+ const auto & track = tracksWithItsPid.rawIteratorAt (trackId.trackId ());
209+ if (!passedSingleTrackSelection (track)) {
210+ continue ;
211+ }
212+ if (track.collisionId () != collision.globalIndex ()) {
213+ continue ;
214+ }
215+ tofEventTime = track.tofEvTime ();
216+ tofEventTimeErr = track.tofEvTimeErr ();
217+ break ;
218+ }
219+
198220 for (const auto & trackId : trackIdsThisCollision) { // start loop over tracks
199221
200222 const auto & track = tracksWithItsPid.rawIteratorAt (trackId.trackId ());
@@ -211,7 +233,11 @@ struct H2fromLbFilter {
211233 if (!passedSingleTrackSelection (track)) {
212234 continue ;
213235 }
214-
236+ float recalculatedNSigmaTOFDe = 0 .f ;
237+ if (track.collisionId () != collision.globalIndex ()) {
238+ recalculatedNSigmaTOFDe = tofResponse->nSigma <o2::track::PID::Deuteron>(track.tofSignalInAnotherBC (track.collision_as <CollisionCandidates>().bc_as <o2::aod::BCsWithTimestamps>().globalBC (), collision.bc_as <o2::aod::BCsWithTimestamps>().globalBC ()),
239+ track.tofExpMom (), track.length (), track.p (), track.eta (), tofEventTime, tofEventTimeErr);
240+ }
215241 const bool isTOFDe = std::abs (track.tofNSigmaDe ()) < cfgTOFNsigma;
216242 const bool isTPCDe = std::abs (track.tpcNSigmaDe ()) < cfgTPCNsigma;
217243 const bool isITSDe = track.itsNSigmaDe () > cfgITSNsigma;
@@ -262,5 +288,6 @@ struct H2fromLbFilter {
262288
263289o2::framework::WorkflowSpec defineDataProcessing (o2::framework::ConfigContext const & cfgc)
264290{
291+ o2::pid::tof::TOFResponseImpl::metadataInfo.initMetadata (cfgc);
265292 return o2::framework::WorkflowSpec{o2::framework::adaptAnalysisTask<H2fromLbFilter>(cfgc)};
266293}
0 commit comments