20 vector<L1FieldRegion>& vField, vector<KFParticle>& Particles,
21 KFParticleSIMD& PrimVtx,
const vector<int>& vTrackPDG,
const float cuts[2][3])
41 static const int NTrackTypes = 8;
43 int pdgPos[NTrackTypes]={-11,-13, 211, 321, 2212, 211, 321, 2212};
44 int pdgNeg[NTrackTypes]={ 11, 13,-211,-321,-2212, -211,-321,-2212};
46 vector<short> idPosSec[NTrackTypes];
47 vector<short> idNegSec[NTrackTypes];
49 vector<short> idPosPrim[NTrackTypes];
50 vector<short> idNegPrim[NTrackTypes];
52 for(
unsigned short iTr=0; iTr < vRTracks.size(); iTr++)
56 for(
unsigned short iT=0; iT<5; iT++)
57 ok = ok && finite(kfTrack.
GetTrack()[iT]);
58 for(
unsigned short iC=0; iC<15; iC++)
68 const int pdg = abs(vTrackPDG[iTr]);
73 case 11: pdgIndex = 0;
break;
74 case 13: pdgIndex = 1;
break;
75 case 211: pdgIndex = 2;
break;
76 case 321: pdgIndex = 3;
break;
77 case 2212: pdgIndex = 4;
break;
81 short pdgIndexMax = pdgIndex+incr;
86 pdgIndexMax = pdgIndex;
96 if( ChiToPrimVtx[iTr] < cuts[0][0] )
100 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
101 idPosPrim[ipdg].push_back(iTr);
104 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
105 idNegPrim[ipdg].push_back(iTr);
110 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
111 idPosSec[ipdg].push_back(iTr);
113 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
114 idNegSec[ipdg].push_back(iTr);
118 const int nPart = idPosSec[5].size() * idNegSec[5].size()+
119 idPosSec[5].size() * idNegSec[7].size()+
120 idPosSec[7].size() * idNegSec[5].size()+
121 idPosPrim[2].size() * idNegPrim[3].size() +
122 idPosPrim[3].size() * idNegPrim[2].size() +
123 idPosPrim[3].size() * idNegPrim[3].size() +
124 idPosPrim[4].size() * idNegPrim[3].size() +
125 idPosPrim[3].size() * idNegPrim[4].size() +
126 idPosPrim[0].size() * idNegPrim[0].size() +
127 idPosPrim[1].size() * idNegPrim[1].size();
130 Particles.reserve(vRTracks.size() + nPart);
132 const float massLambdaPDG = 1.115683;
133 const float massK0sPDG = 0.497614;
134 const float massKsiPDG = 1.32171;
136 for(
unsigned short iTr=0; iTr < vRTracks.size(); iTr++) {
141 tmp.
SetId(Particles.size());
144 Particles.push_back(tmp);
147 vector<float> vLambdaTopoChi2Ndf;
148 vector<KFParticle> vLambdaSec;
149 vector<KFParticle> vLambdaPrim;
151 vector<float> vLambdaBarTopoChi2Ndf;
152 vector<KFParticle> vLambdaBarSec;
153 vector<KFParticle> vLambdaBarPrim;
155 vector<float> vK0sTopoChi2Ndf;
156 vector<KFParticle> vK0sPrim;
158 vector<float> vGammaTopoChi2Ndf;
159 vector<KFParticle> vGammaPrim;
160 vector<KFParticle> vGammaSec;
162 vector<KFParticle> vPi0Prim;
163 vector<KFParticle> vPi0Sec;
165 vector<KFParticle> vXiPrim;
166 vector<KFParticle> vXiSec;
167 vector<KFParticle> vXiBarPrim;
169 vector<KFParticle> vXiStarPrim;
170 vector<KFParticle> vXiStarBarPrim;
172 const float SecCuts[3] = {3.f,5.f,10.f};
177 idNegSec[5], idPosSec[5], PrimVtx, cuts[0], 0, &vK0sTopoChi2Ndf,
178 SecCuts, massK0sPDG, 0.0022, &vK0sPrim, 0);
181 idNegSec[5], idPosSec[7], PrimVtx, cuts[1], 0,&vLambdaTopoChi2Ndf,
182 SecCuts, massLambdaPDG, 0.0012, &vLambdaPrim, &vLambdaSec);
185 idPosSec[5], idNegSec[4], PrimVtx, cuts[1], 0, &vLambdaBarTopoChi2Ndf,
186 SecCuts, massLambdaPDG, 0.0012, &vLambdaBarPrim, &vLambdaBarSec);
189 idPosPrim[3], idNegPrim[2], PrimVtx, cuts[1], 1);
192 idNegPrim[3], idPosPrim[2], PrimVtx, cuts[1], 1);
195 idNegPrim[3], idPosPrim[4], PrimVtx, cuts[1], 1);
198 idNegPrim[4], idPosPrim[3], PrimVtx, cuts[1], 1);
201 idNegPrim[3], idPosPrim[3], PrimVtx, cuts[1], 1);
208 float SecCutsGamma[3] = {3,3,-100};
209 float gammaCuts[3] = {3,100000, -100};
211 idNegPrim[0], idPosPrim[0], PrimVtx, gammaCuts, 1, &vGammaTopoChi2Ndf,
212 SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
214 idNegSec[0], idPosSec[0], PrimVtx, gammaCuts, 0, &vGammaTopoChi2Ndf,
215 SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
217 idNegSec[0], idPosPrim[0], PrimVtx, gammaCuts, 0, &vGammaTopoChi2Ndf,
218 SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
220 idNegPrim[0], idPosSec[0], PrimVtx, gammaCuts, 0, &vGammaTopoChi2Ndf,
221 SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
224 idNegPrim[0], idPosPrim[0], PrimVtx, cuts[1], 1, 1.f);
227 idNegPrim[1], idPosPrim[1], PrimVtx, cuts[1], 1, 1.f);
230 idNegPrim[0], idPosPrim[0], PrimVtx, cuts[1], 1, 0.2f);
232 const float PCut = 1.f;
234 idNegPrim[1], idPosPrim[1], PrimVtx, cuts[1], 1, 0.2f, -100, 0, &PCut);
241 float cutSigma0[3] = {-100, 3, 3};
243 CombinePartPart(vGammaPrim, vLambdaPrim, Particles, PrimVtx, cutSigma0, 1, 3212, 0);
246 CombinePartPart(vGammaPrim, vLambdaBarPrim, Particles, PrimVtx, cutSigma0, 1, -3212, 0);
249 float cutPi0[3] = {-100, 1000000, 3};
250 float cutPi0Sec[2] = {3,3};
251 CombinePartPart(vGammaPrim, vGammaPrim, Particles, PrimVtx, cutPi0, 1, 111, 1,
252 &vPi0Prim, &vPi0Sec, cutPi0Sec, 0.13498, 0.006);
253 CombinePartPart(vGammaPrim, vGammaSec, Particles, PrimVtx, cutPi0, 0, 111, 0,
254 &vPi0Prim, &vPi0Sec, cutPi0Sec, 0.13498, 0.006);
255 CombinePartPart(vGammaSec, vGammaPrim, Particles, PrimVtx, cutPi0, 0, 111, 0,
256 &vPi0Prim, &vPi0Sec, cutPi0Sec, 0.13498, 0.006);
257 CombinePartPart(vGammaSec, vGammaSec, Particles, PrimVtx, cutPi0, 0, 111, 1,
258 &vPi0Prim, &vPi0Sec, cutPi0Sec, 0.13498, 0.006);
261 float cutSigmaPlus[3] = {-100.,3.,3.};
262 FindTrackV0Decay(3222, Particles, vPi0Sec, vRTracks, vField, pdgPos[4], idPosSec[4],
263 PrimVtx, cutSigmaPlus, 0, 0);
265 float cutSigmaPlusBar[3] = {-100.,3.,3.};
266 FindTrackV0Decay(-3222, Particles, vPi0Sec, vRTracks, vField, pdgNeg[4], idNegSec[4],
267 PrimVtx, cutSigmaPlusBar, 0, 0);
269 CombinePartPart(vPi0Prim, vLambdaPrim, Particles, PrimVtx, cutSigma0, 1, 3214, 0);
271 CombinePartPart(vPi0Prim, vLambdaBarPrim, Particles, PrimVtx, cutSigma0, 1, -3214, 0);
273 CombinePartPart(vPi0Sec, vLambdaSec, Particles, PrimVtx, cutSigma0, 0, 3322, 0);
275 CombinePartPart(vPi0Sec, vLambdaBarSec, Particles, PrimVtx, cutSigma0, 0, -3322, 0);
278 float cutXi[3] = {10.,5.,6.};
280 FindTrackV0Decay(3312, Particles, vLambdaSec, vRTracks, vField, pdgNeg[5], idNegSec[5],
281 PrimVtx, cutXi, 0, 0, &vXiPrim, massKsiPDG, 0.002 );
284 float cutLL[3] = {10.,10000000.,3.};
285 float cutLL2[3] = {10.,3.,3.};
286 vector<KFParticle> vLL;
287 FindTrackV0Decay(3002, vLL, vLambdaSec, vRTracks, vField, pdgNeg[5], idNegSec[5],
288 PrimVtx, cutLL, 0, &ChiToPrimVtx);
291 FindTrackV0Decay(3001, Particles, vLL, vRTracks, vField, pdgPos[4], idPosSec[4],
292 PrimVtx, cutLL2, 0, &ChiToPrimVtx);
294 float cutXiPlus[3] = {10.,5.,6.};
295 FindTrackV0Decay(-3312, Particles, vLambdaBarSec, vRTracks, vField, pdgPos[5], idPosSec[5],
296 PrimVtx, cutXiPlus, 0, 0, &vXiBarPrim, massKsiPDG, 0.002);
298 float cutOmega[3] = {10.,3.,3.};
299 FindTrackV0Decay(3334, Particles, vLambdaSec, vRTracks, vField, pdgNeg[6], idNegSec[6],
300 PrimVtx, cutOmega, 0, &ChiToPrimVtx);
302 float cutOmegaPlus[3] = {10.,3.,3.};
303 FindTrackV0Decay(-3334, Particles, vLambdaBarSec, vRTracks, vField, pdgPos[6], idPosSec[6],
304 PrimVtx, cutOmegaPlus, 0, &ChiToPrimVtx);
306 float cutXiStarMinus[3] = {-100.,3.,3.};
307 FindTrackV0Decay(1003314, Particles, vLambdaPrim, vRTracks, vField, pdgNeg[3], idNegPrim[3],
308 PrimVtx, cutXiStarMinus, 1);
310 float cutXiStarPlus[3] = {-100.,3.,3.};
311 FindTrackV0Decay(-1003314, Particles, vLambdaBarPrim, vRTracks, vField, pdgPos[3], idPosPrim[3],
312 PrimVtx, cutXiStarPlus, 1);
318 float cutXiStar0[3] = {-100.,3.,3.};
319 FindTrackV0Decay(3324, Particles, vXiPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
320 PrimVtx, cutXiStar0, 1, 0, &vXiStarPrim);
322 float cutXiBarStar0[3] = {-100.,3.,3.};
323 FindTrackV0Decay(-3324, Particles, vXiBarPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
324 PrimVtx, cutXiBarStar0, 1, 0, &vXiStarBarPrim);
327 float cutXiStarMinusXiPi[3] = {-100.,3.,3.};
328 CombinePartPart(vPi0Prim, vXiPrim, Particles, PrimVtx, cutXiStarMinusXiPi, 1, 3314, 0);
330 float cutXiStarPlusXiPi[3] = {-100.,3.,3.};
331 CombinePartPart(vPi0Prim, vXiBarPrim, Particles, PrimVtx, cutXiStarPlusXiPi, 1, -3314, 0);
334 const float cutOmegaStar[2] = {-100., 3.};
335 for(
unsigned int iPart=0; iPart<vXiStarPrim.size(); iPart++)
336 CombineTrackPart(vRTracks, vField, Particles, vXiStarPrim[iPart], pdgNeg[3],
337 1003334, idNegPrim[3], cutOmegaStar, 0);
339 for(
unsigned int iPart=0; iPart<vXiStarBarPrim.size(); iPart++)
340 CombineTrackPart(vRTracks, vField, Particles, vXiStarBarPrim[iPart], pdgPos[3],
341 -1003334, idPosPrim[3], cutOmegaStar, 0);
343 float cutKStarPlus[3] = {-100.,3.,3.};
344 FindTrackV0Decay(323, Particles, vK0sPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
345 PrimVtx, cutKStarPlus, 1, 0);
347 float cutKStarMinus[3] = {-100.,3.,3.};
348 FindTrackV0Decay(-323, Particles, vK0sPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
349 PrimVtx, cutKStarMinus, 1, 0);
351 float cutSigmaStarPlus[3] = {-100.,3.,3.};
352 FindTrackV0Decay(3224, Particles, vLambdaPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
353 PrimVtx, cutSigmaStarPlus, 1, 0);
355 float cutSigmaStarPlusBar[3] = {-100.,3.,3.};
356 FindTrackV0Decay(-3114, Particles, vLambdaBarPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
357 PrimVtx, cutSigmaStarPlusBar, 1, 0);
359 float cutSigmaStarMinus[3] = {-100.,3.,3.};
360 FindTrackV0Decay(3114, Particles, vLambdaPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
361 PrimVtx, cutSigmaStarMinus, 1, 0);
363 float cutSigmaStarMinusBar[3] = {-100.,3.,3.};
364 FindTrackV0Decay(-3224, Particles, vLambdaBarPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
365 PrimVtx, cutSigmaStarMinusBar, 1, 0);
367 vector<KFParticle> vHdibarion;
368 float cutHdb[3] = {3.,3.,3.};
369 for(
unsigned short iL=0; iL < vLambdaSec.size(); iL++)
373 vector<int> daughterIds;
374 for(
unsigned int iD=0; iD<vLambdaSec[iL].DaughterIds().size(); iD++)
375 daughterIds.push_back(vLambdaSec[iL].DaughterIds()[iD]);
376 FindHyperons(3000, vDaughters, daughterIds, vLambdaSec, vHdibarion, PrimVtx, cutHdb, iL+1);
379 for(
unsigned int iH=0; iH<vHdibarion.size(); iH++)
381 vHdibarion[iH].SetId(Particles.size());
382 Particles.push_back(vHdibarion[iH]);
385 const float cutsD[8][8] = {{ 6., 3., 0.04, 0.3, 3.},
386 { 6., 3., 0.04, 0.3, 3.},
387 { 6., 3., 0.04, 0.3, 3.},
388 { 6., 3., 0.04, 0.3, 3.},
389 { 6., 3., 0.04, 0.3, 3.},
390 { 6., 3., -100., 0.3, -100.},
391 { 6., 3., -100., 0.3, -100.},
392 { 6., 3., -100., 0.3, -100.}};
394 const int DMesLambdcDaughterPDG[5] = { 211, -321, -211, 321, 2212 };
395 const int DMesLambdcMotherPDG[8] = { 421, 411, 100421, 431, 4122, 10421, 10411, 20411 };
396 vector<short>* DMesLambdcIdTrack[5] = {&idPosSec[5],
401 FindDMesLambdac(vRTracks, vField, Particles, DMesLambdcDaughterPDG, DMesLambdcMotherPDG,
402 DMesLambdcIdTrack, PrimVtx, cutsD, ChiToPrimVtx);
404 const int DMesLambdcBarDaughterPDG[5] = { -211, 321, 211, -321, -2212 };
405 const int DMesLambdcBarMotherPDG[8] = { -421, -411, -100421, -431, -4122, -10421, -10411, -20411 };
406 vector<short>* DMesLambdcBarIdTrack[5] = {&idNegSec[5],
411 FindDMesLambdac(vRTracks, vField, Particles, DMesLambdcBarDaughterPDG, DMesLambdcBarMotherPDG,
412 DMesLambdcBarIdTrack, PrimVtx, cutsD, ChiToPrimVtx);