#include "hpiontrackertrb3lookup.h"
#include "hdetpario.h"
#include "hpario.h"
#include <fstream>
using namespace std;
ClassImp(HPionTrackerTrb3LookupChan)
ClassImp(HPionTrackerTrb3LookupBoard)
ClassImp(HPionTrackerTrb3Lookup)
HPionTrackerTrb3LookupBoard::HPionTrackerTrb3LookupBoard() {
  
  array = new TObjArray(256);
  for (Int_t i = 0; i < 256; i++) array->AddAt(new HPionTrackerTrb3LookupChan(), i);
}
HPionTrackerTrb3LookupBoard::~HPionTrackerTrb3LookupBoard() {
  
  array->Delete();
  delete array;
}
void HPionTrackerTrb3LookupBoard::clear() {
  
  for (Int_t i = 0; i < 256; i++)(*this)[i].clear();
}
HPionTrackerTrb3Lookup::HPionTrackerTrb3Lookup(const Char_t* name,
                                     const Char_t* title,
                                     const Char_t* context,
                                     Int_t minTrbnetAddress,
                                     Int_t maxTrbnetAddress)
                      : HParSet(name, title, context) {
  
  arrayOffset = minTrbnetAddress;
  array = new TObjArray(maxTrbnetAddress - minTrbnetAddress + 1);
}
HPionTrackerTrb3Lookup::~HPionTrackerTrb3Lookup() {
  
  array->Delete();
  delete array;
}
Bool_t HPionTrackerTrb3Lookup::init(HParIo* inp, Int_t* set) {
  
  HDetParIo* input = inp->getDetParIo("HPionTrackerParIo");
  if (input) return (input->init(this, set));
  return kFALSE;
}
Int_t HPionTrackerTrb3Lookup::write(HParIo* output) {
  
  HDetParIo* out = output->getDetParIo("HPionTrackerParIo");
  if (out) return out->write(this);
  return -1;
}
void HPionTrackerTrb3Lookup::clear() {
  
  array->Delete();
  status = kFALSE;
  resetInputVersions();
}
void HPionTrackerTrb3Lookup::printParams() {
  
  printf("Lookup table for the TRB3 unpacker of the PionTracker\n");
  printf("trbnet-address  channel  module  cell\n");
  for (Int_t i = 0; i <= array->GetLast(); i++) {
    HPionTrackerTrb3LookupBoard* b = (*this)[i];
    if (b) {
      for (Int_t j = 0; j < b->getSize(); j++) {
        HPionTrackerTrb3LookupChan& chan = (*b)[j];
        Int_t module = chan.getModule();
        if (module >= 0) {
          printf("0x%x %4i %5i%5i\n",
                 arrayOffset + i, j, module, chan.getCell());
        }
      }
    }
  }
}
Bool_t HPionTrackerTrb3Lookup::fill(Int_t id, Int_t chan, Int_t mod, Int_t cell) {
  
  Bool_t rc = kFALSE;
  HPionTrackerTrb3LookupBoard* p = getBoard(id);
  if (!p) {
    p = new HPionTrackerTrb3LookupBoard();
    array->AddAt(p, id - arrayOffset);
  }
  HPionTrackerTrb3LookupChan* c = p->getChannel(chan);
  if (c) {
    c->fill(mod, cell);
    rc = kTRUE;
  } else {
    Error("fill", "Invalid channel number %i", chan);
  }
  return rc;
}
Bool_t HPionTrackerTrb3Lookup::readline(const Char_t *buf) {
  
  Bool_t rc = kFALSE;
  Int_t id, chan, mod, cell;
  Int_t n = sscanf(buf, " 0x%x %i %i%i", &id, &chan, &mod, &cell);
  if (4 == n) {
    rc = fill(id, chan, mod, cell);
  } else {
    if (n < 4) Error("readline", "Not enough values in line %s\n", buf);
    else     Error("readline", "Too many values in line %s\n", buf);
  }
  return rc;
}
void HPionTrackerTrb3Lookup::putAsciiHeader(TString& header) {
  
  header = "# Lookup table for the TRB3 unpacker of the PionTracker\n"
           "# Format:\n"
           "# trbnet-address  channel  module  cell\n";
}
void HPionTrackerTrb3Lookup::write(fstream& fout) {
  
  for (Int_t i = 0; i <= array->GetLast(); i++) {
    HPionTrackerTrb3LookupBoard* b = (*this)[i];
    if (b) {
      for (Int_t j = 0; j < b->getSize(); j++) {
        HPionTrackerTrb3LookupChan& chan = (*b)[j];
        Int_t module = chan.getModule();
        if (module >= 0) {
          fout << "0x" << hex << (arrayOffset + i) << dec << setw(5) << j
               << setw(5) << module << setw(5) << chan.getCell() << '\n';
        }
      }
    }
  }
}
 hpiontrackertrb3lookup.cc:1  hpiontrackertrb3lookup.cc:2  hpiontrackertrb3lookup.cc:3  hpiontrackertrb3lookup.cc:4  hpiontrackertrb3lookup.cc:5  hpiontrackertrb3lookup.cc:6  hpiontrackertrb3lookup.cc:7  hpiontrackertrb3lookup.cc:8  hpiontrackertrb3lookup.cc:9  hpiontrackertrb3lookup.cc:10  hpiontrackertrb3lookup.cc:11  hpiontrackertrb3lookup.cc:12  hpiontrackertrb3lookup.cc:13  hpiontrackertrb3lookup.cc:14  hpiontrackertrb3lookup.cc:15  hpiontrackertrb3lookup.cc:16  hpiontrackertrb3lookup.cc:17  hpiontrackertrb3lookup.cc:18  hpiontrackertrb3lookup.cc:19  hpiontrackertrb3lookup.cc:20  hpiontrackertrb3lookup.cc:21  hpiontrackertrb3lookup.cc:22  hpiontrackertrb3lookup.cc:23  hpiontrackertrb3lookup.cc:24  hpiontrackertrb3lookup.cc:25  hpiontrackertrb3lookup.cc:26  hpiontrackertrb3lookup.cc:27  hpiontrackertrb3lookup.cc:28  hpiontrackertrb3lookup.cc:29  hpiontrackertrb3lookup.cc:30  hpiontrackertrb3lookup.cc:31  hpiontrackertrb3lookup.cc:32  hpiontrackertrb3lookup.cc:33  hpiontrackertrb3lookup.cc:34  hpiontrackertrb3lookup.cc:35  hpiontrackertrb3lookup.cc:36  hpiontrackertrb3lookup.cc:37  hpiontrackertrb3lookup.cc:38  hpiontrackertrb3lookup.cc:39  hpiontrackertrb3lookup.cc:40  hpiontrackertrb3lookup.cc:41  hpiontrackertrb3lookup.cc:42  hpiontrackertrb3lookup.cc:43  hpiontrackertrb3lookup.cc:44  hpiontrackertrb3lookup.cc:45  hpiontrackertrb3lookup.cc:46  hpiontrackertrb3lookup.cc:47  hpiontrackertrb3lookup.cc:48  hpiontrackertrb3lookup.cc:49  hpiontrackertrb3lookup.cc:50  hpiontrackertrb3lookup.cc:51  hpiontrackertrb3lookup.cc:52  hpiontrackertrb3lookup.cc:53  hpiontrackertrb3lookup.cc:54  hpiontrackertrb3lookup.cc:55  hpiontrackertrb3lookup.cc:56  hpiontrackertrb3lookup.cc:57  hpiontrackertrb3lookup.cc:58  hpiontrackertrb3lookup.cc:59  hpiontrackertrb3lookup.cc:60  hpiontrackertrb3lookup.cc:61  hpiontrackertrb3lookup.cc:62  hpiontrackertrb3lookup.cc:63  hpiontrackertrb3lookup.cc:64  hpiontrackertrb3lookup.cc:65  hpiontrackertrb3lookup.cc:66  hpiontrackertrb3lookup.cc:67  hpiontrackertrb3lookup.cc:68  hpiontrackertrb3lookup.cc:69  hpiontrackertrb3lookup.cc:70  hpiontrackertrb3lookup.cc:71  hpiontrackertrb3lookup.cc:72  hpiontrackertrb3lookup.cc:73  hpiontrackertrb3lookup.cc:74  hpiontrackertrb3lookup.cc:75  hpiontrackertrb3lookup.cc:76  hpiontrackertrb3lookup.cc:77  hpiontrackertrb3lookup.cc:78  hpiontrackertrb3lookup.cc:79  hpiontrackertrb3lookup.cc:80  hpiontrackertrb3lookup.cc:81  hpiontrackertrb3lookup.cc:82  hpiontrackertrb3lookup.cc:83  hpiontrackertrb3lookup.cc:84  hpiontrackertrb3lookup.cc:85  hpiontrackertrb3lookup.cc:86  hpiontrackertrb3lookup.cc:87  hpiontrackertrb3lookup.cc:88  hpiontrackertrb3lookup.cc:89  hpiontrackertrb3lookup.cc:90  hpiontrackertrb3lookup.cc:91  hpiontrackertrb3lookup.cc:92  hpiontrackertrb3lookup.cc:93  hpiontrackertrb3lookup.cc:94  hpiontrackertrb3lookup.cc:95  hpiontrackertrb3lookup.cc:96  hpiontrackertrb3lookup.cc:97  hpiontrackertrb3lookup.cc:98  hpiontrackertrb3lookup.cc:99  hpiontrackertrb3lookup.cc:100  hpiontrackertrb3lookup.cc:101  hpiontrackertrb3lookup.cc:102  hpiontrackertrb3lookup.cc:103  hpiontrackertrb3lookup.cc:104  hpiontrackertrb3lookup.cc:105  hpiontrackertrb3lookup.cc:106  hpiontrackertrb3lookup.cc:107  hpiontrackertrb3lookup.cc:108  hpiontrackertrb3lookup.cc:109  hpiontrackertrb3lookup.cc:110  hpiontrackertrb3lookup.cc:111  hpiontrackertrb3lookup.cc:112  hpiontrackertrb3lookup.cc:113  hpiontrackertrb3lookup.cc:114  hpiontrackertrb3lookup.cc:115  hpiontrackertrb3lookup.cc:116  hpiontrackertrb3lookup.cc:117  hpiontrackertrb3lookup.cc:118  hpiontrackertrb3lookup.cc:119  hpiontrackertrb3lookup.cc:120  hpiontrackertrb3lookup.cc:121  hpiontrackertrb3lookup.cc:122  hpiontrackertrb3lookup.cc:123  hpiontrackertrb3lookup.cc:124  hpiontrackertrb3lookup.cc:125  hpiontrackertrb3lookup.cc:126  hpiontrackertrb3lookup.cc:127  hpiontrackertrb3lookup.cc:128  hpiontrackertrb3lookup.cc:129  hpiontrackertrb3lookup.cc:130  hpiontrackertrb3lookup.cc:131  hpiontrackertrb3lookup.cc:132  hpiontrackertrb3lookup.cc:133  hpiontrackertrb3lookup.cc:134  hpiontrackertrb3lookup.cc:135  hpiontrackertrb3lookup.cc:136  hpiontrackertrb3lookup.cc:137  hpiontrackertrb3lookup.cc:138  hpiontrackertrb3lookup.cc:139  hpiontrackertrb3lookup.cc:140  hpiontrackertrb3lookup.cc:141  hpiontrackertrb3lookup.cc:142  hpiontrackertrb3lookup.cc:143  hpiontrackertrb3lookup.cc:144  hpiontrackertrb3lookup.cc:145  hpiontrackertrb3lookup.cc:146  hpiontrackertrb3lookup.cc:147  hpiontrackertrb3lookup.cc:148  hpiontrackertrb3lookup.cc:149  hpiontrackertrb3lookup.cc:150  hpiontrackertrb3lookup.cc:151  hpiontrackertrb3lookup.cc:152  hpiontrackertrb3lookup.cc:153