ROOT logo
//*-- AUTHOR Ilse Koenig
//*-- created : 25/06/2009 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION
///////////////////////////////////////////////////////////////////////
//
// HTrbnetAddressMapping
//
///////////////////////////////////////////////////////////////////////

using namespace std;
#include "htrbnetaddressmapping.h"
#include "htrb2correction.h"
#include "hpario.h"
#include "hdetpario.h"
#include <iostream>
#include <iomanip>
#include <ctype.h>
#include <stdlib.h>

ClassImp(HTrbnetAddressMapping)

HTrbnetAddressMapping::HTrbnetAddressMapping(const Char_t* name,
                               const Char_t* title,
                               const Char_t* context,
                               Int_t minTrbnetAddress,
                               Int_t maxTrbnetAddress)
  : HParSet(name,title,context) {
  // constructor creates an empty array of size nBoards
  arrayOffset=minTrbnetAddress;
  array = new TObjArray(maxTrbnetAddress-minTrbnetAddress+1);
}

HTrbnetAddressMapping::~HTrbnetAddressMapping() {
  // destructor
  array->Delete();
  delete array;
}

Bool_t HTrbnetAddressMapping::init(HParIo* inp,Int_t* set) {
  // initializes the container from an input
  Bool_t rc=kFALSE;
  HDetParIo* input=inp->getDetParIo("HSpecParIo");
  if (input) rc=(input->init(this,set));
  if (rc) {
    Int_t n=0;
    for(Int_t i=0;i<=array->GetLast();i++) {
      HTrb2Correction* b=(*this)[i];
      if (b&&strcmp(b->getBoardType(),"TRB")==0&&b->getNChannels()==0) {
        if (n==0) cout<<"  WARNING:\n";
        cout<<"    No TDC corrections for trbnet-address 0x"<<setw(4)<<left
 	    <<hex<<(arrayOffset+i)<<dec<<endl;
        n++;
      }
    }
  }
  return rc;
}

Int_t HTrbnetAddressMapping::write(HParIo* output) {
  // writes the container to an output
  HDetParIo* out=output->getDetParIo("HSpecParIo");
  if (out) return out->write(this);
  return -1;
}

void HTrbnetAddressMapping::clear() {
  // deletes all HTrb2Correction objects from the array and resets the input versions
  array->Delete();
  status=kFALSE;
  resetInputVersions();
}

void HTrbnetAddressMapping::printParam() {
  // prints the mapping table
  printf("Mapping of trbnet-addresses to readout boards\n");
  printf("Format: trbnet-address temperatureSensor  boardType  nChannelsWithCorrections\n");
  for(Int_t i=0;i<=array->GetLast();i++) {
    HTrb2Correction* b=(*this)[i];
    if (b) {
      cout<<"  0x"<<setw(4)<<left<<hex<<(arrayOffset+i)<<dec<<"  "<<b->GetName()
          <<"  "<<b->getBoardType()<<setw(5)<<right<<b->getNChannels()<<left<<endl;
    }
  }
}

HTrb2Correction* HTrbnetAddressMapping::addBoard(Int_t address,
                                                 const Char_t* temperatureSensor,
                                                 const Char_t* boardtype,
                                                 Int_t subEventId,
                                                 Int_t tdcResolMode) {
  HTrb2Correction* p=0;
  p=getBoard(address);
  if (!p) {
    p=new HTrb2Correction(temperatureSensor);
    p->setBoardType(boardtype);
    p->setSubeventId(subEventId);
    p->setHighResolutionFlag(tdcResolMode);
    array->AddAt(p,address-arrayOffset);
  } else if (strcmp(p->GetName(),temperatureSensor)!=0) {
    Error("addBoard","Board exists already for trbnet-address 0x%x:\n"
	  "  old temperature sensor: %s   new: %s\n",
	  address,p->GetName(),temperatureSensor);    
  }
  return p;
}  

Bool_t HTrbnetAddressMapping::readline(const Char_t *buf) {
  // decodes one line read from ASCII file I/O and adds a trb board
  Bool_t rc=kFALSE;
  Int_t address=-1, subevtId=-1, tdcResolMode=-1;
  Char_t tempSensor[30], boardType[30];
  boardType[0]=tempSensor[0]='\0';
  Int_t n=sscanf(buf," 0x%x %s %s %i %i",
                 &address,tempSensor,boardType,&subevtId,&tdcResolMode);
  if (n==5) {
    if (addBoard(address,tempSensor,boardType,subevtId,tdcResolMode)) rc=kTRUE;
  } else {
    Error("readline","Not enough or too many values in %s\n",buf);
  }
  return rc;
}

