#ifndef ALIITSDCSDATASDD_H
#define ALIITSDCSDATASDD_H
#include<TObject.h>
#include<TArrayF.h>
#include<TArrayI.h>
#include<TArrayC.h>
#include<TArrayS.h>
class AliITSDCSDataSDD : public TObject
{
public:
AliITSDCSDataSDD( void );
~AliITSDCSDataSDD( void ){};
void SetNPointsTempLeft( Int_t npts );
void SetNPointsTempRight( Int_t npts );
void SetNPointsHV( Int_t npts );
void SetNPointsMV( Int_t npts );
void SetNPointsStatus( Int_t npts );
void SetValueTempLeft(Int_t time, Float_t temperature );
void SetValueTempRight(Int_t time, Float_t temperature );
void SetValueHV(Int_t time, Float_t voltage );
void SetValueMV(Int_t time, Float_t voltage );
void SetValueStatus(Int_t time, Char_t status );
void Compress();
Int_t GetTempLeftRecords() const {return fTempLeftSetPoints;}
Int_t GetTempRightRecords() const {return fTempRightSetPoints;}
Int_t GetHVRecords() const {return fHVSetPoints;}
Int_t GetMVRecords() const {return fMVSetPoints;}
Int_t GetStatusRecords() const {return fStatusSetPoints;}
Int_t GetTempLeftSize() const {return fTempLeftMaxPoints;}
Int_t GetTempRightSize() const {return fTempRightMaxPoints;}
Int_t GetHVSize() const {return fHVMaxPoints;}
Int_t GetMVSize() const {return fMVMaxPoints;}
Int_t GetStatusSize() const {return fStatusMaxPoints;}
Float_t GetTempLeftIdx( Int_t index ) const { UShort_t val = (UShort_t)fTempLeft.At(index);
return (Float_t)val / fgkTPrec; };
Float_t GetTempRightIdx( Int_t index ) const { UShort_t val = (UShort_t)fTempRight.At(index);
return (Float_t)val / fgkTPrec;};
Float_t GetHVIdx( Int_t index ) const { return fHV.At(index);};
Float_t GetMVIdx( Int_t index ) const { UShort_t val = (UShort_t)fMV.At(index);
return (Float_t)val / fgkMVPrec;};
Char_t GetStatusIdx( Int_t index ) const { return fStatus.At(index);};
Bool_t GetOKStatIdx( Int_t index ) const { return (Bool_t)(fStatus.At(index) & 1 ); };
Bool_t GetTempLeftStatIdx( Int_t index ) const { return (Bool_t)(fStatus.At(index) & 2 ); };
Bool_t GetTempRightStatIdx( Int_t index ) const { return (Bool_t)(fStatus.At(index) & 4 ); };
Int_t GetTempLeftTimeIdx( Int_t index ) const {return fTempLeftTimeStamp.At(index);};
Int_t GetTempRightTimeIdx( Int_t index ) const {return fTempRightTimeStamp.At(index);};
Int_t GetHVTimeIdx( Int_t index ) const {return fHVTimeStamp.At(index);};
Int_t GetMVTimeIdx( Int_t index ) const {return fMVTimeStamp.At(index);};
Int_t GetStatusTimeIdx( Int_t index ) const {return fStatusTimeStamp.At(index);};
Float_t GetTempLeft( Int_t time ) const { Int_t i = FindIndex( time, fTempLeftTimeStamp, fTempLeftSetPoints );
return ( i < 0 ) ? -1.0 : GetTempLeftIdx( i ); }
Float_t GetTempRight( Int_t time ) const { Int_t i = FindIndex( time, fTempRightTimeStamp, fTempRightSetPoints );
return ( i < 0 ) ? -1.0 : GetTempRightIdx( i ); }
Float_t GetHV( Int_t time ) const { Int_t i = FindIndex( time, fHVTimeStamp, fHVSetPoints );
return ( i < 0 ) ? -1.0 : GetHVIdx( i ); }
Float_t GetMV( Int_t time ) const { Int_t i = FindIndex( time, fMVTimeStamp, fMVSetPoints );
return ( i < 0 ) ? -1.0 : GetMVIdx( i ); }
Char_t GetStatus( Int_t time ) const { Int_t i = FindIndex( time, fStatusTimeStamp, fStatusSetPoints );
return ( i < 0 ) ? -1 : GetStatusIdx( i ); }
Bool_t GetOKStat( Int_t time ) const { return (Bool_t)( GetStatus( time ) & 1 ); };
Bool_t GetTempLeftStat( Int_t time ) const { return (Bool_t)( GetStatus( time ) & 2 ); };
Bool_t GetTempRightStat( Int_t time ) const { return (Bool_t)( GetStatus( time ) & 4 ); };
Float_t GetDriftField( Int_t timeStamp ) const;
Float_t GetDriftSpeed( Int_t ) const;
void PrintValues( FILE *output = stdout ) const;
private:
TArrayS fTempLeft;
TArrayI fTempLeftTimeStamp;
Int_t fTempLeftMaxPoints;
Int_t fTempLeftSetPoints;
TArrayS fTempRight;
TArrayI fTempRightTimeStamp;
Int_t fTempRightMaxPoints;
Int_t fTempRightSetPoints;
TArrayF fHV;
TArrayI fHVTimeStamp;
Int_t fHVMaxPoints;
Int_t fHVSetPoints;
TArrayS fMV;
TArrayI fMVTimeStamp;
Int_t fMVMaxPoints;
Int_t fMVSetPoints;
TArrayC fStatus;
TArrayI fStatusTimeStamp;
Int_t fStatusMaxPoints;
Int_t fStatusSetPoints;
static const Float_t fgkTPrec;
static const Float_t fgkMVPrec;
Int_t FindIndex( Int_t timeStamp, const TArrayI &timeStampArray, Int_t n ) const;
ClassDef(AliITSDCSDataSDD, 3)
};
#endif