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

          Line data    Source code
       1             : // @(#) $Id: AliHLTTPCCATrackletSelector.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             : 
      21             : #include "AliHLTTPCCATrackletSelector.h"
      22             : #include "AliHLTTPCCATrack.h"
      23             : #include "AliHLTTPCCATracker.h"
      24             : #include "AliHLTTPCCATrackParam.h"
      25             : #include "AliHLTTPCCATracklet.h"
      26             : #include "AliHLTTPCCAMath.h"
      27             : 
      28             : GPUdi() void AliHLTTPCCATrackletSelector::Thread
      29             : ( int nBlocks, int nThreads, int iBlock, int iThread, int iSync,
      30             :  GPUsharedref() MEM_LOCAL(AliHLTTPCCASharedMemory) &s, GPUconstant() MEM_CONSTANT(AliHLTTPCCATracker) &tracker )
      31             : {
      32             :         // select best tracklets and kill clones
      33             : 
      34           0 :         if ( iSync == 0 ) {
      35           0 :                 if ( iThread == 0 ) {
      36           0 :                         s.fNTracklets = *tracker.NTracklets();
      37           0 :                         s.fNThreadsTotal = nThreads * nBlocks;
      38           0 :                         s.fItr0 = nThreads * iBlock;
      39           0 :                 }
      40           0 :         } else if ( iSync == 1 ) {
      41             :                 int nHits, nFirstTrackHit;
      42           0 :                 AliHLTTPCCAHitId trackHits[160 - HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE];
      43             : 
      44           0 :                 for ( int itr = s.fItr0 + iThread; itr < s.fNTracklets; itr += s.fNThreadsTotal ) {
      45             : 
      46             : #ifdef HLTCA_GPU_EMULATION_DEBUG_TRACKLET
      47             :                         if (itr == HLTCA_GPU_EMULATION_DEBUG_TRACKLET)
      48             :                         {
      49             :                                 tracker.GPUParameters()->fGPUError = 1;
      50             :                         }
      51             : #endif //HLTCA_GPU_EMULATION_DEBUG_TRACKLET
      52             : 
      53           0 :                         while (tracker.Tracklets()[itr].NHits() == 0)
      54             :                         {
      55           0 :                                 itr += s.fNThreadsTotal;
      56           0 :                                 if (itr >= s.fNTracklets) return;
      57             :                         }
      58             : 
      59           0 :                         GPUglobalref() MEM_GLOBAL(AliHLTTPCCATracklet) &tracklet = tracker.Tracklets()[itr];
      60             :                         const int kMaxRowGap = 4;
      61             :                         const float kMaxShared = .1;
      62             : 
      63           0 :                         int firstRow = tracklet.FirstRow();
      64           0 :                         int lastRow = tracklet.LastRow();
      65           0 :                         if (firstRow < 0 || lastRow > tracker.Param().NRows() || tracklet.NHits() < 0)
      66             :                         {
      67             : #ifdef HLTCA_GPU_ALTERNATIVE_SCHEDULER
      68             :                                 //tracker.GPUParameters()->fGPUError = HLTCA_GPU_ERROR_WRONG_ROW;
      69             :                                 //return;
      70             : #else
      71             :                                 continue;
      72             : #endif
      73             :                         }
      74             : 
      75           0 :                         const int w = tracklet.HitWeight();
      76             : 
      77             :                         //int w = (tNHits<<16)+itr;
      78             :                         //int nRows = tracker.Param().NRows();
      79             :                         //std::cout<<" store tracklet: "<<firstRow<<" "<<lastRow<<std::endl;
      80             : 
      81             :                         int irow = firstRow;
      82             : 
      83             :                         int gap = 0;
      84             :                         int nShared = 0;
      85             :                         nHits = 0;
      86           0 :                         const int minHits = TRACKLET_SELECTOR_MIN_HITS(tracklet.Param().QPt());
      87             : 
      88           0 :                         for (irow = firstRow; irow <= lastRow && lastRow - irow + nHits >= minHits; irow++ )
      89             :                         {
      90           0 :                                 gap++;
      91             : #ifdef EXTERN_ROW_HITS
      92           0 :                                 int ih = tracker.TrackletRowHits()[irow * s.fNTracklets + itr];
      93             : #else
      94             :                                 int ih = tracklet.RowHit( irow );
      95             : #endif //EXTERN_ROW_HITS
      96           0 :                                 if ( ih >= 0 ) {
      97           0 :                                         GPUglobalref() const MEM_GLOBAL(AliHLTTPCCARow) &row = tracker.Row( irow );
      98             : #ifdef GLOBAL_TRACKING_ONLY_UNASSIGNED_HITS
      99             :                                         bool own = ( abs(tracker.HitWeight( row, ih )) <= w );
     100             : #else
     101           0 :                                         bool own = ( tracker.HitWeight( row, ih ) <= w );
     102             : #endif
     103           0 :                                         bool sharedOK = ( ( nShared < nHits * kMaxShared ) );
     104           0 :                                         if ( own || sharedOK ) {//SG!!!
     105             :                                                 gap = 0;
     106             : #if HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE != 0
     107             :                                                 if (nHits < HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE)
     108             :                                                         s.fHits[iThread][nHits].Set( irow, ih );
     109             :                                                 else
     110             : #endif //HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE != 0
     111           0 :                                                         trackHits[nHits - HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE].Set( irow, ih );
     112           0 :                                                 nHits++;
     113           0 :                                                 if ( !own ) nShared++;
     114             :                                         }
     115           0 :                                 }
     116             : 
     117           0 :                                 if ( gap > kMaxRowGap || irow == lastRow ) { // store
     118           0 :                                         if ( nHits >= minHits ) { //SG!!!
     119           0 :                                                 int itrout = CAMath::AtomicAdd( tracker.NTracks(), 1 );
     120             : #ifdef HLTCA_GPUCODE
     121             :                                                 if (itrout >= HLTCA_GPU_MAX_TRACKS)
     122             :                                                 {
     123             :                                                         tracker.GPUParameters()->fGPUError = HLTCA_GPU_ERROR_TRACK_OVERFLOW;
     124             :                                                         CAMath::AtomicExch( tracker.NTracks(), 0 );
     125             :                                                         return;
     126             :                                                 }
     127             : #endif //HLTCA_GPUCODE
     128           0 :                                                 nFirstTrackHit = CAMath::AtomicAdd( tracker.NTrackHits(), nHits );
     129           0 :                                                 tracker.Tracks()[itrout].SetAlive(1);
     130           0 :                                                 tracker.Tracks()[itrout].SetLocalTrackId(itrout);
     131           0 :                                                 tracker.Tracks()[itrout].SetParam(tracklet.Param());
     132           0 :                                                 tracker.Tracks()[itrout].SetFirstHitID(nFirstTrackHit);
     133           0 :                                                 tracker.Tracks()[itrout].SetNHits(nHits);
     134           0 :                                                 for ( int jh = 0; jh < nHits; jh++ ) {
     135             : #if HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE != 0
     136             :                                                         if (jh < HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE)
     137             :                                                         {
     138             :                                                                 tracker.TrackHits()[nFirstTrackHit + jh] = s.fHits[iThread][jh];
     139             : #ifdef GLOBAL_TRACKING_ONLY_UNASSIGNED_HITS
     140             :                                                             tracker.SetHitWeight( tracker.Row( s.fHits[iThread][jh].RowIndex() ), s.fHits[iThread][jh].HitIndex(), -w );
     141             : #endif
     142             :                                                         }
     143             :                                                         else
     144             : #endif //HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE != 0
     145             :                                                         {
     146           0 :                                                                 tracker.TrackHits()[nFirstTrackHit + jh] = trackHits[jh - HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE];
     147             : #ifdef GLOBAL_TRACKING_ONLY_UNASSIGNED_HITS
     148             :                                                                 tracker.SetHitWeight( tracker.Row( trackHits[jh - HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE].RowIndex() ), trackHits[jh - HLTCA_GPU_TRACKLET_SELECTOR_HITS_REG_SIZE].HitIndex(), -w );
     149             : #endif
     150             :                                                         }
     151             :                                                 }
     152           0 :                                         }
     153             :                                         nHits = 0;
     154             :                                         gap = 0;
     155             :                                         nShared = 0;
     156           0 :                                 }
     157             :                         }
     158             :                 }
     159           0 :         }
     160           0 : }

Generated by: LCOV version 1.11