ROOT logo
//*-- Author  : Pablo Cabanelas
//*-- Created : 23/08/2007

//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////
// HRpcCalPar
//
// Container class for RPC calibration parameters
//
////////////////////////////////////////////////////////////////////


using namespace std;
#include "hrpccalpar.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "hrpcdetector.h"
#include "hpario.h"
#include "hdetpario.h"
#include <iostream> 
#include <iomanip>
#include <cstdlib>

ClassImp(HRpcCalPar)
  ClassImp(HRpcCalParSec)
  ClassImp(HRpcCalParCol)
  ClassImp(HRpcCalParCell)
  

  void HRpcCalParCell::clear() {
  rightTimeOffset  = 0.0;
  leftTimeOffset   = 0.0;
  rightTotOffset   = 0.0;
  leftTotOffset    = 0.0;
  tdc2time         = 1.0;
  tot2charge       = 1.0;
  t0               = 0.0;
}

HRpcCalParCol::HRpcCalParCol() {
  // Constructor creates an array of pointers of type HRpcCalParCell.
  MaxCells = 32;
  array = new TObjArray(MaxCells);
  for(Int_t i=0 ; i<MaxCells ; i++) array->AddAt(new HRpcCalParCell(),i);
}

HRpcCalParCol::~HRpcCalParCol(void) {
  // Destructor.
  if(array)
    {
      array->Delete();
      delete array;
    }
}

void HRpcCalParCol::fill(Int_t cell,Float_t rightTimeOffset,Float_t leftTimeOffset,Float_t rightTotOffset,Float_t leftTotOffset,
			 Float_t tdc2time,Float_t tot2charge,Float_t t0) {

  if (cell<MaxCells && cell>=0) {
    (*this)[cell].fill(rightTimeOffset,leftTimeOffset,rightTotOffset,leftTotOffset,tdc2time,tot2charge,t0);  
    // calls fill() method of HRpcCalParCell
  } else {
    Error("fill","Invalid address cell: %i",cell);
  }
  
}

HRpcCalParSec::HRpcCalParSec() {
  // Constructor creates an array of pointers of type HRpcCalParCol.
  MaxColumns = 6;  
  array = new TObjArray(MaxColumns);
  for(Int_t i=0 ; i<MaxColumns ; i++) array->AddAt(new HRpcCalParCol(),i);
}

HRpcCalParSec::~HRpcCalParSec(void) {
  // Destructor.
  if (array) {
    array->Delete();
    delete array;
  }
}

void HRpcCalParSec::fill(Int_t col,Int_t cell,Float_t rightTimeOffset,Float_t leftTimeOffset,Float_t rightTotOffset,Float_t leftTotOffset,
			 Float_t tdc2time,Float_t tot2charge,Float_t t0) {

  if (col<MaxColumns && col>=0) {
    (*this)[col].fill(cell,rightTimeOffset,leftTimeOffset,rightTotOffset,leftTotOffset,tdc2time,tot2charge,t0);  // calls fill() method of HRpcCalParCol
  } else {
    Error("fill","Invalid address column: %i",col);
  }
	
}

HRpcCalPar::HRpcCalPar(const Char_t* name,const Char_t* title,
		       const Char_t* context)
  : HParSet(name,title,context) {
  // Constructor creates an array of pointers of type HRpcCalParSec.
  // The container name is set to "RpcCalPar".
  strcpy(detName,"Rpc");

  MaxSectors = 6;
  array = new TObjArray(MaxSectors);

  for (Int_t i=0; i<MaxSectors; i++) array->AddAt(new HRpcCalParSec(),i);

}

HRpcCalPar::~HRpcCalPar(void) {
  // Destructor.
  array->Delete();
  delete array;
}

Bool_t HRpcCalPar::init(HParIo* inp,Int_t* set) {
  // Intitializes the container from an input.
  // If input not available, default initialization.
  HDetParIo* input=inp->getDetParIo("HRpcParIo");
  if (input) return (input->init(this,set));
  return kFALSE;
}