void HTrbnetAddressMapping::putAsciiHeader(TString& header) {
  // puts the ASCII header to the string used in HSpecParAsciiFileIo
  header=
    "# Mapping of trbnet-address to TRB boards\n"
    "# Format: trbnetAddress  temperatureSensor  boardType  subeventId  tdc resolution mode \n";
}

void HTrbnetAddressMapping::write(fstream& fout) {
  // writes the information of all non-zero HTrb2Correction objects to the ASCII file
  for(Int_t i=0;i<=array->GetLast();i++) {
    HTrb2Correction* b=(*this)[i];
    if (b) {
      fout<<"  0x"<<setw(4)<<left<<hex<<(arrayOffset+i)<<"  "<<b->GetName()
          <<"  "<<b->getBoardType();
      if (b->getSubeventId()>=0) {
        fout<<"  0x"<<setw(4)<<left<<hex<<b->getSubeventId();
      } else {
        fout<<setw(8)<<right<<dec<<b->getSubeventId();
      }
      fout<<"  "<<dec<<b->getHighResolutionFlag()<<endl;
    }
  }
  fout<<"# ----------------------------------------------------------------------------"
      <<endl;
  fout<<"[Trb2Corrections]\n";
  for(Int_t i=0;i<=array->GetLast();i++) {
    HTrb2Correction* b=(*this)[i];
    if (b) {
      b->write(fout);
    }
  }
}
 htrbnetaddressmapping.cc:1
 htrbnetaddressmapping.cc:2
 htrbnetaddressmapping.cc:3
 htrbnetaddressmapping.cc:4
 htrbnetaddressmapping.cc:5
 htrbnetaddressmapping.cc:6
 htrbnetaddressmapping.cc:7
 htrbnetaddressmapping.cc:8
 htrbnetaddressmapping.cc:9
 htrbnetaddressmapping.cc:10
 htrbnetaddressmapping.cc:11
 htrbnetaddressmapping.cc:12
 htrbnetaddressmapping.cc:13
 htrbnetaddressmapping.cc:14
 htrbnetaddressmapping.cc:15
 htrbnetaddressmapping.cc:16
 htrbnetaddressmapping.cc:17
 htrbnetaddressmapping.cc:18
 htrbnetaddressmapping.cc:19
 htrbnetaddressmapping.cc:20
 htrbnetaddressmapping.cc:21
 htrbnetaddressmapping.cc:22
 htrbnetaddressmapping.cc:23
 htrbnetaddressmapping.cc:24
 htrbnetaddressmapping.cc:25
 htrbnetaddressmapping.cc:26
 htrbnetaddressmapping.cc:27
 htrbnetaddressmapping.cc:28
 htrbnetaddressmapping.cc:29
 htrbnetaddressmapping.cc:30
 htrbnetaddressmapping.cc:31
 htrbnetaddressmapping.cc:32
 htrbnetaddressmapping.cc:33
 htrbnetaddressmapping.cc:34
 htrbnetaddressmapping.cc:35
 htrbnetaddressmapping.cc:36
 htrbnetaddressmapping.cc:37
 htrbnetaddressmapping.cc:38
 htrbnetaddressmapping.cc:39
 htrbnetaddressmapping.cc:40
 htrbnetaddressmapping.cc:41
 htrbnetaddressmapping.cc:42
 htrbnetaddressmapping.cc:43
 htrbnetaddressmapping.cc:44
 htrbnetaddressmapping.cc:45
 htrbnetaddressmapping.cc:46
 htrbnetaddressmapping.cc:47
 htrbnetaddressmapping.cc:48
 htrbnetaddressmapping.cc:49
 htrbnetaddressmapping.cc:50
 htrbnetaddressmapping.cc:51
 htrbnetaddressmapping.cc:52
 htrbnetaddressmapping.cc:53
 htrbnetaddressmapping.cc:54
 htrbnetaddressmapping.cc:55
 htrbnetaddressmapping.cc:56
 htrbnetaddressmapping.cc:57
 htrbnetaddressmapping.cc:58
 htrbnetaddressmapping.cc:59
 htrbnetaddressmapping.cc:60
 htrbnetaddressmapping.cc:61
 htrbnetaddressmapping.cc:62
 htrbnetaddressmapping.cc:63
 htrbnetaddressmapping.cc:64
 htrbnetaddressmapping.cc:65
 htrbnetaddressmapping.cc:66
 htrbnetaddressmapping.cc:67
 htrbnetaddressmapping.cc:68
 htrbnetaddressmapping.cc:69
 htrbnetaddressmapping.cc:70
 htrbnetaddressmapping.cc:71
 htrbnetaddressmapping.cc:72
 htrbnetaddressmapping.cc:73
 htrbnetaddressmapping.cc:74
 htrbnetaddressmapping.cc:75
 htrbnetaddressmapping.cc:76
 htrbnetaddressmapping.cc:77
 htrbnetaddressmapping.cc:78
 htrbnetaddressmapping.cc:79
 htrbnetaddressmapping.cc:80
 htrbnetaddressmapping.cc:81
 htrbnetaddressmapping.cc:82
 htrbnetaddressmapping.cc:83
 htrbnetaddressmapping.cc:84
 htrbnetaddressmapping.cc:85
 htrbnetaddressmapping.cc:86
 htrbnetaddressmapping.cc:87
 htrbnetaddressmapping.cc:88
 htrbnetaddressmapping.cc:89
 htrbnetaddressmapping.cc:90
 htrbnetaddressmapping.cc:91
 htrbnetaddressmapping.cc:92
 htrbnetaddressmapping.cc:93
 htrbnetaddressmapping.cc:94
 htrbnetaddressmapping.cc:95
 htrbnetaddressmapping.cc:96
 htrbnetaddressmapping.cc:97
 htrbnetaddressmapping.cc:98
 htrbnetaddressmapping.cc:99
 htrbnetaddressmapping.cc:100
 htrbnetaddressmapping.cc:101
 htrbnetaddressmapping.cc:102
 htrbnetaddressmapping.cc:103
 htrbnetaddressmapping.cc:104
 htrbnetaddressmapping.cc:105
 htrbnetaddressmapping.cc:106
 htrbnetaddressmapping.cc:107
 htrbnetaddressmapping.cc:108
 htrbnetaddressmapping.cc:109
 htrbnetaddressmapping.cc:110
 htrbnetaddressmapping.cc:111
 htrbnetaddressmapping.cc:112
 htrbnetaddressmapping.cc:113
 htrbnetaddressmapping.cc:114
 htrbnetaddressmapping.cc:115
 htrbnetaddressmapping.cc:116
 htrbnetaddressmapping.cc:117
 htrbnetaddressmapping.cc:118
 htrbnetaddressmapping.cc:119
 htrbnetaddressmapping.cc:120
 htrbnetaddressmapping.cc:121
 htrbnetaddressmapping.cc:122
 htrbnetaddressmapping.cc:123
 htrbnetaddressmapping.cc:124
 htrbnetaddressmapping.cc:125
 htrbnetaddressmapping.cc:126
 htrbnetaddressmapping.cc:127
 htrbnetaddressmapping.cc:128
 htrbnetaddressmapping.cc:129
 htrbnetaddressmapping.cc:130
 htrbnetaddressmapping.cc:131
 htrbnetaddressmapping.cc:132
 htrbnetaddressmapping.cc:133
 htrbnetaddressmapping.cc:134
 htrbnetaddressmapping.cc:135
 htrbnetaddressmapping.cc:136
 htrbnetaddressmapping.cc:137
 htrbnetaddressmapping.cc:138
 htrbnetaddressmapping.cc:139
 htrbnetaddressmapping.cc:140
 htrbnetaddressmapping.cc:141
 htrbnetaddressmapping.cc:142
 htrbnetaddressmapping.cc:143
 htrbnetaddressmapping.cc:144
 htrbnetaddressmapping.cc:145
 htrbnetaddressmapping.cc:146
 htrbnetaddressmapping.cc:147
 htrbnetaddressmapping.cc:148
 htrbnetaddressmapping.cc:149
 htrbnetaddressmapping.cc:150
 htrbnetaddressmapping.cc:151
 htrbnetaddressmapping.cc:152
 htrbnetaddressmapping.cc:153
 htrbnetaddressmapping.cc:154
 htrbnetaddressmapping.cc:155