Skip to content

Commit 48487cb

Browse files
committed
modify processMC to fill tracks & particles with coll associated to MC coll
1 parent 774ebf5 commit 48487cb

File tree

1 file changed

+63
-73
lines changed

1 file changed

+63
-73
lines changed

PWGJE/TableProducer/slimTablesProducer.cxx

Lines changed: 63 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,24 @@
3636

3737
namespace o2::aod
3838
{
39+
namespace slimcollision
40+
{
41+
DECLARE_SOA_COLUMN(Weight, weight, float);
42+
}
3943
DECLARE_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);
4248
using SlimCollision = SlimCollisions::iterator;
49+
namespace slmccollision
50+
{
51+
DECLARE_SOA_COLUMN(McWeight, weight, float);
52+
}
4353
DECLARE_SOA_TABLE(SlMcCollisions, "AOD", "SlMcCollisions",
4454
o2::soa::Index<>,
45-
o2::aod::mccollision::PosZ);
55+
o2::aod::mccollision::PosZ,
56+
slmccollision::McWeight);
4657
using SlMcCollision = SlMcCollisions::iterator;
4758
namespace 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

244234
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)

0 commit comments

Comments
 (0)