2323#include " TRandom3.h"
2424// / O2
2525#include " Framework/AnalysisTask.h"
26+ #include " Framework/AnalysisDataModel.h"
27+ #include " Framework/ASoAHelpers.h"
2628#include " Framework/HistogramRegistry.h"
2729#include " Framework/runDataProcessing.h"
2830// / O2Physics
3335#include " PWGDQ/DataModel/ReducedInfoTables.h"
3436#include " Common/DataModel/Multiplicity.h"
3537#include " Common/DataModel/EventSelection.h"
38+ #include " Common/CCDB/ctpRateFetcher.h"
3639
3740using namespace o2 ;
3841using namespace o2 ::framework;
@@ -42,6 +45,7 @@ using namespace o2::dataformats;
4245
4346struct TreeWriterTpcV0 {
4447
48+ Service<o2::ccdb::BasicCCDBManager> ccdb;
4549 using Trks = soa::Join<aod::Tracks, aod::V0Bits, aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTOFFullEl, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::TrackSelection>;
4650 using Coll = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
4751
@@ -71,10 +75,12 @@ struct TreeWriterTpcV0 {
7175 ((trackSelection.node() == 3 ) && requireGlobalTrackWoDCAInFilter()) ||
7276 ((trackSelection.node() == 4 ) && requireQualityTracksInFilter()) ||
7377 ((trackSelection.node() == 5 ) && requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks ));
78+
79+ ctpRateFetcher mRateFetcher ;
7480
7581 // / Funktion to fill skimmed tables
7682 template <typename T, typename C, typename V0>
77- void fillSkimmedV0Table (V0 const & v0, T const & track, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float dEdxExp, const o2::track::PID::ID id, int runnumber, double dwnSmplFactor)
83+ void fillSkimmedV0Table (V0 const & v0, T const & track, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float dEdxExp, const o2::track::PID::ID id, int runnumber, double dwnSmplFactor, float hadronicRate )
7884 {
7985
8086 const double ncl = track.tpcNClsFound ();
@@ -117,7 +123,8 @@ struct TreeWriterTpcV0 {
117123 gammapsipair,
118124 runnumber,
119125 trackocc,
120- ft0occ);
126+ ft0occ,
127+ hadronicRate);
121128 }
122129 };
123130
@@ -171,6 +178,9 @@ struct TreeWriterTpcV0 {
171178
172179 void init (o2::framework::InitContext&)
173180 {
181+ ccdb->setURL (" http://alice-ccdb.cern.ch" );
182+ ccdb->setCaching (true );
183+ ccdb->setFatalWhenNull (false );
174184 }
175185
176186 // / Apply a track quality selection with a filter!
@@ -182,7 +192,8 @@ struct TreeWriterTpcV0 {
182192 }
183193 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
184194 const int runnumber = bc.runNumber ();
185-
195+ float hadronicRate = mRateFetcher .fetch (ccdb.service , bc.timestamp (), runnumber, " ZNC hadronic" ) * 1 .e -3 ; //
196+
186197 rowTPCTree.reserve (tracks.size ());
187198
188199 // / Loop over v0 candidates
@@ -192,44 +203,45 @@ struct TreeWriterTpcV0 {
192203 // gamma
193204 if (static_cast <bool >(posTrack.pidbit () & (1 << 0 )) && static_cast <bool >(negTrack.pidbit () & (1 << 0 ))) {
194205 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisElectrons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Electron], maxPt4dwnsmplTsalisElectrons)) {
195- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaEl (), posTrack.tofNSigmaEl (), posTrack.tpcExpSignalEl (posTrack.tpcSignal ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El);
206+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaEl (), posTrack.tofNSigmaEl (), posTrack.tpcExpSignalEl (posTrack.tpcSignal ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate );
196207 }
197208 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisElectrons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Electron], maxPt4dwnsmplTsalisElectrons)) {
198- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaEl (), negTrack.tofNSigmaEl (), negTrack.tpcExpSignalEl (negTrack.tpcSignal ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El);
209+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaEl (), negTrack.tofNSigmaEl (), negTrack.tpcExpSignalEl (negTrack.tpcSignal ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate );
199210 }
200211 }
201212 // Ks0
202213 if (static_cast <bool >(posTrack.pidbit () & (1 << 1 )) && static_cast <bool >(negTrack.pidbit () & (1 << 1 ))) {
203214 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion], maxPt4dwnsmplTsalisPions)) {
204- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi);
215+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
205216 }
206217 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion], maxPt4dwnsmplTsalisPions)) {
207- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi);
218+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
208219 }
209220 }
210221 // Lambda
211222 if (static_cast <bool >(posTrack.pidbit () & (1 << 2 )) && static_cast <bool >(negTrack.pidbit () & (1 << 2 ))) {
212223 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Proton], maxPt4dwnsmplTsalisProtons)) {
213- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPr (), posTrack.tofNSigmaPr (), posTrack.tpcExpSignalPr (posTrack.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr);
224+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPr (), posTrack.tofNSigmaPr (), posTrack.tpcExpSignalPr (posTrack.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
214225 }
215226 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion], maxPt4dwnsmplTsalisPions)) {
216- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi);
227+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
217228 }
218229 }
219230 // Antilambda
220231 if (static_cast <bool >(posTrack.pidbit () & (1 << 3 )) && static_cast <bool >(negTrack.pidbit () & (1 << 3 ))) {
221232 if (downsampleTsalisCharged (posTrack.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion], maxPt4dwnsmplTsalisPions)) {
222- fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi);
233+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
223234 }
224235 if (downsampleTsalisCharged (negTrack.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Proton], maxPt4dwnsmplTsalisProtons)) {
225- fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPr (), negTrack.tofNSigmaPr (), negTrack.tpcExpSignalPr (negTrack.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr);
236+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPr (), negTrack.tofNSigmaPr (), negTrack.tpcExpSignalPr (negTrack.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
226237 }
227238 }
228239 }
229240 } // / process
230241}; // / struct TreeWriterTpcV0
231242
232243struct TreeWriterTPCTOF {
244+ Service<o2::ccdb::BasicCCDBManager> ccdb;
233245 using Trks = soa::Join<aod::Tracks, aod::TracksExtra, aod::pidTPCFullEl, aod::pidTPCFullPi, aod::pidTPCFullKa, aod::pidTPCFullPr, aod::pidTPCFullDe, aod::pidTPCFullTr, aod::pidTOFFullEl, aod::pidTOFFullPi, aod::pidTOFFullKa, aod::pidTOFFullPr, aod::pidTOFFullDe, aod::pidTOFFullTr, aod::TrackSelection>;
234246 using Coll = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
235247
@@ -288,6 +300,8 @@ struct TreeWriterTPCTOF {
288300 ((trackSelection.node() == 3 ) && requireGlobalTrackWoDCAInFilter()) ||
289301 ((trackSelection.node() == 4 ) && requireQualityTracksInFilter()) ||
290302 ((trackSelection.node() == 5 ) && requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks ));
303+
304+ ctpRateFetcher mRateFetcher ;
291305
292306 double tsalisCharged (double pt, double mass, double sqrts)
293307 {
@@ -320,7 +334,7 @@ struct TreeWriterTPCTOF {
320334
321335 // / Function to fill trees
322336 template <typename T, typename C>
323- void fillSkimmedTPCTOFTable (T const & track, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float dEdxExp, const o2::track::PID::ID id, int runnumber, double dwnSmplFactor)
337+ void fillSkimmedTPCTOFTable (T const & track, C const & collision, const float nSigmaTPC, const float nSigmaTOF, const float dEdxExp, const o2::track::PID::ID id, int runnumber, double dwnSmplFactor, double hadronicRate )
324338 {
325339
326340 const double ncl = track.tpcNClsFound ();
@@ -350,7 +364,8 @@ struct TreeWriterTPCTOF {
350364 nSigmaTOF,
351365 runnumber,
352366 trackocc,
353- ft0occ);
367+ ft0occ,
368+ hadronicRate);
354369 }
355370 };
356371
@@ -372,6 +387,9 @@ struct TreeWriterTPCTOF {
372387
373388 void init (o2::framework::InitContext&)
374389 {
390+ ccdb->setURL (" http://alice-ccdb.cern.ch" );
391+ ccdb->setCaching (true );
392+ ccdb->setFatalWhenNull (false );
375393 }
376394
377395 void process (Coll::iterator const & collision, soa::Filtered<Trks> const & tracks, aod::BCsWithTimestamps const &)
@@ -383,37 +401,39 @@ struct TreeWriterTPCTOF {
383401
384402 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
385403 const int runnumber = bc.runNumber ();
404+ float hadronicRate = mRateFetcher .fetch (ccdb.service , bc.timestamp (), runnumber, " ZNC hadronic" ) * 1 .e -3 ; //
405+
386406 rowTPCTOFTree.reserve (tracks.size ());
387407 for (auto const & trk : tracks) {
388408 // / Fill tree for tritons
389409 if (trk.tpcInnerParam () < maxMomHardCutOnlyTr && trk.tpcInnerParam () <= maxMomTPCOnlyTr && std::abs (trk.tpcNSigmaTr ()) < nSigmaTPCOnlyTr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Triton])) {
390- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr);
410+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate );
391411 } else if (trk.tpcInnerParam () < maxMomHardCutOnlyTr && trk.tpcInnerParam () > maxMomTPCOnlyTr && std::abs (trk.tofNSigmaTr ()) < nSigmaTOF_TPCTOF_Tr && std::abs (trk.tpcNSigmaTr ()) < nSigmaTPC_TPCTOF_Tr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Triton])) {
392- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr);
412+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate );
393413 }
394414 // / Fill tree for deuterons
395415 if (trk.tpcInnerParam () < maxMomHardCutOnlyDe && trk.tpcInnerParam () <= maxMomTPCOnlyDe && std::abs (trk.tpcNSigmaDe ()) < nSigmaTPCOnlyDe && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Deuteron])) {
396- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De);
416+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate );
397417 } else if (trk.tpcInnerParam () < maxMomHardCutOnlyDe && trk.tpcInnerParam () > maxMomTPCOnlyDe && std::abs (trk.tofNSigmaDe ()) < nSigmaTOF_TPCTOF_De && std::abs (trk.tpcNSigmaDe ()) < nSigmaTPC_TPCTOF_De && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Deuteron])) {
398- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De);
418+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate );
399419 }
400420 // / Fill tree for protons
401421 if (trk.tpcInnerParam () <= maxMomTPCOnlyPr && std::abs (trk.tpcNSigmaPr ()) < nSigmaTPCOnlyPr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Proton])) {
402- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr);
422+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
403423 } else if (trk.tpcInnerParam () > maxMomTPCOnlyPr && std::abs (trk.tofNSigmaPr ()) < nSigmaTOF_TPCTOF_Pr && std::abs (trk.tpcNSigmaPr ()) < nSigmaTPC_TPCTOF_Pr && downsampleTsalisCharged (trk.pt (), downsamplingTsalisProtons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Proton])) {
404- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr);
424+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
405425 }
406426 // / Fill tree for kaons
407427 if (trk.tpcInnerParam () < maxMomHardCutOnlyKa && trk.tpcInnerParam () <= maxMomTPCOnlyKa && std::abs (trk.tpcNSigmaKa ()) < nSigmaTPCOnlyKa && downsampleTsalisCharged (trk.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon])) {
408- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka);
428+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate );
409429 } else if (trk.tpcInnerParam () < maxMomHardCutOnlyKa && trk.tpcInnerParam () > maxMomTPCOnlyKa && std::abs (trk.tofNSigmaKa ()) < nSigmaTOF_TPCTOF_Ka && std::abs (trk.tpcNSigmaKa ()) < nSigmaTPC_TPCTOF_Ka && downsampleTsalisCharged (trk.pt (), downsamplingTsalisKaons, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Kaon])) {
410- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka);
430+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate );
411431 }
412432 // / Fill tree pions
413433 if (trk.tpcInnerParam () <= maxMomTPCOnlyPi && std::abs (trk.tpcNSigmaPi ()) < nSigmaTPCOnlyPi && downsampleTsalisCharged (trk.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion])) {
414- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi);
434+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
415435 } else if (trk.tpcInnerParam () > maxMomTPCOnlyPi && std::abs (trk.tofNSigmaPi ()) < nSigmaTOF_TPCTOF_Pi && std::abs (trk.tpcNSigmaPi ()) < nSigmaTPC_TPCTOF_Pi && downsampleTsalisCharged (trk.pt (), downsamplingTsalisPions, sqrtSNN, o2::track::pid_constants::sMasses [o2::track::PID::Pion])) {
416- fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi);
436+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
417437 }
418438 } // / Loop tracks
419439 } // / process
0 commit comments