|
44 | 44 | #include "ReconstructionDataFormats/DCA.h" |
45 | 45 | #include "ReconstructionDataFormats/PID.h" |
46 | 46 | #include "ReconstructionDataFormats/Track.h" |
| 47 | +#include "DataFormatsTPC/BetheBlochAleph.h" |
47 | 48 |
|
48 | 49 | #include "TGrid.h" |
49 | 50 | #include <TList.h> |
@@ -138,7 +139,9 @@ 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"}; |
141 | | - |
| 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"}; |
| 144 | + |
142 | 145 | // CCDB manager service for accessing condition data |
143 | 146 | Service<o2::ccdb::BasicCCDBManager> ccdb; |
144 | 147 |
|
@@ -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,12 @@ 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()); |
| 799 | + |
786 | 800 | } |
787 | 801 |
|
788 | 802 | // Reject empty events |
@@ -893,6 +907,12 @@ struct AntinucleiInJets { |
893 | 907 | } |
894 | 908 | if (passedItsPidHel) { |
895 | 909 | registryData.fill(HIST("antihelium3_jet_tpc"), 2.0 * pt, nsigmaTPCHe); |
| 910 | + //custom nsigma He3 based on bethe bloch fit of TPC signal |
| 911 | + double tpcSignal = track.tpcSignal(); |
| 912 | + 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]); |
| 913 | + double sigmaHe3 = expectedSignalHe3 * cfgBetheBlochParams.value[4]; |
| 914 | + double nSigmaTPCHe3Custom = (tpcSignal - expectedSignalHe3) / sigmaHe3; |
| 915 | + registryData.fill(HIST("antihelium3_jet_tpc_custom"), 2.0 * pt, nSigmaTPCHe3Custom); |
896 | 916 | } |
897 | 917 | } |
898 | 918 |
|
@@ -983,6 +1003,12 @@ struct AntinucleiInJets { |
983 | 1003 | } |
984 | 1004 | if (passedItsPidHel) { |
985 | 1005 | registryData.fill(HIST("antihelium3_ue_tpc"), 2.0 * pt, nsigmaTPCHe); |
| 1006 | + //custom nsigma He3 based on bethe bloch fit of TPC signal |
| 1007 | + double tpcSignal = track.tpcSignal(); |
| 1008 | + 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]); |
| 1009 | + double sigmaHe3 = expectedSignalHe3 * cfgBetheBlochParams.value[4]; |
| 1010 | + double nSigmaTPCHe3Custom = (tpcSignal - expectedSignalHe3) / sigmaHe3; |
| 1011 | + registryData.fill(HIST("antihelium3_ue_tpc_custom"), 2.0 * pt, nSigmaTPCHe3Custom); |
986 | 1012 | } |
987 | 1013 | } |
988 | 1014 |
|
|
0 commit comments