Skip to content

Commit 9448302

Browse files
committed
Implement direct global track counter
1 parent ecee90a commit 9448302

1 file changed

Lines changed: 92 additions & 28 deletions

File tree

‎PWGDQ/TableProducer/globalTrackEstimator.cxx‎

Lines changed: 92 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
#include "PWGDQ/Core/MCSignalLibrary.h"
2323
#include "PWGDQ/Core/VarManager.h"
2424

25+
#include "Common/Core/trackUtilities.h"
26+
#include "Common/DataModel/CollisionAssociationTables.h"
27+
2528
#include <Framework/ASoA.h>
2629
#include <Framework/AnalysisDataModel.h>
2730
#include <Framework/AnalysisHelpers.h>
@@ -41,9 +44,15 @@ using namespace o2::aod;
4144
using MyEventsBasic = o2::soa::Join<o2::aod::ReducedEvents, o2::aod::ReducedEventsExtended>;
4245
using MyBarrelTracks = o2::soa::Join<o2::aod::ReducedTracks, o2::aod::ReducedTracksBarrel, o2::aod::ReducedTracksBarrelCov, o2::aod::ReducedTracksBarrelPID>;
4346

47+
using MyEventsDirect = o2::soa::Join<aod::Collisions, aod::EvSels>;
48+
using MyTracksDirect = o2::soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksDCA>;
49+
4450
constexpr static uint32_t GkEventFillMap = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended;
4551
constexpr static uint32_t GkTrackFillMap = VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov;
4652

