@@ -53,7 +53,7 @@ using namespace o2;
5353using namespace o2 ::aod;
5454using namespace o2 ::framework;
5555using namespace o2 ::framework::expressions;
56- using selectedClusters = o2::soa::Filtered<o2::soa:: Join<o2::aod::JClusters, o2::aod::JClusterTracks> >;
56+ using emcClusters = o2::soa::Join<o2::aod::JClusters, o2::aod::JClusterTracks>;
5757
5858#include " Framework/runDataProcessing.h"
5959
@@ -82,8 +82,7 @@ struct GammaJetTreeProducer {
8282 Configurable<float > isoR{" isoR" , 0.4 , " isolation cone radius" };
8383 Configurable<float > perpConeJetR{" perpConeJetR" , 0.4 , " perpendicular cone radius used to calculate perp cone rho for jet" };
8484 Configurable<float > trackMatchingEoverP{" trackMatchingEoverP" , 2.0 , " closest track is required to have E/p < value" };
85- // cluster cuts
86- Configurable<int > mClusterDefinition {" clusterDefinition" , 10 , " cluster definition to be selected, e.g. 10=kV3Default" };
85+ Configurable<float > minClusterETrigger{" minClusterETrigger" , 0.0 , " minimum cluster energy to trigger" };
8786
8887 int mRunNumber = 0 ;
8988 int eventSelection = -1 ;
@@ -136,7 +135,16 @@ struct GammaJetTreeProducer {
136135 return true ;
137136 }
138137
139- bool isEventAccepted (const auto & collision)
138+ int getStoredColIndex (const auto & collision)
139+ {
140+ int32_t storedColIndex = -1 ;
141+ if (auto foundCol = collisionMapping.find (collision.globalIndex ()); foundCol != collisionMapping.end ()) {
142+ storedColIndex = foundCol->second ;
143+ }
144+ return storedColIndex;
145+ }
146+
147+ bool isEventAccepted (const auto & collision, const auto & clusters)
140148 {
141149
142150 if (collision.posZ () > mVertexCut ) {
@@ -151,7 +159,14 @@ struct GammaJetTreeProducer {
151159 if (!jetderiveddatautilities::eventEMCAL (collision)) {
152160 return false ;
153161 }
154- return true ;
162+
163+ // Check if event contains a cluster with energy > minClusterETrigger
164+ for (auto cluster : clusters) {
165+ if (cluster.energy () > minClusterETrigger) {
166+ return true ;
167+ }
168+ }
169+ return false ;
155170 }
156171
157172 double ch_iso_in_cone (const auto & cluster, aod::JetTracks const & tracks, float radius = 0.4 )
@@ -217,27 +232,43 @@ struct GammaJetTreeProducer {
217232 // ---------------------
218233 // Processing functions
219234 // ---------------------
235+ // WARNING: This function always has to run first in the processing chain
220236 void processClearMaps (aod::JetCollisions const &)
221237 {
222238 collisionMapping.clear ();
223239 }
224240 PROCESS_SWITCH (GammaJetTreeProducer, processClearMaps, " process function that clears all the maps in each dataframe" , true );
225241
242+ // WARNING: This function always has to run second in the processing chain
243+ void processEvent (soa::Join<aod::JetCollisions, aod::BkgChargedRhos, aod::JCollisionBCs>::iterator const & collision, emcClusters const & clusters)
244+ {
245+ if (!isEventAccepted (collision, clusters)) {
246+ return ;
247+ }
248+
249+ eventsTable (collision.multiplicity (), collision.centrality (), collision.rho (), collision.eventSel (), collision.trackOccupancyInTimeRange (), collision.alias_raw ());
250+ collisionMapping[collision.globalIndex ()] = eventsTable.lastIndex ();
251+ }
252+ PROCESS_SWITCH (GammaJetTreeProducer, processEvent, " Process event" , true );
253+
254+ // ---------------------
255+ // Processing functions can be safely added below this line
256+ // ---------------------
257+
226258 // define cluster filter. It selects only those clusters which are of the type
227259 // sadly passing of the string at runtime is not possible for technical region so cluster definition is
228260 // an integer instead
229- Filter clusterDefinitionSelection = (o2::aod::jcluster::definition == mClusterDefinition );
230261 PresliceUnsorted<aod::JEMCTracks> EMCTrackPerTrack = aod::jemctrack::trackId;
231-
232262 // Process clusters
233- void processClusters (soa::Join<aod::JetCollisions, aod::BkgChargedRhos, aod::JCollisionBCs>::iterator const & collision, selectedClusters const & clusters, aod::JetTracks const & tracks, aod::JEMCTracks const & emctracks)
263+ void processClusters (soa::Join<aod::JetCollisions, aod::BkgChargedRhos, aod::JCollisionBCs>::iterator const & collision, emcClusters const & clusters, aod::JetTracks const & tracks, aod::JEMCTracks const & emctracks)
234264 {
235- if (!isEventAccepted (collision)) {
265+ // event selection
266+ int32_t storedColIndex = getStoredColIndex (collision);
267+ if (storedColIndex == -1 )
236268 return ;
237- }
238269
239- eventsTable (collision.multiplicity (), collision.centrality (), collision.rho (), collision.eventSel (), collision.trackOccupancyInTimeRange (), collision.alias_raw ());
240- collisionMapping[collision.globalIndex ()] = eventsTable.lastIndex ();
270+ // eventsTable(collision.multiplicity(), collision.centrality(), collision.rho(), collision.eventSel(), collision.trackOccupancyInTimeRange(), collision.alias_raw());
271+ // collisionMapping[collision.globalIndex()] = eventsTable.lastIndex();
241272
242273 // loop over tracks one time for QA
243274 runTrackQA (collision, tracks);
@@ -275,8 +306,7 @@ struct GammaJetTreeProducer {
275306 break ;
276307 }
277308 }
278-
279- gammasTable (eventsTable.lastIndex (), cluster.energy (), cluster.eta (), cluster.phi (), cluster.m02 (), cluster.m20 (), cluster.nCells (), cluster.time (), cluster.isExotic (), cluster.distanceToBadChannel (), cluster.nlm (), isoraw, perpconerho, dPhi, dEta, p);
309+ gammasTable (storedColIndex, cluster.energy (), cluster.definition (), cluster.eta (), cluster.phi (), cluster.m02 (), cluster.m20 (), cluster.nCells (), cluster.time (), cluster.isExotic (), cluster.distanceToBadChannel (), cluster.nlm (), isoraw, perpconerho, dPhi, dEta, p);
280310 }
281311
282312 // dummy loop over tracks
@@ -291,9 +321,9 @@ struct GammaJetTreeProducer {
291321 void processChargedJets (soa::Join<aod::JetCollisions, aod::BkgChargedRhos, aod::JCollisionBCs>::iterator const & collision, soa::Filtered<soa::Join<aod::ChargedJets, aod::ChargedJetConstituents>> const & chargedJets, aod::JetTracks const & tracks)
292322 {
293323 // event selection
294- if (!isEventAccepted (collision)) {
324+ int32_t storedColIndex = getStoredColIndex (collision);
325+ if (storedColIndex == -1 )
295326 return ;
296- }
297327 float leadingTrackPt = 0 ;
298328 ushort nconst = 0 ;
299329 // loop over charged jets
@@ -310,10 +340,7 @@ struct GammaJetTreeProducer {
310340 leadingTrackPt = constituent.pt ();
311341 }
312342 }
313- int32_t storedColIndex = -1 ;
314- if (auto foundCol = collisionMapping.find (collision.globalIndex ()); foundCol != collisionMapping.end ()) {
315- storedColIndex = foundCol->second ;
316- }
343+
317344 // calculate perp cone rho
318345 double perpconerho = ch_perp_cone_rho (jet, tracks, perpConeJetR);
319346 mHistograms .fill (HIST (" chjetPtEtaPhi" ), jet.pt (), jet.eta (), jet.phi ());
0 commit comments