ROOT logo
//*-- Author : Ilse Koenig
//*-- Modified: 10/03/2000 by Ilse Koenig
//*-- Modified: 27/11/2000 by R. Holzmann
//*-- Modified: 09/05/2002 by D.Zovinec

//_HADES_CLASS_DESCRIPTION 
///////////////////////////////////////////////////////////////////////////////
// HTofCalPar
//
// Calibration parameters for TOF
//
///////////////////////////////////////////////////////////////////////////////
using namespace std;
#include "htofcalpar.h"
#include "hades.h"
#include "hruntimedb.h"
#include "hspectrometer.h"
#include "htofdetector.h"
#include "hpario.h"
#include "hdetpario.h"
#include <iostream> 
#include <iomanip>

ClassImp(HTofCalPar)
ClassImp(HTofCalParSec)
ClassImp(HTofCalParMod)
ClassImp(HTofCalParCell)

void HTofCalParCell::setDefaults(void) {
  // sets the default values
  leftK=0.065;     // in ns/ch
  rightK=0.065;
  vGroup=160.0;    // in mm/ns
  posK=0.0;
  timK=0.0;
  pedestalL=0.0;
  pedestalR=0.0;
  attLen=0.0;
  gainAsym=0.0;
  edepK=1.0;
  twC1=0.0;
  twC2=0.0;
  twC3=0.0;
}

void HTofCalParCell::Streamer(TBuffer &R__b)
{
  if (R__b.IsReading()) {
    Version_t R__v = R__b.ReadVersion();
    TObject::Streamer(R__b);
    R__b >> leftK;
    R__b >> rightK;
    R__b >> vGroup;
    R__b >> posK;
    R__b >> timK;
    R__b >> pedestalL;
    R__b >> pedestalR;
    R__b >> attLen;
    R__b >> gainAsym;
    if(R__v <= 1){
      edepK = 0.0;
      twC1 = 0.0;
      twC2 = 0.0;
      twC3 = 0.0;
    }
    if(R__v == 2){
      R__b >> edepK;
      twC1 = 0.0;
      twC2 = 0.0;
      twC3 = 0.0;
    }
    if(R__v >= 3){
      R__b >> edepK;
      R__b >> twC1;
      R__b >> twC2;
      R__b >> twC3;
    }
  } else {
    R__b.WriteVersion(HTofCalParCell::IsA());
    TObject::Streamer(R__b);
    R__b << leftK;
    R__b << rightK;
    R__b << vGroup;
    R__b << posK;
    R__b << timK;
    R__b << pedestalL;
    R__b << pedestalR;
    R__b << attLen;
    R__b << gainAsym;
    R__b << edepK;
    R__b << twC1;
    R__b << twC2;
    R__b << twC3;
  }
}

HTofCalParMod::HTofCalParMod(Int_t s, Int_t m) {
  // constructor creates an array of pointers of type HTofCalParCell
  HDetector* det=gHades->getSetup()->getDetector("Tof");
  Int_t n=det->getMaxComponents();
  if (det->getModule(s,m)) {
    array = new TObjArray(n);
    for(Int_t i=0 ; i<n ; i++) array->AddAt(new HTofCalParCell(),i);
  } else array = new TObjArray(0);
}

HTofCalParMod::~HTofCalParMod(void) {
  // destructor
  if(array)
  {
      array->Delete();
      delete array;
  }
}


HTofCalParSec::HTofCalParSec(Int_t s, Int_t n) {
  // constructor creates an array of pointers of type HTofCalParCell
  array = new TObjArray(n);
  for(Int_t i=0 ; i<n ; i++)
    array->AddAt(new HTofCalParMod(s,i),i);
}

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


HTofCalPar::HTofCalPar(const Char_t* name,const Char_t* title,
                       const Char_t* context)
           : HParSet(name,title,context) {
  // constructor creates an array of pointers of type HTofCalParSec
  // The container name is set to "TofCalPar"
  strcpy(detName,"Tof");
  array = new TObjArray(6);
  for (Int_t i=0; i<6; i++)
      array->AddAt(new HTofCalParSec(i,22),i);
}


