ROOT logo
#ifndef HTRB3CALPAR_H
#define HTRB3CALPAR_H

#include "TObjArray.h"
#include "TObject.h"
#include "TArrayF.h"

#include "hparset.h"
#include "htrbnetdef.h"

#include <fstream>

using namespace Trbnet;
using namespace std;

class HTrb3CalparTdc: public TObject {
protected:
  Int_t   subEvtId;        // subevent id the TDC belongs to
  Int_t   nChannels;       // number of channels
  Int_t   nBinsPerChannel; // number of bins per channel
  Int_t   nEdgesMask;      // 1 - only rising edges, 2 - only falling edges, 3 - both edges
  TArrayF binsPar;         // all bins
public:
  HTrb3CalparTdc(void);
  ~HTrb3CalparTdc(void) {}
  Int_t getSubEvtId(void)        { return subEvtId; }
  Int_t getEdgesMask(void)       { return nEdgesMask; }
  Int_t getNChannels(void)       { return nChannels; }
  Int_t getNBinsPerChannel(void) { return nBinsPerChannel; }
  Float_t* getBinsPar(void)      { return binsPar.GetArray(); }
  Int_t getArraySize(void)       { return binsPar.GetSize(); }

  Float_t* getRisingArr(Int_t chan) {
    return nEdgesMask & 1 ? getBinsPar() + chan*nBinsPerChannel : 0;
  }

  Float_t* getFallingArr(Int_t chan) {
     switch (nEdgesMask & 3) {
        case 2: return getBinsPar() + chan*nBinsPerChannel;
        case 3: return getBinsPar() + (chan+nChannels)*nBinsPerChannel;
        default: return 0;
     }
  }

  Float_t getRisingPar(Int_t chan,Int_t bin) const {
    return nEdgesMask & 1 ? binsPar[chan*nBinsPerChannel+bin] : 0.F;
  }

  Float_t getFallingPar(Int_t chan,Int_t bin) const {
     switch (nEdgesMask & 3) { 
        case 2: return binsPar[chan*nBinsPerChannel+bin];
        case 3: return binsPar[(chan+nChannels)*nBinsPerChannel+bin];
        default: return 0.F;
     }
    return 0.F;
  }

  void clear(void);
  Int_t makeArray(Int_t,Int_t,Int_t,Int_t);
  Bool_t fillArray(Float_t*,Int_t);
  Bool_t loadFromBinaryFile(const char* filename, Int_t subevtid, Int_t numBins=600, Int_t nEdgesMask=1);
  void setSimpleFineCalibration(UInt_t, UInt_t);
  void print(void);
  void write(fstream&);
  ClassDef(HTrb3CalparTdc, 1) // TDC level of the TRB3 TDC calibration parameters
};


class HTrb3Calpar : public HParSet {
protected:
   TObjArray* array;       // array of pointers of type HTrb3CalparTdc
   Int_t      arrayOffset; // offset to calculate the index
public:
   HTrb3Calpar(const Char_t* name = "",
               const Char_t* title = "",
               const Char_t* context = "",
               Int_t minTrbnetAddress = -1,
               Int_t maxTrbnetAddress = -1);
   virtual ~HTrb3Calpar();
   HTrb3CalparTdc* getTdc(Int_t trbnetAddress) {
      return (trbnetAddress<arrayOffset) ? 0 : (HTrb3CalparTdc*)(array->At(trbnetAddress - arrayOffset));
   }
   HTrb3CalparTdc* operator[](Int_t i) {
      return static_cast<HTrb3CalparTdc*>((*array)[i]);
   }
   Int_t getSize() {
      return array->GetLast() + 1;
   }
   Int_t getArrayOffset() {
      return arrayOffset;
   }
   virtual Bool_t init(HParIo* input, Int_t* set) {return kFALSE;}
   virtual Int_t write(HParIo* output)            {return -1;}
   void clear();
   HTrb3CalparTdc* addTdc(Int_t);
   void printParam();
   virtual void putAsciiHeader(TString&);
   void write(fstream&);

