Skip to content

Commit 46f0ac9

Browse files
committed
Implemented MC estimator
1 parent f506482 commit 46f0ac9

2 files changed

Lines changed: 68 additions & 5 deletions

File tree

‎ALICE3/DataModel/collisionAlice3.h‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,20 @@ DECLARE_SOA_TABLE(CollisionsAlice3, "AOD", "COLLALICE3",
3232

3333
using CollisionAlice3 = CollisionsAlice3::iterator;
3434

35+
namespace mcmult_alice3
36+
{
37+
DECLARE_SOA_COLUMN(MultMC, multMC, int); //! Total MCTruth multiplicity
38+
DECLARE_SOA_COLUMN(MultMC25, multMC25, int); //! MCTruth multiplicity in |eta| < 2.5
39+
DECLARE_SOA_COLUMN(MultMC125, multMC125, int); //! MCTruth multiplicity in |eta| < 1.25
40+
DECLARE_SOA_COLUMN(MultMC09, multMC09, int); //! MCTruth multiplicity in |eta| < 0.9
41+
} // namespace mcmult_alice3
42+
DECLARE_SOA_TABLE(MultsMCAlice3, "AOD", "MULTMCALICE3",
43+
mcmult_alice3::MultMC,
44+
mcmult_alice3::MultMC25,
45+
mcmult_alice3::MultMC125,
46+
mcmult_alice3::MultMC09);
47+
48+
using MultMCAlice3 = MultsMCAlice3::iterator;
3549
} // namespace o2::aod
3650

3751
#endif // ALICE3_DATAMODEL_COLLISIONALICE3_H_

‎ALICE3/TableProducer/alice3Multiplicity.cxx‎

Lines changed: 54 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
/// \brief Multiplicity task for ALICE3
1414
/// \file alice3Multiplicity.cxx
1515

16+
#include "ALICE3/DataModel/collisionAlice3.h"
1617
#include "ALICE3/DataModel/tracksAlice3.h"
1718
#include "Common/DataModel/Multiplicity.h"
1819
#include "Common/DataModel/TrackSelectionTables.h"
@@ -26,6 +27,7 @@
2627
#include <Framework/HistogramRegistry.h>
2728
#include <Framework/HistogramSpec.h>
2829
#include <Framework/InitContext.h>
30+
#include <Framework/O2DatabasePDGPlugin.h>
2931
#include <Framework/OutputObjHeader.h>
3032
#include <Framework/runDataProcessing.h>
3133

@@ -40,12 +42,10 @@ using namespace o2::framework::expressions;
4042

4143
using TracksAlice3 = soa::Join<aod::Tracks, aod::TracksDCA, o2::aod::TracksAlice3, aod::TracksExtraA3>;
4244

