485 for(
int i=0;
i<6;
i++) V[
i]=V1[
i];
492 Ai[0] = C[4]*C[4] - C[2]*C[5];
493 Ai[1] = C[1]*C[5] - C[3]*C[4];
494 Ai[3] = C[2]*C[3] - C[1]*C[4];
495 fvec det = 1./(C[0]*Ai[0] + C[1]*Ai[1] + C[3]*Ai[3]);
499 Ai[2] = ( C[3]*C[3] - C[0]*C[5] )*det;
500 Ai[4] = ( C[0]*C[4] - C[1]*C[3] )*det;
501 Ai[5] = ( C[1]*C[1] - C[0]*C[2] )*det;
505 B[0][0] = C[ 6]*Ai[0] + C[ 7]*Ai[1] + C[ 8]*Ai[3];
506 B[0][1] = C[ 6]*Ai[1] + C[ 7]*Ai[2] + C[ 8]*Ai[4];
507 B[0][2] = C[ 6]*Ai[3] + C[ 7]*Ai[4] + C[ 8]*Ai[5];
509 B[1][0] = C[10]*Ai[0] + C[11]*Ai[1] + C[12]*Ai[3];
510 B[1][1] = C[10]*Ai[1] + C[11]*Ai[2] + C[12]*Ai[4];
511 B[1][2] = C[10]*Ai[3] + C[11]*Ai[4] + C[12]*Ai[5];
513 B[2][0] = C[15]*Ai[0] + C[16]*Ai[1] + C[17]*Ai[3];
514 B[2][1] = C[15]*Ai[1] + C[16]*Ai[2] + C[17]*Ai[4];
515 B[2][2] = C[15]*Ai[3] + C[16]*Ai[4] + C[17]*Ai[5];
517 B[3][0] = C[21]*Ai[0] + C[22]*Ai[1] + C[23]*Ai[3];
518 B[3][1] = C[21]*Ai[1] + C[22]*Ai[2] + C[23]*Ai[4];
519 B[3][2] = C[21]*Ai[3] + C[22]*Ai[4] + C[23]*Ai[5];
521 B[4][0] = C[28]*Ai[0] + C[29]*Ai[1] + C[30]*Ai[3];
522 B[4][1] = C[28]*Ai[1] + C[29]*Ai[2] + C[30]*Ai[4];
523 B[4][2] = C[28]*Ai[3] + C[29]*Ai[4] + C[30]*Ai[5];
525 fvec z[3] = {
m[0]-r[0],
m[1]-r[1],
m[2]-r[2] };
528 fvec AV[6] = { C[0]-V[0], C[1]-V[1], C[2]-V[2],
529 C[3]-V[3], C[4]-V[4], C[5]-V[5] };
531 AVi[0] = AV[4]*AV[4] - AV[2]*AV[5];
532 AVi[1] = AV[1]*AV[5] - AV[3]*AV[4];
533 AVi[2] = AV[3]*AV[3] - AV[0]*AV[5] ;
534 AVi[3] = AV[2]*AV[3] - AV[1]*AV[4];
535 AVi[4] = AV[0]*AV[4] - AV[1]*AV[3] ;
536 AVi[5] = AV[1]*AV[1] - AV[0]*AV[2] ;
538 det = 1./( AV[0]*AVi[0] + AV[1]*AVi[1] + AV[3]*AVi[3] );
542 ( +(AVi[0]*z[0] + AVi[1]*z[1] + AVi[3]*z[2])*z[0]
543 +(AVi[1]*z[0] + AVi[2]*z[1] + AVi[4]*z[2])*z[1]
544 +(AVi[3]*z[0] + AVi[4]*z[1] + AVi[5]*z[2])*z[2] )*det;
550 r[3]+= B[0][0]*z[0] + B[0][1]*z[1] + B[0][2]*z[2];
551 r[4]+= B[1][0]*z[0] + B[1][1]*z[1] + B[1][2]*z[2];
552 r[5]+= B[2][0]*z[0] + B[2][1]*z[1] + B[2][2]*z[2];
553 r[6]+= B[3][0]*z[0] + B[3][1]*z[1] + B[3][2]*z[2];
554 r[7]+= B[4][0]*z[0] + B[4][1]*z[1] + B[4][2]*z[2];
565 d0= B[0][0]*V[0] + B[0][1]*V[1] + B[0][2]*V[3] - C[ 6];
566 d1= B[0][0]*V[1] + B[0][1]*V[2] + B[0][2]*V[4] - C[ 7];
567 d2= B[0][0]*V[3] + B[0][1]*V[4] + B[0][2]*V[5] - C[ 8];
572 C[ 9]+= d0*B[0][0] + d1*B[0][1] + d2*B[0][2];
574 d0= B[1][0]*V[0] + B[1][1]*V[1] + B[1][2]*V[3] - C[10];
575 d1= B[1][0]*V[1] + B[1][1]*V[2] + B[1][2]*V[4] - C[11];
576 d2= B[1][0]*V[3] + B[1][1]*V[4] + B[1][2]*V[5] - C[12];
581 C[13]+= d0*B[0][0] + d1*B[0][1] + d2*B[0][2];
582 C[14]+= d0*B[1][0] + d1*B[1][1] + d2*B[1][2];
584 d0= B[2][0]*V[0] + B[2][1]*V[1] + B[2][2]*V[3] - C[15];
585 d1= B[2][0]*V[1] + B[2][1]*V[2] + B[2][2]*V[4] - C[16];
586 d2= B[2][0]*V[3] + B[2][1]*V[4] + B[2][2]*V[5] - C[17];
591 C[18]+= d0*B[0][0] + d1*B[0][1] + d2*B[0][2];
592 C[19]+= d0*B[1][0] + d1*B[1][1] + d2*B[1][2];
593 C[20]+= d0*B[2][0] + d1*B[2][1] + d2*B[2][2];
595 d0= B[3][0]*V[0] + B[3][1]*V[1] + B[3][2]*V[3] - C[21];
596 d1= B[3][0]*V[1] + B[3][1]*V[2] + B[3][2]*V[4] - C[22];
597 d2= B[3][0]*V[3] + B[3][1]*V[4] + B[3][2]*V[5] - C[23];
602 C[24]+= d0*B[0][0] + d1*B[0][1] + d2*B[0][2];
603 C[25]+= d0*B[1][0] + d1*B[1][1] + d2*B[1][2];
604 C[26]+= d0*B[2][0] + d1*B[2][1] + d2*B[2][2];
605 C[27]+= d0*B[3][0] + d1*B[3][1] + d2*B[3][2];
607 d0= B[4][0]*V[0] + B[4][1]*V[1] + B[4][2]*V[3] - C[28];
608 d1= B[4][0]*V[1] + B[4][1]*V[2] + B[4][2]*V[4] - C[29];
609 d2= B[4][0]*V[3] + B[4][1]*V[4] + B[4][2]*V[5] - C[30];
614 C[31]+= d0*B[0][0] + d1*B[0][1] + d2*B[0][2];
615 C[32]+= d0*B[1][0] + d1*B[1][1] + d2*B[1][2];
616 C[33]+= d0*B[2][0] + d1*B[2][1] + d2*B[2][2];
617 C[34]+= d0*B[3][0] + d1*B[3][1] + d2*B[3][2];
618 C[35]+= d0*B[4][0] + d1*B[4][1] + d2*B[4][2];
1187 vector<L1FieldRegion>& vField, vector<CbmKFParticle>& Particles,
1188 CbmKFVertex& PrimVtx,
const vector<int>& vTrackPDG,
const float cuts[2][3])
1192 static const int NTrackTypes = 8;
1194 int pdgPos[NTrackTypes]={-11,-13, 211, 321, 2212, 211, 321, 2212};
1195 int pdgNeg[NTrackTypes]={ 11, 13,-211,-321,-2212, -211,-321,-2212};
1197 vector<short> idPosSec[NTrackTypes];
1198 vector<short> idNegSec[NTrackTypes];
1200 vector<short> idPosPrim[NTrackTypes];
1201 vector<short> idNegPrim[NTrackTypes];
1203 for(
unsigned short iTr=0; iTr < vRTracks.size(); iTr++)
1207 for(
unsigned short iT=0; iT<5; iT++)
1208 ok = ok && finite(kfTrack.
GetTrack()[iT]);
1209 for(
unsigned short iC=0; iC<15; iC++)
1219 const int pdg = abs(vTrackPDG[iTr]);
1221 short pdgIndex = -1;
1224 case 11: pdgIndex = 0;
break;
1225 case 13: pdgIndex = 1;
break;
1226 case 211: pdgIndex = 2;
break;
1227 case 321: pdgIndex = 3;
break;
1228 case 2212: pdgIndex = 4;
break;
1232 short pdgIndexMax = pdgIndex+incr;
1237 pdgIndexMax = pdgIndex;
1247 if( ChiToPrimVtx[iTr] < cuts[0][0] )
1251 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
1252 idPosPrim[ipdg].push_back(iTr);
1255 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
1256 idNegPrim[ipdg].push_back(iTr);
1261 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
1262 idPosSec[ipdg].push_back(iTr);
1264 for(
int ipdg = pdgIndex; ipdg<=pdgIndexMax; ipdg+=incr )
1265 idNegSec[ipdg].push_back(iTr);
1269 const int nPart = idPosSec[5].size() * idNegSec[5].size()+
1270 idPosSec[5].size() * idNegSec[7].size()+
1271 idPosSec[7].size() * idNegSec[5].size()+
1272 idPosPrim[2].size() * idNegPrim[3].size() +
1273 idPosPrim[3].size() * idNegPrim[2].size() +
1274 idPosPrim[3].size() * idNegPrim[3].size() +
1275 idPosPrim[4].size() * idNegPrim[3].size() +
1276 idPosPrim[3].size() * idNegPrim[4].size() +
1277 idPosPrim[0].size() * idNegPrim[0].size() +
1278 idPosPrim[1].size() * idNegPrim[1].size();
1281 Particles.reserve(vRTracks.size() + nPart);
1283 const float massLambdaPDG = 1.115683;
1284 const float massK0sPDG = 0.497614;
1285 const float massKsiPDG = 1.32171;
1287 for(
unsigned short iTr=0; iTr < vRTracks.size(); iTr++) {
1292 tmp.
SetId(Particles.size());
1293 Particles.push_back(tmp);
1296 vector<float> vLambdaTopoChi2Ndf;
1297 vector<CbmKFParticle> vLambdaSec;
1298 vector<CbmKFParticle> vLambdaPrim;
1300 vector<float> vLambdaBarTopoChi2Ndf;
1301 vector<CbmKFParticle> vLambdaBarSec;
1302 vector<CbmKFParticle> vLambdaBarPrim;
1304 vector<float> vK0sTopoChi2Ndf;
1305 vector<CbmKFParticle> vK0sPrim;
1307 vector<CbmKFParticle> vXiPrim;
1308 vector<CbmKFParticle> vXiSec;
1309 vector<CbmKFParticle> vXiBarPrim;
1311 vector<CbmKFParticle> vXiStarPrim;
1312 vector<CbmKFParticle> vXiStarBarPrim;
1314 const float SecCuts[3] = {3.f,5.f,4.f};
1317 idNegSec[5], idPosSec[5], PrimVtx, cuts[0], 0, &vK0sTopoChi2Ndf,
1318 SecCuts, massK0sPDG, 0.0022, &vK0sPrim, 0);
1321 idNegSec[5], idPosSec[7], PrimVtx, cuts[1], 0,&vLambdaTopoChi2Ndf,
1322 SecCuts, massLambdaPDG, 0.0012, &vLambdaPrim, &vLambdaSec);
1325 idPosSec[5], idNegSec[4], PrimVtx, cuts[1], 0, &vLambdaBarTopoChi2Ndf,
1326 SecCuts, massLambdaPDG, 0.0012, &vLambdaBarPrim, &vLambdaBarSec);
1329 idPosPrim[3], idNegPrim[2], PrimVtx, cuts[1], 1);
1332 idNegPrim[3], idPosPrim[2], PrimVtx, cuts[1], 1);
1335 idNegPrim[3], idPosPrim[4], PrimVtx, cuts[1], 1);
1338 idNegPrim[4], idPosPrim[3], PrimVtx, cuts[1], 1);
1341 idNegPrim[3], idPosPrim[3], PrimVtx, cuts[1], 1);
1348 idNegPrim[0], idPosPrim[0], PrimVtx, cuts[1], 1);
1350 idNegSec[0], idPosSec[0], PrimVtx, cuts[1], 0);
1352 idNegSec[0], idPosPrim[0], PrimVtx, cuts[1], 0);
1354 idNegPrim[0], idPosSec[0], PrimVtx, cuts[1], 0);
1357 idNegPrim[0], idPosPrim[0], PrimVtx, cuts[1], 1, 1.f);
1360 idNegPrim[1], idPosPrim[1], PrimVtx, cuts[1], 1, 1.f);
1363 idNegPrim[0], idPosPrim[0], PrimVtx, cuts[1], 1, 0.2f);
1365 const float PCut = 1.f;
1367 idNegPrim[1], idPosPrim[1], PrimVtx, cuts[1], 1, 0.2f, -100, 0, &PCut);
1374 float cutXi[3] = {3.,5.,6.};
1375 FindTrackV0Decay(3312, Particles, vLambdaSec, vRTracks, vField, pdgNeg[5], idNegSec[5],
1376 PrimVtx, cutXi, 0, 0, &vXiPrim, massKsiPDG, 0.002 );
1379 float cutLL[3] = {6.,10000000.,3.};
1380 float cutLL2[3] = {6.,3.,3.};
1381 vector<CbmKFParticle> vLL;
1382 FindTrackV0Decay(3002, vLL, vLambdaSec, vRTracks, vField, pdgNeg[5], idNegSec[5],
1383 PrimVtx, cutLL, 0, &ChiToPrimVtx);
1386 FindTrackV0Decay(3001, Particles, vLL, vRTracks, vField, pdgPos[4], idPosSec[4],
1387 PrimVtx, cutLL2, 0, &ChiToPrimVtx);
1389 float cutXiPlus[3] = {3.,5.,6.};
1390 FindTrackV0Decay(-3312, Particles, vLambdaBarSec, vRTracks, vField, pdgPos[5], idPosSec[5],
1391 PrimVtx, cutXiPlus, 0, 0, &vXiBarPrim, massKsiPDG, 0.002);
1393 float cutOmega[3] = {3.,3.,3.};
1394 FindTrackV0Decay(3334, Particles, vLambdaSec, vRTracks, vField, pdgNeg[6], idNegSec[6],
1395 PrimVtx, cutOmega, 0, &ChiToPrimVtx);
1397 float cutOmegaPlus[3] = {3.,3.,3.};
1398 FindTrackV0Decay(-3334, Particles, vLambdaBarSec, vRTracks, vField, pdgPos[6], idPosSec[6],
1399 PrimVtx, cutOmegaPlus, 0, &ChiToPrimVtx);
1401 float cutXiStarMinus[3] = {-100.,10000.,3.};
1402 FindTrackV0Decay(1003314, Particles, vLambdaPrim, vRTracks, vField, pdgNeg[3], idNegPrim[3],
1403 PrimVtx, cutXiStarMinus, 1);
1405 float cutXiStarPlus[3] = {-100.,10000.,3.};
1406 FindTrackV0Decay(-1003314, Particles, vLambdaBarPrim, vRTracks, vField, pdgPos[3], idPosPrim[3],
1407 PrimVtx, cutXiStarPlus, 1);
1413 float cutXiStar0[3] = {-100.,10000.,3.};
1414 FindTrackV0Decay(3324, Particles, vXiPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
1415 PrimVtx, cutXiStar0, 1, 0, &vXiStarPrim);
1417 float cutXiBarStar0[3] = {-100.,10000.,3.};
1418 FindTrackV0Decay(-3324, Particles, vXiBarPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
1419 PrimVtx, cutXiBarStar0, 1, 0, &vXiStarBarPrim);
1421 const float cutOmegaStar[2] = {-100., 3.};
1422 for(
unsigned int iPart=0; iPart<vXiStarPrim.size(); iPart++)
1423 CombineTrackPart(vRTracks, vField, Particles, vXiStarPrim[iPart], pdgNeg[3],
1424 1003334, idNegPrim[3], cutOmegaStar, 0);
1426 for(
unsigned int iPart=0; iPart<vXiStarBarPrim.size(); iPart++)
1427 CombineTrackPart(vRTracks, vField, Particles, vXiStarBarPrim[iPart], pdgPos[3],
1428 -1003334, idPosPrim[3], cutOmegaStar, 0);
1430 float cutKStarPlus[3] = {-100.,10000.,3.};
1431 FindTrackV0Decay(323, Particles, vK0sPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
1432 PrimVtx, cutKStarPlus, 1, 0);
1434 float cutKStarMinus[3] = {-100.,10000.,3.};
1435 FindTrackV0Decay(-323, Particles, vK0sPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
1436 PrimVtx, cutKStarMinus, 1, 0);
1438 float cutSigmaStarPlus[3] = {-100.,10000.,3.};
1439 FindTrackV0Decay(3224, Particles, vLambdaPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
1440 PrimVtx, cutSigmaStarPlus, 1, 0);
1442 float cutSigmaStarPlusBar[3] = {-100.,10000.,3.};
1443 FindTrackV0Decay(-3114, Particles, vLambdaBarPrim, vRTracks, vField, pdgPos[5], idPosPrim[5],
1444 PrimVtx, cutSigmaStarPlusBar, 1, 0);
1446 float cutSigmaStarMinus[3] = {-100.,10000.,3.};
1447 FindTrackV0Decay(3114, Particles, vLambdaPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
1448 PrimVtx, cutSigmaStarMinus, 1, 0);
1450 float cutSigmaStarMinusBar[3] = {-100.,10000.,3.};
1451 FindTrackV0Decay(-3224, Particles, vLambdaBarPrim, vRTracks, vField, pdgNeg[5], idNegPrim[5],
1452 PrimVtx, cutSigmaStarMinusBar, 1, 0);
1454 vector<CbmKFParticle> vHdibarion;
1455 float cutHdb[3] = {3.,3.,3.};
1456 for(
unsigned short iL=0; iL < vLambdaSec.size(); iL++)
1460 vector<int> daughterIds;
1461 for(
unsigned int iD=0; iD<vLambdaSec[iL].DaughterIds().size(); iD++)
1462 daughterIds.push_back(vLambdaSec[iL].DaughterIds()[iD]);
1463 FindHyperons(3000, vDaughters, daughterIds, vLambdaSec, vHdibarion, PrimVtx, cutHdb, iL+1);
1466 for(
unsigned int iH=0; iH<vHdibarion.size(); iH++)
1468 vHdibarion[iH].SetId(Particles.size());
1469 Particles.push_back(vHdibarion[iH]);
1472 const float cutsD[8][8] = {{ 6., 3., 0.04, 0.3, 3.},
1473 { 6., 3., 0.04, 0.3, 3.},
1474 { 6., 3., 0.04, 0.3, 3.},
1475 { 6., 3., 0.04, 0.3, 3.},
1476 { 6., 3., 0.04, 0.3, 3.},
1477 { 6., 3., -100., 0.3, -100.},
1478 { 6., 3., -100., 0.3, -100.},
1479 { 6., 3., -100., 0.3, -100.}};
1481 const int DMesLambdcDaughterPDG[5] = { 211, -321, -211, 321, 2212 };
1482 const int DMesLambdcMotherPDG[8] = { 421, 411, 100421, 431, 4122, 10421, 10411, 20411 };
1483 vector<short>* DMesLambdcIdTrack[5] = {&idPosSec[5],
1488 FindDMesLambdac(vRTracks, vField, Particles, DMesLambdcDaughterPDG, DMesLambdcMotherPDG,
1489 DMesLambdcIdTrack, PrimVtx, cutsD, ChiToPrimVtx);
1491 const int DMesLambdcBarDaughterPDG[5] = { -211, 321, 211, -321, -2212 };
1492 const int DMesLambdcBarMotherPDG[8] = { -421, -411, -100421, -431, -4122, -10421, -10411, -20411 };
1493 vector<short>* DMesLambdcBarIdTrack[5] = {&idNegSec[5],
1498 FindDMesLambdac(vRTracks, vField, Particles, DMesLambdcBarDaughterPDG, DMesLambdcBarMotherPDG,
1499 DMesLambdcBarIdTrack, PrimVtx, cutsD, ChiToPrimVtx);