Int_t HRpcCalPar::write(HParIo* output) {
  // Writes the container to an output.
  HDetParIo* out=output->getDetParIo("HRpcParIo");
  if (out) return out->write(this);
  return -1;
}

void HRpcCalPar::clear() {
  // Clears the container 
  for(Int_t sec=0;sec<getSize();sec++) {  //size of sectors
    for(Int_t col=0;col<(*this)[sec].getSize();col++) {  //size of columns
      for(Int_t cell=0;cell<(*this)[sec][col].getSize();cell++) {  //size of cells
	(*this)[sec][col][cell].clear();
      }
    }
  }
  status=kFALSE;
  resetInputVersions();
}

void HRpcCalPar::fill(Int_t sec, Int_t col, Int_t cell, Float_t rightTimeOffset, Float_t leftTimeOffset, Float_t rightTotOffset, Float_t leftTotOffset,
		      Float_t tdc2time, Float_t tot2charge, Float_t t0 ) {

  if (sec<MaxSectors && sec>=0) {
    (*this)[sec].fill(col,cell,rightTimeOffset,leftTimeOffset,rightTotOffset,leftTotOffset,tdc2time,tot2charge,t0);  // calls fill() method of HRpcCalParSec
  } else {
    Error("fill","Invalid address sector: %i",sec);
  }

}

void HRpcCalPar::readline(const Char_t *buf, Int_t *set) {
  // Decodes one line read from ascii file I/O.
  Int_t sec,col,cell;
  Float_t rightTimeOffset,leftTimeOffset,rightTotOffset,leftTotOffset,tdc2time,tot2charge,t0;

  sscanf(buf,"%i %i %i %f %f %f %f %f %f %f", &sec, &col, &cell, &rightTimeOffset, &leftTimeOffset, &rightTotOffset, &leftTotOffset,
	 &tdc2time, &tot2charge, &t0);
  fill(sec,col,cell,rightTimeOffset,leftTimeOffset,rightTotOffset,leftTotOffset,tdc2time,tot2charge,t0);
  set[sec]=999;
}

void HRpcCalPar::putAsciiHeader(TString& header) {
  // Puts the ascii header to the string used in HRpcParAsciiFileIo.
  header=
    "########################################################################################################################"
    "# Calibration parameters for the RPC detector\n"
    "# Format:\n"
    "# Sector Column Cell Right.Time.Offset Left.Time.Offset Right.TOT.Offset Left.TOT.Offset TDC.to.TIME TOT.to.CHARGE T0\n"
    "########################################################################################################################";
}

Bool_t HRpcCalPar::writeline(Char_t *buf, Int_t sec, Int_t col, Int_t cell) {
  // Writes one line to the buffer used by ascii file I/O.
  HRpcCalParCell& pCell=(*this)[sec][col][cell];
  sprintf(buf,"%4i %4i %4i %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f %12.4f\n",
	  sec, col, cell,
	  pCell.getRightTimeOffset(), pCell.getLeftTimeOffset(), pCell.getRightTOTOffset(), pCell.getLeftTOTOffset(),
	  pCell.getTDC2Time(), pCell.getTOT2Charge(), pCell.getT0());
  return kTRUE;  
}

void HRpcCalPar::printPause(void) {
  // Pauses printing.
  printf("Press any key to continue");
  getchar();
  printf("\n\n");
}

