3636
3737namespace o2 ::aod
3838{
39+ namespace slimcollision
40+ {
41+ DECLARE_SOA_COLUMN (Weight, weight, float );
42+ }
3943DECLARE_SOA_TABLE (SlimCollisions, " AOD" , " SlimCollisions" ,
4044 o2::soa::Index<>,
41- o2::aod::collision::PosZ);
45+ o2::aod::collision::PosZ,
46+ o2::aod::collision::CollisionTime,
47+ slimcollision::Weight);
4248using SlimCollision = SlimCollisions::iterator;
49+ namespace slmccollision
50+ {
51+ DECLARE_SOA_COLUMN (McWeight, weight, float );
52+ }
4353DECLARE_SOA_TABLE (SlMcCollisions, " AOD" , " SlMcCollisions" ,
4454 o2::soa::Index<>,
45- o2::aod::mccollision::PosZ);
55+ o2::aod::mccollision::PosZ,
56+ slmccollision::McWeight);
4657using SlMcCollision = SlMcCollisions::iterator;
4758namespace slimtracks
4859{
@@ -116,19 +127,15 @@ struct SlimTablesProducer {
116127 hColl->GetXaxis ()->SetBinLabel (2 , " eventSelection" );
117128
118129 histos.add (" h_mcCollMCD_counts_weight" , " MC event status;event status;weighted entries" , {HistType::kTH1F , {{5 , 0.0 , 5.0 }}});
119- histos.add (" h2_centrality_MCD" , " mc event status vs. centrality;entries;centrality" , {HistType::kTH2F , {centralityAxis, {4 , 0.0 , 4.0 }}}, doSumw2);
120130 auto hMCD = histos.get <TH1>(HIST (" h_mcCollMCD_counts_weight" ));
121131 hMCD->GetXaxis ()->SetBinLabel (1 , " All" );
122- hMCD->GetXaxis ()->SetBinLabel (2 , " Has MC coll + eventSelection " );
132+ hMCD->GetXaxis ()->SetBinLabel (2 , " eventSelectionBits + skipMBGapEvents + applyRCTSelections " );
123133
124134 histos.add (" h_mcCollMCP_counts_weight" , " MC event status;event status;weighted entries" , {HistType::kTH1F , {{7 , 0.0 , 7.0 }}});
125- histos.add (" h2_centrality_MCP" , " mc event status vs. centrality;entries;centrality" , {HistType::kTH2F , {centralityAxis, {4 , 0.0 , 4.0 }}}, doSumw2);
126135 auto hMCP = histos.get <TH1>(HIST (" h_mcCollMCP_counts_weight" ));
127136 hMCP->GetXaxis ()->SetBinLabel (1 , " All" );
128- hMCP->GetXaxis ()->SetBinLabel (2 , " ZVertex" );
129- hMCP->GetXaxis ()->SetBinLabel (3 , " Collision size" );
130- hMCP->GetXaxis ()->SetBinLabel (4 , " eventSelection" );
131- hMCP->GetXaxis ()->SetBinLabel (5 , " eventSelectionMC" );
137+ hMCP->GetXaxis ()->SetBinLabel (2 , " mcColl + skipMBGapEvents + applyRCTSelections" );
138+ hMCP->GetXaxis ()->SetBinLabel (3 , " Zvertex" );
132139
133140 eventSelectionBits = jetderiveddatautilities::initialiseEventSelectionBits (static_cast <std::string>(eventSelections));
134141 trackSelection = jetderiveddatautilities::initialiseTrackSelection (static_cast <std::string>(trackSelections));
@@ -146,6 +153,9 @@ struct SlimTablesProducer {
146153 Filter mcCollisionFilter = (nabs(aod::jmccollision::posZ) < vertexZCut && aod::jmccollision::centFT0M >= centralityMin && aod::jmccollision::centFT0M < centralityMax); // no centFT0C for mccollisions, using centFT0M for both
147154 Filter particleCuts = (aod::jmcparticle::pt >= minPt && aod::jmcparticle::pt < maxPt && aod::jmcparticle::eta > minEta && aod::jmcparticle::eta < maxEta);
148155
156+ Preslice<aod::JetTracksMCD> perCollisionTracks = aod::jtrack::collisionId;
157+ Preslice<aod::JetParticles> perMcCollisionParticles = aod::jmcparticle::mcCollisionId;
158+
149159 void processData (soa::Filtered<aod::JetCollisions>::iterator const & collision,
150160 soa::Filtered<aod::JetTracks> const & tracks)
151161 {
@@ -157,8 +167,7 @@ struct SlimTablesProducer {
157167 return ;
158168 }
159169 histos.fill (HIST (" h_collisions" ), 1.5 );
160-
161- slimCollisions (collision.posZ ());
170+ slimCollisions (collision.posZ (), collision.collisionTime (), 1.0 );
162171 auto slimCollIndex = slimCollisions.lastIndex ();
163172 for (const auto & track : tracks) {
164173 if (!jetderiveddatautilities::selectTrack (track, trackSelection)) {
@@ -170,75 +179,56 @@ struct SlimTablesProducer {
170179 slimTracks (slimCollIndex, track.px (), track.py (), track.pz (), energy);
171180 }
172181 }
173- PROCESS_SWITCH (SlimTablesProducer, processData, " process collisions and tracks for Data and MCD " , false );
182+ PROCESS_SWITCH (SlimTablesProducer, processData, " process collisions and tracks for data " , false );
174183
175- void processMCD (soa::Filtered<aod::JetCollisionsMCD>::iterator const & collision,
176- aod::JetMcCollisions const &, // join the weight
177- soa::Filtered<aod::JetTracksMCD> const & tracks)
184+ void processMC (soa::Filtered<aod::JetCollisionsMCD> const & collisions,
185+ aod::JetMcCollisions const &, // join the weight
186+ soa::Filtered<aod::JetTracksMCD> const & tracks,
187+ soa::Filtered<aod::JetParticles> const & particles)
178188 {
179- float eventWeight = collision.mcCollision_as <aod::JetMcCollisions>().weight ();
180- histos.fill (HIST (" h_mcCollMCD_counts_weight" ), 0.5 , eventWeight);
181- float centrality = -1.0 ;
182- checkCentFT0M ? centrality = collision.centFT0M () : centrality = collision.centFT0C ();
183- histos.fill (HIST (" h2_centrality_MCD" ), centrality, 0.5 , eventWeight);
184- if (!collision.has_mcCollision ()) {
185- return ;
186- }
187- if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits, skipMBGapEvents, applyRCTSelections)) {
188- return ;
189- }
190- histos.fill (HIST (" h_mcCollMCD_counts_weight" ), 1.5 , eventWeight);
191- slimCollisions (collision.posZ ());
192- auto slimCollIndex = slimCollisions.lastIndex ();
193- for (const auto & track : tracks) {
194- if (!jetderiveddatautilities::selectTrack (track, trackSelection)) {
189+ for (auto const & collision : collisions) {
190+ float eventWeight = collision.weight ();
191+ if (!collision.has_mcCollision ()) {
195192 continue ;
196193 }
197- float mass = jetderiveddatautilities::mPion ;
198- float p = track.pt () * std::cosh (track.eta ());
199- float energy = std::sqrt (p * p + mass * mass);
200- slimTracks (slimCollIndex, track.px (), track.py (), track.pz (), energy);
201- }
202- }
203- PROCESS_SWITCH (SlimTablesProducer, processMCD, " process collisions and tracks for MCD" , false );
204-
205- void processMCP (soa::Filtered<o2::aod::JetMcCollisions>::iterator const & mcCollision,
206- soa::SmallGroups<aod::JetCollisionsMCD> const & collisions,
207- soa::Filtered<aod::JetParticles> const & particles)
208- {
209- float eventWeight = mcCollision.weight ();
210- float centrality = mcCollision.centFT0M (); // checkCentFT0M ? centrality = mccollision.centFT0M() : centrality = mccollision.centFT0C();
211- histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 0.5 , eventWeight);
212- histos.fill (HIST (" h2_centrality_MCP" ), centrality, 0.5 , eventWeight);
213- if (std::abs (mcCollision.posZ ()) > vertexZCut) {
214- return ;
215- }
216- histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 1.5 , eventWeight);
217- if (collisions.size () < 1 ) {
218- return ;
219- }
220- histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 2.5 , eventWeight);
221- bool hasSel8Coll = false ;
222- for (auto const & collision : collisions) {
223- if (jetderiveddatautilities::selectCollision (collision, eventSelectionBits, skipMBGapEvents, applyRCTSelections)) { // look if the rec collision associated to the mc collision passes the event selection
224- hasSel8Coll = true ;
194+ auto mcColl = collision.mcCollision (); // corresponding MC coll
195+ histos.fill (HIST (" h_mcCollMCD_counts_weight" ), 0.5 , eventWeight);
196+ histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 0.5 , eventWeight);
197+ if (!jetderiveddatautilities::selectCollision (collision, eventSelectionBits, skipMBGapEvents, applyRCTSelections)) {
198+ continue ;
199+ }
200+ if (!jetderiveddatautilities::selectMcCollision (mcColl, skipMBGapEvents, applyRCTSelections)) {
201+ continue ;
202+ }
203+ histos.fill (HIST (" h_mcCollMCD_counts_weight" ), 1.5 , eventWeight);
204+ histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 1.5 , eventWeight);
205+ if (std::abs (mcColl.posZ ()) > vertexZCut)
206+ continue ;
207+ histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 2.5 , eventWeight);
208+
209+ float eventMCWeight = mcColl.weight ();
210+ slimCollisions (collision.posZ (), collision.collisionTime (), eventWeight);
211+ auto slimCollIndex = slimCollisions.lastIndex ();
212+ auto slicedTracks = tracks.sliceBy (perCollisionTracks, collision.globalIndex ()); // tracks associated to the rec collision
213+ for (const auto & track : slicedTracks) {
214+ if (!jetderiveddatautilities::selectTrack (track, trackSelection))
215+ continue ;
216+ float mass = jetderiveddatautilities::mPion ;
217+ float p = track.pt () * std::cosh (track.eta ());
218+ float energy = std::sqrt (p * p + mass * mass);
219+ slimTracks (slimCollIndex, track.px (), track.py (), track.pz (), energy);
220+ }
221+ slimMcCollisions (mcColl.posZ (), eventMCWeight);
222+ auto slimMcCollIndex = slimMcCollisions.lastIndex ();
223+ auto slicedParticles = particles.sliceBy (perMcCollisionParticles, mcColl.globalIndex ()); // particles associated to the mc collision
224+ for (const auto & particle : slicedParticles) {
225+ if (!particle.isPhysicalPrimary ())
226+ continue ;
227+ slimParticles (slimMcCollIndex, particle.px (), particle.py (), particle.pz (), particle.energy ());
225228 }
226- }
227- if (!hasSel8Coll) {
228- return ;
229- }
230- histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 3.5 , eventWeight);
231- if (!jetderiveddatautilities::selectMcCollision (mcCollision, skipMBGapEvents, applyRCTSelections)) {
232- return ;
233- }
234- histos.fill (HIST (" h_mcCollMCP_counts_weight" ), 4.5 , eventWeight);
235- slimMcCollisions (mcCollision.posZ ());
236- auto slimMcCollIndex = slimMcCollisions.lastIndex ();
237- for (const auto & particle : particles) {
238- slimParticles (slimMcCollIndex, particle.px (), particle.py (), particle.pz (), particle.energy ());
239229 }
240230 }
241- PROCESS_SWITCH (SlimTablesProducer, processMCP , " process mccollisions and mcparticles for MCD " , false );
231+ PROCESS_SWITCH (SlimTablesProducer, processMC , " process collisions & tracks, MCcollisions & particles for MC " , false );
242232};
243233
244234WorkflowSpec defineDataProcessing (ConfigContext const & cfgc)
0 commit comments