21#include "GPUParam.inc" 
   29  mOrigTrack = sectorTr;
 
   33  mParam.mDzDs = t.GetDzDs();
 
   34  mParam.mSinPhi = t.GetSinPhi();
 
   35  mParam.mQPt = t.GetQPt();
 
   36  mParam.mCosPhi = CAMath::Sqrt(1.f - mParam.mSinPhi * mParam.mSinPhi);
 
   37  mParam.mSecPhi = 1.f / mParam.mCosPhi;
 
   40  mTOffset = merger->Param().par.continuousTracking ? merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convZOffsetToVertexTime(sector, t.GetZOffset(), merger->Param().continuousMaxTimeBin) : 0;
 
   41  mNClusters = sectorTr->NHits();
 
 
   46  mOrigTrack = sectorTr;
 
   47  mParam.mX = trk.GetX();
 
   48  mParam.mY = trk.GetY();
 
   49  mParam.mZ = trk.GetZ();
 
   50  mParam.mDzDs = trk.GetDzDs();
 
   51  mParam.mSinPhi = trk.GetSinPhi();
 
   52  mParam.mQPt = trk.GetQPt();
 
   53  mParam.mCosPhi = CAMath::Sqrt(1.f - mParam.mSinPhi * mParam.mSinPhi);
 
   54  mParam.mSecPhi = 1.f / mParam.mCosPhi;
 
   57  mTOffset = trk.GetTOffset();
 
   58  mNClusters = sectorTr->NHits();
 
   59  mParam.mC0 = trk.GetCov(0);
 
   60  mParam.mC2 = trk.GetCov(2);
 
   61  mParam.mC3 = trk.GetCov(3);
 
   62  mParam.mC5 = trk.GetCov(5);
 
   63  mParam.mC7 = trk.GetCov(7);
 
   64  mParam.mC9 = trk.GetCov(9);
 
   65  mParam.mC10 = trk.GetCov(10);
 
   66  mParam.mC12 = trk.GetCov(12);
 
   67  mParam.mC14 = trk.GetCov(14);
 
   72  mParam2.mX = trk.GetX();
 
   73  mParam2.mY = trk.GetY();
 
   74  mParam2.mZ = trk.GetZ();
 
   75  mParam2.mDzDs = trk.GetDzDs();
 
   76  mParam2.mSinPhi = trk.GetSinPhi();
 
   77  mParam2.mQPt = trk.GetQPt();
 
   78  mParam2.mCosPhi = CAMath::Sqrt(1.f - mParam2.mSinPhi * mParam2.mSinPhi);
 
   79  mParam2.mSecPhi = 1.f / mParam2.mCosPhi;
 
   80  mParam2.mC0 = trk.GetCov(0);
 
   81  mParam2.mC2 = trk.GetCov(2);
 
   82  mParam2.mC3 = trk.GetCov(3);
 
   83  mParam2.mC5 = trk.GetCov(5);
 
   84  mParam2.mC7 = trk.GetCov(7);
 
   85  mParam2.mC9 = trk.GetCov(9);
 
   86  mParam2.mC10 = trk.GetCov(10);
 
   87  mParam2.mC12 = trk.GetCov(12);
 
   88  mParam2.mC14 = trk.GetCov(14);
 
   97  const GPUTPCTracker& trk = merger->GetConstantMem()->tpcTrackers[iSector];
 
   98  const GPUTPCHitId& ic = trk.TrackHits()[mOrigTrack->FirstHitID() + mOrigTrack->NHits() - 1];
 
   99  index = trk.Data().ClusterDataIndex(trk.Data().Row(ic.RowIndex()), ic.HitIndex()) + merger->GetConstantMem()->ioPtrs.clustersNative->clusterOffset[iSector][0];
 
  101  const ClusterNative& cl = merger->GetConstantMem()->ioPtrs.clustersNative->clustersLinear[
index];
 
  102  GPUTPCConvertImpl::convert(*merger->GetConstantMem(), iSector, 
row, cl.getPad(), cl.getTime(), lastX, 
y, 
z);
 
  106  float bz = -merger->Param().bzCLight;
 
  108  float k = mParam.mQPt * bz;
 
  109  float dx = (1.f / N) * (lastX - mParam.mX);
 
  111  float dxBz = dx * bz;
 
  112  float kdx205 = 2.f + kdx * kdx * 0.5f;
 
  115    merger->Param().GetClusterErrors2(iSector, 0, mParam.mZ, mParam.mSinPhi, mParam.mDzDs, -1.f, 0.f, 0.f, mParam.mC0, mParam.mC2); 
 
  116#ifndef GPUCA_TPC_GEOMETRY_O2 
  118    merger->Param().GetClusterErrorsSeeding2(iSector, 0, mParam.mZ, mParam.mSinPhi, mParam.mDzDs, -1.f, C0a, C2a);
 
  119    if (C0a > mParam.mC0) {
 
  122    if (C2a > mParam.mC2) {
 
  136  for (int32_t iStep = 0; iStep < N; iStep++) {
 
  140      float ex = mParam.mCosPhi;
 
  141      float ey = mParam.mSinPhi;
 
  142      float ey1 = kdx + ey;
 
  143      if (CAMath::Abs(ey1) > maxSinPhi) {
 
  144        if (ey1 > maxSinPhi && ey1 < maxSinPhi + sinPhiMargin) {
 
  145          ey1 = maxSinPhi - 0.01f;
 
  146        } 
else if (ey1 > -maxSinPhi - sinPhiMargin) {
 
  147          ey1 = -maxSinPhi + 0.01f;
 
  154      float ex1 = CAMath::Sqrt(1.f - ey1 * ey1);
 
  157      float dxcci = dx / 
cc;
 
  159      float dy = dxcci * ss;
 
  160      float norm2 = 1.f + ey * ey1 + ex * ex1;
 
  161      float dl = dxcci * CAMath::Sqrt(norm2 + norm2);
 
  165        float dSin = 0.5f * k * dl;
 
  166        float a = dSin * dSin;
 
  167        const float k2 = 1.f / 6.f;
 
  168        const float k4 = 3.f / 40.f;
 
  169        dS = dl + dl * 
a * (
k2 + 
a * (k4)); 
 
  172      float dz = dS * mParam.mDzDs;
 
  173      float ex1i = 1.f / ex1;
 
  175        merger->Param().GetClusterErrors2(iSector, 0, mParam.mZ, mParam.mSinPhi, mParam.mDzDs, -1.f, 0.f, 0.f, err2Y, err2Z); 
 
  176#ifndef GPUCA_TPC_GEOMETRY_O2 
  178        merger->Param().GetClusterErrorsSeeding2(iSector, 0, mParam.mZ, mParam.mSinPhi, mParam.mDzDs, -1.f, C0a, C2a);
 
  188      float hh = kdx205 * dxcci * ex1i;
 
  189      float h2 = hh * mParam.mSecPhi;
 
  194      mParam.mSinPhi = ey1;
 
  195      mParam.mCosPhi = ex1;
 
  196      mParam.mSecPhi = ex1i;
 
  198      float h4 = bz * dxcci * hh;
 
  200      float c20 = mParam.mC3;
 
  201      float c22 = mParam.mC5;
 
  202      float c31 = mParam.mC7;
 
  203      float c33 = mParam.mC9;
 
  204      float c40 = mParam.mC10;
 
  205      float c42 = mParam.mC12;
 
  206      float c44 = mParam.mC14;
 
  208      float c20ph4c42 = c20 + h4 * c42;
 
  209      float h2c22 = h2 * c22;
 
  210      float h4c44 = h4 * c44;
 
  211      float n7 = c31 + dS * c33;
 
  212      float n10 = c40 + h2 * c42 + h4c44;
 
  213      float n12 = c42 + dxBz * c44;
 
  215      mParam.mC0 += h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40);
 
  217      mParam.mC3 = c20ph4c42 + h2c22 + dxBz * n10;
 
  220      mParam.mC5 = c22 + dxBz * (c42 + n12);
 
  223      mParam.mC2 += dS * (c31 + n7);
 
  229    float c00 = mParam.mC0, c11 = mParam.mC2, c20 = mParam.mC3, c31 = mParam.mC7, c40 = mParam.mC10;
 
  231    float mS0 = 1.f / (err2Y + c00);
 
  232    float mS2 = 1.f / (err2Z + c11);
 
  236    float k00, k11, k20, k31, k40;
 
  242    mParam.mC0 -= k00 * c00;
 
  243    mParam.mC5 -= k20 * c20;
 
  244    mParam.mC10 -= k00 * c40;
 
  245    mParam.mC12 -= k40 * c20;
 
  246    mParam.mC3 -= k20 * c00;
 
  247    mParam.mC14 -= k40 * c40;
 
  252    mParam.mC7 -= k31 * c11;
 
  253    mParam.mC2 -= k11 * c11;
 
  254    mParam.mC9 -= k31 * c31;
 
  259  bool ok = CAMath::Finite(mParam.mX) && CAMath::Finite(mParam.mY) && CAMath::Finite(mParam.mZ) && CAMath::Finite(mParam.mSinPhi) && CAMath::Finite(mParam.mDzDs) && CAMath::Finite(mParam.mQPt) && CAMath::Finite(mParam.mCosPhi) && CAMath::Finite(mParam.mSecPhi) && CAMath::Finite(mTOffset) && CAMath::Finite(mParam.mC0) && CAMath::Finite(mParam.mC2) &&
 
  260            CAMath::Finite(mParam.mC3) && CAMath::Finite(mParam.mC5) && CAMath::Finite(mParam.mC7) && CAMath::Finite(mParam.mC9) && CAMath::Finite(mParam.mC10) && CAMath::Finite(mParam.mC12) && CAMath::Finite(mParam.mC14);
 
  262  if (mParam.mC0 <= 0.f || mParam.mC2 <= 0.f || mParam.mC5 <= 0.f || mParam.mC9 <= 0.f || mParam.mC14 <= 0.f || mParam.mC0 > 5.f || mParam.mC2 > 5.f || mParam.mC5 > 2.f || mParam.mC9 > 2.f) {
 
  267    ok = ok && (mParam.mC3 * mParam.mC3 <= mParam.mC5 * mParam.mC0) && (mParam.mC7 * mParam.mC7 <= mParam.mC9 * mParam.mC2) && (mParam.mC10 * mParam.mC10 <= mParam.mC14 * mParam.mC0) && (mParam.mC12 * mParam.mC12 <= mParam.mC14 * mParam.mC5);
 
  276  if (CAMath::Abs(
x - mParam2.mX) < CAMath::Abs(
x - mParam.mX) && mParam2.mX > 0) {
 
  277    return TransportToX<1>(merger, 
x, Bz, 
b, maxSinPhi, doCov);
 
  279    return TransportToX<0>(merger, 
x, Bz, 
b, maxSinPhi, doCov);
 
  286  const auto& 
param = I ? mParam2 : mParam;
 
  288  float ex = 
param.mCosPhi;
 
  289  float ey = 
param.mSinPhi;
 
  290  float k = 
param.mQPt * Bz;
 
  292  float ey1 = k * dx + ey;
 
  294  if (CAMath::Abs(ey1) > maxSinPhi) {
 
  298  float ex1 = CAMath::Sqrt(1.f - ey1 * ey1);
 
  299  float dxBz = dx * Bz;
 
  303  float dxcci = dx / 
cc;
 
  304  float norm2 = 1.f + ey * ey1 + ex * ex1;
 
  306  float dy = dxcci * ss;
 
  310    float dl = dxcci * CAMath::Sqrt(norm2 + norm2);
 
  311    float dSin = 0.5f * k * dl;
 
  312    float a = dSin * dSin;
 
  313    const float k2 = 1.f / 6.f;
 
  314    const float k4 = 3.f / 40.f;
 
  316    dS = dl + dl * 
a * (
k2 + 
a * (k4)); 
 
  319  float dz = dS * 
param.mDzDs;
 
  321  b.SetPar(0, 
param.mY + dy);
 
  322  b.SetPar(1, 
param.mZ + dz);
 
  326  b.SetZOffsetLinear(merger->Param().par.continuousTracking ? merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convVertexTimeToZOffset(mSector, mTOffset, merger->Param().continuousMaxTimeBin) : 0);
 
  332  float ex1i = 1.f / ex1;
 
  333  float hh = dxcci * ex1i * norm2;
 
  334  float h2 = hh * 
param.mSecPhi;
 
  335  float h4 = Bz * dxcci * hh;
 
  337  float c20 = 
param.mC3;
 
  338  float c22 = 
param.mC5;
 
  339  float c31 = 
param.mC7;
 
  340  float c33 = 
param.mC9;
 
  341  float c40 = 
param.mC10;
 
  342  float c42 = 
param.mC12;
 
  343  float c44 = 
param.mC14;
 
  345  float c20ph4c42 = c20 + h4 * c42;
 
  346  float h2c22 = h2 * c22;
 
  347  float h4c44 = h4 * c44;
 
  348  float n7 = c31 + dS * c33;
 
  350  if (CAMath::Abs(
param.mQPt) > 6.66f) 
 
  352    b.SetCov(0, CAMath::Max(
param.mC0, 
param.mC0 + h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40))); 
 
  353    float C2tmp = dS * 2.f * c31;
 
  357    b.SetCov(1, 
param.mC2 + C2tmp + dS * dS * c33); 
 
  359    b.SetCov(0, 
param.mC0 + h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40));
 
  360    b.SetCov(1, 
param.mC2 + dS * (c31 + n7));
 
  362  b.SetCov(2, c22 + dxBz * (c42 + c42 + dxBz * c44));
 
  365  b.SetCovD(0, c20ph4c42 + h2c22 + dxBz * (c40 + h2 * c42 + h4c44));
 
  380  float c00 = mParam.mC0;
 
  381  float c11 = mParam.mC2;
 
  382  float c20 = mParam.mC3;
 
  383  float c22 = mParam.mC5;
 
  384  float c31 = mParam.mC7;
 
  385  float c33 = mParam.mC9;
 
  386  float c40 = mParam.mC10;
 
  387  float c42 = mParam.mC12;
 
  388  float c44 = mParam.mC14;
 
  392  float sinPhi = mParam.mSinPhi;
 
  393  float cosPhi = mParam.mCosPhi;
 
  394  float secPhi = mParam.mSecPhi;
 
  395  float dzds = mParam.mDzDs;
 
  396  float qpt = mParam.mQPt;
 
  400    float sP = sinPhi, cP = cosPhi;
 
  401    cosPhi = cP * cosAlpha + sP * sinAlpha;
 
  402    sinPhi = -cP * sinAlpha + sP * cosAlpha;
 
  408    secPhi = 1.f / cosPhi;
 
  409    float j0 = cP * secPhi;
 
  410    float j2 = cosPhi / cP;
 
  411    x = mParam.mX * cosAlpha + mParam.mY * sinAlpha;
 
  412    y = -mParam.mX * sinAlpha + mParam.mY * cosAlpha;
 
  436  float ey1 = k * dx + ey;
 
  438  if (CAMath::Abs(ey1) > maxSinPhi) {
 
  442  float ex1 = CAMath::Sqrt(1.f - ey1 * ey1);
 
  444  float dxBz = dx * Bz;
 
  448  float dxcci = dx / 
cc;
 
  449  float norm2 = 1.f + ey * ey1 + ex * ex1;
 
  451  float dy = dxcci * ss;
 
  455    float dl = dxcci * CAMath::Sqrt(norm2 + norm2);
 
  456    float dSin = 0.5f * k * dl;
 
  457    float a = dSin * dSin;
 
  458    const float k2 = 1.f / 6.f;
 
  459    const float k4 = 3.f / 40.f;
 
  461    dS = dl + dl * 
a * (k2 + 
a * (k4)); 
 
  464  float ex1i = 1.f / ex1;
 
  465  float dz = dS * dzds;
 
  467  float hh = dxcci * ex1i * norm2;
 
  468  float h2 = hh * secPhi;
 
  469  float h4 = Bz * dxcci * hh;
 
  471  float c20ph4c42 = c20 + h4 * c42;
 
  472  float h2c22 = h2 * c22;
 
  473  float h4c44 = h4 * c44;
 
  474  float n7 = c31 + dS * c33;
 
  481  b.SetZOffsetLinear(merger->Param().par.continuousTracking ? merger->GetConstantMem()->calibObjects.fastTransformHelper->getCorrMap()->convVertexTimeToZOffset(mSector, mTOffset, merger->Param().continuousMaxTimeBin) : 0);
 
  483  b.SetCov(0, c00 + h2 * h2c22 + h4 * h4c44 + 2.f * (h2 * c20ph4c42 + h4 * c40));
 
  484  b.SetCov(1, c11 + dS * (c31 + n7));
 
  485  b.SetCov(2, c22 + dxBz * (c42 + c42 + dxBz * c44));
 
  488  b.SetCovD(0, c20ph4c42 + h2c22 + dxBz * (c40 + h2 * c42 + h4c44));
 
  498  const float* 
GPUrestrict() cov = mOrigTrack -> Param().mC;
 
  505  mParam.mC10 = cov[10];
 
  506  mParam.mC12 = cov[12];
 
  507  mParam.mC14 = cov[14];
 
 
#define GPUCA_MAX_SIN_PHI
GLfloat GLfloat GLfloat alpha
GLboolean GLboolean GLboolean b
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLboolean GLboolean GLboolean GLboolean a
GLdouble GLdouble GLdouble z
Global TPC definitions and constants.
std::vector< o2::mch::ChannelCode > cc