1515
1616#include < vector>
1717#include < string>
18+ #include < map>
19+ #include < utility>
20+ #include < algorithm>
1821
1922#include " Framework/runDataProcessing.h"
2023#include " Framework/AnalysisTask.h"
3740#include " Common/DataModel/TrackSelectionTables.h"
3841#include " Common/DataModel/Centrality.h"
3942#include " Common/Core/RecoDecay.h"
43+ #include " Common/CCDB/ctpRateFetcher.h"
4044#include " Common/DataModel/CollisionAssociationTables.h"
4145#include " PWGJE/DataModel/EMCALClusters.h"
4246
@@ -121,6 +125,7 @@ struct JetDerivedDataProducerTask {
121125
122126 Configurable<std::string> ccdbURL{" ccdb-url" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
123127 Configurable<bool > includeTriggers{" includeTriggers" , false , " fill the collision information with software trigger decisions" };
128+ Configurable<bool > includeHadronicRate{" includeHadronicRate" , true , " fill the collision information with the hadronic rate" };
124129
125130 Preslice<aod::EMCALClusterCells> perClusterCells = aod::emcalclustercell::emcalclusterId;
126131 Preslice<aod::EMCALMatchedTracks> perClusterTracks = aod::emcalclustercell::emcalclusterId;
@@ -133,11 +138,14 @@ struct JetDerivedDataProducerTask {
133138 Service<o2::framework::O2DatabasePDG> pdgDatabase;
134139 Zorro triggerDecider;
135140
141+ ctpRateFetcher rateFetcher;
136142 int runNumber;
143+ float hadronicRate;
137144 bool withCollisionAssociator;
138145 void init (InitContext const &)
139146 {
140- if (doprocessTracksWithCollisionAssociator || includeTriggers) {
147+ hadronicRate = -1.0 ;
148+ if (doprocessTracksWithCollisionAssociator || includeHadronicRate || includeTriggers) {
141149 ccdb->setURL (ccdbUrl);
142150 ccdb->setCaching (true );
143151 ccdb->setLocalObjectValidityChecking ();
@@ -169,15 +177,21 @@ struct JetDerivedDataProducerTask {
169177 }
170178 PROCESS_SWITCH (JetDerivedDataProducerTask, processBunchCrossings, " produces derived bunch crossing table" , false );
171179
172- void processCollisions (soa::Join<aod::Collisions, aod::EvSels, aod::FT0Mults, aod::CentFT0Cs>::iterator const & collision, soa::Join<aod::BCs, aod::Timestamps> const &)
180+ void processCollisions (soa::Join<aod::Collisions, aod::EvSels, aod::FT0Mults, aod::CentFT0Cs, aod::CentFT0CVariant1s >::iterator const & collision, soa::Join<aod::BCs, aod::Timestamps> const &)
173181 {
182+ auto bc = collision.bc_as <soa::Join<aod::BCs, aod::Timestamps>>();
183+ if (includeHadronicRate) {
184+ if (runNumber != bc.runNumber ()) {
185+ runNumber = bc.runNumber ();
186+ hadronicRate = rateFetcher.fetch (ccdb.service , bc.timestamp (), runNumber, " ZNC hadronic" ) * 0.001 ;
187+ }
188+ }
174189 uint64_t triggerBit = 0 ;
175190 if (includeTriggers) {
176- auto bc = collision.bc_as <soa::Join<aod::BCs, aod::Timestamps>>();
177191 triggerDecider.initCCDB (ccdb.service , bc.runNumber (), bc.timestamp (), jetderiveddatautilities::JTriggerMasks);
178192 triggerBit = jetderiveddatautilities::setTriggerSelectionBit (triggerDecider.getTriggerOfInterestResults (bc.globalBC ()));
179193 }
180- products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), collision.multFT0C (), collision.centFT0C (), collision.trackOccupancyInTimeRange (), jetderiveddatautilities::setEventSelectionBit (collision), collision.alias_raw (), triggerBit); // note change multFT0C to multFT0M when problems with multFT0A are fixed
194+ products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), collision.multFT0C (), collision.centFT0C (), collision.centFT0CVariant1 (), hadronicRate, collision. trackOccupancyInTimeRange (), jetderiveddatautilities::setEventSelectionBit (collision), collision.alias_raw (), triggerBit); // note change multFT0C to multFT0M when problems with multFT0A are fixed
181195 products.jCollisionsParentIndexTable (collision.globalIndex ());
182196 products.jCollisionsBunchCrossingIndexTable (collision.bcId ());
183197 }
@@ -191,23 +205,23 @@ struct JetDerivedDataProducerTask {
191205 triggerDecider.initCCDB (ccdb.service , bc.runNumber (), bc.timestamp (), jetderiveddatautilities::JTriggerMasks);
192206 triggerBit = jetderiveddatautilities::setTriggerSelectionBit (triggerDecider.getTriggerOfInterestResults (bc.globalBC ()));
193207 }
194- products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), -1.0 , -1.0 , -1 , jetderiveddatautilities::setEventSelectionBit (collision), collision.alias_raw (), triggerBit);
208+ products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), -1.0 , -1.0 , -1.0 , - 1.0 , - 1 , jetderiveddatautilities::setEventSelectionBit (collision), collision.alias_raw (), triggerBit);
195209 products.jCollisionsParentIndexTable (collision.globalIndex ());
196210 products.jCollisionsBunchCrossingIndexTable (collision.bcId ());
197211 }
198212 PROCESS_SWITCH (JetDerivedDataProducerTask, processCollisionsWithoutCentralityAndMultiplicity, " produces derived collision tables without centrality or multiplicity" , false );
199213
200214 void processCollisionsRun2 (soa::Join<aod::Collisions, aod::EvSels, aod::FT0Mults, aod::CentRun2V0Ms>::iterator const & collision)
201215 {
202- products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), collision.multFT0C (), collision.centRun2V0M (), -1 , jetderiveddatautilities::setEventSelectionBit (collision), collision.alias_raw (), 0 ); // note change multFT0C to multFT0M when problems with multFT0A are fixed
216+ products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), collision.multFT0C (), collision.centRun2V0M (), -1.0 , - 1.0 , - 1 , jetderiveddatautilities::setEventSelectionBit (collision), collision.alias_raw (), 0 ); // note change multFT0C to multFT0M when problems with multFT0A are fixed
203217 products.jCollisionsParentIndexTable (collision.globalIndex ());
204218 products.jCollisionsBunchCrossingIndexTable (collision.bcId ());
205219 }
206220 PROCESS_SWITCH (JetDerivedDataProducerTask, processCollisionsRun2, " produces derived collision tables for Run 2 data" , false );
207221
208222 void processCollisionsALICE3 (aod::Collision const & collision)
209223 {
210- products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), -1.0 , -1.0 , -1 , -1.0 , 0 , 0 );
224+ products.jCollisionsTable (collision.posX (), collision.posY (), collision.posZ (), -1.0 , -1.0 , -1.0 , - 1.0 , - 1 , -1.0 , 0 , 0 );
211225 products.jCollisionsParentIndexTable (collision.globalIndex ());
212226 products.jCollisionsBunchCrossingIndexTable (-1 );
213227 }
@@ -274,6 +288,7 @@ struct JetDerivedDataProducerTask {
274288
275289 void processTracksWithCollisionAssociator (aod::Collisions const & collisions, soa::Join<aod::BCs, aod::Timestamps> const &, soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA, aod::TracksDCACov, aod::TrackSelection, aod::TrackSelectionExtension> const &, aod::TrackAssoc const & assocCollisions)
276290 {
291+ runNumber = 0 ;
277292 for (auto const & collision : collisions) {
278293 auto collisionTrackIndices = assocCollisions.sliceBy (perCollisionTrackIndices, collision.globalIndex ());
279294 for (auto const & collisionTrackIndex : collisionTrackIndices) {
0 commit comments