Skip to content

Commit 791bef7

Browse files
authored
Merge branch 'AliceO2Group:master' into master
2 parents 7c1ccc6 + 7f6d9a4 commit 791bef7

File tree

11 files changed

+231
-37
lines changed

11 files changed

+231
-37
lines changed

EventFiltering/PWGJE/jetFilter.cxx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ struct jetFilter {
9393
// declare filters on tracks
9494
// Filter collisionFilter = nabs(aod::collision::posZ) < cfgVertexCut;
9595

96-
Filter jetRadiusSelection = o2::aod::jet::r == std::round(cfgJetR * 100);
96+
Filter jetRadiusSelection = o2::aod::jet::r == nround(cfgJetR.node() * 100.0f);
9797
using filteredJets = o2::soa::Filtered<o2::aod::Jets>;
9898

9999
void

PWGEM/PhotonMeson/DataModel/gammaTables.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@ using EMReducedMCEventLabel = EMReducedMCEventLabels::iterator;
7171
namespace emmcparticle
7272
{
7373
DECLARE_SOA_INDEX_COLUMN(EMReducedMCEvent, emreducedmcevent); //!
74-
DECLARE_SOA_INDEX_COLUMN(McCollision, mcCollision); //!
7574
DECLARE_SOA_SELF_INDEX_COLUMN_FULL(Mother0, mother0, int, "EMMCParticles_Mother0"); //! Track index of the first mother
7675
DECLARE_SOA_SELF_INDEX_COLUMN_FULL(Mother1, mother1, int, "EMMCParticles_Mother1"); //! Track index of the last mother
7776
DECLARE_SOA_SELF_INDEX_COLUMN_FULL(Daughter0, daughter0, int, "EMMCParticles_Daughter0"); //! Track index of the first daughter
@@ -99,7 +98,7 @@ DECLARE_SOA_DYNAMIC_COLUMN(Y, y, //! Particle rapidity
9998
// NOTE: This table is nearly identical to the one from Framework (except that it points to the event ID, not the BC id)
10099
// This table contains all MC truth tracks (both barrel and muon)
101100
DECLARE_SOA_TABLE_FULL(EMMCParticles, "EMMCParticles", "AOD", "EMMCPARTICLE", //! MC track information (on disk)
102-
o2::soa::Index<>, emmcparticle::EMReducedMCEventId, mcparticle::McCollisionId,
101+
o2::soa::Index<>, emmcparticle::EMReducedMCEventId,
103102
mcparticle::PdgCode, mcparticle::StatusCode, mcparticle::Flags,
104103
emmcparticle::MothersIds, emmcparticle::DaughtersIdSlice,
105104
mcparticle::Weight,

PWGEM/PhotonMeson/TableProducer/createEMReducedMCEvent.cxx

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "Common/DataModel/Multiplicity.h"
2424
#include "Common/DataModel/Centrality.h"
2525
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
26+
#include "PWGEM/PhotonMeson/Utils/MCUtilities.h"
2627

2728
using namespace o2;
2829
using namespace o2::framework;
@@ -98,7 +99,7 @@ struct createEMReducedMCEvent {
9899

99100
// make an entry for this MC event only if it was not already added to the table
100101
if (!(fEventLabels.find(mcCollision.globalIndex()) != fEventLabels.end())) {
101-
mcevents(mcCollision.generatorsID(), mcCollision.globalIndex(), mcCollision.posX(), mcCollision.posY(), mcCollision.posZ(), mcCollision.t(), mcCollision.weight(), mcCollision.impactParameter());
102+
mcevents(mcCollision.globalIndex(), mcCollision.generatorsID(), mcCollision.posX(), mcCollision.posY(), mcCollision.posZ(), mcCollision.t(), mcCollision.weight(), mcCollision.impactParameter());
102103
fEventLabels[mcCollision.globalIndex()] = fCounters[1];
103104
fCounters[1]++;
104105
}
@@ -110,22 +111,22 @@ struct createEMReducedMCEvent {
110111

111112
for (auto& mctrack : groupedMcTracks) {
112113
if (mctrack.pt() < 1e-2 || abs(mctrack.y()) > 1.5 || abs(mctrack.vz()) > 250 || sqrt(pow(mctrack.vx(), 2) + pow(mctrack.vy(), 2)) > 500) { // if pT < 10 MeV/c, don't store. Anyway, we don't care such low pT particles.
114+
// if (mctrack.pt() < 1e-2 || abs(mctrack.vz()) > 250 || sqrt(pow(mctrack.vx(), 2) + pow(mctrack.vy(), 2)) > 500) { // if pT < 10 MeV/c, don't store. Anyway, we don't care such low pT particles.
113115
continue;
114116
}
115117

116118
int pdg = mctrack.pdgCode();
117119
if (
118-
// abs(pdg) != 11 //electron // don't store all electron. This causes never-ending processing.
119-
//&&
120-
abs(pdg) != 22 // photon
120+
abs(pdg) != 11 // electron
121+
&& (abs(pdg) != 22 || !IsPhysicalPrimary(mctrack, mcTracks)) // photon
121122
// light mesons
122-
&& (abs(pdg) != 111 || !mctrack.producedByGenerator()) // pi0
123-
&& (abs(pdg) != 113 || !mctrack.producedByGenerator()) // rho(770)
124-
&& (abs(pdg) != 211 || !mctrack.producedByGenerator()) // changed pion
125-
&& (abs(pdg) != 221 || !mctrack.producedByGenerator()) // eta
126-
&& (abs(pdg) != 223 || !mctrack.producedByGenerator()) // omega(782)
127-
&& (abs(pdg) != 331 || !mctrack.producedByGenerator()) // eta'(958)
128-
&& (abs(pdg) != 333 || !mctrack.producedByGenerator()) // phi(1020)
123+
&& (abs(pdg) != 111 || !IsPhysicalPrimary(mctrack, mcTracks)) // pi0
124+
&& (abs(pdg) != 113 || !IsPhysicalPrimary(mctrack, mcTracks)) // rho(770)
125+
&& (abs(pdg) != 211 || !IsPhysicalPrimary(mctrack, mcTracks)) // changed pion
126+
&& (abs(pdg) != 221 || !IsPhysicalPrimary(mctrack, mcTracks)) // eta
127+
&& (abs(pdg) != 223 || !IsPhysicalPrimary(mctrack, mcTracks)) // omega(782)
128+
&& (abs(pdg) != 331 || !IsPhysicalPrimary(mctrack, mcTracks)) // eta'(958)
129+
&& (abs(pdg) != 333 || !IsPhysicalPrimary(mctrack, mcTracks)) // phi(1020)
129130
) {
130131
continue;
131132
}
@@ -207,7 +208,7 @@ struct createEMReducedMCEvent {
207208
daughterRange[1] = daughters[daughters.size() - 1];
208209
}
209210

210-
emmcparticles(fEventIdx.find(oldLabel)->second, mctrack.mcCollisionId(), mctrack.pdgCode(), mctrack.statusCode(), mctrack.flags(),
211+
emmcparticles(fEventIdx.find(oldLabel)->second, mctrack.pdgCode(), mctrack.statusCode(), mctrack.flags(),
211212
mothers, daughterRange,
212213
mctrack.weight(), mctrack.pt(), mctrack.eta(), mctrack.phi(), mctrack.e(),
213214
mctrack.vx(), mctrack.vy(), mctrack.vz(), mctrack.vt());

PWGEM/PhotonMeson/TableProducer/createPCM.cxx

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
#include "ReconstructionDataFormats/Track.h"
2323
#include "Common/Core/trackUtilities.h"
2424
#include "Common/Core/RecoDecay.h"
25+
#include "Common/DataModel/CollisionAssociation.h"
2526
#include "DCAFitter/DCAFitterN.h"
2627
#include "DetectorsBase/Propagator.h"
2728
#include "DetectorsBase/GeometryManager.h"
@@ -65,7 +66,7 @@ struct createPCM {
6566

6667
Configurable<float> minv0cospa{"minv0cospa", 0.95, "minimum V0 CosPA"};
6768
Configurable<float> maxdcav0dau{"maxdcav0dau", 2.0, "max DCA between V0 Daughters"};
68-
Configurable<float> v0Rmin{"v0Rmin", 1.0, "v0Rmin"};
69+
Configurable<float> v0Rmin{"v0Rmin", 0.0, "v0Rmin"};
6970
Configurable<float> v0Rmax{"v0Rmax", 180.0, "v0Rmax"};
7071
Configurable<float> dcamin{"dcamin", 0.1, "dcamin"};
7172
Configurable<float> dcamax{"dcamax", 1e+10, "dcamax"};
@@ -229,7 +230,7 @@ struct createPCM {
229230
Partition<MyFilteredTracks> posTracks = o2::aod::track::signed1Pt > 0.f;
230231
Partition<MyFilteredTracks> negTracks = o2::aod::track::signed1Pt < 0.f;
231232

232-
void process(MyFilteredTracks& tracks, aod::Collisions const& collisions, aod::BCsWithTimestamps const&)
233+
void processSA(MyFilteredTracks const& tracks, aod::Collisions const& collisions, aod::BCsWithTimestamps const&)
233234
{
234235
for (auto& collision : collisions) {
235236
registry.fill(HIST("hEventCounter"), 1);
@@ -239,20 +240,58 @@ struct createPCM {
239240

240241
auto negTracks_coll = negTracks->sliceByCached(o2::aod::track::collisionId, collision.globalIndex());
241242
auto posTracks_coll = posTracks->sliceByCached(o2::aod::track::collisionId, collision.globalIndex());
242-
// LOGF(info, "collision.globalIndex() = %ld , negTracks_coll1 = %ld , posTracks_coll1 = %ld , negTracks_coll2 = %ld , posTracks_coll2 = %ld , negTracks_coll3 = %ld , posTracks_coll3 = %ld",
243-
// collision.globalIndex(), negTracks_coll1.size(), posTracks_coll1.size() , negTracks_coll2.size(), posTracks_coll2.size() , negTracks_coll3.size(), posTracks_coll3.size() );
244-
245-
// Partition<MyFilteredTracks> groupPos = o2::aod::track::signed1Pt > 0.f && nabs(o2::aod::track::collisionId - collision.globalIndex()) < 1.5f;
246-
// Partition<MyFilteredTracks> groupEle = o2::aod::track::signed1Pt < 0.f && nabs(o2::aod::track::collisionId - collision.globalIndex()) < 1.5f;
247-
// groupPos.bindTable(tracks); //bindTable is too slow
248-
// groupEle.bindTable(tracks); //bindTable is too slow
249-
// LOGF(info, "collision.globalIndex() = %ld , negTracks = %ld , posTracks = %ld", collision.globalIndex(), groupEle.size(), groupPos.size());
250243

251244
for (auto& [ele, pos] : combinations(CombinationsFullIndexPolicy(negTracks_coll, posTracks_coll))) {
252245
fillV0Table(collision, ele, pos);
253246
}
254247
} // end of collision loop
255248
} // end of process
249+
PROCESS_SWITCH(createPCM, processSA, "create V0s with stand-alone way", true);
250+
251+
Preslice<aod::TrackAssoc> trackIndicesPerCollision = aod::track_association::collisionId;
252+
void processTrkCollAsso(aod::TrackAssoc const& trackIndices, FullTracksExt const& tracks, aod::Collisions const& collisions, aod::BCsWithTimestamps const&)
253+
{
254+
for (auto& collision : collisions) {
255+
registry.fill(HIST("hEventCounter"), 1);
256+
257+
auto bc = collision.bc_as<aod::BCsWithTimestamps>();
258+
initCCDB(bc);
259+
auto trackIdsThisCollision = trackIndices.sliceBy(trackIndicesPerCollision, collision.globalIndex());
260+
261+
// LOGF(info,"%d tracks in collision %d", trackIdsThisCollision.size(), collision.globalIndex());
262+
for (auto& [eleId, posId] : combinations(CombinationsStrictlyUpperIndexPolicy(trackIdsThisCollision, trackIdsThisCollision))) {
263+
auto ele = eleId.track_as<FullTracksExt>();
264+
auto pos = posId.track_as<FullTracksExt>();
265+
// LOGF(info,"eleId = %d , posId = %d", ele.globalIndex(), pos.globalIndex());
266+
267+
if (ele.sign() * pos.sign() > 0) { // reject same sign combination
268+
continue;
269+
}
270+
if ((abs(ele.dcaXY()) < dcamin || dcamax < abs(ele.dcaXY())) || (abs(pos.dcaXY()) < dcamin || dcamax < abs(pos.dcaXY()))) {
271+
continue;
272+
}
273+
if (ele.tpcNClsCrossedRows() < mincrossedrows || pos.tpcNClsCrossedRows() < mincrossedrows) {
274+
continue;
275+
}
276+
if (ele.tpcChi2NCl() > maxchi2tpc || pos.tpcChi2NCl() > maxchi2tpc) {
277+
continue;
278+
}
279+
if (abs(ele.eta()) > maxeta || abs(pos.eta()) > maxeta) {
280+
continue;
281+
}
282+
if (ele.pt() < minpt || pos.pt() < minpt) {
283+
continue;
284+
}
285+
286+
if (ele.sign() < 0) {
287+
fillV0Table(collision, ele, pos);
288+
} else {
289+
fillV0Table(collision, pos, ele);
290+
}
291+
}
292+
} // end of collision loop
293+
} // end of process
294+
PROCESS_SWITCH(createPCM, processTrkCollAsso, "create V0s with track-to-collision associator", false);
256295
};
257296

258297
// Extends the v0data table with expression columns

PWGEM/PhotonMeson/Tasks/Pi0EtaToGammaGammaMC.cxx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@
3232
#include "Common/DataModel/Centrality.h"
3333
#include "Common/DataModel/PIDResponse.h"
3434
#include "Common/Core/RecoDecay.h"
35-
#include "PWGEM/PhotonMeson/Utils/PCMUtilities.h"
3635
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
36+
#include "PWGEM/PhotonMeson/Utils/PCMUtilities.h"
37+
#include "PWGEM/PhotonMeson/Utils/MCUtilities.h"
3738

3839
using namespace o2;
3940
using namespace o2::framework;
@@ -311,17 +312,17 @@ struct Pi0EtaToGammaGammaMC {
311312
}
312313
int pdg = mctrack.pdgCode();
313314

314-
if (abs(pdg) == 22 && mctrack.producedByGenerator()) {
315+
if (abs(pdg) == 22 && IsPhysicalPrimary(mctrack, mcparticles)) {
315316
registry.fill(HIST("Generated/hPt_Gamma"), mctrack.pt());
316317
registry.fill(HIST("Generated/hY_Gamma"), mctrack.y());
317318
registry.fill(HIST("Generated/hPhi_Gamma"), mctrack.phi());
318319
}
319-
if (abs(pdg) == 111 && mctrack.producedByGenerator()) {
320+
if (abs(pdg) == 111 && IsPhysicalPrimary(mctrack, mcparticles)) {
320321
registry.fill(HIST("Generated/hPt_Pi0"), mctrack.pt());
321322
registry.fill(HIST("Generated/hY_Pi0"), mctrack.y());
322323
registry.fill(HIST("Generated/hPhi_Pi0"), mctrack.phi());
323324
}
324-
if (abs(pdg) == 221 && mctrack.producedByGenerator()) {
325+
if (abs(pdg) == 221 && IsPhysicalPrimary(mctrack, mcparticles)) {
325326
registry.fill(HIST("Generated/hPt_Eta"), mctrack.pt());
326327
registry.fill(HIST("Generated/hY_Eta"), mctrack.y());
327328
registry.fill(HIST("Generated/hPhi_Eta"), mctrack.phi());

PWGEM/PhotonMeson/Tasks/pcmQCMC.cxx

Lines changed: 83 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@
3333
#include "Common/DataModel/Centrality.h"
3434
#include "Common/DataModel/PIDResponse.h"
3535
#include "Common/Core/RecoDecay.h"
36-
#include "PWGEM/PhotonMeson/Utils/PCMUtilities.h"
3736
#include "PWGEM/PhotonMeson/DataModel/gammaTables.h"
37+
#include "PWGEM/PhotonMeson/Utils/PCMUtilities.h"
38+
#include "PWGEM/PhotonMeson/Utils/MCUtilities.h"
3839

3940
using namespace o2;
4041
using namespace o2::framework;
@@ -148,6 +149,18 @@ struct PCMQCMC {
148149
registry.add(Form("%sV0/hKFChi2vsR_recalc", pairtype[i].Data()), "recalc. KF conversion point in XY;R_{xy} (cm);KF chi2/NDF", HistType::kTH2F, {{250, 0.0f, 250.0f}, {5000, 0.f, 5000.0f}});
149150
registry.add(Form("%sV0/hKFChi2vsZ_recalc", pairtype[i].Data()), "recalc. KF conversion point in Z;Z (cm);KF chi2/NDF", HistType::kTH2F, {{500, -250.0f, 250.0f}, {5000, 0.f, 5000.0f}});
150151
}
152+
153+
const float rxy[] = {0, 6, 10, 20, 30, 40, 50, 60, 70, 80, 90};
154+
registry.add("Generated/hCollisionCounter", "Collision counter", HistType::kTH1F, {{5, 0.5f, 5.5f}});
155+
registry.add("Generated/hGammaRxy", "conversion point in XY MC;V_{x} (cm);V_{y} (cm)", HistType::kTH2F, {{2000, -100.0f, 100.0f}, {2000, -100.0f, 100.0f}});
156+
registry.add("Generated/hGammaRZ", "conversion point in RZ MC;V_{z} (cm);R_{xy} (cm)", HistType::kTH2F, {{5000, -250.0f, 250.0f}, {1000, 0.f, 100.0f}});
157+
158+
const int n = sizeof(rxy) / sizeof(rxy[0]);
159+
for (int i = 0; i < n - 1; i++) {
160+
float rmin = rxy[i];
161+
float rmax = rxy[i + 1];
162+
registry.add(Form("Generated/hConvPhi_Rxy%d_%dcm", static_cast<int>(rmin), static_cast<int>(rmax)), Form("conversion point of #varphi MC in %d < R_{xy} < %d cm;#varphi (rad.);N_{e}", static_cast<int>(rmin), static_cast<int>(rmax)), HistType::kTH1F, {{360, 0.0f, TMath::TwoPi()}});
163+
}
151164
}
152165

153166
void init(InitContext& context)
@@ -243,7 +256,6 @@ struct PCMQCMC {
243256
Preslice<MyV0Photons> perCollision = aod::v0photon::collisionId;
244257

245258
using MyMCV0Legs = soa::Join<aod::V0Legs, aod::EMMCParticleLabels>;
246-
// void processPCMPCM(soa::Join<aod::EMReducedEvents, aod::EMReducedMCEventLabels> const& collisions, MyFilteredV0Photons const& v0photons, MyMCV0Legs const& v0legs, aod::EMMCParticles const& mcparticles)
247259
void processQCMC(soa::Join<aod::EMReducedEvents, aod::EMReducedMCEventLabels> const& collisions, MyFilteredV0Photons const& v0photons, MyMCV0Legs const& v0legs, aod::EMMCParticles const& mcparticles)
248260
{
249261
for (auto& collision : collisions) {
@@ -302,12 +314,81 @@ struct PCMQCMC {
302314
} // end of collision loop
303315
} // end of process
304316

317+
Preslice<aod::EMMCParticles> perMcCollision = aod::emmcparticle::emreducedmceventId;
318+
void processGen(soa::Join<aod::EMReducedEvents, aod::EMReducedMCEventLabels> const& collisions, aod::EMReducedMCEvents const& mccollisions, aod::EMMCParticles const& mcparticles)
319+
{
320+
// loop over mc stack and fill histograms for pure MC truth signals
321+
// all MC tracks which belong to the MC event corresponding to the current reconstructed event
322+
323+
for (auto& collision : collisions) {
324+
registry.fill(HIST("Generated/hCollisionCounter"), 1.0); // all
325+
if (!collision.sel8()) {
326+
continue;
327+
}
328+
registry.fill(HIST("Generated/hCollisionCounter"), 2.0); // FT0VX i.e. FT0and
329+
330+
if (collision.numContrib() < 0.5) {
331+
continue;
332+
}
333+
registry.fill(HIST("Generated/hCollisionCounter"), 3.0); // Ncontrib > 0
334+
335+
if (abs(collision.posZ()) > 10.0) {
336+
continue;
337+
}
338+
registry.fill(HIST("Generated/hCollisionCounter"), 4.0); //|Zvtx| < 10 cm
339+
auto mccollision = collision.emreducedmcevent();
340+
341+
auto mctracks_coll = mcparticles.sliceBy(perMcCollision, mccollision.globalIndex());
342+
for (auto& mctrack : mctracks_coll) {
343+
344+
if (IsEleFromPC(mctrack, mcparticles) > 0) {
345+
float rxy = sqrt(pow(mctrack.vx(), 2) + pow(mctrack.vy(), 2));
346+
registry.fill(HIST("Generated/hGammaRZ"), mctrack.vz(), rxy);
347+
348+
if (abs(mctrack.eta()) > 0.9)
349+
continue;
350+
registry.fill(HIST("Generated/hGammaRxy"), mctrack.vx(), mctrack.vy());
351+
if (rxy < 6) {
352+
registry.fill(HIST("Generated/hConvPhi_Rxy0_6cm"), mctrack.phi());
353+
} else if (rxy < 10) {
354+
registry.fill(HIST("Generated/hConvPhi_Rxy6_10cm"), mctrack.phi());
355+
356+
} else if (rxy < 20) {
357+
registry.fill(HIST("Generated/hConvPhi_Rxy10_20cm"), mctrack.phi());
358+
359+
} else if (rxy < 30) {
360+
registry.fill(HIST("Generated/hConvPhi_Rxy20_30cm"), mctrack.phi());
361+
362+
} else if (rxy < 40) {
363+
registry.fill(HIST("Generated/hConvPhi_Rxy30_40cm"), mctrack.phi());
364+
365+
} else if (rxy < 50) {
366+
registry.fill(HIST("Generated/hConvPhi_Rxy40_50cm"), mctrack.phi());
367+
368+
} else if (rxy < 60) {
369+
registry.fill(HIST("Generated/hConvPhi_Rxy50_60cm"), mctrack.phi());
370+
371+
} else if (rxy < 70) {
372+
registry.fill(HIST("Generated/hConvPhi_Rxy60_70cm"), mctrack.phi());
373+
374+
} else if (rxy < 80) {
375+
registry.fill(HIST("Generated/hConvPhi_Rxy70_80cm"), mctrack.phi());
376+
377+
} else if (rxy < 90) {
378+
registry.fill(HIST("Generated/hConvPhi_Rxy80_90cm"), mctrack.phi());
379+
}
380+
}
381+
}
382+
}
383+
}
384+
305385
void processDummy(aod::EMReducedEvents::iterator const& collision)
306386
{
307387
// do nothing
308388
}
309389

310390
PROCESS_SWITCH(PCMQCMC, processQCMC, "run PCM QC in MC", true);
391+
PROCESS_SWITCH(PCMQCMC, processGen, "run generated information", false);
311392
PROCESS_SWITCH(PCMQCMC, processDummy, "Dummy function", false);
312393
};
313394

0 commit comments

Comments
 (0)