Skip to content

Commit 244dc2a

Browse files
authored
FemtoWorld with added invariant mass and dE/dx (#1071)
1 parent 369781d commit 244dc2a

3 files changed

Lines changed: 38 additions & 14 deletions

File tree

PWGCF/FemtoWorld/Core/FemtoWorldContainer.h

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "Math/Vector4D.h"
2424
#include "TMath.h"
2525
#include "TDatabasePDG.h"
26+
#include "TLorentzVector.h"
2627

2728
#include "CommonConstants/MathConstants.h"
2829
using namespace o2::constants::math;
@@ -66,8 +67,10 @@ class FemtoWorldContainer
6667
/// \param mTBins mT binning for the histograms
6768
/// \param etaBins mT binning for the histograms
6869
/// \param phiBins mT binning for the histograms
70+
/// \param mInvBins mT binning for the histograms
71+
6972
template <typename T1, typename T2>
70-
void init(HistogramRegistry* registry, T1& kstarBins, T1& multBins, T1& kTBins, T1& mTBins, T2& phiBins, T2& etaBins)
73+
void init(HistogramRegistry* registry, T1& kstarBins, T1& multBins, T1& kTBins, T1& mTBins, T2& phiBins, T2& etaBins, T2& mInvBins)
7174
{
7275
mHistogramRegistry = registry;
7376
std::string femtoObs;
@@ -85,6 +88,7 @@ class FemtoWorldContainer
8588

8689
framework::AxisSpec phiAxis = {phiBins, mPhiLow, mPhiHigh};
8790
framework::AxisSpec etaAxis = {etaBins, -2.0, 2.0};
91+
framework::AxisSpec mInvAxis = {mInvBins, 0.0, 10.0};
8892

8993
std::string folderName = static_cast<std::string>(mFolderSuffix[mEventType]);
9094
mHistogramRegistry->add((folderName + "relPairDist").c_str(), ("Name; " + femtoObs + "; Entries").c_str(), kTH1F, {femtoObsAxis});
@@ -98,6 +102,7 @@ class FemtoWorldContainer
98102
mHistogramRegistry->add((folderName + "MultPtPart2").c_str(), "; #it{p} _{T} Particle 2 (GeV/#it{c}); Multiplicity", kTH2F, {{375, 0., 7.5}, multAxis});
99103
mHistogramRegistry->add((folderName + "PtPart1PtPart2").c_str(), "; #it{p} _{T} Particle 1 (GeV/#it{c}); #it{p} _{T} Particle 2 (GeV/#it{c})", kTH2F, {{375, 0., 7.5}, {375, 0., 7.5}});
100104
mHistogramRegistry->add((folderName + "relPairDetaDphi").c_str(), "; #Delta#varphi (rad); #Delta#eta", kTH2D, {phiAxis, etaAxis});
105+
mHistogramRegistry->add((folderName + "relPairInvariantMass").c_str(), ";M_{#pi^{+}#pi^{-}} (GeV/#it{c}^{2});", kTH1D, {mInvAxis});
101106
}
102107

103108
/// Set the PDG codes of the two particles involved
@@ -125,14 +130,24 @@ class FemtoWorldContainer
125130
const float mT = FemtoWorldMath::getmT(part1, mMassOne, part2, mMassTwo);
126131

127132
double delta_eta = part1.eta() - part2.eta();
128-
129133
double delta_phi = part1.phi() - part2.phi();
134+
130135
while (delta_phi < mPhiLow) {
131136
delta_phi += TwoPI;
132137
}
133138
while (delta_phi > mPhiHigh) {
134139
delta_phi -= TwoPI;
135140
}
141+
TLorentzVector part1Vec;
142+
part1Vec.SetPtEtaPhiM(part1.pt(), part1.eta(), part1.phi(), mMassOne);
143+
TLorentzVector part2Vec;
144+
part2Vec.SetPtEtaPhiM(part2.pt(), part2.eta(), part2.phi(), mMassTwo);
145+
146+
TLorentzVector sumVec(part1Vec);
147+
sumVec += part2Vec;
148+
if (mHistogramRegistry) {
149+
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST("relPairInvariantMass"), sumVec.M());
150+
}
136151