HTofCalPar::~HTofCalPar(void) {
  // destructor
  array->Delete();
  delete array;
}
 
Bool_t HTofCalPar::init(HParIo* inp,Int_t* set) {
  // intitializes the container from an input
  HDetParIo* input=inp->getDetParIo("HTofParIo");
  if (input) return (input->init(this,set));
  return kFALSE;
}
 
Int_t HTofCalPar::write(HParIo* output) {
  // writes the container to an output
  HDetParIo* out=output->getDetParIo("HTofParIo");
  if (out) return out->write(this);
  return -1;
}

void HTofCalPar::clear() {
  // sets the default values
  for(Int_t i0=0;i0<getSize();i0++) {
    HTofCalParSec& sec=(*this)[i0];
    Int_t n1=sec.getSize();
    for(Int_t i1=0;i1<n1;i1++) {
      HTofCalParMod& mod=sec[i1];
      Int_t n2=mod.getSize();
      for(Int_t i2=0;i2<n2;i2++) mod[i2].setDefaults();
    }
  }
  status=kFALSE;
  resetInputVersions();
}

void HTofCalPar::readline(const Char_t *buf, Int_t *set) {
  // decodes one line read from ascii file I/O
  Int_t s,m,c;
  Float_t lk,rk,vg,pk,tk,pl,pr,al,ga,ek,twc1,twc2,twc3;
  sscanf(buf,"%i%i%i%f%f%f%f%f%f%f%f%f%f%f%f%f",&s,&m,&c,&lk,&rk,&vg,&pk,&tk,&pl,&pr,&al,&ga,&ek,&twc1,&twc2,&twc3);
  HTofCalParCell& cell=(*this)[s][m][c];
  cell.setLeftK(lk);
  cell.setRightK(rk);
  cell.setVGroup(vg);
  cell.setPosK(pk); 
  cell.setTimK(tk);
  cell.setPedestalL(pl);
  cell.setPedestalR(pr);
  cell.setAttLen(al);
  cell.setGainAsym(ga);
  cell.setEdepK(ek);
  cell.setTimeWalkC1(twc1);
  cell.setTimeWalkC2(twc2);
  cell.setTimeWalkC3(twc3);
  set[(s*22+m)]=999;
}

void HTofCalPar::putAsciiHeader(TString& header) {
  // puts the ascii header to the string used in HTofParAsciiFileIo
  header=
    "# Calibration parameters for the TOF detector\n"
    "# Format:\n"
    "# sector  module  cell  leftK  rightK  vGroup  posK  timK\n"
    "# pedestalL  pedestalR  attLen  gainAsym  edepK  twC1  twC2  twC3\n";
}

Bool_t HTofCalPar::writeline(Char_t *buf,Int_t s, Int_t m, Int_t c) {
  // writes one line to the buffer used by ascii file I/O
  HTofCalParCell& cell=(*this)[s][m][c];
  sprintf(buf,"%2i%2i%2i %8.5f %8.5f %7.3f %9.3f %8.3f %7.1f %7.1f %8.3f %9.3f %7.5f %6.3f %6.3f %6.3f\n",
              s,m,c,cell.getLeftK(),cell.getRightK(),cell.getVGroup(),
              cell.getPosK(),cell.getTimK(),cell.getPedestalL(),cell.getPedestalR(),
              cell.getAttLen(),cell.getGainAsym(),cell.getEdepK(),
              cell.getTimeWalkC1(),cell.getTimeWalkC2(),cell.getTimeWalkC3());
  return kTRUE;
}

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

