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
186189struct 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