#include "hdetpario.h"
#include "hpario.h"
#include "hrich700trb3lookup.h"
#include <fstream>
using namespace std;
ClassImp(HRich700Trb3LookupChan)
ClassImp(HRich700Trb3LookupTdc)
ClassImp(HRich700Trb3Lookup)
HRich700Trb3LookupTdc::HRich700Trb3LookupTdc()
{
array = new TObjArray(HRICH700_MAXTDCCHANNELS);
for (Int_t i = 0; i < HRICH700_MAXTDCCHANNELS; i++) array->AddAt(new HRich700Trb3LookupChan(), i);
}
HRich700Trb3LookupTdc::~HRich700Trb3LookupTdc()
{
array->Delete();
delete array;
}
void HRich700Trb3LookupTdc::clear()
{
for (Int_t i = 0; i < getSize(); i++)(*this)[i].clear();
}
HRich700Trb3Lookup::HRich700Trb3Lookup(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);
arrayCursor=0;
}
HRich700Trb3Lookup::~HRich700Trb3Lookup()
{
array->Delete();
delete array;
}
Bool_t HRich700Trb3Lookup::init(HParIo* inp, Int_t* set)
{
HDetParIo* input = inp->getDetParIo("HRichParIo");
if (input) return (input->init(this, set));
return kFALSE;
}
Int_t HRich700Trb3Lookup::write(HParIo* output)
{
HDetParIo* out = output->getDetParIo("HRichParIo");
if (out) return out->write(this);
return -1;
}
void HRich700Trb3Lookup::clear()
{
array->Delete();
status = kFALSE;
resetInputVersions();
}
void HRich700Trb3Lookup::resetTdcIterator()
{
arrayCursor=0;
}
Int_t HRich700Trb3Lookup::getNextTdcAddress()
{
Int_t address=0;
HRich700Trb3LookupTdc* slot=0;
if(arrayCursor>=getSize()) return 0;
for(Int_t n=arrayCursor;n<getSize();n++){
slot= dynamic_cast<HRich700Trb3LookupTdc*> (array->At(n));
if(slot){
address = n+arrayOffset;
arrayCursor = n+1;
return address;
}
arrayCursor = n+1;
}
return address;
}
void HRich700Trb3Lookup::printParam()
{
printf("Lookup table for the TRB3 unpacker of the RICH700 detector\n");
printf("trbnet-address channel PMT pixel\n");
for (Int_t i = 0; i <= array->GetLast(); i++) {
HRich700Trb3LookupTdc* b = (*this)[i];
if (b) {
for (Int_t j = 0; j < b->getSize(); j++) {
HRich700Trb3LookupChan& chan = (*b)[j];
Int_t pmt = chan.getPMT();
if (pmt >= 0) {
printf("0x%x %4i %5i %5i\n",
arrayOffset + i, j, pmt, chan.getPixel());
}
}
}
}
}
Bool_t HRich700Trb3Lookup::fill(Int_t id, Int_t chan, Int_t pmt, Int_t pix)
{
Bool_t rc = kFALSE;
HRich700Trb3LookupTdc* p = getTdc(id);
if (!p) {
p = new HRich700Trb3LookupTdc();
array->AddAt(p, id - arrayOffset);
}
HRich700Trb3LookupChan* c = p->getChannel(chan);
if (c) {
c->fill(pmt, pix);
rc = kTRUE;
} else {
Error("fill", "Invalid channel number %i", chan);
}
return rc;
}
Bool_t HRich700Trb3Lookup::readline(const Char_t *buf)
{
Bool_t rc = kFALSE;
Int_t id, chan, pmt, pix;
Int_t n = sscanf(buf, " 0x%x %d %d %d", &id, &chan, &pmt, &pix);
if (4 == n) {
rc = fill(id, chan, pmt, pix);
} 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 HRich700Trb3Lookup::putAsciiHeader(TString& header)
{
header =
"# Lookup table for the TRB3 unpacker of the RICH700 detector\n"
"# Format:\n"
"# trbnet-address channel pmt pixel\n";
}
void HRich700Trb3Lookup::write(fstream& fout)
{
for (Int_t i = 0; i <= array->GetLast(); i++) {
HRich700Trb3LookupTdc* b = (*this)[i];
if (b) {
for (Int_t j = 0; j < b->getSize(); j++) {
HRich700Trb3LookupChan& chan = (*b)[j];
Int_t pmt = chan.getPMT();
if (pmt >= 0) {
fout << "0x" << hex << (arrayOffset + i) << dec << setw(5) << j
<< setw(5) << pmt << setw(5) << chan.getPixel() << '\n';
}
}
}
}
}
hrich700trb3lookup.cc:100 hrich700trb3lookup.cc:101 hrich700trb3lookup.cc:102 hrich700trb3lookup.cc:103 hrich700trb3lookup.cc:104 hrich700trb3lookup.cc:105 hrich700trb3lookup.cc:106 hrich700trb3lookup.cc:107 hrich700trb3lookup.cc:108 hrich700trb3lookup.cc:109 hrich700trb3lookup.cc:110 hrich700trb3lookup.cc:111 hrich700trb3lookup.cc:112 hrich700trb3lookup.cc:113 hrich700trb3lookup.cc:114 hrich700trb3lookup.cc:115 hrich700trb3lookup.cc:116 hrich700trb3lookup.cc:117 hrich700trb3lookup.cc:118 hrich700trb3lookup.cc:119 hrich700trb3lookup.cc:120 hrich700trb3lookup.cc:121 hrich700trb3lookup.cc:122 hrich700trb3lookup.cc:123 hrich700trb3lookup.cc:124 hrich700trb3lookup.cc:125 hrich700trb3lookup.cc:126 hrich700trb3lookup.cc:127 hrich700trb3lookup.cc:128 hrich700trb3lookup.cc:129 hrich700trb3lookup.cc:130 hrich700trb3lookup.cc:131 hrich700trb3lookup.cc:132 hrich700trb3lookup.cc:133 hrich700trb3lookup.cc:134 hrich700trb3lookup.cc:135 hrich700trb3lookup.cc:136 hrich700trb3lookup.cc:137 hrich700trb3lookup.cc:138 hrich700trb3lookup.cc:139 hrich700trb3lookup.cc:140 hrich700trb3lookup.cc:141 hrich700trb3lookup.cc:142 hrich700trb3lookup.cc:143 hrich700trb3lookup.cc:144 hrich700trb3lookup.cc:145 hrich700trb3lookup.cc:146 hrich700trb3lookup.cc:147 hrich700trb3lookup.cc:148 hrich700trb3lookup.cc:149 hrich700trb3lookup.cc:150 hrich700trb3lookup.cc:151 hrich700trb3lookup.cc:152 hrich700trb3lookup.cc:153 hrich700trb3lookup.cc:154 hrich700trb3lookup.cc:155 hrich700trb3lookup.cc:156 hrich700trb3lookup.cc:157 hrich700trb3lookup.cc:158 hrich700trb3lookup.cc:159 hrich700trb3lookup.cc:160 hrich700trb3lookup.cc:161 hrich700trb3lookup.cc:162 hrich700trb3lookup.cc:163 hrich700trb3lookup.cc:164 hrich700trb3lookup.cc:165 hrich700trb3lookup.cc:166 hrich700trb3lookup.cc:167 hrich700trb3lookup.cc:168 hrich700trb3lookup.cc:169 hrich700trb3lookup.cc:170 hrich700trb3lookup.cc:171 hrich700trb3lookup.cc:172 hrich700trb3lookup.cc:173 hrich700trb3lookup.cc:174 hrich700trb3lookup.cc:175 hrich700trb3lookup.cc:176 hrich700trb3lookup.cc:177 hrich700trb3lookup.cc:178 hrich700trb3lookup.cc:179 hrich700trb3lookup.cc:180 hrich700trb3lookup.cc:181 hrich700trb3lookup.cc:182 hrich700trb3lookup.cc:183 hrich700trb3lookup.cc:184 hrich700trb3lookup.cc:185 hrich700trb3lookup.cc:186 hrich700trb3lookup.cc:187 hrich700trb3lookup.cc:188 hrich700trb3lookup.cc:189 hrich700trb3lookup.cc:190 hrich700trb3lookup.cc:191 hrich700trb3lookup.cc:192 hrich700trb3lookup.cc:193 hrich700trb3lookup.cc:194 hrich700trb3lookup.cc:195 hrich700trb3lookup.cc:196 hrich700trb3lookup.cc:197 hrich700trb3lookup.cc:198 hrich700trb3lookup.cc:199 hrich700trb3lookup.cc:200 hrich700trb3lookup.cc:201 hrich700trb3lookup.cc:202 hrich700trb3lookup.cc:203 hrich700trb3lookup.cc:204 hrich700trb3lookup.cc:205