#ifndef ALISIMDIGITS_H
#define ALISIMDIGITS_H
#include <TError.h>
#include <TArrayI.h>
#include <TClonesArray.h>
#include "AliDigits.h"
class AliH2F;
class AliSimDigits : public AliDigits{
public:
AliSimDigits();
AliSimDigits(const AliSimDigits ¶m);
AliSimDigits &operator = (const AliSimDigits & digits);
virtual ~AliSimDigits();
void AllocateTrack(Int_t length);
Int_t *GetTracks(){return fTracks->GetArray();}
Int_t GetTrackIDFast(Int_t row, Int_t column,Int_t level);
void SetTrackIDFast(Int_t value,Int_t row, Int_t column,Int_t level);
virtual Int_t GetTrackID(Int_t row, Int_t column, Int_t level);
virtual void ExpandTrackBuffer();
virtual void CompresTrackBuffer(Int_t bufType);
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);
void GlitchFilter();
private:
void InvalidateTrack();
Int_t GetTrackID1(Int_t row, Int_t column, Int_t level);
void ExpandTrackBuffer1();
void CompresTrackBuffer1();
Int_t GetTrackID2(Int_t row, Int_t column, Int_t level);
void ExpandTrackBuffer2();
void CompresTrackBuffer2();
TArrayI * fTracks;
TArrayI * fTrIndex;
Int_t fNlevel;
Int_t fTrBufType;
ClassDef(AliSimDigits,3)
};
inline Int_t AliSimDigits::GetTrackIDFast(Int_t row, Int_t column,Int_t level)
{
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;
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