Line data Source code
1 : // @(#) $Id: AliHLTTPCCANeighboursCleaner.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 "AliHLTTPCCANeighboursCleaner.h"
22 : #include "AliHLTTPCCAMath.h"
23 : #include "AliHLTTPCCATracker.h"
24 :
25 : GPUdi() void AliHLTTPCCANeighboursCleaner::Thread
26 : ( int /*nBlocks*/, int nThreads, int iBlock, int iThread, int iSync,
27 : GPUsharedref() MEM_LOCAL(AliHLTTPCCASharedMemory) &s, GPUconstant() MEM_CONSTANT(AliHLTTPCCATracker) &tracker )
28 : {
29 : // *
30 : // * kill link to the neighbour if the neighbour is not pointed to the cluster
31 : // *
32 :
33 0 : if ( iSync == 0 ) {
34 0 : if ( iThread == 0 ) {
35 0 : s.fNRows = tracker.Param().NRows();
36 0 : s.fIRow = iBlock + 2;
37 0 : if ( s.fIRow <= s.fNRows - 3 ) {
38 0 : s.fIRowUp = s.fIRow + 2;
39 0 : s.fIRowDn = s.fIRow - 2;
40 0 : s.fNHits = tracker.Row( s.fIRow ).NHits();
41 0 : }
42 : }
43 0 : } else if ( iSync == 1 ) {
44 0 : if ( s.fIRow <= s.fNRows - 3 ) {
45 : #ifdef HLTCA_GPUCODE
46 : int Up = s.fIRowUp;
47 : int Dn = s.fIRowDn;
48 : GPUglobalref() const MEM_GLOBAL(AliHLTTPCCARow) &row = tracker.Row( s.fIRow );
49 : GPUglobalref() const MEM_GLOBAL(AliHLTTPCCARow) &rowUp = tracker.Row( Up );
50 : GPUglobalref() const MEM_GLOBAL(AliHLTTPCCARow) &rowDn = tracker.Row( Dn );
51 : #else
52 0 : const AliHLTTPCCARow &row = tracker.Row( s.fIRow );
53 0 : const AliHLTTPCCARow &rowUp = tracker.Row( s.fIRowUp );
54 0 : const AliHLTTPCCARow &rowDn = tracker.Row( s.fIRowDn );
55 : #endif
56 :
57 : // - look at up link, if it's valid but the down link in the row above doesn't link to us remove
58 : // the link
59 : // - look at down link, if it's valid but the up link in the row below doesn't link to us remove
60 : // the link
61 0 : for ( int ih = iThread; ih < s.fNHits; ih += nThreads ) {
62 0 : int up = tracker.HitLinkUpData( row, ih );
63 0 : if ( up >= 0 ) {
64 0 : short upDn = tracker.HitLinkDownData( rowUp, up );
65 0 : if ( ( upDn != ih ) ) tracker.SetHitLinkUpData( row, ih, -1 );
66 0 : }
67 0 : int dn = tracker.HitLinkDownData( row, ih );
68 0 : if ( dn >= 0 ) {
69 0 : short dnUp = tracker.HitLinkUpData( rowDn, dn );
70 0 : if ( dnUp != ih ) tracker.SetHitLinkDownData( row, ih, -1 );
71 0 : }
72 : }
73 0 : }
74 : }
75 0 : }
76 :
|