|
32 | 32 |
|
33 | 33 | #include "CCDB/BasicCCDBManager.h" |
34 | 34 | #include "CCDB/CcdbApi.h" |
| 35 | +#include "DataFormatsTPC/BetheBlochAleph.h" |
35 | 36 | #include "Framework/ASoA.h" |
36 | 37 | #include "Framework/ASoAHelpers.h" |
37 | 38 | #include "Framework/AnalysisDataModel.h" |
@@ -138,6 +139,8 @@ struct AntinucleiInJets { |
138 | 139 | Configurable<double> nSigmaItsMin{"nSigmaItsMin", -3.0, "nSigmaITS min"}; |
139 | 140 | Configurable<double> nSigmaItsMax{"nSigmaItsMax", +3.0, "nSigmaITS max"}; |
140 | 141 | 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"}; |
141 | 144 |
|
142 | 145 | // CCDB manager service for accessing condition data |
143 | 146 | Service<o2::ccdb::BasicCCDBManager> ccdb; |
@@ -246,6 +249,11 @@ struct AntinucleiInJets { |
246 | 249 |
|
247 | 250 | // nsigmaITS for antiproton candidates |
248 | 251 | 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"}}); |
249 | 257 | } |
250 | 258 |
|
251 | 259 | // Generated antiproton spectra in jets and UE from MC truth |
@@ -783,6 +791,11 @@ struct AntinucleiInJets { |
783 | 791 | fastjet::PseudoJet fourMomentum(track.px(), track.py(), track.pz(), track.energy(MassPionCharged)); |
784 | 792 | fourMomentum.set_user_index(id); |
785 | 793 | 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()); |
786 | 799 | } |
787 | 800 |
|
788 | 801 | // Reject empty events |
@@ -893,6 +906,12 @@ struct AntinucleiInJets { |
893 | 906 | } |
894 | 907 | if (passedItsPidHel) { |
895 | 908 | 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); |
896 | 915 | } |
897 | 916 | } |
898 | 917 |
|
@@ -983,6 +1002,12 @@ struct AntinucleiInJets { |
983 | 1002 | } |
984 | 1003 | if (passedItsPidHel) { |
985 | 1004 | 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); |
986 | 1011 | } |
987 | 1012 | } |
988 | 1013 |
|
|
0 commit comments