ROOT logo
#ifndef ALIITSDCSDATASDD_H
#define ALIITSDCSDATASDD_H

/* Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

///////////////////////////////////////////////////////////////////
// Class to define object containing SDD DCS data                //
// Origin: F.Prino, Torino, prino@to.infn.it                     //
//         V.Pospisil, CTU Prague, gdermog@seznam.cz             //
///////////////////////////////////////////////////////////////////

#include<TObject.h>
#include<TArrayF.h>
#include<TArrayI.h>
#include<TArrayC.h>
#include<TArrayS.h>

class AliITSDCSDataSDD : public TObject
{

 public:
  AliITSDCSDataSDD( void );
                        // Default constructor
  ~AliITSDCSDataSDD( void ){};
                        // Destructor is void

/* There are allowed ranges of temperatures and medium voltages

     MV ....... 0.0 - 65.535 V
     TL, TR ... 0.0 - 655.35 C

   because these variables are stores in UShort_t arrays (it halves
   needed space). If value of any variable exceed allowed range,
   something very stupid would be stored.
*/

  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 );
                        // Sets sizes of the DCS variable arrays

  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 );
                        // Inserts value of a DCS variable into the appropriate array.
                        //  Resizes and sorts array if necessary.

  void Compress();      // Minimize array sizes

  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;}
                       // Returns number of stored values of specific DCS variable

  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;}
                       // Returns size of selected array

  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);};
                       // Returns value of specific DCS variable by index in the array

  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 ); };
                       // Return status of a readout device by index in the array

  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);};
                       // Returns time stamp of specific DCS variable by index in the array

  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 ); }
                       // Returns value of specific DCS variable by time stamp

  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 ); };
                       // Return status of a readout device in given time

  Float_t GetDriftField( Int_t timeStamp ) const;
                       // Returns drift field counted for specific time

  Float_t GetDriftSpeed( Int_t /*timeStamp*/ ) const;  /* --- DUMMY --- */
                       // Returns drift speed counted for specific time. Calculation is based on temerature 
                       //  taken  from DCS. This metod is not dedicated for normal usage, it should be used
                       //  only in cases that the injectors for given module fails. 
                       //
                       // Presently only a prototype, returns -1.0.

  void PrintValues( FILE *output = stdout ) const;
                       // Displays stored DCS varable values or writes it into a text file
 private:

  TArrayS fTempLeft;           // Temperature on left side. If there is stored a negative value
                               //  something wrong happend with the temperature chip.
                               //  Temperatures and medium voltages are stored as UShort_t, which 
                               //  takes half memory as Float_t. It makes ranges 
                               //
                               //  MV ....... 0.0 - 65.535 volts
                               //  TL, TR ... 0.0 - 655.35 C
                               //
                               //  which should be enough.
                               //
  TArrayI fTempLeftTimeStamp;  // Time stamps of the temperatures on left side
  Int_t   fTempLeftMaxPoints;  // Size of the arrays
  Int_t   fTempLeftSetPoints;  // Number of filled array cells (number of set values)


  TArrayS fTempRight;          // Temperature on right side. If there is stored a negative value
                               //  something wrong happend with the temperature chip.
  TArrayI fTempRightTimeStamp; // Time stamps of temperatures on right side
  Int_t   fTempRightMaxPoints; // Size of the arrays
  Int_t   fTempRightSetPoints; // Number of filled array cells (number of set values)


  TArrayF fHV;                 // High voltage on SDD
  TArrayI fHVTimeStamp;        // Time stamps of HV
  Int_t   fHVMaxPoints;        // Size of the arrays
  Int_t   fHVSetPoints;        // Number of filled array cells (number of set values)


  TArrayS fMV;                 // Medium voltage on SDD
  TArrayI fMVTimeStamp;        // Time stamps of MV
  Int_t   fMVMaxPoints;        // Size of the arrays
  Int_t   fMVSetPoints;        // Number of filled array cells (number of set values)

  TArrayC fStatus;             // Status of temperature and voltage readout
                               //
                               // bit 0 - _OK
                               // bit 1 - _TEMP_L_STATE
                               // bit 2 - _TEMP_R_STATE

  TArrayI fStatusTimeStamp;    // Time stamps of MV
  Int_t   fStatusMaxPoints;    // Size of the arrays
  Int_t   fStatusSetPoints;    // Number of filled array cells (number of set values)


  static const Float_t fgkTPrec;  // Number of temperature decimal places stored
  static const Float_t fgkMVPrec; // Number of medium voltage decimal places stored
                               //  There are three possibilities :
                               //  10.0 ..... one decimal place
                               //  100.0 .... two decimal places
                               //  1000.0 ... three decimal places
                               //  Values are set in AliITSDCSDataSDD.cxx, by default 
                               //  it is fgkTPrec = 100.0, fgkMVPrec = 1000.0

  Int_t   FindIndex( Int_t timeStamp, const TArrayI &timeStampArray, Int_t n ) const;
                        // Provides binary search in the time array. Returns index in the array of time 
                        //  stamps by selected value. Returns -1 if the time is less than time stamp in 
                        //  the timeArray[0]

  ClassDef(AliITSDCSDataSDD, 3)

}; /*class AliITSDCSDataSDD*/

