132 vector<CbmStsTrack> vRTracks;
134 vRTracks.resize(nTracks);
135 for (
int iTr = 0; iTr < nTracks; iTr++)
142 vector<int> vTrackPDG(vRTracks.size(), -1);
144 for (
int iTr = 0; iTr < nTracks; iTr++) {
156 Fatal(
"KF Particle Finder",
"No GlobalTrack array!");
159 Fatal(
"KF Particle Finder",
"No TOF hits array!");
166 Double_t sP[3][5] = {{0.0243467, -0.00937908, 0.00970666, -0.00063638, 2.42128e-05},
167 {0.00691158, -0.000777367, 0.00671164, -0.000123594, -2.17075e-05},
168 {0.0055599, -0.00327273, 0.00981961, -0.00108836, 7.90106e-05}};
188 const Int_t PdgHypo[4] = {2212, 321, 211, -11};
194 if (stsTrackIndex < 0)
201 FairTrackParam* stsPar = vRTracks[stsTrackIndex].GetParamFirst();
203 stsPar->Momentum(mom);
206 Int_t q = stsPar->GetQp() > 0 ? 1 : -1;
231 if (!((l > 1000.) && (l < 1400.)))
236 if (tofHitIndex >= 0) {
244 if (!((time > 29.) && (time < 50.)))
247 Double_t m2 = p * p * (1. / ((l / time / 29.9792458) * (l / time / 29.9792458)) - 1.);
250 sigma[0] = sP[0][0] + sP[0][1] * p + sP[0][2] * p * p + sP[0][3] * p * p * p + sP[0][4] * p * p * p * p;
251 sigma[1] = sP[1][0] + sP[1][1] * p + sP[1][2] * p * p + sP[1][3] * p * p * p + sP[1][4] * p * p * p * p;
252 sigma[2] = sP[2][0] + sP[2][1] * p + sP[2][2] * p * p + sP[2][3] * p * p * p + sP[2][4] * p * p * p * p;
255 dm2[0] =
fabs(m2 - m2P) / sigma[0];
256 dm2[1] =
fabs(m2 - m2K) / sigma[1];
257 dm2[2] =
fabs(m2 - m2Pi) / sigma[2];
279 if (dm2[1] < dm2min) {
283 if (dm2[0] < dm2min) {
291 if (dm2[1] < dm2min) {
295 if ((dm2min > 3) && (dm2[0] < dm2min)) {
305 vTrackPDG[stsTrackIndex] = q * PdgHypo[iPdg];
327 vector<L1FieldRegion> vField;
332 vector<CbmKFTrack> vKFTrack(nTracks);
333 for (
int iTr = 0; iTr < nTracks; iTr++)
344 static double timeSelectCPU = 0.;
345 static double timeSelectReal = 0.;
347 timeSelectCPU += timerSelect.
CpuTime();
348 timeSelectReal += timerSelect.
RealTime();
350 if (NEv % 100 == 0) {
351 std::cout.setf(ios::fixed);
352 std::cout.setf(ios::showpoint);
353 std::cout.precision(9);
354 std::cout <<
" ---- Particle finder --- " << std::endl;
355 std::cout <<
"KF Particle Finder Times:" <<
" Real - " << timeSelectReal / NEv <<
" CPU - "
356 << timeSelectCPU / NEv << std::endl
TClonesArray * flistTofHits
TClonesArray * flsitGlobalTracks
TClonesArray * flistStsTracksMatch
TClonesArray * flistTrdTracks
void Exec(Option_t *option)
TClonesArray * flistRichRings
TClonesArray * flistMCTracks
TClonesArray * flistStsTracks
CbmKFParticlesFinder(float cuts[2][3]=0, Int_t usePID=0, const char *name="CbmKFParticlesFinder", const char *title="Cbm KF Particles Finder", Int_t iVerbose=1)
std::vector< KFParticle > fParticles
std::vector< float > fChiToPrimVtx
static void FindParticles(std::vector< CbmKFTrack > &vRTracks, std::vector< float > &ChiToPrimVtx, std::vector< L1FieldRegion > &vField, std::vector< KFParticle > &Particles, KFParticleSIMD &PrimVtx, const std::vector< int > &vTrackPDG, const float cuts[2][3]=DefaultCuts)
Find particles with 2-body decay channel from input tracks vRTracks with primary vertex PrimVtx: