Skip to content

Commit 5b6b491

Browse files
authored
Update heavy-ion-mult.cxx
Add Phi histogram and change in track filter condition
1 parent a991c91 commit 5b6b491

1 file changed

Lines changed: 38 additions & 5 deletions

File tree

PWGMM/Mult/Tasks/heavy-ion-mult.cxx

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
/// \help: To develop this code, I took help from the following codes and O2 analysis tutorial
1616
// 1. https://github.com/AliceO2Group/O2Physics/blob/master/PWGMM/Mult/Tasks/dndeta.cxx
1717
// 2. https://github.com/AliceO2Group/O2Physics/blob/master/PWGMM/Mult/Tasks/dndeta-hi.cxx
18-
// 3. https://github.com/AliceO2Group/O2Physics/blob/master/PWGLF/Mult/Tasks/puremc-dndeta.cxx
18+
// 3. https://github.com/AliceO2Group/O2Physics/blob/master/PWGMM/Mult/Tasks/puremc-dndeta.cxx
1919
// 4. O2 analysis tutorial: https://indico.cern.ch/event/1267433/
2020

2121
#include <cmath>
@@ -41,10 +41,12 @@
4141
#include "Framework/runDataProcessing.h"
4242
#include "ReconstructionDataFormats/GlobalTrackID.h"
4343
#include "ReconstructionDataFormats/Track.h"
44+
4445
using namespace o2;
4546
using namespace o2::framework;
4647
using namespace o2::framework::expressions;
4748
using namespace o2::aod::track;
49+
4850
using CollisionDataTable = soa::Join<aod::Collisions, aod::EvSels>;
4951
using TrackDataTable = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::TrackSelection>;
5052
using FilTrackDataTable = soa::Filtered<TrackDataTable>;
@@ -53,6 +55,7 @@ using TrackMCTrueTable = aod::McParticles;
5355
using CollisionMCRecTable = soa::SmallGroups<soa::Join<aod::McCollisionLabels, aod::Collisions, aod::EvSels>>;
5456
using TrackMCRecTable = soa::Join<aod::Tracks, aod::TracksExtra, aod::TracksDCA, aod::McTrackLabels, aod::TrackSelection>;
5557
using FilTrackMCRecTable = soa::Filtered<TrackMCRecTable>;
58+
5659
static constexpr TrackSelectionFlags::flagtype trackSelectionITS =
5760
TrackSelectionFlags::kITSNCls | TrackSelectionFlags::kITSChi2NDF |
5861
TrackSelectionFlags::kITSHits;
@@ -62,32 +65,44 @@ static constexpr TrackSelectionFlags::flagtype trackSelectionTPC =
6265
TrackSelectionFlags::kTPCChi2NDF;
6366
static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
6467
TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy;
68+
6569
AxisSpec axisEvent{4, -0.5, 3.5, "#Event"};
6670
AxisSpec axisVtxZ{800, -20, 20, "Vertex Z"};
6771
AxisSpec axisDCA = {601, -3.01, 3.01};
6872
AxisSpec axisPT = {1000, -0.05, 49.95};
6973
AxisSpec axisEta{200, -5, 5, "#eta"};
74+
AxisSpec axisPhi{629, 0, 2 * M_PI, "#phi"};
7075
AxisSpec axisMCEvent_ambiguity{6, -0.5, 5.5, "reco collisions per true collision"};
76+
7177
struct HeavyIonMultiplicity {
78+
7279
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
7380
Service<o2::framework::O2DatabasePDG> pdg;
7481
Preslice<TrackMCRecTable> perCollision = aod::track::collisionId;
82+
7583
Configurable<float> etaRange{"eta-range", 1.0f, "Eta range to consider"};
84+
Configurable<float> VtxRange{"vertex-range", 10.0f, "Vertex Z range to consider"};
85+
Configurable<float> dcaZ{"dcaZ", 0.2f, "Custom DCA Z cut (ignored if negative)"};
7686
ConfigurableAxis multHistBin{"MultDistBinning", {501, -0.5, 500.5}, ""};
87+
7788
void init(InitContext const&)
7889
{
7990
AxisSpec axisMult = {multHistBin};
8091
histos.add("EventHist", "EventHist", kTH1D, {axisEvent}, false);
8192
histos.add("VtxZHist", "VtxZHist", kTH1D, {axisVtxZ}, false);
93+
8294
if (doprocessData) {
8395
histos.add("MultHist", "MultHist", kTH1D, {axisMult}, true);
8496
histos.add("MultHist_Inelgt0", "MultHist_Inelgt0", kTH1D, {axisMult}, true);
8597
histos.add("EtaHist", "EtaHist", kTH1D, {axisEta}, true);
98+
histos.add("PhiHist", "PhiHist", kTH1D, {axisPhi}, true);
99+
histos.add("EtaVsVtxZHist", "EtaVsVtxZHist", kTH2D, {axisEta, axisVtxZ}, false);
100+
histos.add("PhiVsEtaHist", "PhiVsEtaHist", kTH2D, {axisPhi, axisEta}, false);
86101
histos.add("DCAXYHist", "DCAXYHist", kTH1D, {axisDCA}, false);
87102
histos.add("DCAZHist", "DCAZHist", kTH1D, {axisDCA}, false);
88103
histos.add("pTHist", "pTHist", kTH1D, {axisPT}, true);
89-
histos.add("EtaVsVtxZHist", "EtaVsVtxZHist", kTH2D, {axisEta, axisVtxZ}, true);
90104
}
105+
91106
if (doprocessMC) {
92107
histos.add("MCEventHist_ambiguity", "MCEventHist_ambiguity", kTH1D, {axisMCEvent_ambiguity}, false);
93108
histos.add("DCAXYMCRecHist", "DCAXYMCRecHist", kTH1D, {axisDCA}, false);
@@ -96,6 +111,10 @@ struct HeavyIonMultiplicity {
96111
histos.add("EtaVsVtxZMCRecHist", "EtaVsVtxZMCRecHist", kTH2D, {axisEta, axisVtxZ}, true);
97112
histos.add("MCRecEtaHist", "MCRecEtaHist", kTH1D, {axisEta}, true);
98113
histos.add("MCGenEtaHist", "MCGenEtaHist", kTH1D, {axisEta}, true);
114+
histos.add("MCRecPhiHist", "MCRecPhiHist", kTH1D, {axisPhi}, true);
115+
histos.add("MCGenPhiHist", "MCGenPhiHist", kTH1D, {axisPhi}, true);
116+
histos.add("MCRecPhiVsEtaHist", "MCRecPhiVsEtaHist", kTH2D, {axisPhi, axisEta}, false);
117+
histos.add("MCGenPhiVsEtaHist", "MCGenPhiVsEtaHist", kTH2D, {axisPhi, axisEta}, false);
99118
histos.add("MCRecMultHist", "MCRecMultHist", kTH1D, {axisMult}, true);
100119
histos.add("MCGenMultHist", "MCGenMultHist", kTH1D, {axisMult}, true);
101120
histos.add("MCGenVsRecMultHist", "MCGenVsRecMultHist", kTH2D, {axisMult, axisMult}, true);
@@ -104,21 +123,29 @@ struct HeavyIonMultiplicity {
104123
histos.add("MCGenVsRecMultHist_Inelgt0", "MCGenVsRecMultHist_Inelgt0", kTH2D, {axisMult, axisMult}, true);
105124
}
106125
}
107-
expressions::Filter trackSelectionProper = ((aod::track::trackCutFlag & trackSelectionITS) == trackSelectionITS) && ifnode((aod::track::detectorMap & (uint8_t)o2::aod::track::TPC) == (uint8_t)o2::aod::track::TPC, (aod::track::trackCutFlag & trackSelectionTPC) == trackSelectionTPC, true) && ((aod::track::trackCutFlag & trackSelectionDCA) == trackSelectionDCA);
126+
127+
expressions::Filter trackSelectionProperMixed = ncheckbit(aod::track::detectorMap, (uint8_t)o2::aod::track::ITS) &&
128+
ncheckbit(aod::track::trackCutFlag, trackSelectionITS) &&
129+
ifnode(ncheckbit(aod::track::detectorMap, (uint8_t)o2::aod::track::TPC),
130+
ncheckbit(aod::track::trackCutFlag, trackSelectionTPC), true) &&
131+
ifnode(dcaZ.node() > 0.f, nabs(aod::track::dcaZ) <= dcaZ, ncheckbit(aod::track::trackCutFlag, trackSelectionDCA));
132+
108133
void processData(CollisionDataTable::iterator const& collision, FilTrackDataTable const& tracks)
109134
{
110135
auto NchTracks = 0;
111136
bool Inelgt0 = false;
112137
histos.fill(HIST("EventHist"), 0);
113138
if (collision.sel8()) {
114139
histos.fill(HIST("EventHist"), 1);
115-
if (std::abs(collision.posZ()) < 10) {
140+
if (std::abs(collision.posZ()) < VtxRange) {
116141
histos.fill(HIST("EventHist"), 2);
117142
histos.fill(HIST("VtxZHist"), collision.posZ());
118143
for (auto& track : tracks) {
119144
if (std::abs(track.eta()) < etaRange) {
120145
NchTracks++;
121146
histos.fill(HIST("EtaHist"), track.eta());
147+
histos.fill(HIST("PhiHist"), track.phi());
148+
histos.fill(HIST("PhiVsEtaHist"), track.phi(), track.eta());
122149
histos.fill(HIST("EtaVsVtxZHist"), track.eta(), collision.posZ());
123150
histos.fill(HIST("DCAXYHist"), track.dcaXY());
124151
histos.fill(HIST("DCAZHist"), track.dcaZ());
@@ -138,6 +165,7 @@ struct HeavyIonMultiplicity {
138165
}
139166

140167
PROCESS_SWITCH(HeavyIonMultiplicity, processData, "process data", false);
168+
141169
void processMC(CollisionMCTrueTable::iterator const& TrueCollision, CollisionMCRecTable const& RecCollisions, TrackMCTrueTable const& GenParticles, FilTrackMCRecTable const& RecTracks)
142170
{
143171
histos.fill(HIST("MCEventHist_ambiguity"), RecCollisions.size());
@@ -163,6 +191,8 @@ struct HeavyIonMultiplicity {
163191
if (std::abs(particle.eta()) < etaRange) {
164192
NchGenTracks++;
165193
histos.fill(HIST("MCGenEtaHist"), particle.eta());
194+
histos.fill(HIST("MCGenPhiHist"), particle.phi());
195+
histos.fill(HIST("MCGenPhiVsEtaHist"), particle.phi(), particle.eta());
166196
}
167197
}
168198
}
@@ -177,7 +207,7 @@ struct HeavyIonMultiplicity {
177207
histos.fill(HIST("EventHist"), 0);
178208
if (RecCollision.sel8()) {
179209
histos.fill(HIST("EventHist"), 1);
180-
if (std::abs(RecCollision.posZ()) < 10) {
210+
if (std::abs(RecCollision.posZ()) < VtxRange) {
181211
histos.fill(HIST("EventHist"), 2);
182212
histos.fill(HIST("VtxZHist"), RecCollision.posZ());
183213

@@ -186,6 +216,8 @@ struct HeavyIonMultiplicity {
186216
if (std::abs(Rectrack.eta()) < etaRange) {
187217
NchRecTracks++;
188218
histos.fill(HIST("MCRecEtaHist"), Rectrack.eta());
219+
histos.fill(HIST("MCRecPhiHist"), Rectrack.phi());
220+
histos.fill(HIST("MCRecPhiVsEtaHist"), Rectrack.phi(), Rectrack.eta());
189221
histos.fill(HIST("EtaVsVtxZMCRecHist"), Rectrack.eta(), RecCollision.posZ());
190222
histos.fill(HIST("DCAXYMCRecHist"), Rectrack.dcaXY());
191223
histos.fill(HIST("DCAZMCRecHist"), Rectrack.dcaZ());
@@ -210,6 +242,7 @@ struct HeavyIonMultiplicity {
210242
}
211243
PROCESS_SWITCH(HeavyIonMultiplicity, processMC, "process MC", false);
212244
};
245+
213246
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
214247
{
215248
return WorkflowSpec{adaptAnalysisTask<HeavyIonMultiplicity>(cfgc)};

0 commit comments

Comments
 (0)