43-
constexpr float EtaHalf = 0.5;
44-
constexpr float Eta1 = 1.0;
45-
4645
struct Alice3Multiplicity {
4746
Produces<aod::PVMults> multPV;
4847
Produces<aod::MultsGlobal> multGlobal;
48+
Produces<aod::MultsMCAlice3> multMC;
4949

5050
HistogramRegistry histos{"Histos", {}, OutputObjHandlingPolicy::AnalysisObject};
5151
Configurable<float> minEta{"minEta", -2.5f, "Minimum eta in range for global track counting"};
@@ -58,6 +58,8 @@ struct Alice3Multiplicity {
5858

5959
ConfigurableAxis axisMult{"axisMult", {10000, 0, 10000}, "Reconstructed tracks"};
6060

61+
Service<o2::framework::O2DatabasePDG> pdg;
62+
6163
Filter trackFilter = (aod::track::eta >= minEta) && (aod::track::eta <= maxEta) && (nabs(aod::track::dcaXY) <= maxDCAxy) && (nabs(aod::track::dcaZ) <= maxDCAz) && (aod::track_alice3::nSiliconHits >= minSiliconHits) && (!requireReconstructed || aod::track_alice3::isReconstructed);
6264

6365
void init(InitContext&)
@@ -66,8 +68,14 @@ struct Alice3Multiplicity {
6668
histos.add("multiplicity/nTracksPV", "nTracksPV", kTH1D, {axisMult});
6769
histos.add("multiplicity/nTracksPVeta1", "nTracksPVeta1", kTH1D, {axisMult});
6870
histos.add("multiplicity/nTracksPVetaHalf", "nTracksPVetaHalf", kTH1D, {axisMult});
71+
6972
histos.add("multiplicity/nTracksGlobal", "nTracksGlobal", kTH1D, {axisMult});
7073
histos.add("multiplicity/nTracksGlobalPV", "nTracksGlobalPV", kTH1D, {axisMult});
74+
75+
histos.add("multiplicity/nTracksMC", "nTracksMC", kTH1D, {axisMult});
76+
histos.add("multiplicity/nTracksMCEta25", "nTracksMCEta25", kTH1D, {axisMult});
77+
histos.add("multiplicity/nTracksMCEta125", "nTracksMCEta125", kTH1D, {axisMult});
78+
histos.add("multiplicity/nTracksMCEta09", "nTracksMCEta09", kTH1D, {axisMult});
7179
}
7280
}
7381

@@ -99,9 +107,9 @@ struct Alice3Multiplicity {
99107
for (const auto& track : tracks) {
100108
if (track.isPVContributor()) {
101109
++numTracksPV;
102-
if (std::abs(track.eta()) < Eta1)
110+
if (std::abs(track.eta()) < 1.0)
103111
++numTracksPVeta1;
104-
if (std::abs(track.eta()) < EtaHalf)
112+
if (std::abs(track.eta()) < 0.5)
105113
++numTracksPVetaHalf;
106114
}
107115
}
@@ -115,13 +123,54 @@ struct Alice3Multiplicity {
115123
multPV(numTracksPV, numTracksPVeta1, numTracksPVetaHalf);
116124
}
117125

126+
void processMC(aod::McCollision const& /*mcCollision*/, aod::McParticles const& mcParticles)
127+
{
128+
int numMCParticles = 0;
129+
int numMCParticlesEta25 = 0;
130+
int numMCParticlesEta125 = 0;
131+
int numMCParticlesEta09 = 0;
132+
133+
for (const auto& mcParticle : mcParticles) {
134+
if (!mcParticle.isPhysicalPrimary()) {
135+
continue;
136+
}
137+
138+
auto charge = 0.;
139+
auto* p = pdg->GetParticle(mcParticle.pdgCode());
140+
if (p != nullptr) {
141+
charge = p->Charge();
142+
}
143+
if (std::abs(charge) < 1e-3) {
144+
continue;
145+
}
146+
147+
++numMCParticles;
148+
if (std::abs(mcParticle.eta()) < 2.5)
149+
++numMCParticlesEta25;
150+
if (std::abs(mcParticle.eta()) < 1.25)
151+
++numMCParticlesEta125;
152+
if (std::abs(mcParticle.eta()) < 0.9)
153+
++numMCParticlesEta09;
154+
}
155+
156+
if (doQA) {
157+
histos.fill(HIST("multiplicity/nTracksMC"), numMCParticles);
158+
histos.fill(HIST("multiplicity/nTracksMCEta25"), numMCParticlesEta25);
159+
histos.fill(HIST("multiplicity/nTracksMCEta125"), numMCParticlesEta125);
160+
histos.fill(HIST("multiplicity/nTracksMCEta09"), numMCParticlesEta09);
161+
}
162+
163+
multMC(numMCParticles, numMCParticlesEta25, numMCParticlesEta125, numMCParticlesEta09);
164+
}
165+
118166
void processDummy(const aod::Collision&)
119167
{
120168
// do nothing
121169
}
122170

123171
PROCESS_SWITCH(Alice3Multiplicity, processGlobalTracks, "Process global track counter", false);
124172
PROCESS_SWITCH(Alice3Multiplicity, processPV, "Process primary vertex contributor tracks", false);
173+
PROCESS_SWITCH(Alice3Multiplicity, processMC, "Process MC truth information", false);
125174
PROCESS_SWITCH(Alice3Multiplicity, processDummy, "Dummy proccess function", true);
126175
};
127176

0 commit comments

Comments
 (0)