Skip to content

Commit b982b3d

Browse files
authored
PWGMM: add basic track selection (#247)
1 parent dc0031b commit b982b3d

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

PWGMM/Tasks/dndeta.h

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "Common/DataModel/Multiplicity.h"
2121
#include "Common/DataModel/EventSelection.h"
2222
#include "Common/DataModel/Centrality.h"
23+
#include "Common/DataModel/TrackSelectionTables.h"
2324
#include "Common/Core/MC.h"
2425

2526
#include "TDatabasePDG.h"
@@ -52,6 +53,9 @@ struct PseudorapidityDensity {
5253
Configurable<float> vtxZMax{"vtxZMax", 15, "max z vertex"};
5354
Configurable<float> vtxZMin{"vtxZMin", -15, "min z vertex"};
5455

56+
Configurable<float> maxDCAXY{"maxDCAXY", 2.4, "max allowed transverse DCA"};
57+
Configurable<float> maxDCAZ{"maxDCAZ", 3.2, "max allowed longitudal DCA"};
58+
5559
ConfigurableAxis percentileBinning{"pBins",
5660
{VARIABLE_WIDTH, 0., 0.01, 0.1, 0.5, 1, 5, 10, 15, 20, 30, 40, 50, 70, 100},
5761
"Centrality/multiplicity percentile binning"};
@@ -106,10 +110,11 @@ struct PseudorapidityDensity {
106110

107111
expressions::Filter etaFilter = (aod::track::eta < etaMax) && (aod::track::eta > etaMin);
108112
expressions::Filter trackTypeFilter = (aod::track::trackType == TRACKTYPE);
113+
expressions::Filter DCAFilter = aod::track::dcaXY <= maxDCAXY && aod::track::dcaZ <= maxDCAZ;
109114
expressions::Filter posZFilter = (aod::collision::posZ < vtxZMax) && (aod::collision::posZ > vtxZMin);
110115
expressions::Filter posZFilterMC = (aod::mccollision::posZ < vtxZMax) && (aod::mccollision::posZ > vtxZMin);
111116

112-
void process(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& collision, soa::Filtered<aod::Tracks> const& tracks)
117+
void process(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels>>::iterator const& collision, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtended>> const& tracks)
113118
{
114119
registry.fill(HIST("EventSelection"), 1.);
115120
if (select(collision)) {
@@ -125,7 +130,7 @@ struct PseudorapidityDensity {
125130
}
126131
}
127132

128-
void processBinned(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentV0Ms>>::iterator const& collision, soa::Filtered<aod::Tracks> const& tracks)
133+
void processBinned(soa::Filtered<soa::Join<aod::Collisions, aod::EvSels, aod::CentV0Ms>>::iterator const& collision, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtended>> const& tracks)
129134
{
130135
auto p = collision.centV0M();
131136
registry.fill(HIST("EventSelectionBin"), 1., p);
@@ -146,7 +151,7 @@ struct PseudorapidityDensity {
146151

147152
using Particles = aod::McParticles;
148153

149-
void processGen(soa::Filtered<aod::McCollisions>::iterator const& mcCollision, o2::soa::SmallGroups<soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>> const& collisions, Particles const& particles, soa::Filtered<aod::Tracks> const& tracks)
154+
void processGen(soa::Filtered<aod::McCollisions>::iterator const& mcCollision, o2::soa::SmallGroups<soa::Join<aod::Collisions, aod::EvSels, aod::McCollisionLabels>> const& collisions, Particles const& particles, soa::Filtered<soa::Join<aod::Tracks, aod::TracksExtended>> const& tracks)
150155
{
151156
registry.fill(HIST("EventEfficiency"), 1.);
152157
for (auto& collision : collisions) {
@@ -161,17 +166,27 @@ struct PseudorapidityDensity {
161166
auto p = pdg->GetParticle(particle.pdgCode());
162167
int charge = 0;
163168
if (p == nullptr) {
169+
// unknown particles will be skipped
164170
if (particle.pdgCode() > 1000000000) {
165-
auto x = (std::trunc(particle.pdgCode() / 10000) - 100000);
166-
charge = x - std::trunc(x / 1000) * 1000;
167-
LOGF(DEBUG, "[%d] Nucleus with PDG code %d (charge %d)", particle.globalIndex(), particle.pdgCode(), charge);
171+
// auto x = (std::trunc(particle.pdgCode() / 10000) - 100000);
172+
// charge = x - std::trunc(x / 1000) * 1000;
173+
LOGF(DEBUG, "[%d] Nucleus with PDG code %d", particle.globalIndex(), particle.pdgCode() /*, charge*/); // (charge %d)
168174
} else {
169175
LOGF(DEBUG, "[%d] Unknown particle with PDG code %d", particle.globalIndex(), particle.pdgCode());
170176
}
171177
} else {
172178
charge = p->Charge();
173179
}
174180
if (charge != 0 && MC::isPhysicalPrimary(particle) && (particle.eta() < etaMax) && (particle.eta() > etaMin)) {
181+
// FIXME: temporary before Run 3 MC is fixed
182+
if constexpr (TRACKTYPE == o2::dataformats::GlobalTrackID::ITS) {
183+
auto dcaxy = std::sqrt((particle.vx() - mcCollision.posX()) * (particle.vx() - mcCollision.posX()) +
184+
(particle.vy() - mcCollision.posY()) * (particle.vy() - mcCollision.posY()));
185+
auto dcaz = std::abs(particle.vz() - mcCollision.posZ());
186+
if (!(dcaxy <= maxDCAXY && dcaz <= maxDCAZ)) {
187+
continue;
188+
}
189+
}
175190
registry.fill(HIST("TracksEtaZvtxGen"), particle.eta(), mcCollision.posZ());
176191
registry.fill(HIST("TracksPhiEtaGen"), particle.phi(), particle.eta());
177192
}

0 commit comments

Comments
 (0)