void HRpcCalPar::printParam(void) {
  // Prints the parameters.
  printf(" Calibration parameters for the RPC detector\n");
  printf(" Format:\n");
  printf(" Sector Column Cell Right.Time.Offset Left.Time.Offset Right.TOT.Offset Left.TOT.Offset TDC.to.TIME TOT.to.CHARGE T0\n");
  Text_t buf[155];
  Int_t n0 = getSize();
  for(Int_t i0=0; i0<n0; i0++) {
    Int_t n1 = (*this)[i0].getSize();
    for(Int_t i1=0; i1<n1; i1++) {
      Int_t n2 = (*this)[i0][i1].getSize();
      for(Int_t i2=0; i2<n2; i2++) {
	if (writeline(buf, i0, i1, i2)) printf(buf,strlen(buf));
      }
    }
  }
}
 hrpccalpar.cc:1
 hrpccalpar.cc:2
 hrpccalpar.cc:3
 hrpccalpar.cc:4
 hrpccalpar.cc:5
 hrpccalpar.cc:6
 hrpccalpar.cc:7
 hrpccalpar.cc:8
 hrpccalpar.cc:9
 hrpccalpar.cc:10
 hrpccalpar.cc:11
 hrpccalpar.cc:12
 hrpccalpar.cc:13
 hrpccalpar.cc:14
 hrpccalpar.cc:15
 hrpccalpar.cc:16
 hrpccalpar.cc:17
 hrpccalpar.cc:18
 hrpccalpar.cc:19
 hrpccalpar.cc:20
 hrpccalpar.cc:21
 hrpccalpar.cc:22
 hrpccalpar.cc:23
 hrpccalpar.cc:24
 hrpccalpar.cc:25
 hrpccalpar.cc:26
 hrpccalpar.cc:27
 hrpccalpar.cc:28
 hrpccalpar.cc:29
 hrpccalpar.cc:30
 hrpccalpar.cc:31
 hrpccalpar.cc:32
 hrpccalpar.cc:33
 hrpccalpar.cc:34
 hrpccalpar.cc:35
 hrpccalpar.cc:36
 hrpccalpar.cc:37
 hrpccalpar.cc:38
 hrpccalpar.cc:39
 hrpccalpar.cc:40
 hrpccalpar.cc:41
 hrpccalpar.cc:42
 hrpccalpar.cc:43
 hrpccalpar.cc:44
 hrpccalpar.cc:45
 hrpccalpar.cc:46
 hrpccalpar.cc:47
 hrpccalpar.cc:48
 hrpccalpar.cc:49
 hrpccalpar.cc:50
 hrpccalpar.cc:51
 hrpccalpar.cc:52
 hrpccalpar.cc:53
 hrpccalpar.cc:54
 hrpccalpar.cc:55
 hrpccalpar.cc:56
 hrpccalpar.cc:57
 hrpccalpar.cc:58
 hrpccalpar.cc:59
 hrpccalpar.cc:60
 hrpccalpar.cc:61
 hrpccalpar.cc:62
 hrpccalpar.cc:63
 hrpccalpar.cc:64
 hrpccalpar.cc:65
 hrpccalpar.cc:66
 hrpccalpar.cc:67
 hrpccalpar.cc:68
 hrpccalpar.cc:69
 hrpccalpar.cc:70
 hrpccalpar.cc:71
 hrpccalpar.cc:72
 hrpccalpar.cc:73
 hrpccalpar.cc:74
 hrpccalpar.cc:75
 hrpccalpar.cc:76
 hrpccalpar.cc:77
 hrpccalpar.cc:78
 hrpccalpar.cc:79
 hrpccalpar.cc:80
 hrpccalpar.cc:81
 hrpccalpar.cc:82
 hrpccalpar.cc:83
 hrpccalpar.cc:84
 hrpccalpar.cc:85
 hrpccalpar.cc:86
 hrpccalpar.cc:87
 hrpccalpar.cc:88
 hrpccalpar.cc:89
 hrpccalpar.cc:90
 hrpccalpar.cc:91
 hrpccalpar.cc:92
 hrpccalpar.cc:93
 hrpccalpar.cc:94
 hrpccalpar.cc:95
 hrpccalpar.cc:96
 hrpccalpar.cc:97
 hrpccalpar.cc:98
 hrpccalpar.cc:99
 hrpccalpar.cc:100
 hrpccalpar.cc:101
 hrpccalpar.cc:102
 hrpccalpar.cc:103
 hrpccalpar.cc:104
 hrpccalpar.cc:105
 hrpccalpar.cc:106
 hrpccalpar.cc:107
 hrpccalpar.cc:108
 hrpccalpar.cc:109
 hrpccalpar.cc:110
 hrpccalpar.cc:111
 hrpccalpar.cc:112
 hrpccalpar.cc:113
 hrpccalpar.cc:114
 hrpccalpar.cc:115
 hrpccalpar.cc:116
 hrpccalpar.cc:117
 hrpccalpar.cc:118
 hrpccalpar.cc:119
 hrpccalpar.cc:120
 hrpccalpar.cc:121
 hrpccalpar.cc:122
 hrpccalpar.cc:123
 hrpccalpar.cc:124
 hrpccalpar.cc:125
 hrpccalpar.cc:126
 hrpccalpar.cc:127
 hrpccalpar.cc:128
 hrpccalpar.cc:129
 hrpccalpar.cc:130
 hrpccalpar.cc:131
 hrpccalpar.cc:132
 hrpccalpar.cc:133
 hrpccalpar.cc:134
 hrpccalpar.cc:135
 hrpccalpar.cc:136
 hrpccalpar.cc:137
 hrpccalpar.cc:138
 hrpccalpar.cc:139
 hrpccalpar.cc:140
 hrpccalpar.cc:141
 hrpccalpar.cc:142
 hrpccalpar.cc:143
 hrpccalpar.cc:144
 hrpccalpar.cc:145
 hrpccalpar.cc:146
 hrpccalpar.cc:147
 hrpccalpar.cc:148
 hrpccalpar.cc:149
 hrpccalpar.cc:150
 hrpccalpar.cc:151
 hrpccalpar.cc:152
 hrpccalpar.cc:153
 hrpccalpar.cc:154
 hrpccalpar.cc:155
 hrpccalpar.cc:156
 hrpccalpar.cc:157
 hrpccalpar.cc:158
 hrpccalpar.cc:159
 hrpccalpar.cc:160
 hrpccalpar.cc:161
 hrpccalpar.cc:162
 hrpccalpar.cc:163
 hrpccalpar.cc:164
 hrpccalpar.cc:165
 hrpccalpar.cc:166
 hrpccalpar.cc:167
 hrpccalpar.cc:168
 hrpccalpar.cc:169
 hrpccalpar.cc:170
 hrpccalpar.cc:171
 hrpccalpar.cc:172
 hrpccalpar.cc:173
 hrpccalpar.cc:174
 hrpccalpar.cc:175
 hrpccalpar.cc:176
 hrpccalpar.cc:177
 hrpccalpar.cc:178
 hrpccalpar.cc:179
 hrpccalpar.cc:180
 hrpccalpar.cc:181
 hrpccalpar.cc:182
 hrpccalpar.cc:183
 hrpccalpar.cc:184
 hrpccalpar.cc:185
 hrpccalpar.cc:186
 hrpccalpar.cc:187
 hrpccalpar.cc:188
 hrpccalpar.cc:189
 hrpccalpar.cc:190
 hrpccalpar.cc:191
 hrpccalpar.cc:192
 hrpccalpar.cc:193
 hrpccalpar.cc:194
 hrpccalpar.cc:195
 hrpccalpar.cc:196
 hrpccalpar.cc:197
 hrpccalpar.cc:198
 hrpccalpar.cc:199
 hrpccalpar.cc:200
 hrpccalpar.cc:201
 hrpccalpar.cc:202
 hrpccalpar.cc:203
 hrpccalpar.cc:204
 hrpccalpar.cc:205
 hrpccalpar.cc:206
 hrpccalpar.cc:207
 hrpccalpar.cc:208