137152
if (mHistogramRegistry) {
138153
mHistogramRegistry->fill(HIST(mFolderSuffix[mEventType]) + HIST("relPairDist"), femtoObs);

PWGCF/FemtoWorld/Core/FemtoWorldParticleHisto.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ class FemtoWorldParticleHisto
4949
mHistogramRegistry->add((folderName + "/hPt").c_str(), "; #it{p}_{T} (GeV/#it{c}); Entries", kTH1F, {{240, 0, 6}});
5050
mHistogramRegistry->add((folderName + "/hEta").c_str(), "; #eta; Entries", kTH1F, {{200, -1.5, 1.5}});
5151
mHistogramRegistry->add((folderName + "/hPhi").c_str(), "; #phi; Entries", kTH1F, {{200, 0, 2. * M_PI}});
52+
mHistogramRegistry->add((folderName + "/dEdxTPCVsMomentum").c_str(), "; #it{p} (GeV/#it{c}); dE/dx (keV/cm)", kTH2F, {{100, 0., 5.}, {250, 0., 500.}});
5253

5354
/// Particle-type specific histograms
5455
if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kTrack) {
@@ -76,6 +77,7 @@ class FemtoWorldParticleHisto
7677
mHistogramRegistry->fill(HIST(o2::aod::femtodreamparticle::ParticleTypeName[mParticleType]) + HIST(mFolderSuffix[mFolderSuffixType]) + HIST("/hPt"), part.pt());
7778
mHistogramRegistry->fill(HIST(o2::aod::femtodreamparticle::ParticleTypeName[mParticleType]) + HIST(mFolderSuffix[mFolderSuffixType]) + HIST("/hEta"), part.eta());
7879
mHistogramRegistry->fill(HIST(o2::aod::femtodreamparticle::ParticleTypeName[mParticleType]) + HIST(mFolderSuffix[mFolderSuffixType]) + HIST("/hPhi"), part.phi());
80+
mHistogramRegistry->fill(HIST(o2::aod::femtodreamparticle::ParticleTypeName[mParticleType]) + HIST(mFolderSuffix[mFolderSuffixType]) + HIST("/dEdxTPCVsMomentum"), part.p(), part.tpcSignal());
7981

8082
/// Particle-type specific histograms
8183
if constexpr (mParticleType == o2::aod::femtodreamparticle::ParticleType::kTrack) {

PWGCF/FemtoWorld/Tasks/femtoWorldPairTaskTrackTrack.cxx

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ static const std::vector<float> kNsigma = {3.5f, 3.f, 2.5f};
5050

5151
} // namespace
5252

53+
namespace o2::aod
54+
{
55+
using FemtoWorldParticles = soa::Join<aod::FemtoDreamParticles,
56+
aod::FemtoDreamDebugParticles>;
57+
using FemtoWorldParticle = FemtoWorldParticles::iterator;
58+
} // namespace o2::aod
59+
5360
struct femtoWorldPairTaskTrackTrack {
5461

5562
/// Particle selection part
@@ -59,26 +66,25 @@ struct femtoWorldPairTaskTrackTrack {
5966
Configurable<int> cfgNspecies{"ccfgNspecies", 4, "Number of particle spieces with PID info"};
6067

6168
/// Particle 1
62-
Configurable<int> ConfPDGCodePartOne{"ConfPDGCodePartOne", 2212, "Particle 1 - PDG code"};
63-
Configurable<uint32_t> ConfCutPartOne{"ConfCutPartOne", 84035877, "Particle 1 - Selection bit from cutCulator"};
69+
Configurable<int> ConfPDGCodePartOne{"ConfPDGCodePartOne", 211, "Particle 1 - PDG code"};
70+
Configurable<uint32_t> ConfCutPartOne{"ConfCutPartOne", 84035878, "Particle 1 - Selection bit from cutCulator"};
6471
Configurable<std::vector<int>> ConfPIDPartOne{"ConfPIDPartOne", std::vector<int>{2}, "Particle 1 - Read from cutCulator"}; // we also need the possibility to specify whether the bit is true/false ->std>>vector<std::pair<int, int>>int>>
6572

6673
/// Partition for particle 1
67-
Partition<aod::FemtoDreamParticles> partsOne = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) && ((aod::femtodreamparticle::cut & ConfCutPartOne) == ConfCutPartOne);
68-
74+
Partition<o2::aod::FemtoWorldParticles> partsOne = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) && ((aod::femtodreamparticle::cut & ConfCutPartOne) == ConfCutPartOne);
6975
/// Histogramming for particle 1
7076
FemtoWorldParticleHisto<aod::femtodreamparticle::ParticleType::kTrack, 1> trackHistoPartOne;
7177

7278
/// Particle 2
7379
Configurable<bool> ConfIsSame{"ConfIsSame", false, "Pairs of the same particle"};
74-
Configurable<int> ConfPDGCodePartTwo{"ConfPDGCodePartTwo", 2212, "Particle 2 - PDG code"};
80+
Configurable<int> ConfPDGCodePartTwo{"ConfPDGCodePartTwo", 211, "Particle 2 - PDG code"};
7581
Configurable<uint32_t> ConfCutPartTwo{"ConfCutPartTwo", 84035877, "Particle 2 - Selection bit"};
7682
Configurable<std::vector<int>> ConfPIDPartTwo{"ConfPIDPartTwo", std::vector<int>{2}, "Particle 2 - Read from cutCulator"}; // we also need the possibility to specify whether the bit is true/false ->std>>vector<std::pair<int, int>>
7783

7884
/// Partition for particle 2
79-
Partition<aod::FemtoDreamParticles> partsTwo = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) &&
80-
// (aod::femtodreamparticle::pt < cfgCutTable->get("PartTwo", "MaxPt")) &&
81-
((aod::femtodreamparticle::cut & ConfCutPartTwo) == ConfCutPartTwo);
85+
Partition<o2::aod::FemtoWorldParticles> partsTwo = (aod::femtodreamparticle::partType == uint8_t(aod::femtodreamparticle::ParticleType::kTrack)) &&
86+
// (aod::femtodreamparticle::pt < cfgCutTable->get("PartTwo", "MaxPt")) &&
87+
((aod::femtodreamparticle::cut & ConfCutPartTwo) == ConfCutPartTwo);
8288

