Obsolete tracker output removed
[u/mrichter/AliRoot.git] / HLT / TPCLib / tracking-ca / AliHLTTPCCASliceOutput.cxx
index 492d1b4..c725d3e 100644 (file)
 #include "AliHLTTPCCASliceOutput.h"
 #include "MemoryAssignmentHelpers.h"
 
+
 GPUhd() int AliHLTTPCCASliceOutput::EstimateSize( int nOfTracks, int nOfTrackClusters )
 {
   // calculate the amount of memory [bytes] needed for the event
 
-  const int kClusterDataSize = sizeof( unsigned int ) + sizeof(  int ) + sizeof( unsigned short ) + sizeof( float2 ) + sizeof( float ) + sizeof( UChar_t );
+  const int kClusterDataSize = sizeof(  int ) + sizeof( unsigned short ) + sizeof( float2 ) + sizeof( float ) + sizeof( UChar_t ) + sizeof( UChar_t );
 
   return sizeof( AliHLTTPCCASliceOutput ) + sizeof( AliHLTTPCCASliceTrack )*nOfTracks + kClusterDataSize*nOfTrackClusters;
 }
 
-GPUhd() void AliHLTTPCCASliceOutput::SetPointers()
+#ifndef HLTCA_GPUCODE
+
+inline void AssignNoAlignment( int &dst, int &size, int count )
+{
+  // assign memory to the pointer dst
+  dst = size;
+  size = dst + count ;
+}
+
+void AliHLTTPCCASliceOutput::SetPointers(int nTracks, int nTrackClusters, const outputControlStruct* outputControl)
 {
   // set all pointers
+       if (nTracks == -1) nTracks = fNTracks;
+       if (nTrackClusters == -1) nTrackClusters = fNTrackClusters;
 
-  char *mem = &fMemory[0];
-  AssignMemory( fTracks,            mem, fNTracks );
-  AssignMemory( fClusterUnpackedYZ, mem, fNTrackClusters );
-  AssignMemory( fClusterUnpackedX,  mem, fNTrackClusters );
-  AssignMemory( fClusterIDrc,       mem, fNTrackClusters );
-  AssignMemory( fClusterHltID,      mem, fNTrackClusters );
-  AssignMemory( fClusterPackedYZ,   mem, fNTrackClusters );
-  AssignMemory( fClusterPackedAmp,  mem, fNTrackClusters );
+  int size = 0;
+
+  {
+    AssignNoAlignment( fTracksOffset,            size, nTracks*sizeof(AliHLTTPCCASliceTrack) );
+    AssignNoAlignment( fClusterIdOffset,         size, nTrackClusters*sizeof(int) );
+    AssignNoAlignment( fClusterRowOffset,        size, nTrackClusters*sizeof(float) );
+    AssignNoAlignment( fClusterPackedXYZOffset, size, nTrackClusters*sizeof(AliHLTTPCCACompressedCluster) );
+  }
+  
+  char *mem = fMemory + size;
+
+  if ((size_t) (mem - fMemory) + sizeof(AliHLTTPCCASliceOutput) > fMemorySize)
+  {
+    fMemorySize = NULL;
+    //printf("\nINTERNAL ERROR IN AliHLTTPCCASliceOutput MEMORY MANAGEMENT req: %d avail: %d\n", (int) ((size_t) (mem - fMemory) + sizeof(AliHLTTPCCASliceOutput)), (int) fMemorySize);
+  }
 }
 
+void AliHLTTPCCASliceOutput::Allocate(AliHLTTPCCASliceOutput* &ptrOutput, int nTracks, int nTrackHits, outputControlStruct* outputControl)
+{
+       //Allocate All memory needed for slice output
+  const int memsize =  EstimateSize(nTracks, nTrackHits);
+
+  if (outputControl->fOutputPtr)
+  {
+         if (outputControl->fOutputMaxSize < memsize)
+         {
+                  outputControl->fEndOfSpace = 1;
+                 ptrOutput = NULL;
+                 return;
+         }
+       ptrOutput = (AliHLTTPCCASliceOutput*) outputControl->fOutputPtr;
+       outputControl->fOutputPtr += memsize;
+       outputControl->fOutputMaxSize -= memsize;
+  }
+  else
+  {
+    if (ptrOutput) free(ptrOutput);
+       ptrOutput = (AliHLTTPCCASliceOutput*) malloc(memsize);
+  }
+  ptrOutput->SetMemorySize(memsize);
+  ptrOutput->SetPointers(nTracks, nTrackHits, outputControl); // set pointers
+}
+#endif