#ifndef HPIONTRACKERTRB3LOOKUP_H
#define HPIONTRACKERTRB3LOOKUP_H
#include "TObjArray.h"
#include "hparset.h"
#include "htrbnetdef.h"
using namespace Trbnet;
using namespace std;
class HPionTrackerTrb3LookupChan : public TObject {
protected:
  Int_t  module;    
  Int_t  cell;      
public:
  HPionTrackerTrb3LookupChan()  {clear();}
  ~HPionTrackerTrb3LookupChan() {}
  Int_t getModule() {return module;}
  Int_t getCell()   {return cell;}
  void getAddress(Int_t& m, Int_t& c) {
    m = module;
    c = cell;
  }
  void clear() {
    module = -1;
    cell = -1;
  }
  void setModule(const Int_t n) {module = n;}
  void setCell(const Int_t n)   {cell = n;}
  void fill(Int_t m, Int_t c) {
    module = m;
    cell = c;
  }
  void fill(HPionTrackerTrb3LookupChan& r) {
    module = r.getModule();
    cell = r.getCell();
  }
  ClassDef(HPionTrackerTrb3LookupChan, 1) 
};
class HPionTrackerTrb3LookupBoard: public TObject {
  friend class HPionTrackerTrb3Lookup;
protected:
  TObjArray* array;     
public:
  HPionTrackerTrb3LookupBoard();
  ~HPionTrackerTrb3LookupBoard();
  HPionTrackerTrb3LookupChan* getChannel(Int_t c) {
    if (c >= 0 && c < 256) return &((*this)[c]);
    else return 0;
  }
  HPionTrackerTrb3LookupChan& operator[](Int_t i) {
    return *static_cast<HPionTrackerTrb3LookupChan*>((*array)[i]);
  }
  Int_t getSize()  {return 256;}
  void  clear();
  ClassDef(HPionTrackerTrb3LookupBoard, 1) 
};
class HPionTrackerTrb3Lookup : public HParSet {
protected:
  TObjArray* array;  
  Int_t arrayOffset; 
public:
  HPionTrackerTrb3Lookup(const Char_t* name = "PionTrackerTrb3Lookup",
                         const Char_t* title = "Lookup table for the TRB3 unpacker of the PionTracker",
                         const Char_t* context = "PionTrackerTrb3LookupProduction",
                         Int_t minTrbnetAddress = Trbnet::kPionTrackerTrb3MinTrbnetAddress,
                         Int_t maxTrbnetAddress = Trbnet::kPionTrackerTrb3MaxTrbnetAddress);
  ~HPionTrackerTrb3Lookup();
  HPionTrackerTrb3LookupBoard* getBoard(Int_t trbnetAddress) {
    return (HPionTrackerTrb3LookupBoard*)(array->At(trbnetAddress - arrayOffset));
  }
  HPionTrackerTrb3LookupBoard* operator[](Int_t i) {
     return static_cast<HPionTrackerTrb3LookupBoard*>((*array)[i]);
  }
  Int_t getSize() {return array->GetLast() + 1;}
  Int_t getArrayOffset() {return arrayOffset;}
  Bool_t init(HParIo* input, Int_t* set);
  Int_t  write(HParIo* output);
  void   clear();
  void   printParams();
  Bool_t fill(Int_t, Int_t, Int_t, Int_t);
  Bool_t readline(const Char_t*);
  void   putAsciiHeader(TString&);
  void   write(fstream&);
  ClassDef(HPionTrackerTrb3Lookup, 1) 
};
#endif  /*!HPIONTRACKERTRB3LOOKUP_H*/
 hpiontrackertrb3lookup.h:1  hpiontrackertrb3lookup.h:2  hpiontrackertrb3lookup.h:3  hpiontrackertrb3lookup.h:4  hpiontrackertrb3lookup.h:5  hpiontrackertrb3lookup.h:6  hpiontrackertrb3lookup.h:7  hpiontrackertrb3lookup.h:8  hpiontrackertrb3lookup.h:9  hpiontrackertrb3lookup.h:10  hpiontrackertrb3lookup.h:11  hpiontrackertrb3lookup.h:12  hpiontrackertrb3lookup.h:13  hpiontrackertrb3lookup.h:14  hpiontrackertrb3lookup.h:15  hpiontrackertrb3lookup.h:16  hpiontrackertrb3lookup.h:17  hpiontrackertrb3lookup.h:18  hpiontrackertrb3lookup.h:19  hpiontrackertrb3lookup.h:20  hpiontrackertrb3lookup.h:21  hpiontrackertrb3lookup.h:22  hpiontrackertrb3lookup.h:23  hpiontrackertrb3lookup.h:24  hpiontrackertrb3lookup.h:25  hpiontrackertrb3lookup.h:26  hpiontrackertrb3lookup.h:27  hpiontrackertrb3lookup.h:28  hpiontrackertrb3lookup.h:29  hpiontrackertrb3lookup.h:30  hpiontrackertrb3lookup.h:31  hpiontrackertrb3lookup.h:32  hpiontrackertrb3lookup.h:33  hpiontrackertrb3lookup.h:34  hpiontrackertrb3lookup.h:35  hpiontrackertrb3lookup.h:36  hpiontrackertrb3lookup.h:37  hpiontrackertrb3lookup.h:38  hpiontrackertrb3lookup.h:39  hpiontrackertrb3lookup.h:40  hpiontrackertrb3lookup.h:41  hpiontrackertrb3lookup.h:42  hpiontrackertrb3lookup.h:43  hpiontrackertrb3lookup.h:44  hpiontrackertrb3lookup.h:45  hpiontrackertrb3lookup.h:46  hpiontrackertrb3lookup.h:47  hpiontrackertrb3lookup.h:48  hpiontrackertrb3lookup.h:49  hpiontrackertrb3lookup.h:50  hpiontrackertrb3lookup.h:51  hpiontrackertrb3lookup.h:52  hpiontrackertrb3lookup.h:53  hpiontrackertrb3lookup.h:54  hpiontrackertrb3lookup.h:55  hpiontrackertrb3lookup.h:56  hpiontrackertrb3lookup.h:57  hpiontrackertrb3lookup.h:58  hpiontrackertrb3lookup.h:59  hpiontrackertrb3lookup.h:60  hpiontrackertrb3lookup.h:61  hpiontrackertrb3lookup.h:62  hpiontrackertrb3lookup.h:63  hpiontrackertrb3lookup.h:64  hpiontrackertrb3lookup.h:65  hpiontrackertrb3lookup.h:66  hpiontrackertrb3lookup.h:67  hpiontrackertrb3lookup.h:68  hpiontrackertrb3lookup.h:69  hpiontrackertrb3lookup.h:70  hpiontrackertrb3lookup.h:71  hpiontrackertrb3lookup.h:72  hpiontrackertrb3lookup.h:73  hpiontrackertrb3lookup.h:74  hpiontrackertrb3lookup.h:75  hpiontrackertrb3lookup.h:76  hpiontrackertrb3lookup.h:77  hpiontrackertrb3lookup.h:78  hpiontrackertrb3lookup.h:79  hpiontrackertrb3lookup.h:80  hpiontrackertrb3lookup.h:81  hpiontrackertrb3lookup.h:82  hpiontrackertrb3lookup.h:83  hpiontrackertrb3lookup.h:84  hpiontrackertrb3lookup.h:85  hpiontrackertrb3lookup.h:86  hpiontrackertrb3lookup.h:87  hpiontrackertrb3lookup.h:88  hpiontrackertrb3lookup.h:89  hpiontrackertrb3lookup.h:90  hpiontrackertrb3lookup.h:91  hpiontrackertrb3lookup.h:92  hpiontrackertrb3lookup.h:93  hpiontrackertrb3lookup.h:94  hpiontrackertrb3lookup.h:95  hpiontrackertrb3lookup.h:96  hpiontrackertrb3lookup.h:97  hpiontrackertrb3lookup.h:98  hpiontrackertrb3lookup.h:99  hpiontrackertrb3lookup.h:100  hpiontrackertrb3lookup.h:101  hpiontrackertrb3lookup.h:102  hpiontrackertrb3lookup.h:103  hpiontrackertrb3lookup.h:104  hpiontrackertrb3lookup.h:105