Skip to content

Commit dbc8267

Browse files
committed
Updated Global Trk estimation
1 parent 302a5d2 commit dbc8267

7 files changed

Lines changed: 218 additions & 2 deletions

File tree

‎PWGDQ/Core/HistogramsLibrary.cxx‎

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
131131
hm->AddHistogram(histClass, "MultFDDC", "MultFDDC", false, 1000, 0.0, 25000.0, VarManager::kMultFDDC);
132132
hm->AddHistogram(histClass, "MultTracklets", "MultTracklets", false, 250, 0.0, 250.0, VarManager::kMultTracklets);
133133
hm->AddHistogram(histClass, "VtxNContribReal", "Vtx n contributors", false, 150, 0.0, 150.0, VarManager::kVtxNcontribReal);
134+
hm->AddHistogram(histClass, "kMultNtrkGlobal", "kMultNtrkGlobal", false, 150, 0.0, 150.0, VarManager::kMultNtrkGlobal);
134135
hm->AddHistogram(histClass, "VtxNContrib", "Vtx n contributors", false, 100, 0.0, 100.0, VarManager::kVtxNcontrib);
135136
hm->AddHistogram(histClass, "MultNTracksPVeta1", "MultNTracksPVeta1", false, 150, 0, 150.0, VarManager::kMultNTracksPVeta1);
136137
hm->AddHistogram(histClass, "MultNTracksPVetaHalf", "MultNTracksPVetaHalf", false, 150, 0, 150.0, VarManager::kMultNTracksPVetaHalf);
@@ -163,7 +164,9 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
163164
hm->AddHistogram(histClass, "MultNTracksPVetaHalf_MultMCNParticlesEta05", "MultNTracksPVetaHalf vs MultMCNParticlesEta05", false, 150, 0, 150.0, VarManager::kMultNTracksPVetaHalf, 150, 0, 150.0, VarManager::kMultMCNParticlesEta05);
164165
hm->AddHistogram(histClass, "VtxNcontribReal_MultMCNParticlesEta08", "VtxNcontribReal vs MultMCNParticlesEta08", false, 150, 0, 150.0, VarManager::kVtxNcontribReal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta08);
165166
hm->AddHistogram(histClass, "MultNTracksPVeta1_MultMCNParticlesEta10", "MultNTracksPVeta1 vs MultMCNParticlesEta10", false, 150, 0, 150.0, VarManager::kMultNTracksPVeta1, 150, 0, 150.0, VarManager::kMultMCNParticlesEta10);
166-
167+
hm->AddHistogram(histClass, "MultNtrkGlobal_MultMCNParticlesEta05", "MultNtrkGlobal vs MultMCNParticlesEta05", false, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta05);
168+
hm->AddHistogram(histClass, "MultNtrkGlobal_MultMCNParticlesEta08", "MultNtrkGlobal vs MultMCNParticlesEta08", false, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta08);
169+
hm->AddHistogram(histClass, "MultNtrkGlobal_MultMCNParticlesEta10", "MultNtrkGlobal vs MultMCNParticlesEta10", false, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 150, 0, 150.0, VarManager::kMultMCNParticlesEta10);
167170
} else {
168171
hm->AddHistogram(histClass, "MultTPC", "MultTPC", false, 200, 0.0, 50000.0, VarManager::kMultTPC);
169172
hm->AddHistogram(histClass, "MultTPC_vsTimeSOR", "MultTPC vs time from SOR", true, 10000, 0.0, 1000.0, VarManager::kTimeFromSOR, 10, 0.0, 50000.0, VarManager::kMultTPC);
@@ -177,6 +180,7 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
177180
hm->AddHistogram(histClass, "MultZNA_ZNC", "MultZNA vs ZNC", false, 400, 0.0, 400.0, VarManager::kMultZNA, 400, 0.0, 400.0, VarManager::kMultZNC);
178181
hm->AddHistogram(histClass, "MultTracklets", "MultTracklets", false, 100, 0.0, 25000.0, VarManager::kMultTracklets);
179182
hm->AddHistogram(histClass, "VtxNContribReal", "Vtx n contributors (real)", false, 100, 0.0, 5000.0, VarManager::kVtxNcontribReal);
183+
hm->AddHistogram(histClass, "kMultNtrkGlobal", "kMultNtrkGlobal", false, 150, 0.0, 150.0, VarManager::kMultNtrkGlobal);
180184
hm->AddHistogram(histClass, "VtxNContribReal_vsTimeSOR", "VtxNContribReal vs time from SOR", true, 10000, 0.0, 1000.0, VarManager::kTimeFromSOR, 10, 0.0, 5000.0, VarManager::kVtxNcontribReal);
181185
hm->AddHistogram(histClass, "VtxNContrib", "Vtx n contributors", false, 100, 0.0, 20000.0, VarManager::kVtxNcontrib);
182186
hm->AddHistogram(histClass, "MultTPC_MultFV0A", "MultTPC vs MultFV0A", false, 100, 0, 50000.0, VarManager::kMultTPC, 100, 0, 300000.0, VarManager::kMultFV0A);
@@ -1405,6 +1409,11 @@ void o2::aod::dqhistograms::DefineHistograms(HistogramManager* hm, const char* h
14051409
hm->AddHistogram(histClass, "Mass_VtxNcontribReal_VtxZ", "Mass vs VtxNcontribReal vs VtxZ", false, 200, 2.0, 5.0, VarManager::kMass, 150, 0, 150.0, VarManager::kVtxNcontribReal, 20, -10.0, 10.0, VarManager::kVtxZ);
14061410
hm->AddHistogram(histClass, "VtxZ_VtxNcontribReal", "VtxZ vs VtxNcontribReal", false, 240, -12.0, 12.0, VarManager::kVtxZ, 200, 0, 200.0, VarManager::kVtxNcontribReal);
14071411
}
1412+
if (subGroupStr.Contains("multGlobal")) {
1413+
hm->AddHistogram(histClass, "Mass_MultGlobal", "Mass vs VtxNcontribReal", false, 200, 0.0, 5.0, VarManager::kMass, 200, 0, 200.0, VarManager::kMultNtrkGlobal);
1414+
hm->AddHistogram(histClass, "Mass_MultGlobal_VtxZ", "Mass vs VtxNcontribReal vs VtxZ", false, 200, 2.0, 5.0, VarManager::kMass, 150, 0, 150.0, VarManager::kMultNtrkGlobal, 20, -10.0, 10.0, VarManager::kVtxZ);
1415+
hm->AddHistogram(histClass, "VtxZ_MultGlobal", "VtxZ vs VtxNcontribReal", false, 240, -12.0, 12.0, VarManager::kVtxZ, 200, 0, 200.0, VarManager::kMultNtrkGlobal);
1416+
}
14081417
if (subGroupStr.Contains("alice3barrel")) {
14091418
std::array<double, 21> pTBins = {
14101419
0.1, 0.5, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0,

‎PWGDQ/Core/VarManager.cxx‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,8 @@ void VarManager::SetDefaultVarNames()
768768
fgVariableUnits[kVtxNcontrib] = "";
769769
fgVariableNames[kVtxNcontribReal] = "Real Vtx contrib.";
770770
fgVariableUnits[kVtxNcontribReal] = "";
771+
fgVariableNames[kMultNtrkGlobal] = "Global tracks";
772+
fgVariableUnits[kMultNtrkGlobal] = "";
771773
fgVariableNames[kVtxCovXX] = "Vtx covXX";
772774
fgVariableUnits[kVtxCovXX] = "cm";
773775
fgVariableNames[kVtxCovXY] = "Vtx covXY";
@@ -2123,6 +2125,7 @@ void VarManager::SetDefaultVarNames()
21232125
fgVarNamesMap["kVtxZ"] = kVtxZ;
21242126
fgVarNamesMap["kVtxNcontrib"] = kVtxNcontrib;
21252127
fgVarNamesMap["kVtxNcontribReal"] = kVtxNcontribReal;
2128+
fgVarNamesMap["kMultNtrkGlobal"] = kMultNtrkGlobal;
21262129
fgVarNamesMap["kVtxCovXX"] = kVtxCovXX;
21272130
fgVarNamesMap["kVtxCovXY"] = kVtxCovXY;
21282131
fgVarNamesMap["kVtxCovXZ"] = kVtxCovXZ;

‎PWGDQ/Core/VarManager.h‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ class VarManager : public TObject
120120
RapidityGapFilter = BIT(21),
121121
Fit = BIT(22),
122122
ReducedFit = BIT(23),
123+
ReducedEventGlobalMult = BIT(24),
123124
Track = BIT(0),
124125
TrackCov = BIT(1),
125126
TrackExtra = BIT(2),
@@ -251,6 +252,7 @@ class VarManager : public TObject
251252
kVtxZ,
252253
kVtxNcontrib,
253254
kVtxNcontribReal,
255+
kMultNtrkGlobal,
254256
kVtxCovXX,
255257
kVtxCovXY,
256258
kVtxCovXZ,
@@ -2660,6 +2662,10 @@ void VarManager::FillEvent(T const& event, float* values)
26602662
FillZDC(event, values);
26612663
}
26622664

2665+
if constexpr ((fillMap & ReducedEventGlobalMult) > 0) {
2666+
values[kMultNtrkGlobal] = event.multNtrkGlobal();
2667+
}
2668+
26632669
if constexpr ((fillMap & ReducedFit) > 0) {
26642670
values[kAmplitudeFT0A] = event.amplitudeFT0A();
26652671
values[kAmplitudeFT0C] = event.amplitudeFT0C();

‎PWGDQ/DataModel/ReducedInfoTables.h‎

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,14 @@ DECLARE_SOA_COLUMN(Psi2Random, psi2random, float); //! Event plane angle from r
157157
DECLARE_SOA_COLUMN(Psi2A, psi2a, float); //! Event plane angle from Q-vector A
158158
DECLARE_SOA_COLUMN(Psi2B, psi2b, float); //! Event plane angle from Q-vector B
159159
DECLARE_SOA_COLUMN(Psi2C, psi2c, float); //! Event plane angle from Q-vector C
160+
161+
DECLARE_SOA_COLUMN(MultNtrkGlobal, multNtrkGlobal, int);
162+
163+
DECLARE_SOA_COLUMN(MultNtrkGlobalToward, multNtrkGlobalToward, int);
164+
DECLARE_SOA_COLUMN(MultNtrkGlobalTransverseRight, multNtrkGlobalTransverseRight, int);
165+
DECLARE_SOA_COLUMN(MultNtrkGlobalTransverseLeft, multNtrkGlobalTransverseLeft, int);
166+
DECLARE_SOA_COLUMN(MultNtrkGlobalBackward, multNtrkGlobalBackward, int);
167+
160168
} // namespace reducedevent
161169

162170
DECLARE_SOA_TABLE_STAGED(ReducedEvents, "REDUCEDEVENT", //! Main event information table
@@ -184,7 +192,14 @@ DECLARE_SOA_TABLE(ReducedEventsMultPV_000, "AOD", "REMULTPV", //! Multiplicity
184192
mult::MultNTracksITSOnly, mult::MultNTracksTPCOnly, mult::MultNTracksITSTPC,
185193
evsel::NumTracksInTimeRange);
186194

187-
DECLARE_SOA_TABLE_VERSIONED(ReducedEventsMultPV_001, "AOD", "REMULTPV", 1, //! Multiplicity information for primary vertex
195+
DECLARE_SOA_TABLE(ReducedEventsGlobalTrk, "AOD", "REGLOBALTRK",
196+
reducedevent::MultNtrkGlobal);
197+
198+
DECLARE_SOA_TABLE(ReducedEventsMultAzimuth, "AOD", "REMULTAZIMUTH",
199+
reducedevent::MultNtrkGlobalToward, reducedevent::MultNtrkGlobalTransverseRight,
200+
reducedevent::MultNtrkGlobalTransverseLeft, reducedevent::MultNtrkGlobalBackward);
201+
202+
DECLARE_SOA_TABLE_VERSIONED(ReducedEventsMultPV_001, "AOD", "REMULTPV", 1, //! Multiplicity information for primary vertex
188203
mult::MultNTracksHasITS, mult::MultNTracksHasTPC, mult::MultNTracksHasTOF, mult::MultNTracksHasTRD,
189204
mult::MultNTracksITSOnly, mult::MultNTracksTPCOnly, mult::MultNTracksITSTPC,
190205
mult::MultNTracksPVeta1, mult::MultNTracksPVetaHalf, evsel::NumTracksInTimeRange, evsel::SumAmpFT0CInTimeRange);

‎PWGDQ/TableProducer/CMakeLists.txt‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,9 @@ o2physics_add_dpl_workflow(generated-quarkonia-mc
5050
REUSE_FROM DQAnalysisPCH
5151
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DetectorsBase O2Physics::PWGDQCore
5252
COMPONENT_NAME Analysis)
53+
54+
o2physics_add_dpl_workflow(global-track-estimator
55+
SOURCES globalTrackEstimator.cxx
56+
REUSE_FROM DQAnalysisPCH
57+
PUBLIC_LINK_LIBRARIES O2Physics::AnalysisCore O2::DetectorsBase O2Physics::PWGDQCore
58+
COMPONENT_NAME Analysis)
Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
// Copyright 2019-2020 CERN and copyright holders of ALICE O2.
2+
// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3+
// All rights not expressly granted are reserved.
4+
//
5+
// This software is distributed under the terms of the GNU General Public
6+
// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7+
//
8+
// In applying this license CERN does not waive the privileges and immunities
9+
// granted to it by virtue of its status as an Intergovernmental Organization
10+
// or submit itself to any jurisdiction.
11+
/// \author Alexander Tiekoetter <alexander.tiekoetter@cern.ch>, Muenster
12+
/// \brief Global Track estimator with track-to-collision association, supposed
13+
/// to run on the DQ datamodel
14+
/// \file globalTrackEstimator.cxx
15+
16+
#include "PWGDQ/Core/AnalysisCompositeCut.h"
17+
#include "PWGDQ/Core/AnalysisCut.h"
18+
#include "PWGDQ/Core/CutsLibrary.h"
19+
#include "PWGDQ/Core/HistogramManager.h"
20+
#include "PWGDQ/Core/HistogramsLibrary.h"
21+
#include "PWGDQ/Core/MCSignal.h"
22+
#include "PWGDQ/Core/MCSignalLibrary.h"
23+
#include "PWGDQ/Core/VarManager.h"
24+
25+
#include <Framework/ASoA.h>
26+
#include <Framework/AnalysisDataModel.h>
27+
#include <Framework/AnalysisHelpers.h>
28+
#include <Framework/AnalysisTask.h>
29+
#include <Framework/Configurable.h>
30+
#include <Framework/InitContext.h>
31+
#include <Framework/runDataProcessing.h>
32+
33+
#include <string>
34+
35+
using namespace o2;
36+
using namespace o2::framework;
37+
using namespace o2::framework::expressions;
38+
using namespace o2::aod;
39+
40+
using MyEventsBasic = o2::soa::Join<o2::aod::ReducedEvents, o2::aod::ReducedEventsExtended>;
41+
using MyBarrelTracks = o2::soa::Join<o2::aod::ReducedTracks, o2::aod::ReducedTracksBarrel, o2::aod::ReducedTracksBarrelCov, o2::aod::ReducedTracksBarrelPID>;
42+
43+
//using MyDielectronCandidates = o2::soa::Join<o2::aod::Dielectrons, o2::aod::DielectronsExtra, o2::aod::DielectronsAll>;
44+
45+
constexpr static uint32_t gkEventFillMap = VarManager::ObjTypes::ReducedEvent | VarManager::ObjTypes::ReducedEventExtended;
46+
constexpr static uint32_t gkTrackFillMap = VarManager::ObjTypes::ReducedTrackBarrel | VarManager::ObjTypes::ReducedTrackBarrelCov;
47+
48+
struct GlobalTrackEstimator {
49+
Produces<o2::aod::ReducedEventsGlobalTrk> reducedEventsGlobalTrk;
50+
Produces<o2::aod::ReducedEventsMultAzimuth> reducedEventsMultAzimuth;
51+
52+
Configurable<float> cfgMaxDCAxy{"cfgMaxDCAxy", 2.0, "Maximum DCAxy"};
53+
Configurable<float> cfgMaxDCAz{"cfgMaxDCAz", 2.0, "Maximum DCAz"};
54+
Configurable<float> cfgMinPt{"cfgMinPt", 0.1, "Minimum required pT"};
55+
Configurable<float> cfgEtaRange{"cfgEtaRange", 0.8, "Pseudorapidity range"};
56+
Configurable<float> cfgMinTPCCluster{"cfgMinTPCCluster", 70, "Minimum number of crossed TPC rows"};
57+
Configurable<float> cfgRatioTPCClusterOverFindableCluster{"cfgRatioTPCClusterOverFindableCluster", 0.8, "Minimum ratio of crossed TPC rows over findable clusters"};
58+
Configurable<float> cfgMaxChi2TPC{"cfgMaxChi2TPC", 4.0, "Maximum chi2 per cluster in TPC"};
59+
Configurable<float> cfgMaxChi2ITS{"cfgMaxChi2ITS", 36.0, "Maximum chi2 per cluster in ITS"};
60+
Configurable<bool> cfgRequireITSibAny{"cfgRequireITSibAny", true, "Pseudorapidity range"};
61+
62+
o2::framework::Preslice<o2::aod::ReducedTracksAssoc> preslice = o2::aod::reducedtrack_association::reducedeventId;
63+
64+
o2::framework::expressions::Filter trackFilter = (o2::aod::reducedtrack::pt >= cfgMinPt)
65+
&& (nabs(o2::aod::reducedtrack::eta) <= cfgEtaRange)
66+
&& (o2::aod::track::tpcChi2NCl <= cfgMaxChi2TPC)
67+
&& (o2::aod::track::itsChi2NCl <= cfgMaxChi2ITS);
68+
69+
void init(InitContext& context)
70+
{
71+
LOGF(info, "Started global track counting");
72+
73+
bool isAnyProcessEnabled = context.mOptions.get<bool>("processGlobalTracksSkimmed");
74+
bool isDummyEnabled = context.mOptions.get<bool>("processDummy");
75+
76+
if (isDummyEnabled) {
77+
if (isAnyProcessEnabled) {
78+
LOG(fatal) << "You have enabled both the dummy process and at least one normal process function! Check your config!";
79+
}
80+
return;
81+
}
82+
83+
if (!isAnyProcessEnabled) {
84+
return;
85+
}
86+
}
87+
88+
void processGlobalTracksSkimmed(MyEventsBasic const& events, o2::aod::ReducedTracksAssoc const& assocs, o2::soa::Filtered<MyBarrelTracks> const& tracks)
89+
{
90+
std::unordered_set<int64_t> selectedTrackIds;
91+
selectedTrackIds.reserve(tracks.size());
92+
93+
for (auto const& track : tracks) {
94+
selectedTrackIds.insert(track.globalIndex());
95+
}
96+
97+
for(const auto& event : events) {
98+
VarManager::ResetValues(0, VarManager::kNBarrelTrackVariables);
99+
VarManager::FillEvent<gkEventFillMap>(event);
100+
101+
auto groupedAssocs = assocs.sliceBy(preslice, event.globalIndex());
102+
103+
int nTrkGlobal = 0;
104+
105+
for (auto const& assoc : groupedAssocs) {
106+
if (selectedTrackIds.find(assoc.reducedtrackId()) == selectedTrackIds.end()) {
107+
continue;
108+
}
109+
110+
auto track = assoc.template reducedtrack_as<o2::soa::Filtered<MyBarrelTracks>>();
111+
112+
VarManager::FillTrack<gkTrackFillMap>(track);
113+
VarManager::FillTrackCollision<gkTrackFillMap>(track, event);
114+
115+
const int nFindable = track.tpcNClsFindable();
116+
const int nCrossedRows = track.tpcNClsCrossedRows();
117+
118+
if (nCrossedRows < static_cast<int>(cfgMinTPCCluster.value)) {
119+
continue;
120+
}
121+
122+
if (nFindable <= 0) {
123+
continue;
124+
}
125+
126+
const float crossedOverFindable = static_cast<float>(nCrossedRows) / static_cast<float>(nFindable);
127+
128+
if (crossedOverFindable < cfgRatioTPCClusterOverFindableCluster.value) {
129+
continue;
130+
}
131+
132+
if (cfgRequireITSibAny.value && ((track.itsClusterMap() & 0x7) == 0)) {
133+
continue;
134+
}
135+
136+
if(std::abs(VarManager::fgValues[VarManager::kTrackDCAxy]) > cfgMaxDCAxy.value || std::abs(VarManager::fgValues[VarManager::kTrackDCAz]) > cfgMaxDCAz.value) {
137+
continue;
138+
}
139+
140+
++nTrkGlobal;
141+
}
142+
143+
reducedEventsGlobalTrk(nTrkGlobal);
144+
}
145+
}
146+
147+
PROCESS_SWITCH(GlobalTrackEstimator, processGlobalTracksSkimmed, "Count global tracks from skimmed data model", false);
148+
149+
150+
/*void processAzimuthalRegions(MyDielectronCandidates const& dielectronCandidates)
151+
{
152+
153+
}
154+
155+
PROCESS_SWITCH(GlobalTrackEstimator, processAzimuthalRegions, "Count global tracks in azimuthal regions with respect to a dielectron candidate", false);*/
156+
157+
void processDummy(MyEventsBasic const&)
158+
{
159+
160+
}
161+
162+
PROCESS_SWITCH(GlobalTrackEstimator, processDummy, "Dummy process function", true);
163+
};
164+
165+
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
166+
{
167+
return WorkflowSpec{adaptAnalysisTask<GlobalTrackEstimator>(cfgc)};
168+
}

0 commit comments

Comments
 (0)