53+
constexpr static uint32_t GkEventDirectFillMap = VarManager::ObjTypes::Collision;
54+
constexpr static uint32_t GkTrackDirectFillMap = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackCov | VarManager::ObjTypes::TrackDCA;
55+
4756
struct GlobalTrackEstimator {
4857
Produces<o2::aod::ReducedEventsGlobalTrk> reducedEventsGlobalTrk;
4958
Produces<o2::aod::ReducedEventsMultAzimuth> reducedEventsMultAzimuth;
@@ -62,28 +71,77 @@ struct GlobalTrackEstimator {
6271
Configurable<bool> cfgRecalculateDCA{"cfgRecalculateDCA", true, "Recalculate DCA vector with associations"};
6372

6473
o2::framework::Preslice<o2::aod::ReducedTracksAssoc> preslice = o2::aod::reducedtrack_association::reducedeventId;
74+
o2::framework::Preslice<o2::aod::TrackAssoc> presliceDirect = o2::aod::track_association::collisionId;
6575

6676
o2::framework::expressions::Filter trackFilter = (o2::aod::reducedtrack::pt >= cfgMinPt) && (nabs(o2::aod::reducedtrack::eta) <= cfgEtaRange) && (o2::aod::track::tpcChi2NCl <= cfgMaxChi2TPC) && (o2::aod::track::itsChi2NCl <= cfgMaxChi2ITS);
77+
o2::framework::expressions::Filter trackDirectFilter = (o2::aod::track::pt >= cfgMinPt) && (nabs(o2::aod::track::eta) <= cfgEtaRange) && (o2::aod::track::tpcChi2NCl <= cfgMaxChi2TPC) && (o2::aod::track::itsChi2NCl <= cfgMaxChi2ITS);
6778

6879
void init(InitContext& context)
6980
{
70-
LOGF(info, "Started global track counting");
71-
72-
bool isAnyProcessEnabled = context.mOptions.get<bool>("processGlobalTracksSkimmed") || context.mOptions.get<bool>("processGlobalTracksSkimmed");
81+
bool isSkimmedEnabled = context.mOptions.get<bool>("processGlobalTracksSkimmed");
82+
bool isDirectEnabled = context.mOptions.get<bool>("processGlobalTracksDirect");
7383
bool isDummyEnabled = context.mOptions.get<bool>("processDummy");
7484

7585
if (isDummyEnabled) {
76-
if (isAnyProcessEnabled) {
77-
LOG(fatal) << "You have enabled both the dummy process and at least one normal process function! Check your config!";
86+
if (isSkimmedEnabled || isDirectEnabled) {
87+
LOG(fatal) << "You have enabled both the dummy process and at least one normal process function.";
7888
}
7989
return;
8090
}
8191

82-
if (!isAnyProcessEnabled) {
92+
if (!isSkimmedEnabled && !isDirectEnabled && !isDummyEnabled) {
93+
LOG(fatal) << "No process function activated.";
94+
return;
95+
}
96+
97+
if (isSkimmedEnabled && isDirectEnabled) {
98+
LOG(fatal) << "Process functions for skimmed data model and direct data model can not run simultaneously.";
8399
return;
84100
}
85101
}
86102

103+
template <uint32_t fillMap, typename T, typename C>
104+
bool isTrackSelected(T& track, C const& event)
105+
{
106+
VarManager::ResetValues(VarManager::kNBarrelTrackVariables, VarManager::kNBarrelTrackVariables);
107+
VarManager::FillTrack<fillMap>(track);
108+
109+
if (cfgRecalculateDCA) {
110+
VarManager::FillTrackCollision<fillMap>(track, event);
111+
}
112+
113+
const int nFindable = track.tpcNClsFindable();
114+
const int nCrossedRows = track.tpcNClsCrossedRows();
115+
116+
if (nCrossedRows < static_cast<int>(cfgMinTPCCluster.value)) {
117+
return false;
118+
}
119+
120+
if (nFindable <= 0) {
121+
return false;
122+
}
123+
124+
const float crossedOverFindable = static_cast<float>(nCrossedRows) / static_cast<float>(nFindable);
125+
126+
if (crossedOverFindable < cfgRatioTPCClusterOverFindableCluster.value) {
127+
return false;
128+
}
129+
130+
if (cfgRequireITSibAny.value && ((track.itsClusterMap() & 0x7) == 0)) {
131+
return false;
132+
}
133+
134+
if (std::abs(VarManager::fgValues[VarManager::kTrackDCAz]) > cfgMaxDCAz.value) {
135+
return false;
136+
}
137+
138+
if (std::abs(VarManager::fgValues[VarManager::kTrackDCAxy]) > cfgShiftDCAxy + cfgPtMagnitudeDCAxy / pow(track.pt(), cfgExponentDCAxy)) {
139+
return false;
140+
}
141+
142+
return true;
143+
}
144+
87145
void processGlobalTracksSkimmed(MyEventsBasic const& events, o2::aod::ReducedTracksAssoc const& assocs, o2::soa::Filtered<MyBarrelTracks> const& tracks)
88146
{
89147
std::unordered_set<int64_t> selectedTrackIds;
@@ -108,38 +166,44 @@ struct GlobalTrackEstimator {
108166

109167
auto track = assoc.template reducedtrack_as<o2::soa::Filtered<MyBarrelTracks>>();
110168

111-
VarManager::FillTrack<GkTrackFillMap>(track);
112-
113-
if (cfgRecalculateDCA) {
114-
VarManager::FillTrackCollision<GkTrackFillMap>(track, event);
169+
if (!isTrackSelected<GkTrackFillMap>(track, event)) {
170+
continue;
115171
}
116172

117-
const int nFindable = track.tpcNClsFindable();
118-
const int nCrossedRows = track.tpcNClsCrossedRows();
173+
++nTrkGlobal;
174+
}
119175

120-
if (nCrossedRows < static_cast<int>(cfgMinTPCCluster.value)) {
121-
continue;
122-
}
176+
reducedEventsGlobalTrk(nTrkGlobal);
177+
}
178+
}
123179

124-
if (nFindable <= 0) {
125-
continue;
126-
}
180+
PROCESS_SWITCH(GlobalTrackEstimator, processGlobalTracksSkimmed, "Count global tracks from skimmed data model", false);
127181

128-
const float crossedOverFindable = static_cast<float>(nCrossedRows) / static_cast<float>(nFindable);
182+
void processGlobalTracksDirect(MyEventsDirect const& events, TrackAssoc const& assocs, o2::soa::Filtered<MyTracksDirect> const& tracks)
183+
{
184+
std::unordered_set<int64_t> selectedTrackIds;
185+
selectedTrackIds.reserve(tracks.size());
129186

130-
if (crossedOverFindable < cfgRatioTPCClusterOverFindableCluster.value) {
131-
continue;
132-
}
187+
for (auto const& track : tracks) {
188+
selectedTrackIds.insert(track.globalIndex());
189+
}
133190

134-
if (cfgRequireITSibAny.value && ((track.itsClusterMap() & 0x7) == 0)) {
135-
continue;
136-
}
191+
for (const auto& event : events) {
192+
VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables);
193+
VarManager::FillEvent<GkEventDirectFillMap>(event);
194+
195+
auto groupedAssocs = assocs.sliceBy(presliceDirect, event.globalIndex());
196+
197+
int nTrkGlobal = 0;
137198

138-
if (std::abs(VarManager::fgValues[VarManager::kTrackDCAz]) > cfgMaxDCAz.value) {
199+
for (auto const& assoc : groupedAssocs) {
200+
if (selectedTrackIds.find(assoc.trackId()) == selectedTrackIds.end()) {
139201
continue;
140202
}
141203

142-
if (std::abs(VarManager::fgValues[VarManager::kTrackDCAxy]) > cfgShiftDCAxy + cfgPtMagnitudeDCAxy / pow(track.pt(), cfgExponentDCAxy)) {
204+
auto track = assoc.template track_as<o2::soa::Filtered<MyTracksDirect>>();
205+
206+
if (!isTrackSelected<GkTrackDirectFillMap>(track, event)) {
143207
continue;
144208
}
145209

@@ -150,7 +214,7 @@ struct GlobalTrackEstimator {
150214
}
151215
}
152216

153-
PROCESS_SWITCH(GlobalTrackEstimator, processGlobalTracksSkimmed, "Count global tracks from skimmed data model", false);
217+
PROCESS_SWITCH(GlobalTrackEstimator, processGlobalTracksDirect, "Count global tracks from unskimmed data", false);
154218

155219
void processDummy(MyEventsBasic const&)
156220
{

0 commit comments

Comments
 (0)