#endif
 AliITSDCSDataSDD.h:1
 AliITSDCSDataSDD.h:2
 AliITSDCSDataSDD.h:3
 AliITSDCSDataSDD.h:4
 AliITSDCSDataSDD.h:5
 AliITSDCSDataSDD.h:6
 AliITSDCSDataSDD.h:7
 AliITSDCSDataSDD.h:8
 AliITSDCSDataSDD.h:9
 AliITSDCSDataSDD.h:10
 AliITSDCSDataSDD.h:11
 AliITSDCSDataSDD.h:12
 AliITSDCSDataSDD.h:13
 AliITSDCSDataSDD.h:14
 AliITSDCSDataSDD.h:15
 AliITSDCSDataSDD.h:16
 AliITSDCSDataSDD.h:17
 AliITSDCSDataSDD.h:18
 AliITSDCSDataSDD.h:19
 AliITSDCSDataSDD.h:20
 AliITSDCSDataSDD.h:21
 AliITSDCSDataSDD.h:22
 AliITSDCSDataSDD.h:23
 AliITSDCSDataSDD.h:24
 AliITSDCSDataSDD.h:25
 AliITSDCSDataSDD.h:26
 AliITSDCSDataSDD.h:27
 AliITSDCSDataSDD.h:28
 AliITSDCSDataSDD.h:29
 AliITSDCSDataSDD.h:30
 AliITSDCSDataSDD.h:31
 AliITSDCSDataSDD.h:32
 AliITSDCSDataSDD.h:33
 AliITSDCSDataSDD.h:34
 AliITSDCSDataSDD.h:35
 AliITSDCSDataSDD.h:36
 AliITSDCSDataSDD.h:37
 AliITSDCSDataSDD.h:38
 AliITSDCSDataSDD.h:39
 AliITSDCSDataSDD.h:40
 AliITSDCSDataSDD.h:41
 AliITSDCSDataSDD.h:42
 AliITSDCSDataSDD.h:43
 AliITSDCSDataSDD.h:44
 AliITSDCSDataSDD.h:45
 AliITSDCSDataSDD.h:46
 AliITSDCSDataSDD.h:47
 AliITSDCSDataSDD.h:48
 AliITSDCSDataSDD.h:49
 AliITSDCSDataSDD.h:50
 AliITSDCSDataSDD.h:51
 AliITSDCSDataSDD.h:52
 AliITSDCSDataSDD.h:53
 AliITSDCSDataSDD.h:54
 AliITSDCSDataSDD.h:55
 AliITSDCSDataSDD.h:56
 AliITSDCSDataSDD.h:57
 AliITSDCSDataSDD.h:58
 AliITSDCSDataSDD.h:59
 AliITSDCSDataSDD.h:60
 AliITSDCSDataSDD.h:61
 AliITSDCSDataSDD.h:62
 AliITSDCSDataSDD.h:63
 AliITSDCSDataSDD.h:64
 AliITSDCSDataSDD.h:65
 AliITSDCSDataSDD.h:66
 AliITSDCSDataSDD.h:67
 AliITSDCSDataSDD.h:68
 AliITSDCSDataSDD.h:69
 AliITSDCSDataSDD.h:70
 AliITSDCSDataSDD.h:71
 AliITSDCSDataSDD.h:72
 AliITSDCSDataSDD.h:73
 AliITSDCSDataSDD.h:74
 AliITSDCSDataSDD.h:75
 AliITSDCSDataSDD.h:76
 AliITSDCSDataSDD.h:77
 AliITSDCSDataSDD.h:78
 AliITSDCSDataSDD.h:79
 AliITSDCSDataSDD.h:80
 AliITSDCSDataSDD.h:81
 AliITSDCSDataSDD.h:82
 AliITSDCSDataSDD.h:83
 AliITSDCSDataSDD.h:84
 AliITSDCSDataSDD.h:85
 AliITSDCSDataSDD.h:86
 AliITSDCSDataSDD.h:87
 AliITSDCSDataSDD.h:88
 AliITSDCSDataSDD.h:89
 AliITSDCSDataSDD.h:90
 AliITSDCSDataSDD.h:91
 AliITSDCSDataSDD.h:92
 AliITSDCSDataSDD.h:93
 AliITSDCSDataSDD.h:94
 AliITSDCSDataSDD.h:95
 AliITSDCSDataSDD.h:96
 AliITSDCSDataSDD.h:97
 AliITSDCSDataSDD.h:98
 AliITSDCSDataSDD.h:99
 AliITSDCSDataSDD.h:100
 AliITSDCSDataSDD.h:101
 AliITSDCSDataSDD.h:102
 AliITSDCSDataSDD.h:103
 AliITSDCSDataSDD.h:104
 AliITSDCSDataSDD.h:105
 AliITSDCSDataSDD.h:106
 AliITSDCSDataSDD.h:107
 AliITSDCSDataSDD.h:108
 AliITSDCSDataSDD.h:109
 AliITSDCSDataSDD.h:110
 AliITSDCSDataSDD.h:111
 AliITSDCSDataSDD.h:112
 AliITSDCSDataSDD.h:113
 AliITSDCSDataSDD.h:114
 AliITSDCSDataSDD.h:115
 AliITSDCSDataSDD.h:116
 AliITSDCSDataSDD.h:117
 AliITSDCSDataSDD.h:118
 AliITSDCSDataSDD.h:119
 AliITSDCSDataSDD.h:120
 AliITSDCSDataSDD.h:121
 AliITSDCSDataSDD.h:122
 AliITSDCSDataSDD.h:123
 AliITSDCSDataSDD.h:124
 AliITSDCSDataSDD.h:125
 AliITSDCSDataSDD.h:126
 AliITSDCSDataSDD.h:127
 AliITSDCSDataSDD.h:128
 AliITSDCSDataSDD.h:129
 AliITSDCSDataSDD.h:130
 AliITSDCSDataSDD.h:131
 AliITSDCSDataSDD.h:132
 AliITSDCSDataSDD.h:133
 AliITSDCSDataSDD.h:134
 AliITSDCSDataSDD.h:135
 AliITSDCSDataSDD.h:136
 AliITSDCSDataSDD.h:137
 AliITSDCSDataSDD.h:138
 AliITSDCSDataSDD.h:139
 AliITSDCSDataSDD.h:140
 AliITSDCSDataSDD.h:141
 AliITSDCSDataSDD.h:142
 AliITSDCSDataSDD.h:143
 AliITSDCSDataSDD.h:144
 AliITSDCSDataSDD.h:145
 AliITSDCSDataSDD.h:146
 AliITSDCSDataSDD.h:147
 AliITSDCSDataSDD.h:148
 AliITSDCSDataSDD.h:149
 AliITSDCSDataSDD.h:150
 AliITSDCSDataSDD.h:151
 AliITSDCSDataSDD.h:152
 AliITSDCSDataSDD.h:153
 AliITSDCSDataSDD.h:154
 AliITSDCSDataSDD.h:155
 AliITSDCSDataSDD.h:156
 AliITSDCSDataSDD.h:157
 AliITSDCSDataSDD.h:158
 AliITSDCSDataSDD.h:159
 AliITSDCSDataSDD.h:160
 AliITSDCSDataSDD.h:161
 AliITSDCSDataSDD.h:162
 AliITSDCSDataSDD.h:163
 AliITSDCSDataSDD.h:164
 AliITSDCSDataSDD.h:165
 AliITSDCSDataSDD.h:166
 AliITSDCSDataSDD.h:167
 AliITSDCSDataSDD.h:168
 AliITSDCSDataSDD.h:169
 AliITSDCSDataSDD.h:170
 AliITSDCSDataSDD.h:171
 AliITSDCSDataSDD.h:172
 AliITSDCSDataSDD.h:173
 AliITSDCSDataSDD.h:174
 AliITSDCSDataSDD.h:175
 AliITSDCSDataSDD.h:176
 AliITSDCSDataSDD.h:177
 AliITSDCSDataSDD.h:178
 AliITSDCSDataSDD.h:179
 AliITSDCSDataSDD.h:180
 AliITSDCSDataSDD.h:181
 AliITSDCSDataSDD.h:182
 AliITSDCSDataSDD.h:183
 AliITSDCSDataSDD.h:184
 AliITSDCSDataSDD.h:185
 AliITSDCSDataSDD.h:186