ROOT logo
#ifndef ALISIMDIGITS_H
#define ALISIMDIGITS_H
/* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

////////////////////////////////////////////////
//  Manager class generaol Alice segment digits
//  segment is for example one pad row in TPC //
////////////////////////////////////////////////
#include <TError.h>
#include <TArrayI.h>
#include <TClonesArray.h>
#include   "AliDigits.h"

class AliH2F;


class AliSimDigits : public AliDigits{
public: 
  AliSimDigits();
  AliSimDigits(const AliSimDigits &param);
  AliSimDigits &operator = (const AliSimDigits & digits); 
  virtual ~AliSimDigits();
  void AllocateTrack(Int_t length);  //construct empty buffer fTracks with size rows x column x length (number of tracks for one digit)
  Int_t *GetTracks(){return fTracks->GetArray();}
  Int_t GetTrackIDFast(Int_t row, Int_t column,Int_t level);  //return track ID  at given row and collumn
  void  SetTrackIDFast(Int_t value,Int_t row, Int_t column,Int_t level);  //set ID track at given row and collumn
  virtual Int_t GetTrackID(Int_t row, Int_t column, Int_t level);
  virtual void ExpandTrackBuffer();  //expand buffer to twodimensional array
  virtual void CompresTrackBuffer(Int_t bufType); //compres buffer according buffertype algorithm 
  AliH2F *  DrawTracks( const char *option=0,Int_t level=0, 
		  Float_t x1=-1, Float_t x2=-1, Float_t y1=-1, Float_t y2=-1); //draw tracks
  //only for demonstration purpose
  void GlitchFilter();
private:
  void InvalidateTrack();
 
  Int_t GetTrackID1(Int_t row, Int_t column, Int_t level);  //returnb track ID of digits - for buffer compresion 1 
  void  ExpandTrackBuffer1(); //comress track according algorithm 1 (track ID comression independent to the digit compression) 
  void  CompresTrackBuffer1(); //comress track according algorithm 1 (track ID comression independent to the digit compression)
 
  Int_t GetTrackID2(Int_t row, Int_t column, Int_t level);  //returnb track ID of digits - for buffer compresion 2
  void  ExpandTrackBuffer2(); //comress track according algorithm 2 (track ID comression according  digit compression)
  void  CompresTrackBuffer2(); //comress track according algorithm 2 (track ID comression according  digit compression)

  TArrayI * fTracks;     //buffer of track index 
  TArrayI * fTrIndex;    //index position of column
  Int_t       fNlevel;   //number of tracks etries  for one digit
  Int_t       fTrBufType;  //buffer type of the tracks
  // Bool_t      ClassError( ); //signalize class error 
  ClassDef(AliSimDigits,3) 
};



inline Int_t AliSimDigits::GetTrackIDFast(Int_t row, Int_t column,Int_t level)
{
  //
  //return track ID  at given row and column
  //  return fTracks[level].At(fTrIndex[level][column]+row); 
  return fTracks->At(level*fNrows*fNcols+fNrows*column+row); 
}
 
inline void AliSimDigits::SetTrackIDFast(Int_t value,Int_t row, Int_t column,Int_t level)
{
  //
  value+=2;
  //set ID track at given row and collumn
  //  fTracks[level][fTrIndex[level][column]+row]=value; 
  if ( (row<0) || (row>=fNrows)  || (column<0) || (column>=fNcols) ) 
       ::Error("AliSimDigits::SetTrackIDFast", "row %d  col %d out of bounds (size: %d x %d, this: 0x%08lx)", 
	       row, column, fNrows, fNcols, (ULong_t) this);
  if ( (level<0) || (level>=fNlevel)) ::Error("AliSimDigits::SetTrackIDFast", "index %d out of bounds", level);
  (*fTracks)[level*fNrows*fNcols+fNrows*column+row]=value; 
}



#endif






 AliSimDigits.h:1
 AliSimDigits.h:2
 AliSimDigits.h:3
 AliSimDigits.h:4
 AliSimDigits.h:5
 AliSimDigits.h:6
 AliSimDigits.h:7
 AliSimDigits.h:8
 AliSimDigits.h:9
 AliSimDigits.h:10
 AliSimDigits.h:11
 AliSimDigits.h:12
 AliSimDigits.h:13
 AliSimDigits.h:14
 AliSimDigits.h:15
 AliSimDigits.h:16
 AliSimDigits.h:17
 AliSimDigits.h:18
 AliSimDigits.h:19
 AliSimDigits.h:20
 AliSimDigits.h:21
 AliSimDigits.h:22
 AliSimDigits.h:23
 AliSimDigits.h:24
 AliSimDigits.h:25
 AliSimDigits.h:26
 AliSimDigits.h:27
 AliSimDigits.h:28
 AliSimDigits.h:29
 AliSimDigits.h:30
 AliSimDigits.h:31
 AliSimDigits.h:32
 AliSimDigits.h:33
 AliSimDigits.h:34
 AliSimDigits.h:35
 AliSimDigits.h:36
 AliSimDigits.h:37
 AliSimDigits.h:38
 AliSimDigits.h:39
 AliSimDigits.h:40
 AliSimDigits.h:41
 AliSimDigits.h:42
 AliSimDigits.h:43
 AliSimDigits.h:44
 AliSimDigits.h:45
 AliSimDigits.h:46
 AliSimDigits.h:47
 AliSimDigits.h:48
 AliSimDigits.h:49
 AliSimDigits.h:50
 AliSimDigits.h:51
 AliSimDigits.h:52
 AliSimDigits.h:53
 AliSimDigits.h:54
 AliSimDigits.h:55
 AliSimDigits.h:56
 AliSimDigits.h:57
 AliSimDigits.h:58
 AliSimDigits.h:59
 AliSimDigits.h:60
 AliSimDigits.h:61
 AliSimDigits.h:62
 AliSimDigits.h:63
 AliSimDigits.h:64
 AliSimDigits.h:65
 AliSimDigits.h:66
 AliSimDigits.h:67
 AliSimDigits.h:68
 AliSimDigits.h:69
 AliSimDigits.h:70
 AliSimDigits.h:71
 AliSimDigits.h:72
 AliSimDigits.h:73
 AliSimDigits.h:74
 AliSimDigits.h:75
 AliSimDigits.h:76
 AliSimDigits.h:77
 AliSimDigits.h:78
 AliSimDigits.h:79
 AliSimDigits.h:80
 AliSimDigits.h:81
 AliSimDigits.h:82
 AliSimDigits.h:83
 AliSimDigits.h:84
 AliSimDigits.h:85
 AliSimDigits.h:86
 AliSimDigits.h:87