   Bool_t loadFromBinaryFiles(const char* basefname, Int_t subevtid, Int_t numBins=600, Int_t nEdgesMask=1);

   ClassDef(HTrb3Calpar, 1) // Base class for the TRB3 TDC calibration parameters
};

#endif  /*!HTRB3CALPAR_H*/
 htrb3calpar.h:1
 htrb3calpar.h:2
 htrb3calpar.h:3
 htrb3calpar.h:4
 htrb3calpar.h:5
 htrb3calpar.h:6
 htrb3calpar.h:7
 htrb3calpar.h:8
 htrb3calpar.h:9
 htrb3calpar.h:10
 htrb3calpar.h:11
 htrb3calpar.h:12
 htrb3calpar.h:13
 htrb3calpar.h:14
 htrb3calpar.h:15
 htrb3calpar.h:16
 htrb3calpar.h:17
 htrb3calpar.h:18
 htrb3calpar.h:19
 htrb3calpar.h:20
 htrb3calpar.h:21
 htrb3calpar.h:22
 htrb3calpar.h:23
 htrb3calpar.h:24
 htrb3calpar.h:25
 htrb3calpar.h:26
 htrb3calpar.h:27
 htrb3calpar.h:28
 htrb3calpar.h:29
 htrb3calpar.h:30
 htrb3calpar.h:31
 htrb3calpar.h:32
 htrb3calpar.h:33
 htrb3calpar.h:34
 htrb3calpar.h:35
 htrb3calpar.h:36
 htrb3calpar.h:37
 htrb3calpar.h:38
 htrb3calpar.h:39
 htrb3calpar.h:40
 htrb3calpar.h:41
 htrb3calpar.h:42
 htrb3calpar.h:43
 htrb3calpar.h:44
 htrb3calpar.h:45
 htrb3calpar.h:46
 htrb3calpar.h:47
 htrb3calpar.h:48
 htrb3calpar.h:49
 htrb3calpar.h:50
 htrb3calpar.h:51
 htrb3calpar.h:52
 htrb3calpar.h:53
 htrb3calpar.h:54
 htrb3calpar.h:55
 htrb3calpar.h:56
 htrb3calpar.h:57
 htrb3calpar.h:58
 htrb3calpar.h:59
 htrb3calpar.h:60
 htrb3calpar.h:61
 htrb3calpar.h:62
 htrb3calpar.h:63
 htrb3calpar.h:64
 htrb3calpar.h:65
 htrb3calpar.h:66
 htrb3calpar.h:67
 htrb3calpar.h:68
 htrb3calpar.h:69
 htrb3calpar.h:70
 htrb3calpar.h:71
 htrb3calpar.h:72
 htrb3calpar.h:73
 htrb3calpar.h:74
 htrb3calpar.h:75
 htrb3calpar.h:76
 htrb3calpar.h:77
 htrb3calpar.h:78
 htrb3calpar.h:79
 htrb3calpar.h:80
 htrb3calpar.h:81
 htrb3calpar.h:82
 htrb3calpar.h:83
 htrb3calpar.h:84
 htrb3calpar.h:85
 htrb3calpar.h:86
 htrb3calpar.h:87
 htrb3calpar.h:88
 htrb3calpar.h:89
 htrb3calpar.h:90
 htrb3calpar.h:91
 htrb3calpar.h:92
 htrb3calpar.h:93
 htrb3calpar.h:94
 htrb3calpar.h:95
 htrb3calpar.h:96
 htrb3calpar.h:97
 htrb3calpar.h:98
 htrb3calpar.h:99
 htrb3calpar.h:100
 htrb3calpar.h:101
 htrb3calpar.h:102
 htrb3calpar.h:103
 htrb3calpar.h:104
 htrb3calpar.h:105