@@ -152,8 +152,6 @@ struct PiDeuteronFemto {
152152 Configurable<float > settingCutVertex{" settingCutVertex" , 10 .0f , " Accepted z-vertex range" };
153153 Configurable<float > settingCutPinMinDe{" settingCutPinMinDe" , 0 .0f , " Minimum Pin for De" };
154154 Configurable<float > settingCutEta{" settingCutEta" , 0 .8f , " Eta cut on daughter track" };
155- Configurable<float > settingCutDCAxy{" settingCutDCAxy" , 2 .0f , " DCAxy range for tracks" };
156- Configurable<float > settingCutDCAz{" settingCutDCAz" , 2 .0f , " DCAz range for tracks" };
157155 Configurable<float > settingCutChi2tpcLow{" settingCutChi2tpcLow" , 0 .0f , " Low cut on TPC chi2" };
158156 Configurable<float > settingCutChi2tpcHigh{" settingCutChi2tpcHigh" , 999 .f , " High cut on TPC chi2" };
159157 Configurable<float > settingCutInvMass{" settingCutInvMass" , 0 .0f , " Invariant mass upper limit" };
@@ -170,6 +168,18 @@ struct PiDeuteronFemto {
170168 Configurable<float > settingCutNsigmaTOFTPCPi{" settingCutNsigmaTOFTPCPi" , 3 .0f , " Value of the Pion TOF TPC Nsigma cut" };
171169 Configurable<int > settingNoMixedEvents{" settingNoMixedEvents" , 5 , " Number of mixed events per event" };
172170 Configurable<bool > settingEnableBkgUS{" settingEnableBkgUS" , false , " Enable US background" };
171+
172+ Configurable<bool > settingFillTable{" settingFillTable" , false , " Enable table filling" };
173+ Configurable<float > settingCutPiptMin{" settingCutPiptMin" , 0 .14f , " Minimum PT cut on Pi" };
174+ Configurable<float > settingCutPiptMax{" settingCutPiptMax" , 4 .0f , " Maximum PT cut on Pi" };
175+ Configurable<float > settingCutDeptMin{" settingCutDeptMin" , 0 .6f , " Minimum PT cut on De" };
176+ Configurable<float > settingCutDeptMax{" settingCutDeptMax" , 1 .6f , " Maximum PT cut on De" };
177+ Configurable<float > settingCutPiDCAxyMin{" settingCutPiDCAxyMin" , 0 .3f , " DCAxy Min for Pi" };
178+ Configurable<float > settingCutPiDCAzMin{" settingCutPiDCAzMin" , 0 .3f , " DCAz Min for Pi" };
179+ Configurable<float > settingCutDeDCAzMin{" settingCutDeDCAzMin" , 0 .2f , " DCAxy Min for De" };
180+ Configurable<float > settingCutNsigTPCPrMin{" settingCutNsigTPCPrMin" , 3 .0f , " Minimum TPC Pr Nsigma cut on Pi" };
181+ Configurable<float > settingCutNsigTOFPrMin{" settingCutNsigTOFPrMin" , 3 .0f , " Minimum TOF Pr Nsigma cut on Pi" };
182+
173183 Configurable<bool > settingSaveUSandLS{" settingSaveUSandLS" , true , " Save All Pairs" };
174184 Configurable<bool > settingFillMultiplicity{" settingFillMultiplicity" , false , " Fill multiplicity table" };
175185
@@ -214,30 +224,33 @@ struct PiDeuteronFemto {
214224
215225 HistogramRegistry mQaRegistry {
216226 " QA" ,
217- {
218- {" hVtxZ" , " Vertex distribution in Z;Z (cm)" , {HistType::kTH1F , {{400 , -20.0 , 20.0 }}}},
219- {" hNcontributor" , " Number of primary vertex contributor" , {HistType::kTH1F , {{2000 , 0 .0f , 2000 .0f }}}},
220- {" hTrackSel" , " Accepted tracks" , {HistType::kTH1F , {{Selections::kAll , -0.5 , static_cast <double >(Selections::kAll ) - 0.5 }}}},
221- {" hEvents" , " ; Events;" , {HistType::kTH1F , {{3 , -0.5 , 2.5 }}}},
222- {" hEmptyPool" , " svPoolCreator did not find track pairs false/true" , {HistType::kTH1F , {{2 , -0.5 , 1.5 }}}},
223- {" hdcaxyDe" , " ;DCA_{xy} (cm)" , {HistType::kTH1F , {{200 , -1 .0f , 1 .0f }}}},
224- {" hdcazDe" , " ;DCA_{z} (cm)" , {HistType::kTH1F , {{200 , -1 .0f , 1 .0f }}}},
225- {" hNClsDeITS" , " ;N_{ITS} Cluster" , {HistType::kTH1F , {{20 , -10 .0f , 10 .0f }}}},
226- {" hNClsPiITS" , " ;N_{ITS} Cluster" , {HistType::kTH1F , {{20 , -10 .0f , 10 .0f }}}},
227- {" hDePitInvMass" , " ; M(De + p) (GeV/#it{c}^{2})" , {HistType::kTH1F , {{300 , 3 .74f , 4 .34f }}}},
228- {" hDePt" , " #it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})" , {HistType::kTH1F , {{240 , -6 .0f , 6 .0f }}}},
229- {" hPiPt" , " Pt distribution; #it{p}_{T} (GeV/#it{c})" , {HistType::kTH1F , {{120 , -3 .0f , 3 .0f }}}},
230- {" h2dEdxDecandidates" , " dEdx distribution; #it{p} (GeV/#it{c}); dE/dx (a.u.)" , {HistType::kTH2F , {{200 , -5 .0f , 5 .0f }, {100 , 0 .0f , 2000 .0f }}}},
231- {" h2NsigmaDeTPC" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{20 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
232- {" h2NsigmaDeTPC_preselection" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
233- {" h2NsigmaDeTPC_preselecComp" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
234- {" h2NSigmaDeITS_preselection" , " NsigmaDe ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} De" , {HistType::kTH2F , {{50 , -5 .0f , 5 .0f }, {120 , -3 .0f , 3 .0f }}}},
235- {" h2NSigmaDeITS" , " NsigmaDe ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} De" , {HistType::kTH2F , {{50 , -5 .0f , 5 .0f }, {120 , -3 .0f , 3 .0f }}}},
236- {" h2NsigmaPiTPC" , " NsigmaPi TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(p)" , {HistType::kTH2F , {{20 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
237- {" h2NsigmaPiTPC_preselection" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
238- {" h2NsigmaPiTOF" , " NsigmaPi TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)" , {HistType::kTH2F , {{20 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
239- {" h2NsigmaPiTOF_preselection" , " NsigmaPi TOF distribution; #iit{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
240- },
227+ {{" hVtxZ" , " Vertex distribution in Z;Z (cm)" , {HistType::kTH1F , {{400 , -20.0 , 20.0 }}}},
228+ {" hNcontributor" , " Number of primary vertex contributor" , {HistType::kTH1F , {{2000 , 0 .0f , 2000 .0f }}}},
229+ {" hTrackSel" , " Accepted tracks" , {HistType::kTH1F , {{Selections::kAll , -0.5 , static_cast <double >(Selections::kAll ) - 0.5 }}}},
230+ {" hEvents" , " ; Events;" , {HistType::kTH1F , {{3 , -0.5 , 2.5 }}}},
231+ {" hEmptyPool" , " svPoolCreator did not find track pairs false/true" , {HistType::kTH1F , {{2 , -0.5 , 1.5 }}}},
232+ {" hdcaxyDe" , " ;DCA_{xy} (cm)" , {HistType::kTH1F , {{200 , -1 .0f , 1 .0f }}}},
233+ {" hdcazDe" , " ;DCA_{z} (cm)" , {HistType::kTH1F , {{200 , -1 .0f , 1 .0f }}}},
234+ {" hNClsDeITS" , " ;N_{ITS} Cluster" , {HistType::kTH1F , {{20 , -10 .0f , 10 .0f }}}},
235+ {" hNClsPiITS" , " ;N_{ITS} Cluster" , {HistType::kTH1F , {{20 , -10 .0f , 10 .0f }}}},
236+ {" hDePitInvMass" , " ; M(De + p) (GeV/#it{c}^{2})" , {HistType::kTH1F , {{300 , 3 .74f , 4 .34f }}}},
237+ {" hDePt" , " #it{p}_{T} distribution; #it{p}_{T} (GeV/#it{c})" , {HistType::kTH1F , {{240 , -6 .0f , 6 .0f }}}},
238+ {" hPiPt" , " Pt distribution; #it{p}_{T} (GeV/#it{c})" , {HistType::kTH1F , {{120 , -3 .0f , 3 .0f }}}},
239+ {" h2dEdxDecandidates" , " dEdx distribution; #it{p} (GeV/#it{c}); dE/dx (a.u.)" , {HistType::kTH2F , {{200 , -5 .0f , 5 .0f }, {100 , 0 .0f , 2000 .0f }}}},
240+ {" h2NsigmaDeTPC" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{20 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
241+ {" h2NsigmaDeTPC_preselection" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
242+ {" h2NsigmaDeTPC_preselecComp" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
243+ {" h2NSigmaDeITS_preselection" , " NsigmaDe ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} De" , {HistType::kTH2F , {{50 , -5 .0f , 5 .0f }, {120 , -3 .0f , 3 .0f }}}},
244+ {" h2NSigmaDeITS" , " NsigmaDe ITS distribution; signed #it{p}_{T} (GeV/#it{c}); n#sigma_{ITS} De" , {HistType::kTH2F , {{50 , -5 .0f , 5 .0f }, {120 , -3 .0f , 3 .0f }}}},
245+ {" h2NsigmaPiTPC" , " NsigmaPi TPC distribution; #it{p}_{T}(GeV/#it{c}); n#sigma_{TPC}(p)" , {HistType::kTH2F , {{20 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
246+ {" h2NsigmaPiTPC_preselection" , " NsigmaDe TPC distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TPC}(De)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
247+ {" h2NsigmaPiTOF" , " NsigmaPi TOF distribution; #it{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)" , {HistType::kTH2F , {{20 , -5 .0f , 5 .0f }, {200 , -5 .0f , 5 .0f }}}},
248+ {" h2NsigmaPiTOF_preselection" , " NsigmaPi TOF distribution; #iit{p}_{T} (GeV/#it{c}); n#sigma_{TOF}(p)" , {HistType::kTH2F , {{100 , -5 .0f , 5 .0f }, {400 , -10 .0f , 10 .0f }}}},
249+ {" hkStar_LS_M" , " ;kStar (GeV/c)" , {HistType::kTH1F , {{300 , 0 .0f , 3 .0f }}}},
250+ {" hkStar_LS_A" , " ;kStar (GeV/c)" , {HistType::kTH1F , {{300 , 0 .0f , 3 .0f }}}},
251+ {" hkStar_US_M" , " ;kStar (GeV/c)" , {HistType::kTH1F , {{300 , 0 .0f , 3 .0f }}}},
252+ {" hkStar_US_A" , " ;kStar (GeV/c)" , {HistType::kTH1F , {{300 , 0 .0f , 3 .0f }}}},
253+ {" hisBkgEM" , " ; isBkgEM;" , {HistType::kTH1F , {{3 , -1 , 2 }}}}},
241254 OutputObjHandlingPolicy::AnalysisObject,
242255 false ,
243256 true };
@@ -683,6 +696,81 @@ struct PiDeuteronFemto {
683696 mQaRegistry .fill (HIST (" hdcazDe" ), piDecand.dcazDe );
684697 mQaRegistry .fill (HIST (" hNClsDeITS" ), piDecand.nClsItsDe );
685698 mQaRegistry .fill (HIST (" hNClsPiITS" ), piDecand.nClsItsPi );
699+ mQaRegistry .fill (HIST (" hisBkgEM" ), piDecand.isBkgEM );
700+ }
701+
702+ double computePrTPCnsig (double InnerParamTPCHad, double SignalTPCHad)
703+ {
704+ double m_BBparamsProton[6 ] = {-54.42066571222577 , 0.2857381250239097 , 1.247140602468868 , 0.6297483918147729 , 2.985438833884555 , 0.09 };
705+
706+ float TPCinnerParam = InnerParamTPCHad;
707+ float expTPCSignal = o2::tpc::BetheBlochAleph ((TPCinnerParam / 0.9382721 ), m_BBparamsProton[0 ], m_BBparamsProton[1 ], m_BBparamsProton[2 ], m_BBparamsProton[3 ], m_BBparamsProton[4 ]);
708+ double resoTPC{expTPCSignal * m_BBparamsProton[5 ]};
709+ return ((SignalTPCHad - expTPCSignal) / resoTPC);
710+ }
711+
712+ double tofNSigmaCalculation (double MassTOFHad, double ptHad)
713+ {
714+ double fExpTOFMassHad = 0.9487 ; // Proton mass in TOF
715+ const float kp0 = 1.22204e-02 ;
716+ const float kp1 = 7.48467e-01 ;
717+
718+ double fSigmaTOFMassHad = (kp0 * TMath::Exp (kp1 * TMath::Abs (ptHad))) * fExpTOFMassHad ;
719+ double fNSigmaTOFHad = (MassTOFHad - fExpTOFMassHad ) / fSigmaTOFMassHad ;
720+ return fNSigmaTOFHad ;
721+ }
722+
723+ double computeKstar (const PiDecandidate& piDecand)
724+ {
725+ TLorentzVector he3, hadron;
726+ float massHe3 = 2.80839 ;
727+ float massHad = 0.1395704 ;
728+ he3.SetPtEtaPhiM (abs (piDecand.recoPtDe ()), piDecand.recoEtaDe (), piDecand.recoPhiDe (), massHe3);
729+ hadron.SetPtEtaPhiM (abs (piDecand.recoPtPi ()), piDecand.recoEtaPi (), piDecand.recoPhiPi (), massHad);
730+
731+ TLorentzVector p_total_lab = he3 + hadron;
732+ TVector3 v_cm = p_total_lab.BoostVector ();
733+ TLorentzVector p1_cm = he3;
734+ TLorentzVector p2_cm = hadron;
735+ p1_cm.Boost (-v_cm);
736+ p2_cm.Boost (-v_cm);
737+ TLorentzVector p_diff_cm = p1_cm - p2_cm;
738+ double kStar = sqrt (p_diff_cm.X () * p_diff_cm.X () + p_diff_cm.Y () * p_diff_cm.Y () + p_diff_cm.Z () * p_diff_cm.Z ());
739+ return kStar / 2.0 ;
740+ }
741+
742+ void fillKstar (const PiDecandidate& piDecand)
743+ {
744+ double PrTPCnsigma = computePrTPCnsig (piDecand.momPiTPC , piDecand.tpcSignalPi );
745+ double PrTOFnsigma = tofNSigmaCalculation (piDecand.massTOFPi , piDecand.recoPtPi ());
746+ if (abs (PrTPCnsigma) < settingCutNsigTPCPrMin)
747+ return ;
748+ if (abs (PrTOFnsigma) < settingCutNsigTOFPrMin)
749+ return ;
750+ float DeDCAxyMin = 0.015 + 0.0305 / TMath::Power (piDecand.recoPtDe (), 1.1 );
751+ if (abs (piDecand.dcaxyDe ) > DeDCAxyMin || abs (piDecand.dcazDe ) > settingCutDeDCAzMin || abs (piDecand.dcaxyPi ) > settingCutPiDCAxyMin || abs (piDecand.dcazPi ) > settingCutPiDCAzMin)
752+ return ;
753+ if (std::abs (piDecand.recoPtPi ()) < settingCutPiptMin || std::abs (piDecand.recoPtPi ()) > settingCutPiptMax)
754+ return ;
755+ if (std::abs (piDecand.recoPtDe ()) < settingCutDeptMin || std::abs (piDecand.recoPtDe ()) > settingCutDeptMax)
756+ return ;
757+
758+ fillHistograms (piDecand);
759+
760+ double kstar = computeKstar (piDecand);
761+ if (piDecand.isBkgUS == 0 ) {
762+ if (piDecand.recoPtDe () > 0 ) {
763+ mQaRegistry .fill (HIST (" hkStar_LS_M" ), kstar);
764+ } else {
765+ mQaRegistry .fill (HIST (" hkStar_LS_A" ), kstar);
766+ }
767+ } else {
768+ if (piDecand.recoPtDe () > 0 ) {
769+ mQaRegistry .fill (HIST (" hkStar_US_M" ), kstar);
770+ } else {
771+ mQaRegistry .fill (HIST (" hkStar_US_A" ), kstar);
772+ }
773+ }
686774 }
687775
688776 // ==================================================================================================================
@@ -700,9 +788,14 @@ struct PiDeuteronFemto {
700788 if (!fillCandidateInfo (deTrack, piTrack, collBracket, collisions, piDecand, tracks, isMixedEvent)) {
701789 continue ;
702790 }
703- fillHistograms (piDecand);
791+
792+ fillKstar (piDecand);
793+
704794 auto collision = collisions.rawIteratorAt (piDecand.collisionID );
705- fillTable (piDecand, collision);
795+
796+ if (settingFillTable) {
797+ fillTable (piDecand, collision);
798+ }
706799 }
707800 }
708801
0 commit comments