8389
/// Histogramming for particle 2
8490
FemtoWorldParticleHisto<aod::femtodreamparticle::ParticleType::kTrack, 2> trackHistoPartTwo;
@@ -101,6 +107,7 @@ struct femtoWorldPairTaskTrackTrack {
101107
Configurable<bool> ConfCPRPlotPerRadii{"ConfCPRPlotPerRadii", false, "Plot CPR per radii"};
102108
Configurable<int> ConfPhiBins{"ConfPhiBins", 15, "Number of phi bins in deta dphi"};
103109
Configurable<int> ConfEtaBins{"ConfEtaBins", 15, "Number of eta bins in deta dphi"};
110+
Configurable<int> ConfMInvBins{"ConfMInvBins", 1000, "Number of bins in mInv distribution"};
104111

105112
FemtoWorldContainer<femtoWorldContainer::EventType::same, femtoWorldContainer::Observable::kstar> sameEventCont;
106113

@@ -121,9 +128,9 @@ struct femtoWorldPairTaskTrackTrack {
121128
trackHistoPartTwo.init(&qaRegistry);
122129
}
123130

124-
sameEventCont.init(&resultRegistry, CfgkstarBins, CfgMultBins, CfgkTBins, CfgmTBins, ConfPhiBins, ConfEtaBins);
131+
sameEventCont.init(&resultRegistry, CfgkstarBins, CfgMultBins, CfgkTBins, CfgmTBins, ConfPhiBins, ConfEtaBins, ConfMInvBins);
125132
sameEventCont.setPDGCodes(ConfPDGCodePartOne, ConfPDGCodePartTwo);
126-
mixedEventCont.init(&resultRegistry, CfgkstarBins, CfgMultBins, CfgkTBins, CfgmTBins, ConfPhiBins, ConfEtaBins);
133+
mixedEventCont.init(&resultRegistry, CfgkstarBins, CfgMultBins, CfgkTBins, CfgmTBins, ConfPhiBins, ConfEtaBins, ConfMInvBins);
127134
mixedEventCont.setPDGCodes(ConfPDGCodePartOne, ConfPDGCodePartTwo);
128135
pairCleaner.init(&qaRegistry);
129136
if (ConfIsCPR) {
@@ -145,7 +152,7 @@ struct femtoWorldPairTaskTrackTrack {
145152
/// This function processes the same event and takes care of all the histogramming
146153
/// \todo the trivial loops over the tracks should be factored out since they will be common to all combinations of T-T, T-V0, V0-V0, ...
147154
void processSameEvent(o2::aod::FemtoDreamCollision& col,
148-
o2::aod::FemtoDreamParticles& parts)
155+
o2::aod::FemtoWorldParticles& parts)
149156
{
150157
const auto& tmstamp = col.timestamp();
151158
const auto& magFieldTesla = getMagneticFieldTesla(tmstamp, ccdb);
@@ -205,7 +212,7 @@ struct femtoWorldPairTaskTrackTrack {
205212
/// This function processes the mixed event
206213
/// \todo the trivial loops over the collisions and tracks should be factored out since they will be common to all combinations of T-T, T-V0, V0-V0, ...
207214
void processMixedEvent(o2::aod::FemtoDreamCollisions& cols,
208-
o2::aod::FemtoDreamParticles& parts)
215+
o2::aod::FemtoWorldParticles& parts)
209216
{
210217

211218
ColumnBinningPolicy<aod::collision::PosZ, aod::femtodreamcollision::MultV0M> colBinning{{CfgVtxBins, CfgMultBins}, true};

0 commit comments

Comments
 (0)