Skip to content

Commit 6ab462a

Browse files
authored
add kstar function
1 parent e691fd3 commit 6ab462a

File tree

1 file changed

+92
-1
lines changed

1 file changed

+92
-1
lines changed

PWGLF/TableProducer/Nuspex/he3HadronFemto.cxx

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "PWGLF/DataModel/EPCalibrationTables.h"
1919
#include "PWGLF/DataModel/LFhe3HadronTables.h"
2020
#include "PWGLF/Utils/svPoolCreator.h"
21+
#include "PWGCF/FemtoWorld/Core/FemtoWorldMath.h"
2122

2223
#include "Common/Core/PID/PIDTOF.h"
2324
#include "Common/Core/PID/TPCPIDResponse.h"
@@ -181,6 +182,8 @@ struct He3HadCandidate {
181182

182183
// collision information
183184
int32_t collisionID = 0;
185+
186+
float kstarfem = 1.f;
184187
};
185188

186189
struct he3HadronFemto {
@@ -287,6 +290,14 @@ struct he3HadronFemto {
287290
{"h2NsigmaHadronTPC_preselection", "NsigmaHe3 TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(had)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}},
288291
{"h2NsigmaHadronTOF", "NsigmaHadron TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(had)", {HistType::kTH2F, {{20, -5.0f, 5.0f}, {200, -5.0f, 5.0f}}}},
289292
{"h2NsigmaHadronTOF_preselection", "NsigmaHadron TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(had)", {HistType::kTH2F, {{100, -5.0f, 5.0f}, {400, -10.0f, 10.0f}}}},
293+
{"hkStar_LS_M", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
294+
{"hkStar_LS_A", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
295+
{"hkStar_US_M", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
296+
{"hkStar_US_A", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
297+
{"hkStar_LS_M_femto", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
298+
{"hkStar_LS_A_femto", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
299+
{"hkStar_US_M_femto", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
300+
{"hkStar_US_A_femto", ";kStar (GeV/c)", {HistType::kTH1F, {{300, 0.0f, 3.0f}}}},
290301
},
291302
OutputObjHandlingPolicy::AnalysisObject,
292303
false,
@@ -676,6 +687,7 @@ struct he3HadronFemto {
676687
beta = std::min(1.f - 1.e-6f, std::max(1.e-4f, beta)); /// sometimes beta > 1 or < 0, to be checked
677688
he3Hadcand.massTOFHad = trackHad.tpcInnerParam() * std::sqrt(1.f / (beta * beta) - 1.f);
678689
}
690+
he3Hadcand.kstarfem = o2::analysis::femtoWorld::FemtoWorldMath::getkstar(trackHad, o2::constants::physics::MassPiPlus, trackHe3, o2::constants::physics::MassHelium3);
679691

680692
return true;
681693
}
@@ -839,6 +851,85 @@ struct he3HadronFemto {
839851
}
840852

841853
// ==================================================================================================================
854+
double computePrTPCnsig(double InnerParamTPCHad, double SignalTPCHad)
855+
{
856+
double m_BBparamsProton[6] = {-54.42066571222577, 0.2857381250239097, 1.247140602468868, 0.6297483918147729, 2.985438833884555, 0.09};
857+
858+
float TPCinnerParam = InnerParamTPCHad;
859+
float expTPCSignal = o2::tpc::BetheBlochAleph((TPCinnerParam / 0.9382721), m_BBparamsProton[0], m_BBparamsProton[1], m_BBparamsProton[2], m_BBparamsProton[3], m_BBparamsProton[4]);
860+
double resoTPC{expTPCSignal * m_BBparamsProton[5]};
861+
return ((SignalTPCHad - expTPCSignal) / resoTPC);
862+
}
863+
864+
double tofNSigmaCalculation(double MassTOFHad, double ptHad)
865+
{
866+
double fExpTOFMassHad = 0.9487; // Proton mass in TOF
867+
const float kp0 = 1.22204e-02;
868+
const float kp1 = 7.48467e-01;
869+
870+
double fSigmaTOFMassHad = (kp0 * TMath::Exp(kp1 * TMath::Abs(ptHad))) * fExpTOFMassHad;
871+
double fNSigmaTOFHad = (MassTOFHad - fExpTOFMassHad) / fSigmaTOFMassHad;
872+
return fNSigmaTOFHad;
873+
}
874+
875+
static float computeKstar(const He3HadCandidate& he3Hadcand)
876+
{
877+
const float massHe = o2::constants::physics::MassHelium3;
878+
const float massHad = o2::constants::physics::MassPiPlus;
879+
880+
const ROOT::Math::PtEtaPhiMVector He(std::abs(he3Hadcand.recoPtHe3()), he3Hadcand.recoEtaHe3(), he3Hadcand.recoPhiHe3(), massHe);
881+
const ROOT::Math::PtEtaPhiMVector Had(std::abs(he3Hadcand.recoPtHad()), he3Hadcand.recoEtaHad(), he3Hadcand.recoPhiHad(), massHad);
882+
const ROOT::Math::PtEtaPhiMVector trackSum = He + Had;
883+
884+
const float beta = trackSum.Beta();
885+
const float betax = beta * std::cos(trackSum.Phi()) * std::sin(trackSum.Theta());
886+
const float betay = beta * std::sin(trackSum.Phi()) * std::sin(trackSum.Theta());
887+
const float betaz = beta * std::cos(trackSum.Theta());
888+
889+
ROOT::Math::PxPyPzMVector HeCMS(He);
890+
ROOT::Math::PxPyPzMVector HadCMS(Had);
891+
892+
const ROOT::Math::Boost boostPRF = ROOT::Math::Boost(-betax, -betay, -betaz);
893+
HeCMS = boostPRF(HeCMS);
894+
HadCMS = boostPRF(HadCMS);
895+
896+
const ROOT::Math::PxPyPzMVector RelKstar = HeCMS - HadCMS;
897+
return 0.5 * RelKstar.P();
898+
}
899+
900+
void fillKstar(const He3HadCandidate& he3Hadcand)
901+
{
902+
double PrTPCnsigma = computePrTPCnsig(he3Hadcand.momHadTPC, he3Hadcand.tpcSignalHad);
903+
double PrTOFnsigma = tofNSigmaCalculation(he3Hadcand.massTOFHad, he3Hadcand.recoPtHad());
904+
if (abs(PrTPCnsigma) < 3)
905+
return;
906+
if (abs(PrTOFnsigma) < 3)
907+
return;
908+
if (abs(he3Hadcand.dcaxyHe3) > 0.2 || abs(he3Hadcand.dcaxyHad) > 0.3 || abs(he3Hadcand.dcazHad) > 0.3)
909+
return;
910+
if (std::abs(he3Hadcand.recoPtHad()) < 0.14 || std::abs(he3Hadcand.recoPtHad()) > 4)
911+
return;
912+
fillHistograms(he3Hadcand);
913+
914+
float kstar = computeKstar(he3Hadcand);
915+
if (he3Hadcand.isBkgUS == 0) {
916+
if (he3Hadcand.recoPtHe3() > 0) {
917+
mQaRegistry.fill(HIST("hkStar_LS_M"), kstar);
918+
mQaRegistry.fill(HIST("hkStar_LS_M_femto"), he3Hadcand.kstarfem);
919+
} else {
920+
mQaRegistry.fill(HIST("hkStar_LS_A"), kstar);
921+
mQaRegistry.fill(HIST("hkStar_LS_A_femto"), he3Hadcand.kstarfem);
922+
}
923+
} else {
924+
if (he3Hadcand.recoPtHe3() > 0) {
925+
mQaRegistry.fill(HIST("hkStar_US_M"), kstar);
926+
mQaRegistry.fill(HIST("hkStar_US_M_femto"), he3Hadcand.kstarfem);
927+
} else {
928+
mQaRegistry.fill(HIST("hkStar_US_A"), kstar);
929+
mQaRegistry.fill(HIST("hkStar_US_A_femto"), he3Hadcand.kstarfem);
930+
}
931+
}
932+
}
842933

843934
template <typename Tcollisions, typename Ttracks>
844935
void fillPairs(const Tcollisions& collisions, const Ttracks& tracks, const bool isMixedEvent)
@@ -853,7 +944,7 @@ struct he3HadronFemto {
853944
if (!fillCandidateInfo(heTrack, hadTrack, collBracket, collisions, he3Hadcand, tracks, isMixedEvent)) {
854945
continue;
855946
}
856-
fillHistograms(he3Hadcand);
947+
fillKstar(he3Hadcand);
857948
auto collision = collisions.rawIteratorAt(he3Hadcand.collisionID);
858949
fillTable(he3Hadcand, collision, /*isMC*/ false);
859950
}

0 commit comments

Comments
 (0)