18 vector<float>& ChiToPrimVtx,
19 vector<L1FieldRegion>& vField,
20 vector<KFParticle>& Particles,
22 const vector<int>& vTrackPDG,
23 const float cuts[2][3])
43 static const int NTrackTypes = 8;
45 int pdgPos[NTrackTypes] = {-11, -13, 211, 321, 2212, 211, 321, 2212};
46 int pdgNeg[NTrackTypes] = {11, 13, -211, -321, -2212, -211, -321, -2212};
48 vector<short> idPosSec[NTrackTypes];
49 vector<short> idNegSec[NTrackTypes];
51 vector<short> idPosPrim[NTrackTypes];
52 vector<short> idNegPrim[NTrackTypes];
54 for (
unsigned short iTr = 0; iTr < vRTracks.size(); iTr++) {
57 for (
unsigned short iT = 0; iT < 5; iT++)
58 ok = ok && finite(kfTrack.
GetTrack()[iT]);
59 for (
unsigned short iC = 0; iC < 15; iC++)
70 const int pdg =
abs(vTrackPDG[iTr]);
92 short pdgIndexMax = pdgIndex + incr;
96 pdgIndexMax = pdgIndex;
105 if (ChiToPrimVtx[iTr] < cuts[0][0]) {
107 for (
int ipdg = pdgIndex; ipdg <= pdgIndexMax; ipdg += incr)
108 idPosPrim[ipdg].push_back(iTr);
111 for (
int ipdg = pdgIndex; ipdg <= pdgIndexMax; ipdg += incr)
112 idNegPrim[ipdg].push_back(iTr);
115 for (
int ipdg = pdgIndex; ipdg <= pdgIndexMax; ipdg += incr)
116 idPosSec[ipdg].push_back(iTr);
118 for (
int ipdg = pdgIndex; ipdg <= pdgIndexMax; ipdg += incr)
119 idNegSec[ipdg].push_back(iTr);
123 const int nPart = idPosSec[5].size() * idNegSec[5].size() + idPosSec[5].size() * idNegSec[7].size()
124 + idPosSec[7].size() * idNegSec[5].size() + idPosPrim[2].size() * idNegPrim[3].size()
125 + idPosPrim[3].size() * idNegPrim[2].size() + idPosPrim[3].size() * idNegPrim[3].size()
126 + idPosPrim[4].size() * idNegPrim[3].size() + idPosPrim[3].size() * idNegPrim[4].size()
127 + idPosPrim[0].size() * idNegPrim[0].size() + 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};
176 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[5], pdgPos[5], 310, idNegSec[5], idPosSec[5], PrimVtx,
177 cuts[0], 0, &vK0sTopoChi2Ndf, SecCuts, massK0sPDG, 0.0022, &vK0sPrim, 0);
179 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[5], pdgPos[7], 3122, idNegSec[5], idPosSec[7], PrimVtx,
180 cuts[1], 0, &vLambdaTopoChi2Ndf, SecCuts, massLambdaPDG, 0.0012, &vLambdaPrim, &vLambdaSec);
182 Find2DaughterDecay(vRTracks, vField, Particles, pdgPos[5], pdgNeg[4], -3122, idPosSec[5], idNegSec[4], PrimVtx,
183 cuts[1], 0, &vLambdaBarTopoChi2Ndf, SecCuts, massLambdaPDG, 0.0012, &vLambdaBarPrim,
186 Find2DaughterDecay(vRTracks, vField, Particles, pdgPos[3], pdgNeg[2], 313, idPosPrim[3], idNegPrim[2], PrimVtx,
189 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[3], pdgPos[2], -313, idNegPrim[3], idPosPrim[2], PrimVtx,
192 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[3], pdgPos[4], 3124, idNegPrim[3], idPosPrim[4], PrimVtx,
195 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[4], pdgPos[3], -3124, idNegPrim[4], idPosPrim[3], PrimVtx,
198 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[3], pdgPos[3], 333, idNegPrim[3], idPosPrim[3], PrimVtx,
206 float SecCutsGamma[3] = {3, 3, -100};
207 float gammaCuts[3] = {3, 100000, -100};
208 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[0], pdgPos[0], 22, idNegPrim[0], idPosPrim[0], PrimVtx,
209 gammaCuts, 1, &vGammaTopoChi2Ndf, SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
210 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[0], pdgPos[0], 22, idNegSec[0], idPosSec[0], PrimVtx,
211 gammaCuts, 0, &vGammaTopoChi2Ndf, SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
212 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[0], pdgPos[0], 22, idNegSec[0], idPosPrim[0], PrimVtx,
213 gammaCuts, 0, &vGammaTopoChi2Ndf, SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
214 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[0], pdgPos[0], 22, idNegPrim[0], idPosSec[0], PrimVtx,
215 gammaCuts, 0, &vGammaTopoChi2Ndf, SecCutsGamma, 0, 0.006, &vGammaPrim, &vGammaSec);
217 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[0], pdgPos[0], 443, idNegPrim[0], idPosPrim[0], PrimVtx,
220 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[1], pdgPos[1], 100443, idNegPrim[1], idPosPrim[1], PrimVtx,
223 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[0], pdgPos[0], 100113, idNegPrim[0], idPosPrim[0], PrimVtx,
226 const float PCut = 1.f;
227 Find2DaughterDecay(vRTracks, vField, Particles, pdgNeg[1], pdgPos[1], 200113, idNegPrim[1], idPosPrim[1], PrimVtx,
228 cuts[1], 1, 0.2f, -100, 0, &PCut);
235 float cutSigma0[3] = {-100, 3, 3};
237 CombinePartPart(vGammaPrim, vLambdaPrim, Particles, PrimVtx, cutSigma0, 1, 3212, 0);
240 CombinePartPart(vGammaPrim, vLambdaBarPrim, Particles, PrimVtx, cutSigma0, 1, -3212, 0);
243 float cutPi0[3] = {-100, 1000000, 3};
244 float cutPi0Sec[2] = {3, 3};
245 CombinePartPart(vGammaPrim, vGammaPrim, Particles, PrimVtx, cutPi0, 1, 111, 1, &vPi0Prim, &vPi0Sec, cutPi0Sec,
247 CombinePartPart(vGammaPrim, vGammaSec, Particles, PrimVtx, cutPi0, 0, 111, 0, &vPi0Prim, &vPi0Sec, cutPi0Sec,
249 CombinePartPart(vGammaSec, vGammaPrim, Particles, PrimVtx, cutPi0, 0, 111, 0, &vPi0Prim, &vPi0Sec, cutPi0Sec,
251 CombinePartPart(vGammaSec, vGammaSec, Particles, PrimVtx, cutPi0, 0, 111, 1, &vPi0Prim, &vPi0Sec, cutPi0Sec,
255 float cutSigmaPlus[3] = {-100., 3., 3.};
256 FindTrackV0Decay(3222, Particles, vPi0Sec, vRTracks, vField, pdgPos[4], idPosSec[4], PrimVtx, cutSigmaPlus, 0, 0);
258 float cutSigmaPlusBar[3] = {-100., 3., 3.};
259 FindTrackV0Decay(-3222, Particles, vPi0Sec, vRTracks, vField, pdgNeg[4], idNegSec[4], PrimVtx, cutSigmaPlusBar, 0,
262 CombinePartPart(vPi0Prim, vLambdaPrim, Particles, PrimVtx, cutSigma0, 1, 3214, 0);
264 CombinePartPart(vPi0Prim, vLambdaBarPrim, Particles, PrimVtx, cutSigma0, 1, -3214, 0);
266 CombinePartPart(vPi0Sec, vLambdaSec, Particles, PrimVtx, cutSigma0, 0, 3322, 0);
268 CombinePartPart(vPi0Sec, vLambdaBarSec, Particles, PrimVtx, cutSigma0, 0, -3322, 0);
271 float cutXi[3] = {10., 5., 6.};
273 FindTrackV0Decay(3312, Particles, vLambdaSec, vRTracks, vField, pdgNeg[5], idNegSec[5], PrimVtx, cutXi, 0, 0,
274 &vXiPrim, massKsiPDG, 0.002);
276 float cutLL[3] = {10., 10000000., 3.};
277 float cutLL2[3] = {10., 3., 3.};
278 vector<KFParticle> vLL;
279 FindTrackV0Decay(3002, vLL, vLambdaSec, vRTracks, vField, pdgNeg[5], idNegSec[5], PrimVtx, cutLL, 0, &ChiToPrimVtx);
282 FindTrackV0Decay(3001, Particles, vLL, vRTracks, vField, pdgPos[4], idPosSec[4], PrimVtx, cutLL2, 0, &ChiToPrimVtx);
284 float cutXiPlus[3] = {10., 5., 6.};
285 FindTrackV0Decay(-3312, Particles, vLambdaBarSec, vRTracks, vField, pdgPos[5], idPosSec[5], PrimVtx, cutXiPlus, 0,
286 0, &vXiBarPrim, massKsiPDG, 0.002);
288 float cutOmega[3] = {10., 3., 3.};
289 FindTrackV0Decay(3334, Particles, vLambdaSec, vRTracks, vField, pdgNeg[6], idNegSec[6], PrimVtx, cutOmega, 0,
292 float cutOmegaPlus[3] = {10., 3., 3.};
293 FindTrackV0Decay(-3334, Particles, vLambdaBarSec, vRTracks, vField, pdgPos[6], idPosSec[6], PrimVtx, cutOmegaPlus,
296 float cutXiStarMinus[3] = {-100., 3., 3.};
297 FindTrackV0Decay(1003314, Particles, vLambdaPrim, vRTracks, vField, pdgNeg[3], idNegPrim[3], PrimVtx,
300 float cutXiStarPlus[3] = {-100., 3., 3.};
301 FindTrackV0Decay(-1003314, Particles, vLambdaBarPrim, vRTracks, vField, pdgPos[3], idPosPrim[3], PrimVtx,
308 float cutXiStar0[3] = {-100., 3., 3.};
309 FindTrackV0Decay(3324, Particles, vXiPrim, vRTracks, vField, pdgPos[5], idPosPrim[5], PrimVtx, cutXiStar0, 1, 0,
312 float cutXiBarStar0[3] = {-100., 3., 3.};
313 FindTrackV0Decay(-3324, Particles, vXiBarPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5], PrimVtx, cutXiBarStar0, 1,
317 float cutXiStarMinusXiPi[3] = {-100., 3., 3.};
318 CombinePartPart(vPi0Prim, vXiPrim, Particles, PrimVtx, cutXiStarMinusXiPi, 1, 3314, 0);
320 float cutXiStarPlusXiPi[3] = {-100., 3., 3.};
321 CombinePartPart(vPi0Prim, vXiBarPrim, Particles, PrimVtx, cutXiStarPlusXiPi, 1, -3314, 0);
324 const float cutOmegaStar[2] = {-100., 3.};
325 for (
unsigned int iPart = 0; iPart < vXiStarPrim.size(); iPart++)
326 CombineTrackPart(vRTracks, vField, Particles, vXiStarPrim[iPart], pdgNeg[3], 1003334, idNegPrim[3],
329 for (
unsigned int iPart = 0; iPart < vXiStarBarPrim.size(); iPart++)
330 CombineTrackPart(vRTracks, vField, Particles, vXiStarBarPrim[iPart], pdgPos[3], -1003334, idPosPrim[3],
333 float cutKStarPlus[3] = {-100., 3., 3.};
334 FindTrackV0Decay(323, Particles, vK0sPrim, vRTracks, vField, pdgPos[5], idPosPrim[5], PrimVtx, cutKStarPlus, 1, 0);
336 float cutKStarMinus[3] = {-100., 3., 3.};
337 FindTrackV0Decay(-323, Particles, vK0sPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5], PrimVtx, cutKStarMinus, 1,
340 float cutSigmaStarPlus[3] = {-100., 3., 3.};
341 FindTrackV0Decay(3224, Particles, vLambdaPrim, vRTracks, vField, pdgPos[5], idPosPrim[5], PrimVtx, cutSigmaStarPlus,
344 float cutSigmaStarPlusBar[3] = {-100., 3., 3.};
345 FindTrackV0Decay(-3114, Particles, vLambdaBarPrim, vRTracks, vField, pdgPos[5], idPosPrim[5], PrimVtx,
346 cutSigmaStarPlusBar, 1, 0);
348 float cutSigmaStarMinus[3] = {-100., 3., 3.};
349 FindTrackV0Decay(3114, Particles, vLambdaPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5], PrimVtx,
350 cutSigmaStarMinus, 1, 0);
352 float cutSigmaStarMinusBar[3] = {-100., 3., 3.};
353 FindTrackV0Decay(-3224, Particles, vLambdaBarPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5], PrimVtx,
354 cutSigmaStarMinusBar, 1, 0);
356 vector<KFParticle> vHdibarion;
357 float cutHdb[3] = {3., 3., 3.};
358 for (
unsigned short iL = 0; iL < vLambdaSec.size(); iL++) {
361 vector<int> daughterIds;
362 for (
unsigned int iD = 0; iD < vLambdaSec[iL].DaughterIds().size(); iD++)
363 daughterIds.push_back(vLambdaSec[iL].DaughterIds()[iD]);
364 FindHyperons(3000, vDaughters, daughterIds, vLambdaSec, vHdibarion, PrimVtx, cutHdb, iL + 1);
367 for (
unsigned int iH = 0; iH < vHdibarion.size(); iH++) {
368 vHdibarion[iH].SetId(Particles.size());
369 Particles.push_back(vHdibarion[iH]);
372 const float cutsD[8][8] = {{6., 3., 0.04, 0.3, 3.},
373 {6., 3., 0.04, 0.3, 3.},
374 {6., 3., 0.04, 0.3, 3.},
375 {6., 3., 0.04, 0.3, 3.},
376 {6., 3., 0.04, 0.3, 3.},
377 {6., 3., -100., 0.3, -100.},
378 {6., 3., -100., 0.3, -100.},
379 {6., 3., -100., 0.3, -100.}};
381 const int DMesLambdcDaughterPDG[5] = {211, -321, -211, 321, 2212};
382 const int DMesLambdcMotherPDG[8] = {421, 411, 100421, 431, 4122, 10421, 10411, 20411};
383 vector<short>* DMesLambdcIdTrack[5] = {&idPosSec[5], &idNegSec[3], &idNegSec[5], &idPosSec[3], &idPosSec[4]};
384 FindDMesLambdac(vRTracks, vField, Particles, DMesLambdcDaughterPDG, DMesLambdcMotherPDG, DMesLambdcIdTrack, PrimVtx,
385 cutsD, ChiToPrimVtx);
387 const int DMesLambdcBarDaughterPDG[5] = {-211, 321, 211, -321, -2212};
388 const int DMesLambdcBarMotherPDG[8] = {-421, -411, -100421, -431, -4122, -10421, -10411, -20411};
389 vector<short>* DMesLambdcBarIdTrack[5] = {&idNegSec[5], &idPosSec[3], &idPosSec[5], &idNegSec[3], &idNegSec[4]};
390 FindDMesLambdac(vRTracks, vField, Particles, DMesLambdcBarDaughterPDG, DMesLambdcBarMotherPDG, DMesLambdcBarIdTrack,
391 PrimVtx, cutsD, ChiToPrimVtx);