LCOV - code coverage report
Current view: top level - HLT/TPCLib/tracking-ca - AliHLTTPCCATrackletConstructor.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 211 0.0 %
Date: 2016-06-14 17:26:59 Functions: 0 6 0.0 %

          Line data    Source code
       1             : // @(#) $Id: AliHLTTPCCATrackletConstructor.cxx 27042 2008-07-02 12:06:02Z richterm $
       2             : // **************************************************************************
       3             : // This file is property of and copyright by the ALICE HLT Project          *
       4             : // ALICE Experiment at CERN, All rights reserved.                           *
       5             : //                                                                          *
       6             : // Primary Authors: Sergey Gorbunov <sergey.gorbunov@kip.uni-heidelberg.de> *
       7             : //                  Ivan Kisel <kisel@kip.uni-heidelberg.de>                *
       8             : //                  for The ALICE HLT Project.                              *
       9             : //                                                                          *
      10             : // Permission to use, copy, modify and distribute this software and its     *
      11             : // documentation strictly for non-commercial purposes is hereby granted     *
      12             : // without fee, provided that the above copyright notice appears in all     *
      13             : // copies and that both the copyright notice and this permission notice     *
      14             : // appear in the supporting documentation. The authors make no claims       *
      15             : // about the suitability of this software for any purpose. It is            *
      16             : // provided "as is" without express or implied warranty.                    *
      17             : //                                                                          *
      18             : //***************************************************************************
      19             : 
      20             : #include "AliHLTTPCCATracker.h"
      21             : #include "AliHLTTPCCATrackParam.h"
      22             : #include "AliHLTTPCCATrackParam.h"
      23             : #include "AliHLTTPCCAGrid.h"
      24             : #include "AliHLTTPCCAMath.h"
      25             : #include "AliHLTTPCCADef.h"
      26             : #include "AliHLTTPCCATracklet.h"
      27             : #include "AliHLTTPCCATrackletConstructor.h"
      28             : 
      29             : #define kMaxRowGap 4
      30             : 
      31             : MEM_CLASS_PRE2() GPUdi() void AliHLTTPCCATrackletConstructor::InitTracklet( MEM_LG2(AliHLTTPCCATrackParam) &tParam )
      32             : {
      33             :   //Initialize Tracklet Parameters using default values
      34           0 :   tParam.InitParam();
      35           0 : }
      36             : 
      37             : MEM_CLASS_PRE2() GPUdi() bool AliHLTTPCCATrackletConstructor::CheckCov(MEM_LG2(AliHLTTPCCATrackParam) &tParam)
      38             : {
      39             :       bool ok = 1;
      40           0 :       const float *c = tParam.Cov();
      41           0 :       for ( int i = 0; i < 15; i++ ) ok = ok && CAMath::Finite( c[i] );
      42           0 :       for ( int i = 0; i < 5; i++ ) ok = ok && CAMath::Finite( tParam.Par()[i] );
      43           0 :       ok = ok && ( tParam.X() > 50 );
      44           0 :           if ( c[0] <= 0 || c[2] <= 0 || c[5] <= 0 || c[9] <= 0 || c[14] <= 0 ) ok = 0;
      45           0 :           return(ok);
      46             : }
      47             : 
      48             : 
      49             : MEM_CLASS_PRE23() GPUdi() void AliHLTTPCCATrackletConstructor::StoreTracklet
      50             : ( int /*nBlocks*/, int /*nThreads*/, int /*iBlock*/, int /*iThread*/,
      51             :   GPUsharedref() MEM_LOCAL(AliHLTTPCCASharedMemory)
      52             : #if defined(HLTCA_GPUCODE) | defined(EXTERN_ROW_HITS)
      53             :   &s
      54             : #else
      55             :   &/*s*/
      56             : #endif  //!HLTCA_GPUCODE
      57             :   , AliHLTTPCCAThreadMemory &r, GPUconstant() MEM_LG2(AliHLTTPCCATracker) &tracker, MEM_LG3(AliHLTTPCCATrackParam) &tParam )
      58             : {
      59             :   // reconstruction of tracklets, tracklet store step
      60             : 
      61             :   do {
      62           0 :     if ( r.fNHits < TRACKLET_SELECTOR_MIN_HITS(tParam.QPt()) ) {
      63           0 :       r.fNHits = 0;
      64           0 :       break;
      65             :     }
      66             : 
      67             :     if ( 0 ) {
      68             :       if ( 1. / .5 < CAMath::Abs( tParam.QPt() ) ) { //SG!!!
      69             :         r.fNHits = 0;
      70             :         break;
      71             :       }
      72             :     }
      73             : 
      74             :     {
      75           0 :           bool ok = CheckCov(tParam);
      76             : 
      77           0 :       if ( !ok ) {
      78           0 :         r.fNHits = 0;
      79           0 :         break;
      80             :       }
      81           0 :     }
      82             :   } while ( 0 );
      83             : 
      84           0 :   if ( !SAVE() ) return;
      85             : 
      86             : /*#ifndef HLTCA_GPUCODE
      87             :   printf("Tracklet %d: Hits %3d NDF %3d Chi %8.4f Sign %f Cov: %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f %2.4f\n", r.fItr, r.fNHits, tParam.GetNDF(), tParam.GetChi2(), tParam.GetSignCosPhi(),
      88             :           tParam.Cov()[0], tParam.Cov()[1], tParam.Cov()[2], tParam.Cov()[3], tParam.Cov()[4], tParam.Cov()[5], tParam.Cov()[6], tParam.Cov()[7], tParam.Cov()[8], tParam.Cov()[9], 
      89             :           tParam.Cov()[10], tParam.Cov()[11], tParam.Cov()[12], tParam.Cov()[13], tParam.Cov()[14]);
      90             : #endif*/
      91             : 
      92           0 :   GPUglobalref() MEM_GLOBAL(AliHLTTPCCATracklet) &tracklet = tracker.Tracklets()[r.fItr];
      93             : 
      94           0 :   tracklet.SetNHits( r.fNHits );
      95             : 
      96           0 :   if ( r.fNHits > 0 ) {
      97           0 :     if ( CAMath::Abs( tParam.Par()[4] ) < 1.e-4 ) tParam.SetPar( 4, 1.e-4 );
      98           0 :         if (r.fStartRow < r.fFirstRow) r.fFirstRow = r.fStartRow;
      99           0 :         tracklet.SetFirstRow( r.fFirstRow );
     100           0 :     tracklet.SetLastRow( r.fLastRow );
     101             : #ifdef HLTCA_GPUCODE
     102             :     tracklet.SetParam( tParam.fParam );
     103             : #else
     104           0 :     tracklet.SetParam( tParam.GetParam() );
     105             : #endif //HLTCA_GPUCODE
     106           0 :     int w = tracker.CalculateHitWeight(r.fNHits, tParam.GetChi2(), r.fItr);
     107           0 :     tracklet.SetHitWeight(w);
     108           0 :     for ( int iRow = r.fFirstRow; iRow <= r.fLastRow; iRow++ ) {
     109             : #ifdef EXTERN_ROW_HITS
     110           0 :       int ih = tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr];
     111             : #else
     112             :           int ih = tracklet.RowHit( iRow );
     113             : #endif //EXTERN_ROW_HITS
     114           0 :       if ( ih >= 0 ) {
     115             : #if defined(HLTCA_GPUCODE)
     116             :             tracker.MaximizeHitWeight( s.fRows[ iRow ], ih, w );
     117             : #else
     118           0 :             tracker.MaximizeHitWeight( tracker.Row( iRow ), ih, w );
     119             : #endif //HLTCA_GPUCODE
     120           0 :       }
     121             :     }
     122           0 :   }
     123             : 
     124           0 : }
     125             : 
     126             : MEM_CLASS_PRE2() GPUdi() void AliHLTTPCCATrackletConstructor::UpdateTracklet
     127             : ( int /*nBlocks*/, int /*nThreads*/, int /*iBlock*/, int /*iThread*/,
     128             :   GPUsharedref() MEM_LOCAL(AliHLTTPCCASharedMemory)
     129             : #if defined(HLTCA_GPUCODE) | defined(EXTERN_ROW_HITS)
     130             :   &s
     131             : #else
     132             :   &/*s*/
     133             : #endif //HLTCA_GPUCODE
     134             :   , AliHLTTPCCAThreadMemory &r, GPUconstant() MEM_CONSTANT(AliHLTTPCCATracker) &tracker, MEM_LG2(AliHLTTPCCATrackParam) &tParam, int iRow )
     135             : {
     136             :   // reconstruction of tracklets, tracklets update step
     137             : 
     138           0 :   if ( !r.fGo ) return;
     139             : 
     140             : #ifndef EXTERN_ROW_HITS
     141             :   AliHLTTPCCATracklet &tracklet = tracker.Tracklets()[r.fItr];
     142             : #endif //EXTERN_ROW_HITS
     143             : 
     144             : #if defined(HLTCA_GPUCODE)
     145             :   const GPUsharedref() MEM_LOCAL(AliHLTTPCCARow) &row = s.fRows[iRow];
     146             : #else
     147           0 :   const GPUglobalref() MEM_GLOBAL(AliHLTTPCCARow) &row = tracker.Row( iRow );
     148             : #endif //HLTCA_GPUCODE
     149             : 
     150           0 :   float y0 = row.Grid().YMin();
     151           0 :   float stepY = row.HstepY();
     152           0 :   float z0 = row.Grid().ZMin();
     153           0 :   float stepZ = row.HstepZ();
     154           0 :   float stepYi = row.HstepYi();
     155           0 :   float stepZi = row.HstepZi();
     156             : 
     157           0 :   if ( r.fStage == 0 ) { // fitting part
     158             :     do {
     159             : 
     160           0 :       if ( iRow < r.fStartRow || r.fCurrIH < 0  ) break;
     161           0 :       if ( ( iRow - r.fStartRow ) % 2 != 0 )
     162             :           {
     163             : #ifndef EXTERN_ROW_HITS
     164             :                   tracklet.SetRowHit(iRow, -1);
     165             : #else
     166           0 :                   tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = -1;
     167             : #endif //EXTERN_ROW_HITS
     168           0 :                   break; // SG!!! - jump over the row
     169             :           }
     170             : 
     171             : 
     172             :           ushort2 hh;
     173             : #if defined(HLTCA_GPU_TEXTURE_FETCH)
     174             :           hh = tex1Dfetch(gAliTexRefu2, ((char*) tracker.Data().HitData() - tracker.Data().GPUTextureBase()) / sizeof(ushort2) + row.HitNumberOffset() + r.fCurrIH);
     175             : #else
     176           0 :           hh = tracker.HitData(row)[r.fCurrIH];
     177             : #endif //HLTCA_GPU_TEXTURE_FETCH
     178             : 
     179           0 :       int oldIH = r.fCurrIH;
     180             : #if defined(HLTCA_GPU_TEXTURE_FETCH)
     181             :           r.fCurrIH = tex1Dfetch(gAliTexRefs, ((char*) tracker.Data().HitLinkUpData(row) - tracker.Data().GPUTextureBase()) / sizeof(unsigned short) + r.fCurrIH);
     182             : #else
     183           0 :           r.fCurrIH = tracker.HitLinkUpData(row)[r.fCurrIH]; // read from linkup data
     184             : #endif //HLTCA_GPU_TEXTURE_FETCH
     185             : 
     186           0 :       float x = row.X();
     187           0 :       float y = y0 + hh.x * stepY;
     188           0 :       float z = z0 + hh.y * stepZ;
     189             : 
     190           0 :       if ( iRow == r.fStartRow ) {
     191           0 :         tParam.SetX( x );
     192           0 :         tParam.SetY( y );
     193           0 :         tParam.SetZ( z );
     194           0 :         r.fLastY = y;
     195           0 :         r.fLastZ = z;
     196           0 :       } else {
     197             : 
     198           0 :         float err2Y, err2Z;
     199           0 :         float dx = x - tParam.X();
     200           0 :         float dy = y - r.fLastY;//tParam.Y();
     201           0 :         float dz = z - r.fLastZ;//tParam.Z();
     202           0 :         r.fLastY = y;
     203           0 :         r.fLastZ = z;
     204             : 
     205           0 :         float ri = 1. / CAMath::Sqrt( dx * dx + dy * dy );
     206           0 :         if ( iRow == r.fStartRow + 2 ) { //SG!!! important - thanks to Matthias
     207           0 :           tParam.SetSinPhi( dy*ri );
     208           0 :           tParam.SetSignCosPhi( dx );
     209           0 :           tParam.SetDzDs( dz*ri );
     210             :           //std::cout << "Init. errors... " << r.fItr << std::endl;
     211           0 :           tracker.GetErrors2( iRow, tParam, err2Y, err2Z );
     212             :           //std::cout << "Init. errors = " << err2Y << " " << err2Z << std::endl;
     213           0 :           tParam.SetCov( 0, err2Y );
     214           0 :           tParam.SetCov( 2, err2Z );
     215           0 :         }
     216             :         float sinPhi, cosPhi;
     217           0 :         if ( r.fNHits >= 10 && CAMath::Abs( tParam.SinPhi() ) < .99 ) {
     218           0 :           sinPhi = tParam.SinPhi();
     219           0 :           cosPhi = CAMath::Sqrt( 1 - sinPhi * sinPhi );
     220           0 :         } else {
     221           0 :           sinPhi = dy * ri;
     222           0 :           cosPhi = dx * ri;
     223             :         }
     224           0 :         if ( !tParam.TransportToX( x, sinPhi, cosPhi, tracker.Param().ConstBz(), -1 ) ) {
     225             : #ifndef EXTERN_ROW_HITS
     226             :           tracklet.SetRowHit( iRow, -1 );
     227             : #else
     228           0 :                   tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = -1;
     229             : #endif //EXTERN_ROW_HITS
     230           0 :           break;
     231             :         }
     232           0 :         tracker.GetErrors2( iRow, tParam.GetZ(), sinPhi, cosPhi, tParam.GetDzDs(), err2Y, err2Z );
     233             : 
     234           0 :         if ( !tParam.Filter( y, z, err2Y, err2Z, .99 ) ) {
     235             : #ifndef EXTERN_ROW_HITS
     236             :           tracklet.SetRowHit( iRow, -1 );
     237             : #else
     238           0 :                   tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = -1;
     239             : #endif //EXTERN_ROW_HITS
     240           0 :           break;
     241             :         }
     242           0 :       }
     243             : #ifndef EXTERN_ROW_HITS
     244             :       tracklet.SetRowHit( iRow, oldIH );
     245             : #else
     246           0 :           tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = oldIH;
     247             : #endif //!EXTERN_ROW_HITS
     248           0 :       r.fNHits++;
     249           0 :       r.fLastRow = iRow;
     250           0 :       r.fEndRow = iRow;
     251           0 :       break;
     252             :     } while ( 0 );
     253             : 
     254           0 :     if ( r.fCurrIH < 0 ) {
     255           0 :       r.fStage = 1;
     256           0 :       if ( CAMath::Abs( tParam.SinPhi() ) > .999 ) {
     257           0 :         r.fNHits = 0; r.fGo = 0;
     258           0 :       } else {
     259             :         //tParam.SetCosPhi( CAMath::Sqrt(1-tParam.SinPhi()*tParam.SinPhi()) );
     260             :       }
     261             :     }
     262             :   } else { // forward/backward searching part
     263             :     do {
     264           0 :       if ( r.fStage == 2 && ( ( iRow >= r.fEndRow ) ||
     265           0 :                               ( iRow >= r.fStartRow && ( iRow - r.fStartRow ) % 2 == 0 )
     266             :                             ) ) break;
     267           0 :       if ( r.fNMissed > kMaxRowGap  ) {
     268             :         break;
     269             :       }
     270             : 
     271           0 :       r.fNMissed++;
     272             : 
     273           0 :       float x = row.X();
     274           0 :       float err2Y, err2Z;
     275           0 :       if ( !tParam.TransportToX( x, tParam.SinPhi(), tParam.GetCosPhi(), tracker.Param().ConstBz(), .99 ) ) {
     276             : #ifndef EXTERN_ROW_HITS
     277             :                 tracklet.SetRowHit(iRow, -1);
     278             : #else
     279           0 :                 tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = -1;
     280             : #endif //!EXTERN_ROW_HITS
     281           0 :         break;
     282             :       }
     283           0 :       if ( row.NHits() < 1 ) {
     284             :         // skip empty row
     285             : #ifndef EXTERN_ROW_HITS
     286             :                   tracklet.SetRowHit(iRow, -1);
     287             : #else
     288           0 :                   tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = -1;
     289             : #endif //!EXTERN_ROW_HITS
     290           0 :         break;
     291             :       }
     292             : 
     293             : #ifndef HLTCA_GPU_TEXTURE_FETCH
     294           0 :           GPUglobalref() const ushort2 *hits = tracker.HitData(row);
     295             : #endif //!HLTCA_GPU_TEXTURE_FETCH
     296             : 
     297           0 :       float fY = tParam.GetY();
     298           0 :       float fZ = tParam.GetZ();
     299             :       int best = -1;
     300             : 
     301             :       { // search for the closest hit
     302           0 :         const int fIndYmin = row.Grid().GetBinBounded( fY - 1.f, fZ - 1.f );
     303           0 :         assert( fIndYmin >= 0 );
     304             : 
     305             :         int ds;
     306           0 :         int fY0 = ( int ) ( ( fY - y0 ) * stepYi );
     307           0 :         int fZ0 = ( int ) ( ( fZ - z0 ) * stepZi );
     308             :         int ds0 = ( ( ( int )1 ) << 30 );
     309             :         ds = ds0;
     310             : 
     311             :         unsigned int fHitYfst = 1, fHitYlst = 0, fHitYfst1 = 1, fHitYlst1 = 0;
     312             : 
     313             :         {
     314           0 :           int nY = row.Grid().Ny();
     315             : 
     316             : #ifndef HLTCA_GPU_TEXTURE_FETCH
     317           0 :                   GPUglobalref()  const unsigned short *sGridP = tracker.FirstHitInBin(row);
     318             : #endif //!HLTCA_GPU_TEXTURE_FETCH
     319             : 
     320             : #ifdef HLTCA_GPU_TEXTURE_FETCH
     321             :                   fHitYfst = tex1Dfetch(gAliTexRefu, ((char*) tracker.Data().FirstHitInBin(row) - tracker.Data().GPUTextureBase()) / sizeof(unsigned short) + fIndYmin);
     322             :                   fHitYlst = tex1Dfetch(gAliTexRefu, ((char*) tracker.Data().FirstHitInBin(row) - tracker.Data().GPUTextureBase()) / sizeof(unsigned short) + fIndYmin+2);
     323             :                   fHitYfst1 = tex1Dfetch(gAliTexRefu, ((char*) tracker.Data().FirstHitInBin(row) - tracker.Data().GPUTextureBase()) / sizeof(unsigned short) + fIndYmin+nY);
     324             :                   fHitYlst1 = tex1Dfetch(gAliTexRefu, ((char*) tracker.Data().FirstHitInBin(row) - tracker.Data().GPUTextureBase()) / sizeof(unsigned short) + fIndYmin+nY+2);
     325             : #else
     326           0 :           fHitYfst = sGridP[fIndYmin];
     327           0 :           fHitYlst = sGridP[fIndYmin+2];
     328           0 :           fHitYfst1 = sGridP[fIndYmin+nY];
     329           0 :           fHitYlst1 = sGridP[fIndYmin+nY+2];
     330             : #endif //HLTCA_GPU_TEXTURE_FETCH
     331           0 :           assert( (signed) fHitYfst <= row.NHits() );
     332           0 :           assert( (signed) fHitYlst <= row.NHits() );
     333           0 :           assert( (signed) fHitYfst1 <= row.NHits() );
     334           0 :           assert( (signed) fHitYlst1 <= row.NHits() );
     335             :         }
     336             : 
     337           0 :                 for ( unsigned int fIh = fHitYfst; fIh < fHitYlst; fIh++ ) {
     338           0 :           assert( (signed) fIh < row.NHits() );
     339             :           ushort2 hh;
     340           0 :                   if (r.fStage <= 2 || tracker.HitWeight(row, fIh) >= 0)
     341             :                   {
     342             : 
     343             : #if defined(HLTCA_GPU_TEXTURE_FETCH)
     344             :                         hh = tex1Dfetch(gAliTexRefu2, ((char*) tracker.Data().HitData() - tracker.Data().GPUTextureBase()) / sizeof(ushort2) + row.HitNumberOffset() + fIh);
     345             : #else
     346           0 :                         hh = hits[fIh];
     347             : #endif //HLTCA_GPU_TEXTURE_FETCH
     348           0 :                         int ddy = ( int )( hh.x ) - fY0;
     349           0 :                         int ddz = ( int )( hh.y ) - fZ0;
     350           0 :                         int dds = CAMath::Abs( ddy ) + CAMath::Abs( ddz );
     351           0 :                         if ( dds < ds ) {
     352             :                                 ds = dds;
     353             :                                 best = fIh;
     354           0 :                         }
     355           0 :           }
     356             :         }
     357             : 
     358           0 :                 for ( unsigned int fIh = fHitYfst1; fIh < fHitYlst1; fIh++ ) {
     359             :           ushort2 hh;
     360             : #if defined(HLTCA_GPU_TEXTURE_FETCH)
     361             :                   hh = tex1Dfetch(gAliTexRefu2, ((char*) tracker.Data().HitData() - tracker.Data().GPUTextureBase()) / sizeof(ushort2) + row.HitNumberOffset() + fIh);
     362             : #else
     363           0 :                   hh = hits[fIh];
     364             : #endif //HLTCA_GPU_TEXTURE_FETCH
     365           0 :           int ddy = ( int )( hh.x ) - fY0;
     366           0 :           int ddz = ( int )( hh.y ) - fZ0;
     367           0 :           int dds = CAMath::Abs( ddy ) + CAMath::Abs( ddz );
     368           0 :           if ( dds < ds ) {
     369             :             ds = dds;
     370             :             best = fIh;
     371           0 :           }
     372             :         }
     373             :       }// end of search for the closest hit
     374             : 
     375           0 :       if ( best < 0 )
     376             :           {
     377             : #ifndef EXTERN_ROW_HITS
     378             :                   tracklet.SetRowHit(iRow, -1);
     379             : #else
     380           0 :                   tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = -1;
     381             : #endif //!EXTERN_ROW_HITS
     382           0 :                   break;
     383             :           }
     384             : 
     385             :       ushort2 hh;
     386             : #if defined(HLTCA_GPU_TEXTURE_FETCH)
     387             :                  hh = tex1Dfetch(gAliTexRefu2, ((char*) tracker.Data().HitData() - tracker.Data().GPUTextureBase()) / sizeof(ushort2) + row.HitNumberOffset() + best);
     388             : #else
     389           0 :                   hh = hits[best];
     390             : #endif //HLTCA_GPU_TEXTURE_FETCH
     391             : 
     392           0 :       tracker.GetErrors2( iRow, *( ( MEM_LG2(AliHLTTPCCATrackParam)* )&tParam ), err2Y, err2Z );
     393             : 
     394           0 :       float y = y0 + hh.x * stepY;
     395           0 :       float z = z0 + hh.y * stepZ;
     396           0 :       float dy = y - fY;
     397           0 :       float dz = z - fZ;
     398             : 
     399           0 :       const float kFactor = tracker.Param().HitPickUpFactor() * tracker.Param().HitPickUpFactor() * 3.5 * 3.5;
     400           0 :       float sy2 = kFactor * ( tParam.GetErr2Y() +  err2Y );
     401           0 :       float sz2 = kFactor * ( tParam.GetErr2Z() +  err2Z );
     402           0 :       if ( sy2 > 2. ) sy2 = 2.;
     403           0 :       if ( sz2 > 2. ) sz2 = 2.;
     404             : 
     405           0 :       if ( CAMath::FMulRZ( dy, dy ) > sy2 || CAMath::FMulRZ( dz, dz ) > sz2  ) {
     406             : #ifndef EXTERN_ROW_HITS
     407             :                 tracklet.SetRowHit(iRow, -1);
     408             : #else
     409           0 :                 tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = -1;
     410             : #endif //!EXTERN_ROW_HITS
     411           0 :         break;
     412             :       }
     413             : #ifdef GLOBAL_TRACKING_EXTRAPOLATE_ONLY
     414             :       if ( r.fStage <= 2)
     415             : #endif
     416           0 :                   if (!tParam.Filter( y, z, err2Y, err2Z, .99 ) ) {
     417           0 :                         break;
     418             :                   }
     419             : #ifndef EXTERN_ROW_HITS
     420             :           tracklet.SetRowHit( iRow, best );
     421             : #else
     422           0 :           tracker.TrackletRowHits()[iRow * s.fNTracklets + r.fItr] = best;
     423             : #endif //!EXTERN_ROW_HITS
     424           0 :       r.fNHits++;
     425           0 :       r.fNMissed = 0;
     426           0 :       if ( r.fStage == 1 ) r.fLastRow = iRow;
     427           0 :       else r.fFirstRow = iRow;
     428           0 :     } while ( 0 );
     429             :   }
     430           0 : }
     431             : 
     432             : #ifdef HLTCA_GPUCODE
     433             : 
     434             : #include "AliHLTTPCCATrackletConstructorGPU.h"
     435             : 
     436             : #else //HLTCA_GPUCODE
     437             : 
     438             : GPUdi() void AliHLTTPCCATrackletConstructor::AliHLTTPCCATrackletConstructorCPU(AliHLTTPCCATracker &tracker)
     439             : {
     440             :         //Tracklet constructor simple CPU Function that does not neew a scheduler
     441           0 :         GPUshared() AliHLTTPCCASharedMemory sMem;
     442           0 :         sMem.fNTracklets = *tracker.NTracklets();
     443           0 :         for (int iTracklet = 0;iTracklet < *tracker.NTracklets();iTracklet++)
     444             :         {
     445           0 :                 AliHLTTPCCATrackParam tParam;
     446           0 :                 AliHLTTPCCAThreadMemory rMem;
     447             :                 
     448           0 :                 AliHLTTPCCAHitId id = tracker.TrackletStartHits()[iTracklet];
     449             : 
     450           0 :                 rMem.fStartRow = rMem.fEndRow = rMem.fFirstRow = rMem.fLastRow = id.RowIndex();
     451           0 :                 rMem.fCurrIH = id.HitIndex();
     452           0 :                 rMem.fStage = 0;
     453           0 :                 rMem.fNHits = 0;
     454           0 :                 rMem.fNMissed = 0;
     455             : 
     456           0 :                 AliHLTTPCCATrackletConstructor::InitTracklet(tParam);
     457             : 
     458           0 :                 rMem.fItr = iTracklet;
     459           0 :                 rMem.fGo = 1;
     460             : 
     461           0 :                 for (int j = rMem.fStartRow;j < tracker.Param().NRows();j++)
     462             :                 {
     463           0 :                         UpdateTracklet(1, 1, 0, iTracklet, sMem, rMem, tracker, tParam, j);
     464           0 :                         if (!rMem.fGo) break;
     465             :                 }
     466             : 
     467           0 :                 rMem.fNMissed = 0;
     468           0 :                 rMem.fStage = 2;
     469           0 :                 if ( rMem.fGo )
     470             :                 {
     471           0 :                         if ( !tParam.TransportToX( tracker.Row( rMem.fEndRow ).X(), tracker.Param().ConstBz(), .999 ) ) rMem.fGo = 0;
     472             :                 }
     473             : 
     474           0 :                 for (int j = rMem.fEndRow;j >= 0;j--)
     475             :                 {
     476           0 :                         if (!rMem.fGo) break;
     477           0 :                         UpdateTracklet( 1, 1, 0, iTracklet, sMem, rMem, tracker, tParam, j);
     478             :                 }
     479             : 
     480           0 :                 StoreTracklet( 1, 1, 0, iTracklet, sMem, rMem, tracker, tParam );
     481           0 :         }
     482           0 : }
     483             : 
     484             : GPUdi() int AliHLTTPCCATrackletConstructor::AliHLTTPCCATrackletConstructorGlobalTracking(AliHLTTPCCATracker &tracker, AliHLTTPCCATrackParam& tParam, int row, int increment)
     485             : {
     486           0 :         AliHLTTPCCAThreadMemory rMem;   
     487           0 :         GPUshared() AliHLTTPCCASharedMemory sMem;
     488           0 :         sMem.fNTracklets = *tracker.NTracklets();
     489           0 :         rMem.fItr = 0;
     490           0 :         rMem.fStage = 3;
     491           0 :         rMem.fNHits = rMem.fNMissed = 0;
     492           0 :         rMem.fGo = 1;
     493           0 :         while (rMem.fGo && row >= 0 && row < tracker.Param().NRows())
     494             :         {
     495           0 :                 UpdateTracklet(1, 1, 0, 0, sMem, rMem, tracker, tParam, row);
     496           0 :                 row += increment;
     497             :         }
     498           0 :         if (!CheckCov(tParam)) rMem.fNHits = 0;
     499           0 :         return(rMem.fNHits);
     500           0 : }
     501             : 
     502             : #endif //HLTCA_GPUCODE

Generated by: LCOV version 1.11