Skip to content

Commit 528f7d8

Browse files
[PWGLF] added custom nsigma calibration for He3 (#13143)
Co-authored-by: ALICE Action Bot <alibuild@cern.ch>
1 parent f3a506c commit 528f7d8

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

PWGLF/Tasks/Nuspex/antinucleiInJets.cxx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232

3333
#include "CCDB/BasicCCDBManager.h"
3434
#include "CCDB/CcdbApi.h"
35+
#include "DataFormatsTPC/BetheBlochAleph.h"
3536
#include "Framework/ASoA.h"
3637
#include "Framework/ASoAHelpers.h"
3738
#include "Framework/AnalysisDataModel.h"
@@ -138,6 +139,8 @@ struct AntinucleiInJets {
138139
Configurable<double> nSigmaItsMin{"nSigmaItsMin", -3.0, "nSigmaITS min"};
139140
Configurable<double> nSigmaItsMax{"nSigmaItsMax", +3.0, "nSigmaITS max"};
140141
Configurable<bool> setMCDefaultItsParams{"setMCDefaultItsParams", false, "set MC default parameters"};
142+
Configurable<bool> cfgCompensatePIDinTracking{"cfgCompensatePIDinTracking", false, "If true, divide tpcInnerParam by the electric charge"};
143+
Configurable<std::array<double, 5>> cfgBetheBlochParams{"cfgBetheBlochParams", {0.6539, 1.591, 0.8225, 2.363, 0.09}, "TPC Bethe-Bloch parameterisation for He3"};
141144

142145
// CCDB manager service for accessing condition data
143146
Service<o2::ccdb::BasicCCDBManager> ccdb;
@@ -246,6 +249,11 @@ struct AntinucleiInJets {
246249

247250
// nsigmaITS for antiproton candidates
248251
registryData.add("antiproton_nsigma_its_data", "antiproton_nsigma_its_data", HistType::kTH2F, {{nbins, min, max, "#it{p}_{T} (GeV/#it{c})"}, {400, -20.0, 20.0, "n#sigma_{ITS}"}});
252+
253+
// custom nsigma for He3 - needed for 24 pp data
254+
registryData.add("tpcsignal_data", "Specific energy loss", HistType::kTH2F, {{600, -6., 6., "#it{p} (GeV/#it{c})"}, {1400, 0, 1400, "d#it{E} / d#it{X} (a. u.)"}});
255+
registryData.add("antihelium3_jet_tpc_custom", "antihelium3_jet_tpc_custom", HistType::kTH2F, {{nbins, 3 * min, 3 * max, "#it{p}_{T} (GeV/#it{c})"}, {400, -20.0, 20.0, "n#sigma_{TPC} custom"}});
256+
registryData.add("antihelium3_ue_tpc_custom", "antihelium3_ue_tpc_custom", HistType::kTH2F, {{nbins, 3 * min, 3 * max, "#it{p}_{T} (GeV/#it{c})"}, {400, -20.0, 20.0, "n#sigma_{TPC} custom"}});
249257
}
250258

251259
// Generated antiproton spectra in jets and UE from MC truth
@@ -783,6 +791,11 @@ struct AntinucleiInJets {
783791
fastjet::PseudoJet fourMomentum(track.px(), track.py(), track.pz(), track.energy(MassPionCharged));
784792
fourMomentum.set_user_index(id);
785793
fjParticles.emplace_back(fourMomentum);
794+
795+
// Fill TPC signal vs p*sign for PID calibration
796+
bool heliumPID = track.pidForTracking() == o2::track::PID::Helium3;
797+
float correctedTpcInnerParam = (heliumPID && cfgCompensatePIDinTracking) ? track.tpcInnerParam() / 2 : track.tpcInnerParam();
798+
registryData.fill(HIST("tpcsignal_data"), correctedTpcInnerParam * track.sign(), track.tpcSignal());
786799
}
787800

788801
// Reject empty events
@@ -893,6 +906,12 @@ struct AntinucleiInJets {
893906
}
894907
if (passedItsPidHel) {
895908
registryData.fill(HIST("antihelium3_jet_tpc"), 2.0 * pt, nsigmaTPCHe);
909+
// custom nsigma He3 based on bethe bloch fit of TPC signal
910+
double tpcSignal = track.tpcSignal();
911+
double expectedSignalHe3 = tpc::BetheBlochAleph(static_cast<double>(track.tpcInnerParam() * 2. / o2::constants::physics::MassHelium3), cfgBetheBlochParams.value[0], cfgBetheBlochParams.value[1], cfgBetheBlochParams.value[2], cfgBetheBlochParams.value[3], cfgBetheBlochParams.value[4]);
912+
double sigmaHe3 = expectedSignalHe3 * cfgBetheBlochParams.value[4];
913+
double nSigmaTPCHe3Custom = (tpcSignal - expectedSignalHe3) / sigmaHe3;
914+
registryData.fill(HIST("antihelium3_jet_tpc_custom"), 2.0 * pt, nSigmaTPCHe3Custom);
896915
}
897916
}
898917

@@ -983,6 +1002,12 @@ struct AntinucleiInJets {
9831002
}
9841003
if (passedItsPidHel) {
9851004
registryData.fill(HIST("antihelium3_ue_tpc"), 2.0 * pt, nsigmaTPCHe);
1005+
// custom nsigma He3 based on bethe bloch fit of TPC signal
1006+
double tpcSignal = track.tpcSignal();
1007+
double expectedSignalHe3 = tpc::BetheBlochAleph(static_cast<double>(track.tpcInnerParam() * 2. / o2::constants::physics::MassHelium3), cfgBetheBlochParams.value[0], cfgBetheBlochParams.value[1], cfgBetheBlochParams.value[2], cfgBetheBlochParams.value[3], cfgBetheBlochParams.value[4]);
1008+
double sigmaHe3 = expectedSignalHe3 * cfgBetheBlochParams.value[4];
1009+
double nSigmaTPCHe3Custom = (tpcSignal - expectedSignalHe3) / sigmaHe3;
1010+
registryData.fill(HIST("antihelium3_ue_tpc_custom"), 2.0 * pt, nSigmaTPCHe3Custom);
9861011
}
9871012
}
9881013

0 commit comments

Comments
 (0)