#ifndef HSTART2CALPAR_H
#define HSTART2CALPAR_H
#include "TObjArray.h"
#include "TObject.h"
#include "hparset.h"
class HStart2CalparCell : public TObject {
protected:
   Float_t tdcSlope;  
   Float_t tdcOffset; 
   Float_t adcSlope;  
   Float_t adcOffset; 
public:
   HStart2CalparCell() {
      clear();
   }
   ~HStart2CalparCell() {
      ;
   }
   void clear() {
      tdcSlope = 1.F;
      tdcOffset = 0.F;
      adcSlope = 1.F;
      adcOffset = 0.F;
   }
   Float_t getTdcSlope(void)  {
      return tdcSlope;
   }
   Float_t getTdcOffset(void) {
      return tdcOffset;
   }
   Float_t getAdcSlope(void)  {
      return adcSlope;
   }
   Float_t getAdcOffset(void) {
      return adcOffset;
   }
   void getData(Float_t* data) {
      data[0] = tdcSlope;
      data[1] = tdcOffset;
      data[2] = adcSlope;
      data[3] = adcOffset;
   }
   void setTdcSlope(Float_t s)  {
      tdcSlope = s;
   }
   void setTdcOffset(Float_t o) {
      tdcOffset = o;
   }
   void setAdcSlope(Float_t s)  {
      adcSlope = s;
   }
   void setAdcOffset(Float_t o) {
      adcOffset = o;
   }
   void fill(Float_t ts, Float_t to, Float_t as, Float_t ao) {
      tdcSlope = ts;
      tdcOffset = to;
      adcSlope = as;
      adcOffset = ao;
   }
   void fill(Float_t* data) {
      tdcSlope = data[0];
      tdcOffset = data[1];
      adcSlope = data[2];
      adcOffset = data[3];
   }
   void fill(HStart2CalparCell& r) {
      tdcSlope  = r.getTdcSlope();
      tdcOffset = r.getTdcOffset();
      adcSlope  = r.getAdcSlope();
      adcOffset = r.getAdcOffset();
   }
   ClassDef(HStart2CalparCell, 1) 
};
class HStart2CalparMod: public TObject {
protected:
   TObjArray* array;  
public:
   HStart2CalparMod(Int_t n = 128);
   ~HStart2CalparMod();
   HStart2CalparCell& operator[](Int_t i) {
      return *static_cast<HStart2CalparCell*>((*array)[i]);
   }
   Int_t getSize() {
      return array->GetEntries();
   }
   ClassDef(HStart2CalparMod, 1) 
};
class HStart2Calpar : public HParSet {
protected:
   TObjArray* array;     
public:
   HStart2Calpar(const Char_t* name = "Start2Calpar",
                 const Char_t* title = "Calibration parameters for Start2",
                 const Char_t* context = "Start2CalparProduction");
   ~HStart2Calpar();
   HStart2CalparMod& operator[](Int_t i) {
      return *static_cast<HStart2CalparMod*>((*array)[i]);
   }
   Int_t getSize() {
      return array->GetEntries();
   }
   Bool_t init(HParIo* input, Int_t* set);
   Int_t write(HParIo* output);
   void clear();
   void printParam();
   void readline(const Char_t*, Int_t*);
   void putAsciiHeader(TString&);
   Bool_t writeline(Char_t*, Int_t, Int_t);
   Bool_t isInTable(Int_t mod,Int_t strip, Bool_t silent=kFALSE);
   ClassDef(HStart2Calpar, 1) 
};
#endif  /*!HSTART2CALPAR_H*/