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,8 @@ using namespace o2::dataformats;
4245
4346struct TreeWriterTpcV0 {
4447
48+ Service<o2::ccdb::BasicCCDBManager> ccdb;
49+
4550 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>;
4651 using Coll = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
4752
@@ -72,9 +77,11 @@ struct TreeWriterTpcV0 {
7277 ((trackSelection.node() == 4 ) && requireQualityTracksInFilter()) ||
7378 ((trackSelection.node() == 5 ) && requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks ));
7479
80+ ctpRateFetcher mRateFetcher ;
81+
7582 // / Funktion to fill skimmed tables
7683 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)
84+ 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 )
7885 {
7986
8087 const double ncl = track.tpcNClsFound ();
@@ -117,7 +124,8 @@ struct TreeWriterTpcV0 {
117124 gammapsipair,
118125 runnumber,
119126 trackocc,
120- ft0occ);
127+ ft0occ,
128+ hadronicRate);
121129 }
122130 };
123131
@@ -171,6 +179,9 @@ struct TreeWriterTpcV0 {
171179
172180 void init (o2::framework::InitContext&)
173181 {
182+ ccdb->setURL (" http://alice-ccdb.cern.ch" );
183+ ccdb->setCaching (true );
184+ ccdb->setFatalWhenNull (false );
174185 }
175186
176187 // / Apply a track quality selection with a filter!
@@ -182,6 +193,7 @@ struct TreeWriterTpcV0 {
182193 }
183194 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
184195 const int runnumber = bc.runNumber ();
196+ float hadronicRate = mRateFetcher .fetch (ccdb.service , bc.timestamp (), runnumber, " ZNC hadronic" ) * 1 .e -3 ;
185197
186198 rowTPCTree.reserve (tracks.size ());
187199
@@ -192,44 +204,47 @@ struct TreeWriterTpcV0 {
192204 // gamma
193205 if (static_cast <bool >(posTrack.pidbit () & (1 << 0 )) && static_cast <bool >(negTrack.pidbit () & (1 << 0 ))) {
194206 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);
207+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaEl (), posTrack.tofNSigmaEl (), posTrack.tpcExpSignalEl (posTrack.tpcSignal ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate );
196208 }
197209 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);
210+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaEl (), negTrack.tofNSigmaEl (), negTrack.tpcExpSignalEl (negTrack.tpcSignal ()), o2::track::PID::Electron, runnumber, dwnSmplFactor_El, hadronicRate );
199211 }
200212 }
201213 // Ks0
202214 if (static_cast <bool >(posTrack.pidbit () & (1 << 1 )) && static_cast <bool >(negTrack.pidbit () & (1 << 1 ))) {
203215 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);
216+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
205217 }
206218 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);
219+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
208220 }
209221 }
210222 // Lambda
211223 if (static_cast <bool >(posTrack.pidbit () & (1 << 2 )) && static_cast <bool >(negTrack.pidbit () & (1 << 2 ))) {
212224 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);
225+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPr (), posTrack.tofNSigmaPr (), posTrack.tpcExpSignalPr (posTrack.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
214226 }
215227 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);
228+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPi (), negTrack.tofNSigmaPi (), negTrack.tpcExpSignalPi (negTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
217229 }
218230 }
219231 // Antilambda
220232 if (static_cast <bool >(posTrack.pidbit () & (1 << 3 )) && static_cast <bool >(negTrack.pidbit () & (1 << 3 ))) {
221233 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);
234+ fillSkimmedV0Table (v0, posTrack, collision, posTrack.tpcNSigmaPi (), posTrack.tofNSigmaPi (), posTrack.tpcExpSignalPi (posTrack.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
223235 }
224236 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);
237+ fillSkimmedV0Table (v0, negTrack, collision, negTrack.tpcNSigmaPr (), negTrack.tofNSigmaPr (), negTrack.tpcExpSignalPr (negTrack.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
226238 }
227239 }
228240 }
229241 } // / process
230242}; // / struct TreeWriterTpcV0
231243
232244struct TreeWriterTPCTOF {
245+
246+ Service<o2::ccdb::BasicCCDBManager> ccdb;
247+
233248 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>;
234249 using Coll = soa::Join<aod::Collisions, aod::Mults, aod::EvSels>;
235250
@@ -289,6 +304,8 @@ struct TreeWriterTPCTOF {
289304 ((trackSelection.node() == 4 ) && requireQualityTracksInFilter()) ||
290305 ((trackSelection.node() == 5 ) && requireTrackCutInFilter(TrackSelectionFlags::kInAcceptanceTracks ));
291306
307+ ctpRateFetcher mRateFetcher ;
308+
292309 double tsalisCharged (double pt, double mass, double sqrts)
293310 {
294311 const double a = 6.81 , b = 59.24 ;
@@ -320,7 +337,7 @@ struct TreeWriterTPCTOF {
320337
321338 // / Function to fill trees
322339 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)
340+ 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 )
324341 {
325342
326343 const double ncl = track.tpcNClsFound ();
@@ -350,7 +367,8 @@ struct TreeWriterTPCTOF {
350367 nSigmaTOF,
351368 runnumber,
352369 trackocc,
353- ft0occ);
370+ ft0occ,
371+ hadronicRate);
354372 }
355373 };
356374
@@ -372,6 +390,9 @@ struct TreeWriterTPCTOF {
372390
373391 void init (o2::framework::InitContext&)
374392 {
393+ ccdb->setURL (" http://alice-ccdb.cern.ch" );
394+ ccdb->setCaching (true );
395+ ccdb->setFatalWhenNull (false );
375396 }
376397
377398 void process (Coll::iterator const & collision, soa::Filtered<Trks> const & tracks, aod::BCsWithTimestamps const &)
@@ -383,37 +404,39 @@ struct TreeWriterTPCTOF {
383404
384405 auto bc = collision.bc_as <aod::BCsWithTimestamps>();
385406 const int runnumber = bc.runNumber ();
407+ float hadronicRate = mRateFetcher .fetch (ccdb.service , bc.timestamp (), runnumber, " ZNC hadronic" ) * 1 .e -3 ;
408+
386409 rowTPCTOFTree.reserve (tracks.size ());
387410 for (auto const & trk : tracks) {
388411 // / Fill tree for tritons
389412 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);
413+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate );
391414 } 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);
415+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaTr (), trk.tofNSigmaTr (), trk.tpcExpSignalTr (trk.tpcSignal ()), o2::track::PID::Triton, runnumber, dwnSmplFactor_Tr, hadronicRate );
393416 }
394417 // / Fill tree for deuterons
395418 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);
419+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate );
397420 } 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);
421+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaDe (), trk.tofNSigmaDe (), trk.tpcExpSignalDe (trk.tpcSignal ()), o2::track::PID::Deuteron, runnumber, dwnSmplFactor_De, hadronicRate );
399422 }
400423 // / Fill tree for protons
401424 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);
425+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
403426 } 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);
427+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPr (), trk.tofNSigmaPr (), trk.tpcExpSignalPr (trk.tpcSignal ()), o2::track::PID::Proton, runnumber, dwnSmplFactor_Pr, hadronicRate );
405428 }
406429 // / Fill tree for kaons
407430 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);
431+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate );
409432 } 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);
433+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaKa (), trk.tofNSigmaKa (), trk.tpcExpSignalKa (trk.tpcSignal ()), o2::track::PID::Kaon, runnumber, dwnSmplFactor_Ka, hadronicRate );
411434 }
412435 // / Fill tree pions
413436 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);
437+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
415438 } 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);
439+ fillSkimmedTPCTOFTable (trk, collision, trk.tpcNSigmaPi (), trk.tofNSigmaPi (), trk.tpcExpSignalPi (trk.tpcSignal ()), o2::track::PID::Pion, runnumber, dwnSmplFactor_Pi, hadronicRate );
417440 }
418441 } // / Loop tracks
419442 } // / process
0 commit comments