]> git.uio.no Git - u/mrichter/AliRoot.git/blob - HLT/TPCLib/tracking-ca/AliHLTTPCCAStartHitsFinder.cxx
treatment of MC labels added
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCAStartHitsFinder.cxx
1 // @(#) $Id: AliHLTTPCCAStartHitsFinder.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 "AliHLTTPCCAStartHitsFinder.h"
21 #include "AliHLTTPCCATracker.h"
22 #include "AliHLTTPCCAMath.h"
23
24 GPUdi() void AliHLTTPCCAStartHitsFinder::Thread
25 ( int /*nBlocks*/, int nThreads, int iBlock, int iThread, int iSync,
26   AliHLTTPCCASharedMemory &s, AliHLTTPCCATracker &tracker )
27 {
28   // find start hits for tracklets
29
30   if ( iSync == 0 ) {
31     if ( iThread == 0 ) {
32       s.fNRows = tracker.Param().NRows();
33       s.fIRow = iBlock + 1;
34       s.fNRowStartHits = 0;
35       if ( s.fIRow <= s.fNRows - 4 ) {
36         s.fNHits = tracker.Row( s.fIRow ).NHits();
37         if ( s.fNHits >= ALIHLTTPCCASTARTHITSFINDER_MAX_FROWSTARTHITS ) s.fNHits = ALIHLTTPCCASTARTHITSFINDER_MAX_FROWSTARTHITS - 1;
38       } else s.fNHits = -1;
39     }
40   } else if ( iSync == 1 ) {
41 #ifdef HLTCA_GPUCODE
42     volatile int *xxx = &(s.fIRow);
43     const AliHLTTPCCARow &row = tracker.Row( *xxx );
44           const AliHLTTPCCARow &rowUp = tracker.Row( (*xxx) + 2 );
45 #else
46     const AliHLTTPCCARow &row = tracker.Row( s.fIRow );
47         const AliHLTTPCCARow &rowUp = tracker.Row( s.fIRow + 2 );
48 #endif
49     for ( int ih = iThread; ih < s.fNHits; ih += nThreads ) {
50       if (tracker.HitLinkDownData(row, ih) < 0 && tracker.HitLinkUpData(row, ih) >= 0 && tracker.HitLinkUpData(rowUp, tracker.HitLinkUpData(row, ih)) >= 0) {
51         int oldNRowStartHits = CAMath::AtomicAdd( &s.fNRowStartHits, 1 );
52 #ifdef HLTCA_GPUCODE
53         s.fRowStartHits[oldNRowStartHits].Set( *xxx, ih );
54 #else
55         s.fRowStartHits[oldNRowStartHits].Set( s.fIRow, ih );
56 #endif
57       }
58     }
59   } else if ( iSync == 2 ) {
60     if ( iThread == 0 ) {
61           int nOffset = CAMath::AtomicAdd( tracker.NTracklets(), s.fNRowStartHits );
62 #ifdef HLTCA_GPUCODE
63           if (nOffset + s.fNRowStartHits >= HLTCA_GPU_MAX_TRACKLETS)
64           {
65                 tracker.GPUParameters()->fGPUError = HLTCA_GPU_ERROR_TRACKLET_OVERFLOW;
66                 CAMath::AtomicExch( tracker.NTracklets(), 0 );
67                 nOffset = 0;
68           }
69 #endif
70       s.fNOldStartHits = nOffset;
71 #ifdef HLTCA_GPU_SORT_STARTHITS
72       volatile int *yyy = &(s.fIRow);
73           tracker.RowStartHitCountOffset()[*yyy].x = s.fNRowStartHits;
74           tracker.RowStartHitCountOffset()[*yyy].y = nOffset;
75 #endif
76     }
77   } else if ( iSync == 3 ) {
78 #ifdef HLTCA_GPU_SORT_STARTHITS
79         AliHLTTPCCAHitId *const startHits = tracker.TrackletTmpStartHits();
80 #else
81     AliHLTTPCCAHitId *const startHits = tracker.TrackletStartHits();
82 #endif
83     for ( int ish = iThread; ish < s.fNRowStartHits; ish += nThreads ) {
84       startHits[s.fNOldStartHits+ish] = s.fRowStartHits[ish];
85     }
86   }
87 }
88