2222#include < algorithm>
2323#include < set>
2424
25+ #include " Common/CCDB/ctpRateFetcher.h"
2526#include " Common/Core/trackUtilities.h"
2627#include " Common/DataModel/EventSelection.h"
2728#include " Common/DataModel/Multiplicity.h"
@@ -101,6 +102,7 @@ int getRowDaughters(int daughID, T const& vecID)
101102
102103struct femtoUniverseProducerTask {
103104 Produces<aod::FDCollisions> outputCollision;
105+ Produces<aod::FDExtCollisions> outputCollExtra;
104106 Produces<aod::FDParticles> outputParts;
105107 Produces<aod::FDMCParticles> outputPartsMC;
106108 Produces<aod::FDExtParticles> outputDebugParts;
@@ -178,6 +180,7 @@ struct femtoUniverseProducerTask {
178180 // V0
179181 FemtoUniverseV0Selection v0Cuts;
180182 struct : o2::framework::ConfigurableGroup {
183+ Configurable<bool > ConfIsFillV0s{" ConfIsFillV0s" , false , " Choice to fill V0s" };
181184 Configurable<std::vector<float >> ConfV0Sign{FemtoUniverseV0Selection::getSelectionName (femtoUniverseV0Selection::kV0Sign , " ConfV0" ), std::vector<float >{-1 , 1 }, FemtoUniverseV0Selection::getSelectionHelper (femtoUniverseV0Selection::kV0Sign , " V0 selection: " )};
182185 Configurable<std::vector<float >> ConfV0PtMin{FemtoUniverseV0Selection::getSelectionName (femtoUniverseV0Selection::kV0pTMin , " ConfV0" ), std::vector<float >{0 .3f , 0 .4f , 0 .5f }, FemtoUniverseV0Selection::getSelectionHelper (femtoUniverseV0Selection::kV0pTMin , " V0 selection: " )};
183186 Configurable<std::vector<float >> ConfV0PtMax{FemtoUniverseV0Selection::getSelectionName (femtoUniverseV0Selection::kV0pTMax , " ConfV0" ), std::vector<float >{3 .3f , 3 .4f , 3 .5f }, FemtoUniverseV0Selection::getSelectionHelper (femtoUniverseV0Selection::kV0pTMax , " V0 selection: " )};
@@ -226,6 +229,7 @@ struct femtoUniverseProducerTask {
226229 // CASCADE
227230 FemtoUniverseCascadeSelection cascadeCuts;
228231 struct : o2::framework::ConfigurableGroup {
232+ Configurable<bool > ConfIsFillCascades{" ConfIsFillCascades" , false , " Choice to fill cascades" };
229233 Configurable<std::vector<float >> ConfCascSign{FemtoUniverseCascadeSelection::getSelectionName (femtoUniverseCascadeSelection::kCascadeSign , " ConfCasc" ), std::vector<float >{-1 , 1 }, FemtoUniverseCascadeSelection::getSelectionHelper (femtoUniverseCascadeSelection::kCascadeSign , " Cascade selection: " )};
230234 Configurable<std::vector<float >> ConfCascPtMin{FemtoUniverseCascadeSelection::getSelectionName (femtoUniverseCascadeSelection::kCascadepTMin , " ConfCasc" ), std::vector<float >{0 .3f , 0 .4f , 0 .5f }, FemtoUniverseCascadeSelection::getSelectionHelper (femtoUniverseCascadeSelection::kCascadepTMin , " Cascade selection: " )};
231235 Configurable<std::vector<float >> ConfCascPtMax{FemtoUniverseCascadeSelection::getSelectionName (femtoUniverseCascadeSelection::kCascadepTMax , " ConfCasc" ), std::vector<float >{3 .3f , 3 .4f , 3 .5f }, FemtoUniverseCascadeSelection::getSelectionHelper (femtoUniverseCascadeSelection::kCascadepTMax , " Cascade selection: " )};
@@ -438,16 +442,17 @@ struct femtoUniverseProducerTask {
438442 HistogramRegistry qaRegistry{" QAHistos" , {}, OutputObjHandlingPolicy::QAObject};
439443 HistogramRegistry cascadeQaRegistry{" CascadeQAHistos" , {}, OutputObjHandlingPolicy::QAObject};
440444
441- int mRunNumber ;
445+ int mRunNumber = 0 ;
442446 float mMagField ;
443447 Service<o2::ccdb::BasicCCDBManager> ccdb; // / Accessing the CCDB
448+ ctpRateFetcher mRateFetcher ; // inspired by zdcSP.cxx in PWGLF
444449
445450 void init (InitContext&)
446451 {
447- if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data || doprocessTrackV0CentRun3 ) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMC || doprocessFullMCCent) == false ) {
452+ if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data) == false && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMC || doprocessFullMCCent) == false ) {
448453 LOGF (fatal, " Neither processFullData nor processFullMC enabled. Please choose one." );
449454 }
450- if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data || doprocessTrackV0CentRun3 ) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMC || doprocessFullMCCent) == true ) {
455+ if ((doprocessFullData || doprocessTrackPhiData || doprocessTrackData || doprocessTrackV0 || doprocessTrackCascadeData || doprocessTrackD0mesonData || doprocessTrackCentRun2Data || doprocessTrackCentRun3Data) == true && (doprocessFullMC || doprocessTrackMC || doprocessTrackMCTruth || doprocessTrackMCGen || doprocessTruthAndFullMC || doprocessFullMCCent) == true ) {
451456 LOGF (fatal,
452457 " Cannot enable process Data and process MC at the same time. "
453458 " Please choose one." );
@@ -843,8 +848,8 @@ struct femtoUniverseProducerTask {
843848 }
844849 }
845850
846- template <bool isMC, typename CollisionType, typename TrackType>
847- void fillCollisionsCentRun3 (CollisionType const & col, TrackType const & tracks)
851+ template <bool isMC, typename CollisionType, typename TrackType, typename V0Type, typename CascadeType >
852+ void fillCollisionsCentRun3 (CollisionType const & col, TrackType const & tracks, V0Type const & fullV0s, CascadeType const & fullCascades, double irrate )
848853 {
849854 const auto vtxZ = col.posZ ();
850855 int cent = 0 ;
@@ -871,9 +876,26 @@ struct femtoUniverseProducerTask {
871876 } else {
872877 outputCollision (vtxZ, cent, multNtr, 2 , mMagField );
873878 }
879+
880+ fillCollisionsCentRun3ColExtra<isMC>(col, irrate);
881+
882+ fillTracks<isMC>(tracks);
883+ if (ConfV0Selection.ConfIsFillV0s ) {
884+ fillV0<isMC>(col, fullV0s, tracks);
885+ }
886+ if (ConfCascadeSelection.ConfIsFillCascades ) {
887+ fillCascade<isMC>(col, fullCascades, tracks);
888+ }
874889 }
875890 }
876891
892+ template <bool isMC, typename CollisionType>
893+ void fillCollisionsCentRun3ColExtra (CollisionType const & col, double irrate)
894+ {
895+ int occupancy = col.trackOccupancyInTimeRange ();
896+ outputCollExtra (irrate, occupancy);
897+ }
898+
877899 template <bool isMC, typename TrackType>
878900 void fillTracks (TrackType const & tracks)
879901 {
@@ -1586,19 +1608,19 @@ struct femtoUniverseProducerTask {
15861608 }
15871609 PROCESS_SWITCH (femtoUniverseProducerTask, processTrackCascadeData, " Provide experimental data for track cascades" , false );
15881610
1589- void processTrackV0CentRun3 (aod::FemtoFullCollisionCentRun3 const & col,
1611+ /* void processTrackV0CentRun3(aod::FemtoFullCollisionCentRun3 const& col,
15901612 aod::BCsWithTimestamps const&,
15911613 soa::Filtered<aod::FemtoFullTracks> const& tracks,
15921614 o2::aod::V0Datas const& fullV0s)
15931615 {
15941616 // get magnetic field for run
15951617 getMagneticFieldTesla(col.bc_as<aod::BCsWithTimestamps>());
15961618 // fill the tables
1597- fillCollisionsCentRun3<false >(col, tracks);
1619+ fillCollisionsCentRun3<false>(col, tracks, fullV0s );
15981620 fillTracks<false>(tracks);
15991621 fillV0<false>(col, fullV0s, tracks);
16001622 }
1601- PROCESS_SWITCH (femtoUniverseProducerTask, processTrackV0CentRun3, " Provide experimental data for track v0" , false );
1623+ PROCESS_SWITCH(femtoUniverseProducerTask, processTrackV0CentRun3, "Provide experimental data for track v0", false);*/
16021624
16031625 void processFullMC (aod::FemtoFullCollisionMC const & col,
16041626 aod::BCsWithTimestamps const &,
@@ -1761,14 +1783,17 @@ struct femtoUniverseProducerTask {
17611783 soa::Join<aod::FemtoFullTracks, aod::McTrackLabels> const & tracks,
17621784 aod::McCollisions const &,
17631785 aod::McParticles const &,
1764- soa::Join<o2::aod::V0Datas, aod::McV0Labels> const & fullV0s)
1786+ soa::Join<aod::V0Datas, aod::McV0Labels> const & fullV0s,
1787+ soa::Join<aod::CascDatas, aod::McCascLabels> const & fullCascades)
17651788 {
17661789 // get magnetic field for run
1767- getMagneticFieldTesla (col.bc_as <aod::BCsWithTimestamps>());
1790+ auto bc = col.bc_as <aod::BCsWithTimestamps>();
1791+ getMagneticFieldTesla (bc);
1792+ double ir = 0 .;
1793+ ir = mRateFetcher .fetch (ccdb.service , bc.timestamp (), mRunNumber , " ZNC hadronic" ) * 1 .e -3 ; // fetch IR
1794+
17681795 // fill the tables
1769- fillCollisionsCentRun3<true >(col, tracks);
1770- fillTracks<true >(tracks);
1771- fillV0<true >(col, fullV0s, tracks);
1796+ fillCollisionsCentRun3<true >(col, tracks, fullV0s, fullCascades, ir);
17721797 }
17731798 PROCESS_SWITCH (femtoUniverseProducerTask, processFullMCCent, " Provide MC data with centrality bins" , false );
17741799
@@ -1786,13 +1811,18 @@ struct femtoUniverseProducerTask {
17861811
17871812 void processTrackCentRun3Data (aod::FemtoFullCollisionCentRun3 const & col,
17881813 aod::BCsWithTimestamps const &,
1789- soa::Filtered<aod::FemtoFullTracks> const & tracks)
1814+ soa::Filtered<aod::FemtoFullTracks> const & tracks,
1815+ aod::V0Datas const & fullV0s,
1816+ aod::CascDatas const & fullCascades)
17901817 {
17911818 // get magnetic field for run
1792- getMagneticFieldTesla (col.bc_as <aod::BCsWithTimestamps>());
1819+ auto bc = col.bc_as <aod::BCsWithTimestamps>();
1820+ getMagneticFieldTesla (bc);
1821+ double ir = 0 .;
1822+ ir = mRateFetcher .fetch (ccdb.service , bc.timestamp (), mRunNumber , " ZNC hadronic" ) * 1 .e -3 ; // fetch IR
1823+
17931824 // fill the tables
1794- fillCollisionsCentRun3<false >(col, tracks);
1795- fillTracks<false >(tracks);
1825+ fillCollisionsCentRun3<false >(col, tracks, fullV0s, fullCascades, ir);
17961826 }
17971827 PROCESS_SWITCH (femtoUniverseProducerTask, processTrackCentRun3Data, " Provide experimental data for Run 3 with centrality for track track" , false );
17981828};
0 commit comments