void HTofCalPar::printParam(void) {
  // prints the parameters
  printf("\n Calibration parameters for the TOF detector\n");
  printf(" Format:\n");
  printf(" sector  module  cell  leftK  rightK  vGroup  posK  timK\n");
  printf(" pedestalL  pedestalR  attLen  gainAsym  edepK  twC1  twC2  twC3\n");
  printf("==============================================================\n");
  Text_t buf[155];
  Int_t line=0;
  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++) {
	line++;
	//	if (line%24 == 0) printPause();
        if (writeline(buf, i0, i1, i2)) printf(buf,strlen(buf));
      }
    }
  }
  printf("==============================================================\n");
}
 htofcalpar.cc:1
 htofcalpar.cc:2
 htofcalpar.cc:3
 htofcalpar.cc:4
 htofcalpar.cc:5
 htofcalpar.cc:6
 htofcalpar.cc:7
 htofcalpar.cc:8
 htofcalpar.cc:9
 htofcalpar.cc:10
 htofcalpar.cc:11
 htofcalpar.cc:12
 htofcalpar.cc:13
 htofcalpar.cc:14
 htofcalpar.cc:15
 htofcalpar.cc:16
 htofcalpar.cc:17
 htofcalpar.cc:18
 htofcalpar.cc:19
 htofcalpar.cc:20
 htofcalpar.cc:21
 htofcalpar.cc:22
 htofcalpar.cc:23
 htofcalpar.cc:24
 htofcalpar.cc:25
 htofcalpar.cc:26
 htofcalpar.cc:27
 htofcalpar.cc:28
 htofcalpar.cc:29
 htofcalpar.cc:30
 htofcalpar.cc:31
 htofcalpar.cc:32
 htofcalpar.cc:33
 htofcalpar.cc:34
 htofcalpar.cc:35
 htofcalpar.cc:36
 htofcalpar.cc:37
 htofcalpar.cc:38
 htofcalpar.cc:39
 htofcalpar.cc:40
 htofcalpar.cc:41
 htofcalpar.cc:42
 htofcalpar.cc:43
 htofcalpar.cc:44
 htofcalpar.cc:45
 htofcalpar.cc:46
 htofcalpar.cc:47
 htofcalpar.cc:48
 htofcalpar.cc:49
 htofcalpar.cc:50
 htofcalpar.cc:51
 htofcalpar.cc:52
 htofcalpar.cc:53
 htofcalpar.cc:54
 htofcalpar.cc:55
 htofcalpar.cc:56
 htofcalpar.cc:57
 htofcalpar.cc:58
 htofcalpar.cc:59
 htofcalpar.cc:60
 htofcalpar.cc:61
 htofcalpar.cc:62
 htofcalpar.cc:63
 htofcalpar.cc:64
 htofcalpar.cc:65
 htofcalpar.cc:66
 htofcalpar.cc:67
 htofcalpar.cc:68
 htofcalpar.cc:69
 htofcalpar.cc:70
 htofcalpar.cc:71
 htofcalpar.cc:72
 htofcalpar.cc:73
 htofcalpar.cc:74
 htofcalpar.cc:75
 htofcalpar.cc:76
 htofcalpar.cc:77
 htofcalpar.cc:78
 htofcalpar.cc:79
 htofcalpar.cc:80
 htofcalpar.cc:81
 htofcalpar.cc:82
 htofcalpar.cc:83
 htofcalpar.cc:84
 htofcalpar.cc:85
 htofcalpar.cc:86
 htofcalpar.cc:87
 htofcalpar.cc:88
 htofcalpar.cc:89
 htofcalpar.cc:90
 htofcalpar.cc:91
 htofcalpar.cc:92
 htofcalpar.cc:93
 htofcalpar.cc:94
 htofcalpar.cc:95
 htofcalpar.cc:96
 htofcalpar.cc:97
 htofcalpar.cc:98
 htofcalpar.cc:99
 htofcalpar.cc:100
 htofcalpar.cc:101
 htofcalpar.cc:102
 htofcalpar.cc:103
 htofcalpar.cc:104
 htofcalpar.cc:105
 htofcalpar.cc:106
 htofcalpar.cc:107
 htofcalpar.cc:108
 htofcalpar.cc:109
 htofcalpar.cc:110
 htofcalpar.cc:111
 htofcalpar.cc:112
 htofcalpar.cc:113
 htofcalpar.cc:114
 htofcalpar.cc:115
 htofcalpar.cc:116
 htofcalpar.cc:117
 htofcalpar.cc:118
 htofcalpar.cc:119
 htofcalpar.cc:120
 htofcalpar.cc:121
 htofcalpar.cc:122
 htofcalpar.cc:123
 htofcalpar.cc:124
 htofcalpar.cc:125
 htofcalpar.cc:126
 htofcalpar.cc:127
 htofcalpar.cc:128
 htofcalpar.cc:129
 htofcalpar.cc:130
 htofcalpar.cc:131
 htofcalpar.cc:132
 htofcalpar.cc:133
 htofcalpar.cc:134
 htofcalpar.cc:135
 htofcalpar.cc:136
 htofcalpar.cc:137
 htofcalpar.cc:138
 htofcalpar.cc:139
 htofcalpar.cc:140
 htofcalpar.cc:141
 htofcalpar.cc:142
 htofcalpar.cc:143
 htofcalpar.cc:144
 htofcalpar.cc:145
 htofcalpar.cc:146
 htofcalpar.cc:147
 htofcalpar.cc:148
 htofcalpar.cc:149
 htofcalpar.cc:150
 htofcalpar.cc:151
 htofcalpar.cc:152
 htofcalpar.cc:153
 htofcalpar.cc:154
 htofcalpar.cc:155
 htofcalpar.cc:156
 htofcalpar.cc:157
 htofcalpar.cc:158
 htofcalpar.cc:159
 htofcalpar.cc:160
 htofcalpar.cc:161
 htofcalpar.cc:162
 htofcalpar.cc:163
 htofcalpar.cc:164
 htofcalpar.cc:165
 htofcalpar.cc:166
 htofcalpar.cc:167
 htofcalpar.cc:168
 htofcalpar.cc:169
 htofcalpar.cc:170
 htofcalpar.cc:171
 htofcalpar.cc:172
 htofcalpar.cc:173
 htofcalpar.cc:174
 htofcalpar.cc:175
 htofcalpar.cc:176
 htofcalpar.cc:177
 htofcalpar.cc:178
 htofcalpar.cc:179
 htofcalpar.cc:180
 htofcalpar.cc:181
 htofcalpar.cc:182
 htofcalpar.cc:183
 htofcalpar.cc:184
 htofcalpar.cc:185
 htofcalpar.cc:186
 htofcalpar.cc:187
 htofcalpar.cc:188
 htofcalpar.cc:189
 htofcalpar.cc:190
 htofcalpar.cc:191
 htofcalpar.cc:192
 htofcalpar.cc:193
 htofcalpar.cc:194
 htofcalpar.cc:195
 htofcalpar.cc:196
 htofcalpar.cc:197
 htofcalpar.cc:198
 htofcalpar.cc:199
 htofcalpar.cc:200
 htofcalpar.cc:201
 htofcalpar.cc:202
 htofcalpar.cc:203
 htofcalpar.cc:204
 htofcalpar.cc:205
 htofcalpar.cc:206
 htofcalpar.cc:207
 htofcalpar.cc:208
 htofcalpar.cc:209
 htofcalpar.cc:210
 htofcalpar.cc:211
 htofcalpar.cc:212
 htofcalpar.cc:213
 htofcalpar.cc:214
 htofcalpar.cc:215
 htofcalpar.cc:216
 htofcalpar.cc:217
 htofcalpar.cc:218
 htofcalpar.cc:219
 htofcalpar.cc:220
 htofcalpar.cc:221
 htofcalpar.cc:222
 htofcalpar.cc:223
 htofcalpar.cc:224
 htofcalpar.cc:225
 htofcalpar.cc:226
 htofcalpar.cc:227
 htofcalpar.cc:228
 htofcalpar.cc:229
 htofcalpar.cc:230
 htofcalpar.cc:231
 htofcalpar.cc:232
 htofcalpar.cc:233
 htofcalpar.cc:234
 htofcalpar.cc:235
 htofcalpar.cc:236
 htofcalpar.cc:237
 htofcalpar.cc:238
 htofcalpar.cc:239
 htofcalpar.cc:240
 htofcalpar.cc:241
 htofcalpar.cc:242
 htofcalpar.cc:243
 htofcalpar.cc:244
 htofcalpar.cc:245
 htofcalpar.cc:246
 htofcalpar.cc:247
 htofcalpar.cc:248
 htofcalpar.cc:249