Skip to content

Commit c37f7d3

Browse files
authored
Add phi histogram and change in track filter condition (#3623)
1 parent a3f2cc6 commit c37f7d3

1 file changed

Lines changed: 41 additions & 5 deletions

File tree

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

Lines changed: 41 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,46 @@ static constexpr TrackSelectionFlags::flagtype trackSelectionTPC =
6265
TrackSelectionFlags::kTPCChi2NDF;
6366
static constexpr TrackSelectionFlags::flagtype trackSelectionDCA =
6467
TrackSelectionFlags::kDCAz | TrackSelectionFlags::kDCAxy;
68+
static constexpr TrackSelectionFlags::flagtype trackSelectionDCAXYonly =
69+
TrackSelectionFlags::kDCAxy;
70+
6571
AxisSpec axisEvent{4, -0.5, 3.5, "#Event"};
6672
AxisSpec axisVtxZ{800, -20, 20, "Vertex Z"};
6773
AxisSpec axisDCA = {601, -3.01, 3.01};
6874
AxisSpec axisPT = {1000, -0.05, 49.95};
6975
AxisSpec axisEta{200, -5, 5, "#eta"};
76+
AxisSpec axisPhi{629, 0, 2 * M_PI, "#phi"};
7077
AxisSpec axisMCEvent_ambiguity{6, -0.5, 5.5, "reco collisions per true collision"};
78+
7179
struct HeavyIonMultiplicity {
80+
7281
HistogramRegistry histos{"histos", {}, OutputObjHandlingPolicy::AnalysisObject};
7382
Service<o2::framework::O2DatabasePDG> pdg;
7483
Preslice<TrackMCRecTable> perCollision = aod::track::collisionId;
84+
7585
Configurable<float> etaRange{"eta-range", 1.0f, "Eta range to consider"};
86+
Configurable<float> VtxRange{"vertex-range", 10.0f, "Vertex Z range to consider"};
87+
Configurable<float> dcaZ{"dcaZ", 0.2f, "Custom DCA Z cut (ignored if negative)"};
7688
ConfigurableAxis multHistBin{"MultDistBinning", {501, -0.5, 500.5}, ""};
89+
7790
void init(InitContext const&)
7891
{
7992
AxisSpec axisMult = {multHistBin};
8093
histos.add("EventHist", "EventHist", kTH1D, {axisEvent}, false);
8194
histos.add("VtxZHist", "VtxZHist", kTH1D, {axisVtxZ}, false);
95+
8296
if (doprocessData) {
8397
histos.add("MultHist", "MultHist", kTH1D, {axisMult}, true);
8498
histos.add("MultHist_Inelgt0", "MultHist_Inelgt0", kTH1D, {axisMult}, true);
8599
histos.add("EtaHist", "EtaHist", kTH1D, {axisEta}, true);
100+
histos.add("PhiHist", "PhiHist", kTH1D, {axisPhi}, true);
101+
histos.add("EtaVsVtxZHist", "EtaVsVtxZHist", kTH2D, {axisEta, axisVtxZ}, false);
102+
histos.add("PhiVsEtaHist", "PhiVsEtaHist", kTH2D, {axisPhi, axisEta}, false);
86103
histos.add("DCAXYHist", "DCAXYHist", kTH1D, {axisDCA}, false);
87104
histos.add("DCAZHist", "DCAZHist", kTH1D, {axisDCA}, false);
88105
histos.add("pTHist", "pTHist", kTH1D, {axisPT}, true);
89-
histos.add("EtaVsVtxZHist", "EtaVsVtxZHist", kTH2D, {axisEta, axisVtxZ}, true);
90106
}
107+
91108
if (doprocessMC) {
92109
histos.add("MCEventHist_ambiguity", "MCEventHist_ambiguity", kTH1D, {axisMCEvent_ambiguity}, false);
93110
histos.add("DCAXYMCRecHist", "DCAXYMCRecHist", kTH1D, {axisDCA}, false);
@@ -96,6 +113,10 @@ struct HeavyIonMultiplicity {
96113
histos.add("EtaVsVtxZMCRecHist", "EtaVsVtxZMCRecHist", kTH2D, {axisEta, axisVtxZ}, true);
97114
histos.add("MCRecEtaHist", "MCRecEtaHist", kTH1D, {axisEta}, true);
98115
histos.add("MCGenEtaHist", "MCGenEtaHist", kTH1D, {axisEta}, true);
116+
histos.add("MCRecPhiHist", "MCRecPhiHist", kTH1D, {axisPhi}, true);
117+
histos.add("MCGenPhiHist", "MCGenPhiHist", kTH1D, {axisPhi}, true);
118+
histos.add("MCRecPhiVsEtaHist", "MCRecPhiVsEtaHist", kTH2D, {axisPhi, axisEta}, false);
119+
histos.add("MCGenPhiVsEtaHist", "MCGenPhiVsEtaHist", kTH2D, {axisPhi, axisEta}, false);
99120
histos.add("MCRecMultHist", "MCRecMultHist", kTH1D, {axisMult}, true);
100121
histos.add("MCGenMultHist", "MCGenMultHist", kTH1D, {axisMult}, true);
101122
histos.add("MCGenVsRecMultHist", "MCGenVsRecMultHist", kTH2D, {axisMult, axisMult}, true);
@@ -104,21 +125,30 @@ struct HeavyIonMultiplicity {
104125
histos.add("MCGenVsRecMultHist_Inelgt0", "MCGenVsRecMultHist_Inelgt0", kTH2D, {axisMult, axisMult}, true);
105126
}
106127
}
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);
128+
129+
expressions::Filter trackSelectionProperMixed = ncheckbit(aod::track::detectorMap, (uint8_t)o2::aod::track::ITS) &&
130+
ncheckbit(aod::track::trackCutFlag, trackSelectionITS) &&
131+
ifnode(ncheckbit(aod::track::detectorMap, (uint8_t)o2::aod::track::TPC),
132+
ncheckbit(aod::track::trackCutFlag, trackSelectionTPC), true) &&
133+
ifnode(dcaZ.node() > 0.f, nabs(aod::track::dcaZ) <= dcaZ && ncheckbit(aod::track::trackCutFlag, trackSelectionDCAXYonly),
134+
ncheckbit(aod::track::trackCutFlag, trackSelectionDCA));
135+
108136
void processData(CollisionDataTable::iterator const& collision, FilTrackDataTable const& tracks)
109137
{
110138
auto NchTracks = 0;
111139
bool Inelgt0 = false;
112140
histos.fill(HIST("EventHist"), 0);
113141
if (collision.sel8()) {
114142
histos.fill(HIST("EventHist"), 1);
115-
if (std::abs(collision.posZ()) < 10) {
143+
if (std::abs(collision.posZ()) < VtxRange) {
116144
histos.fill(HIST("EventHist"), 2);
117145
histos.fill(HIST("VtxZHist"), collision.posZ());
118146
for (auto& track : tracks) {
119147
if (std::abs(track.eta()) < etaRange) {
120148
NchTracks++;
121149
histos.fill(HIST("EtaHist"), track.eta());
150+
histos.fill(HIST("PhiHist"), track.phi());
151+
histos.fill(HIST("PhiVsEtaHist"), track.phi(), track.eta());
122152
histos.fill(HIST("EtaVsVtxZHist"), track.eta(), collision.posZ());
123153
histos.fill(HIST("DCAXYHist"), track.dcaXY());
124154
histos.fill(HIST("DCAZHist"), track.dcaZ());
@@ -138,6 +168,7 @@ struct HeavyIonMultiplicity {
138168
}
139169

140170
PROCESS_SWITCH(HeavyIonMultiplicity, processData, "process data", false);
171+
141172
void processMC(CollisionMCTrueTable::iterator const& TrueCollision, CollisionMCRecTable const& RecCollisions, TrackMCTrueTable const& GenParticles, FilTrackMCRecTable const& RecTracks)
142173
{
143174
histos.fill(HIST("MCEventHist_ambiguity"), RecCollisions.size());
@@ -163,6 +194,8 @@ struct HeavyIonMultiplicity {
163194
if (std::abs(particle.eta()) < etaRange) {
164195
NchGenTracks++;
165196
histos.fill(HIST("MCGenEtaHist"), particle.eta());
197+
histos.fill(HIST("MCGenPhiHist"), particle.phi());
198+
histos.fill(HIST("MCGenPhiVsEtaHist"), particle.phi(), particle.eta());
166199
}
167200
}
168201
}
@@ -177,7 +210,7 @@ struct HeavyIonMultiplicity {
177210
histos.fill(HIST("EventHist"), 0);
178211
if (RecCollision.sel8()) {
179212
histos.fill(HIST("EventHist"), 1);
180-
if (std::abs(RecCollision.posZ()) < 10) {
213+
if (std::abs(RecCollision.posZ()) < VtxRange) {
181214
histos.fill(HIST("EventHist"), 2);
182215
histos.fill(HIST("VtxZHist"), RecCollision.posZ());
183216

@@ -186,6 +219,8 @@ struct HeavyIonMultiplicity {
186219
if (std::abs(Rectrack.eta()) < etaRange) {
187220
NchRecTracks++;
188221
histos.fill(HIST("MCRecEtaHist"), Rectrack.eta());
222+
histos.fill(HIST("MCRecPhiHist"), Rectrack.phi());
223+
histos.fill(HIST("MCRecPhiVsEtaHist"), Rectrack.phi(), Rectrack.eta());
189224
histos.fill(HIST("EtaVsVtxZMCRecHist"), Rectrack.eta(), RecCollision.posZ());
190225
histos.fill(HIST("DCAXYMCRecHist"), Rectrack.dcaXY());
191226
histos.fill(HIST("DCAZMCRecHist"), Rectrack.dcaZ());
@@ -210,6 +245,7 @@ struct HeavyIonMultiplicity {
210245
}
211246
PROCESS_SWITCH(HeavyIonMultiplicity, processMC, "process MC", false);
212247
};
248+
213249
WorkflowSpec defineDataProcessing(ConfigContext const& cfgc)
214250
{
215251
return WorkflowSpec{adaptAnalysisTask<HeavyIonMultiplicity>(cfgc)};

0 commit comments

Comments
 (0)