Skip to content

Commit 4e36bd6

Browse files
authored
A few changes and optimizations (#4765)
1 parent 1522c87 commit 4e36bd6

File tree

3 files changed

+81
-59
lines changed

3 files changed

+81
-59
lines changed

Analysis/Core/include/Analysis/VarManager.h

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ static const float fgkMuonMass = 0.105; // GeV
3636
class VarManager : public TObject
3737
{
3838
public:
39+
// map the information contained in the objects passed to the Fill functions
3940
enum ObjTypes {
4041
BC = BIT(0),
4142
Collision = BIT(1),
@@ -47,13 +48,15 @@ class VarManager : public TObject
4748
TrackCov = BIT(1),
4849
TrackExtra = BIT(2),
4950
TrackPID = BIT(3),
51+
TrackDCA = BIT(4),
52+
TrackSelection = BIT(5),
5053
// TODO: Central model MUON variables to be added
51-
ReducedTrack = BIT(4),
52-
ReducedTrackBarrel = BIT(5),
53-
ReducedTrackBarrelCov = BIT(6),
54-
ReducedTrackBarrelPID = BIT(7),
55-
ReducedTrackMuon = BIT(8),
56-
Pair = BIT(9)
54+
ReducedTrack = BIT(6),
55+
ReducedTrackBarrel = BIT(7),
56+
ReducedTrackBarrelCov = BIT(8),
57+
ReducedTrackBarrelPID = BIT(9),
58+
ReducedTrackMuon = BIT(10),
59+
Pair = BIT(11)
5760
};
5861

5962
public:
@@ -103,6 +106,8 @@ class VarManager : public TObject
103106

104107
// Barrel track variables
105108
kPin,
109+
kIsGlobalTrack,
110+
kIsGlobalTrackSDD,
106111
kIsITSrefit,
107112
kIsSPDany,
108113
kIsSPDfirst,
@@ -298,22 +303,22 @@ void VarManager::FillEvent(T const& event, float* values)
298303
values[kBC] = event.globalBC();
299304
values[kCentVZERO] = event.centV0M();
300305
if (fgUsedVars[kIsINT7]) {
301-
values[kIsINT7] = event.triggerAlias() & (uint32_t(1) << kINT7);
306+
values[kIsINT7] = (event.triggerAlias() & (uint32_t(1) << kINT7)) > 0;
302307
}
303308
if (fgUsedVars[kIsEMC7]) {
304-
values[kIsEMC7] = event.triggerAlias() & (uint32_t(1) << kEMC7);
309+
values[kIsEMC7] = (event.triggerAlias() & (uint32_t(1) << kEMC7)) > 0;
305310
}
306311
if (fgUsedVars[kIsINT7inMUON]) {
307-
values[kIsINT7inMUON] = event.triggerAlias() & (uint32_t(1) << kINT7inMUON);
312+
values[kIsINT7inMUON] = (event.triggerAlias() & (uint32_t(1) << kINT7inMUON)) > 0;
308313
}
309314
if (fgUsedVars[kIsMuonSingleLowPt7]) {
310-
values[kIsMuonSingleLowPt7] = event.triggerAlias() & (uint32_t(1) << kMuonSingleLowPt7);
315+
values[kIsMuonSingleLowPt7] = (event.triggerAlias() & (uint32_t(1) << kMuonSingleLowPt7)) > 0;
311316
}
312317
if (fgUsedVars[kIsMuonUnlikeLowPt7]) {
313-
values[kIsMuonUnlikeLowPt7] = event.triggerAlias() & (uint32_t(1) << kMuonUnlikeLowPt7);
318+
values[kIsMuonUnlikeLowPt7] = (event.triggerAlias() & (uint32_t(1) << kMuonUnlikeLowPt7)) > 0;
314319
}
315320
if (fgUsedVars[kIsMuonLikeLowPt7]) {
316-
values[kIsMuonLikeLowPt7] = event.triggerAlias() & (uint32_t(1) << kMuonLikeLowPt7);
321+
values[kIsMuonLikeLowPt7] = (event.triggerAlias() & (uint32_t(1) << kMuonLikeLowPt7)) > 0;
317322
}
318323
}
319324

@@ -356,19 +361,19 @@ void VarManager::FillTrack(T const& track, float* values)
356361
if constexpr ((fillMap & TrackExtra) > 0 || (fillMap & ReducedTrackBarrel) > 0) {
357362
values[kPin] = track.tpcInnerParam();
358363
if (fgUsedVars[kIsITSrefit]) {
359-
values[kIsITSrefit] = track.flags() & (uint64_t(1) << 2); // TODO: the flag mapping needs to be updated
364+
values[kIsITSrefit] = (track.flags() & (uint32_t(1) << 0)) > 0;
360365
}
361366
if (fgUsedVars[kIsTPCrefit]) {
362-
values[kIsTPCrefit] = track.flags() & (uint64_t(1) << 6); // TODO: the flag mapping needs to be updated
367+
values[kIsTPCrefit] = (track.flags() & (uint32_t(1) << 1)) > 0;
363368
}
364369
if (fgUsedVars[kIsSPDfirst]) {
365-
values[kIsSPDfirst] = track.itsClusterMap() & uint8_t(1);
370+
values[kIsSPDfirst] = (track.itsClusterMap() & uint8_t(1)) > 0;
366371
}
367372
if (fgUsedVars[kIsSPDboth]) {
368-
values[kIsSPDboth] = track.itsClusterMap() & uint8_t(3);
373+
values[kIsSPDboth] = (track.itsClusterMap() & uint8_t(3)) > 0;
369374
}
370375
if (fgUsedVars[kIsSPDany]) {
371-
values[kIsSPDfirst] = (track.itsClusterMap() & uint8_t(1)) || (track.itsClusterMap() & uint8_t(2));
376+
values[kIsSPDany] = (track.itsClusterMap() & uint8_t(1)) || (track.itsClusterMap() & uint8_t(2));
372377
}
373378
values[kITSchi2] = track.itsChi2NCl();
374379
values[kTPCncls] = track.tpcNClsFound();
@@ -379,9 +384,6 @@ void VarManager::FillTrack(T const& track, float* values)
379384
if (fgUsedVars[kITSncls]) {
380385
values[kITSncls] = track.itsNCls(); // dynamic column
381386
}
382-
// TODO: DCA calculation for central data model tracks to be added here
383-
values[kTrackDCAxy] = -9999.;
384-
values[kTrackDCAz] = -9999.;
385387
}
386388
if constexpr ((fillMap & ReducedTrackBarrel) > 0) {
387389
if (fgUsedVars[kITSncls]) {
@@ -395,6 +397,16 @@ void VarManager::FillTrack(T const& track, float* values)
395397
}
396398
}
397399

400+
if constexpr ((fillMap & TrackDCA) > 0) {
401+
values[kTrackDCAxy] = track.dcaXY();
402+
values[kTrackDCAz] = track.dcaZ();
403+
}
404+
405+
if constexpr ((fillMap & TrackSelection) > 0) {
406+
values[kIsGlobalTrack] = track.isGlobalTrack();
407+
values[kIsGlobalTrackSDD] = track.isGlobalTrackSDD();
408+
}
409+
398410
if constexpr ((fillMap & TrackCov) > 0 || (fillMap & ReducedTrackBarrelCov) > 0) {
399411
values[kTrackCYY] = track.cYY();
400412
values[kTrackCZZ] = track.cZZ();

Analysis/Tasks/PWGDQ/tableMaker.cxx

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "Analysis/AnalysisCut.h"
2525
#include "Analysis/AnalysisCompositeCut.h"
2626
#include "PID/PIDResponse.h"
27+
#include "Analysis/TrackSelectionTables.h"
2728
#include <iostream>
2829

2930
using std::cout;
@@ -35,7 +36,7 @@ using namespace o2::framework;
3536
using namespace o2::aod;
3637

3738
using MyEvents = soa::Join<aod::Collisions, aod::EvSels, aod::Cents>;
38-
using MyBarrelTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::pidRespTPC, aod::pidRespTOF, aod::pidRespTOFbeta>;
39+
using MyBarrelTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov, aod::TracksExtended, aod::TrackSelection, aod::pidRespTPC, aod::pidRespTOF, aod::pidRespTOFbeta>;
3940

4041
// HACK: In order to be able to deduce which kind of aod object is transmitted to the templated VarManager::Fill functions
4142
// a constexpr static bit map must be defined and sent as template argument
@@ -45,7 +46,7 @@ using MyBarrelTracks = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksCov,
4546
// This is a temporary fix until the arrow/ROOT issues are solved, at which point it will be possible
4647
// to automatically detect the object types transmitted to the VarManager
4748
constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::BC | VarManager::ObjTypes::Collision | VarManager::ObjTypes::CollisionCent;
48-
constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackCov | VarManager::ObjTypes::TrackPID;
49+
constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::Track | VarManager::ObjTypes::TrackExtra | VarManager::ObjTypes::TrackDCA | VarManager::ObjTypes::TrackSelection | VarManager::ObjTypes::TrackCov | VarManager::ObjTypes::TrackPID;
4950

5051
struct TableMaker {
5152

@@ -71,6 +72,14 @@ struct TableMaker {
7172
// Cuts should be defined using Configurables (prepare cut libraries, as discussed in O2 DQ meetings)
7273
AnalysisCompositeCut* fTrackCut;
7374

75+
// Partition will select fast a group of tracks with basic requirements
76+
// If some of the cuts cannot be included in the Partition expression, add them via AnalysisCut(s)
77+
Partition<MyBarrelTracks> barrelSelectedTracks = o2::aod::track::pt >= 1.0f && nabs(o2::aod::track::eta) <= 0.9f && o2::aod::track::tpcSignal >= 70.0f && o2::aod::track::tpcSignal <= 100.0f && o2::aod::track::tpcChi2NCl < 4.0f && o2::aod::track::itsChi2NCl < 36.0f;
78+
79+
// TODO a few of the important muon variables in the central data model are dynamic columns so not usable in expressions (e.g. eta, phi)
80+
// Update the data model to have them as expression columns
81+
Partition<aod::Muons> muonSelectedTracks = o2::aod::muon::pt >= 1.0f;
82+
7483
void init(o2::framework::InitContext&)
7584
{
7685
fValues = new float[VarManager::kNVars];
@@ -95,13 +104,13 @@ struct TableMaker {
95104

96105
fTrackCut = new AnalysisCompositeCut(true);
97106
AnalysisCut* trackVarCut = new AnalysisCut();
98-
trackVarCut->AddCut(VarManager::kPt, 1.0, 1000.0);
99-
trackVarCut->AddCut(VarManager::kEta, -0.9, 0.9);
100-
trackVarCut->AddCut(VarManager::kTPCsignal, 70.0, 100.0);
101-
//trackVarCut->AddCut(VarManager::kIsITSrefit, 0.5, 1.5);
102-
//trackVarCut->AddCut(VarManager::kIsTPCrefit, 0.5, 1.5);
103-
trackVarCut->AddCut(VarManager::kTPCchi2, 0.0, 4.0);
104-
trackVarCut->AddCut(VarManager::kITSchi2, 0.1, 36.0);
107+
//trackVarCut->AddCut(VarManager::kPt, 1.0, 1000.0);
108+
//trackVarCut->AddCut(VarManager::kEta, -0.9, 0.9);
109+
//trackVarCut->AddCut(VarManager::kTPCsignal, 70.0, 100.0);
110+
trackVarCut->AddCut(VarManager::kIsITSrefit, 0.5, 1.5);
111+
trackVarCut->AddCut(VarManager::kIsTPCrefit, 0.5, 1.5);
112+
//trackVarCut->AddCut(VarManager::kTPCchi2, 0.0, 4.0);
113+
//trackVarCut->AddCut(VarManager::kITSchi2, 0.1, 36.0);
105114
trackVarCut->AddCut(VarManager::kTPCncls, 100.0, 161.);
106115

107116
AnalysisCut* pidCut1 = new AnalysisCut();
@@ -140,42 +149,33 @@ struct TableMaker {
140149
eventVtxCov(collision.covXX(), collision.covXY(), collision.covXZ(), collision.covYY(), collision.covYZ(), collision.covZZ(), collision.chi2());
141150

142151
uint64_t trackFilteringTag = 0;
143-
float sinAlpha = 0.f;
144-
float cosAlpha = 0.f;
145-
float globalX = 0.f;
146-
float globalY = 0.f;
147-
float dcaXY = 0.f;
148-
float dcaZ = 0.f;
149-
for (auto& track : tracksBarrel) {
152+
trackBasic.reserve(barrelSelectedTracks.size());
153+
trackBarrel.reserve(barrelSelectedTracks.size());
154+
trackBarrelCov.reserve(barrelSelectedTracks.size());
155+
trackBarrelPID.reserve(barrelSelectedTracks.size());
150156

157+
for (auto& track : barrelSelectedTracks) {
151158
VarManager::FillTrack<gkTrackFillMap>(track, fValues);
152159
fHistMan->FillHistClass("TrackBarrel_BeforeCuts", fValues);
153160
if (!fTrackCut->IsSelected(fValues)) {
154161
continue;
155162
}
156163
fHistMan->FillHistClass("TrackBarrel_AfterCuts", fValues);
157164

158-
// TODO: update the DCA calculation (use the values computed in the trackSelection workflow or use the propagateToDCA function from there)
159-
// TODO: Move the DCA calculation in the VarManager, so the DCA is available for cuts and histograms
160-
sinAlpha = sin(track.alpha());
161-
cosAlpha = cos(track.alpha());
162-
globalX = track.x() * cosAlpha - track.y() * sinAlpha;
163-
globalY = track.x() * sinAlpha + track.y() * cosAlpha;
164-
165-
dcaXY = sqrt(pow((globalX - collision.posX()), 2) +
166-
pow((globalY - collision.posY()), 2));
167-
dcaZ = sqrt(pow(track.z() - collision.posZ(), 2));
168-
165+
if (track.isGlobalTrack()) {
166+
trackFilteringTag |= (uint64_t(1) << 0);
167+
}
168+
if (track.isGlobalTrackSDD()) {
169+
trackFilteringTag |= (uint64_t(1) << 1);
170+
}
169171
trackBasic(event.lastIndex(), track.globalIndex(), trackFilteringTag, track.pt(), track.eta(), track.phi(), track.charge());
170172
trackBarrel(track.tpcInnerParam(), track.flags(), track.itsClusterMap(), track.itsChi2NCl(),
171173
track.tpcNClsFindable(), track.tpcNClsFindableMinusFound(), track.tpcNClsFindableMinusCrossedRows(),
172174
track.tpcNClsShared(), track.tpcChi2NCl(),
173175
track.trdChi2(), track.tofChi2(),
174-
track.length(), dcaXY, dcaZ);
176+
track.length(), track.dcaXY(), track.dcaZ());
175177
trackBarrelCov(track.cYY(), track.cZZ(), track.cSnpSnp(), track.cTglTgl(), track.c1Pt21Pt2());
176178
trackBarrelPID(track.tpcSignal(),
177-
/*0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
178-
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);*/
179179
track.tpcNSigmaEl(), track.tpcNSigmaMu(),
180180
track.tpcNSigmaPi(), track.tpcNSigmaKa(), track.tpcNSigmaPr(),
181181
track.tpcNSigmaDe(), track.tpcNSigmaTr(), track.tpcNSigmaHe(), track.tpcNSigmaAl(),
@@ -186,12 +186,14 @@ struct TableMaker {
186186
track.trdSignal());
187187
}
188188

189-
for (auto& muon : tracksMuon) {
189+
muonBasic.reserve(muonSelectedTracks.size());
190+
muonExtended.reserve(muonSelectedTracks.size());
191+
for (auto& muon : muonSelectedTracks) {
190192
// TODO: add proper information for muon tracks
191-
if (muon.bc() != collision.bc()) {
193+
if (muon.bcId() != collision.bcId()) {
192194
continue;
193195
}
194-
// TODO: the trackFilteringFlag will not be needed to encode whether the track is a muon since there is a dedicated table for muons
196+
// TODO: the trackFilteringTag will not be needed to encode whether the track is a muon since there is a dedicated table for muons
195197
trackFilteringTag |= (uint64_t(1) << 0); // this is a MUON arm track
196198
muonBasic(event.lastIndex(), trackFilteringTag, muon.pt(), muon.eta(), muon.phi(), muon.charge());
197199
muonExtended(muon.inverseBendingMomentum(), muon.thetaX(), muon.thetaY(), muon.zMu(), muon.bendingCoor(), muon.nonBendingCoor(), muon.chi2(), muon.chi2MatchTrigger());
@@ -233,9 +235,10 @@ struct TableMaker {
233235
fHistMan->AddHistogram(classStr.Data(), "ITSncls", "Number of cluster in ITS", false, 8, -0.5, 7.5, VarManager::kITSncls); // TH1F histogram
234236
//for TPC PID
235237
fHistMan->AddHistogram(classStr.Data(), "TPCdedx_pIN", "TPC dE/dx vs pIN", false, 200, 0.0, 20.0, VarManager::kPin, 200, 0.0, 200., VarManager::kTPCsignal); // TH2F histogram
236-
237-
//fHistMan->AddHistogram(classStr.Data(), "DCAxy", "DCAxy", false, 100, -3.0, 3.0, VarManager::kTrackDCAxy); // TH1F histogram
238-
//fHistMan->AddHistogram(classStr.Data(), "DCAz", "DCAz", false, 100, -5.0, 5.0, VarManager::kTrackDCAz); // TH1F histogram
238+
fHistMan->AddHistogram(classStr.Data(), "DCAxy", "DCAxy", false, 100, -3.0, 3.0, VarManager::kTrackDCAxy); // TH1F histogram
239+
fHistMan->AddHistogram(classStr.Data(), "DCAz", "DCAz", false, 100, -5.0, 5.0, VarManager::kTrackDCAz); // TH1F histogram
240+
fHistMan->AddHistogram(classStr.Data(), "IsGlobalTrack", "IsGlobalTrack", false, 2, -0.5, 1.5, VarManager::kIsGlobalTrack); // TH1F histogram
241+
fHistMan->AddHistogram(classStr.Data(), "IsGlobalTrackSDD", "IsGlobalTrackSDD", false, 2, -0.5, 1.5, VarManager::kIsGlobalTrackSDD); // TH1F histogram
239242
}
240243
}
241244
} // end loop over histogram classes

Analysis/Tasks/PWGDQ/tableReader.cxx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,8 @@ struct BarrelTrackSelection {
228228

229229
uint8_t filterMap = uint8_t(0);
230230

231+
trackSel.reserve(tracks.size());
232+
231233
for (auto& track : tracks) {
232234
filterMap = uint8_t(0);
233235
VarManager::FillTrack<gkTrackFillMap>(track, fValues);
@@ -500,8 +502,9 @@ WorkflowSpec defineDataProcessing(ConfigContext const&)
500502
adaptAnalysisTask<EventSelection>("my-event-selection"),
501503
adaptAnalysisTask<BarrelTrackSelection>("barrel-track-selection"),
502504
adaptAnalysisTask<MuonTrackSelection>("muon-track-selection"),
503-
adaptAnalysisTask<TableReader>("table-reader")
504-
//adaptAnalysisTask<DileptonHadronAnalysis>("dilepton-hadron")
505+
adaptAnalysisTask<TableReader>("table-reader"),
506+
adaptAnalysisTask<DileptonHadronAnalysis>("dilepton-hadron")
507+
505508
};
506509
}
507510

@@ -556,9 +559,13 @@ void DefineHistograms(HistogramManager* histMan, TString histClasses)
556559
histMan->AddHistogram(classStr.Data(), "TPCncls_Run", "Number of cluster in TPC", true, kNRuns, 0.5, 0.5 + kNRuns, VarManager::kRunId,
557560
10, -0.5, 159.5, VarManager::kTPCncls, 10, 0., 1., VarManager::kNothing, runsStr.Data()); // TH1F histogram
558561
histMan->AddHistogram(classStr.Data(), "ITSncls", "Number of cluster in ITS", false, 8, -0.5, 7.5, VarManager::kITSncls); // TH1F histogram
562+
histMan->AddHistogram(classStr.Data(), "ITSchi2", "ITS chi2", false, 100, 0.0, 50.0, VarManager::kITSchi2); // TH1F histogram
563+
histMan->AddHistogram(classStr.Data(), "IsITSrefit", "", false, 2, -0.5, 1.5, VarManager::kIsITSrefit); // TH1F histogram
564+
histMan->AddHistogram(classStr.Data(), "IsTPCrefit", "", false, 2, -0.5, 1.5, VarManager::kIsTPCrefit); // TH1F histogram
565+
histMan->AddHistogram(classStr.Data(), "IsSPDany", "", false, 2, -0.5, 1.5, VarManager::kIsSPDany); // TH1F histogram
559566
//for TPC PID
560567
histMan->AddHistogram(classStr.Data(), "TPCdedx_pIN", "TPC dE/dx vs pIN", false, 200, 0.0, 20.0, VarManager::kPin, 200, 0.0, 200., VarManager::kTPCsignal); // TH2F histogram
561-
568+
histMan->AddHistogram(classStr.Data(), "TPCchi2", "TPC chi2", false, 100, 0.0, 10.0, VarManager::kTPCchi2); // TH1F histogram
562569
histMan->AddHistogram(classStr.Data(), "DCAxy", "DCAxy", false, 100, -3.0, 3.0, VarManager::kTrackDCAxy); // TH1F histogram
563570
histMan->AddHistogram(classStr.Data(), "DCAz", "DCAz", false, 100, -5.0, 5.0, VarManager::kTrackDCAz); // TH1F histogram
564571
}

0 commit comments

Comments
 (0)