ROOT logo
//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////
//
// HEmcCalPar
//
// Container class for Emc calibration parameters
//
/////////////////////////////////////////////////////////////

using namespace std;
#include "hades.h"
#include "hdetpario.h"
#include "hpario.h"
#include "hspectrometer.h"
#include "hemccalpar.h"
#include "hemcdetector.h"
#include <iomanip>
#include <iostream>
#include <fstream>

ClassImp(HEmcCalPar)
ClassImp(HEmcCalParSec)
ClassImp(HEmcCalParCell)

void HEmcCalParCell::clear() {
  tdcSlope  = 1.F;
  tdcOffset = 0.F;
  adcPar0   = 0.F;
  adcPar1   = 1.F;
  adcPar2   = 0.F;
  twcPar0   = 0.F;
  twcPar1   = 0.F;
  twcPar2   = 0.F;
}

void HEmcCalParCell::fill(Float_t ts, Float_t to, Float_t a0, Float_t a1, Float_t a2, Float_t t0, Float_t t1, Float_t t2) {
  tdcSlope = ts;
  tdcOffset = to;
  adcPar0 = a0;
  adcPar1 = a1;
  adcPar2 = a2;
  twcPar0 = t0;
  twcPar1 = t1;
  twcPar2 = t2;
}

void HEmcCalParCell::fill(Float_t* data) {
  tdcSlope  = data[0];
  tdcOffset = data[1];
  adcPar0   = data[2];
  adcPar1   = data[3];
  adcPar2   = data[4];
  twcPar0   = data[5];
  twcPar1   = data[6];
  twcPar2   = data[7];
}

void HEmcCalParCell::fill(HEmcCalParCell& r) {
  tdcSlope  = r.getTdcSlope();
  tdcOffset = r.getTdcOffset();
  adcPar0   = r.getAdcPar0();
  adcPar1   = r.getAdcPar1();
  adcPar2   = r.getAdcPar2();
  twcPar0   = r.getTwcPar0();
  twcPar1   = r.getTwcPar1();
  twcPar2   = r.getTwcPar2();
}


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

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


HEmcCalPar::HEmcCalPar(const Char_t* name, const Char_t* title,
                             const Char_t* context)
                   : HParSet(name, title, context) {
  // constructor creates an array of pointers of type HEmcCalParSec
  strcpy(detName, "Emc");
  HEmcDetector* det = (HEmcDetector*)(gHades->getSetup()->getDetector("Emc"));
  Int_t nSec = det->getMaxSecInSetup();
  Int_t nComp = det->getMaxComponents();
  array = new TObjArray(nSec);
  for (Int_t i = 0; i < nSec; i++) {
    if (det->getModule(i, 0) > 0) {
      array->AddAt(new HEmcCalParSec(nComp), i);
    } else {
      array->AddAt(new HEmcCalParSec(0), i);
    }
  }
}

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

Bool_t HEmcCalPar::init(HParIo* inp, Int_t* set) {
  // intitializes the container from an input
  HDetParIo* input = inp->getDetParIo("HEmcParIo");
  if (input) return (input->init(this, set));
  return kFALSE;
}

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

void HEmcCalPar::clear() {
  // clears the container
  for (Int_t i = 0; i < getSize(); i++) {
    HEmcCalParSec& sec = (*this)[i];
    for (Int_t j = 0; j < sec.getSize(); j++) sec[j].clear();
  }
  status = kFALSE;
  resetInputVersions();
}

void HEmcCalPar::printParams() {
  // prints the calibration parameters
  printf("Calibration parameters for the Emc\n");
  printf(" sector(0...5)   position(0...162)  TdcSlope  TdcOffset  AdcPar0  AdcPar1  AdcPar2  Twc0  Twc1  Twc2\n");
  Float_t data[8];
  Int_t mountpos=-1;
  for (Int_t i = 0; i < getSize(); i++) {
    HEmcCalParSec& sec = (*this)[i];
    for (Int_t j = 0; j < sec.getSize(); j++) {
      HEmcCalParCell& cell = sec[j];
      cell.getData(data);
      mountpos=HEmcDetector::getPositionFromCell(j);
      if(mountpos<0) continue;
      printf("%4i %4i %10.5f %10.3f %10.5f %10.5f %10.5g %10.5g %10.5g %10.5g\n",
             i, mountpos, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
    }
  }
}

void HEmcCalPar::readline(const Char_t *buf, Int_t *set) {
  // decodes one line read from ASCII file I/O
  Int_t sector, cell, position;
  Float_t data[8] = {0.F, 0.F, 0.F, 0.F, 0.F, 0.F, 0.F, 0.F};
  Int_t n = sscanf(buf, "%i%i%f%f%f%f%g%g%g%g",
         &sector, &position, &data[0], &data[1], &data[2], &data[3], &data[4], &data[5], &data[6], &data[7]);
  if (n<10)
  {
      Error("readline", "Not enough values in line %s\n", buf);
  }
  else if (n>10)
  {
      Error("readline", "Too many values in line %s\n", buf);
  }
  else
  {

    if(sector<0 || sector>5) return;
    if (!set[sector]) return;
    cell=HEmcDetector::getCellFromPosition(position);
    if(cell<0)
    {
      Error("readline", "EMC cell not defined for mounting position  %d\n", position);
      return;
    }
    (*this)[sector][cell].fill(data);
    set[sector] = 999;
  }
}

void HEmcCalPar::putAsciiHeader(TString& header) {
  // puts the ascii header to the string used in HEmcParAsciiFileIo
  header = "# Calibration parameters for the Emc\n"
           "# Format:\n"
           "# sector(0...5)   position(0...162)   TdcSlope  TdcOffset  AdcPar0  AdcPar1  AdcPar2  Twc0  Twc1  Twc2\n";
}

void HEmcCalPar::write(fstream& fout) {
  Text_t buf[155];
  Float_t data[8];
  Int_t mountpos=-1;
  for (Int_t i = 0; i < getSize(); i++) {
    HEmcCalParSec& sector = (*this)[i];
    for (Int_t j = 0; j < sector.getSize(); j++) {
      HEmcCalParCell& cell = sector[j];
      cell.getData(data);
      mountpos=HEmcDetector::getPositionFromCell(j);
      if(mountpos<0) continue;
      sprintf(buf, "%4i %4i %10.5f %10.3f %10.5f %10.3f %10.5g %10.5g %10.5g %10.5g\n",
              i, mountpos, data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]);
      fout<<buf;
    }
  }  
}
 hemccalpar.cc:1
 hemccalpar.cc:2
 hemccalpar.cc:3
 hemccalpar.cc:4
 hemccalpar.cc:5
 hemccalpar.cc:6
 hemccalpar.cc:7
 hemccalpar.cc:8
 hemccalpar.cc:9
 hemccalpar.cc:10
 hemccalpar.cc:11
 hemccalpar.cc:12
 hemccalpar.cc:13
 hemccalpar.cc:14
 hemccalpar.cc:15
 hemccalpar.cc:16
 hemccalpar.cc:17
 hemccalpar.cc:18
 hemccalpar.cc:19
 hemccalpar.cc:20
 hemccalpar.cc:21
 hemccalpar.cc:22
 hemccalpar.cc:23
 hemccalpar.cc:24
 hemccalpar.cc:25
 hemccalpar.cc:26
 hemccalpar.cc:27
 hemccalpar.cc:28
 hemccalpar.cc:29
 hemccalpar.cc:30
 hemccalpar.cc:31
 hemccalpar.cc:32
 hemccalpar.cc:33
 hemccalpar.cc:34
 hemccalpar.cc:35
 hemccalpar.cc:36
 hemccalpar.cc:37
 hemccalpar.cc:38
 hemccalpar.cc:39
 hemccalpar.cc:40
 hemccalpar.cc:41
 hemccalpar.cc:42
 hemccalpar.cc:43
 hemccalpar.cc:44
 hemccalpar.cc:45
 hemccalpar.cc:46
 hemccalpar.cc:47
 hemccalpar.cc:48
 hemccalpar.cc:49
 hemccalpar.cc:50
 hemccalpar.cc:51
 hemccalpar.cc:52
 hemccalpar.cc:53
 hemccalpar.cc:54
 hemccalpar.cc:55
 hemccalpar.cc:56
 hemccalpar.cc:57
 hemccalpar.cc:58
 hemccalpar.cc:59
 hemccalpar.cc:60
 hemccalpar.cc:61
 hemccalpar.cc:62
 hemccalpar.cc:63
 hemccalpar.cc:64
 hemccalpar.cc:65
 hemccalpar.cc:66
 hemccalpar.cc:67
 hemccalpar.cc:68
 hemccalpar.cc:69
 hemccalpar.cc:70
 hemccalpar.cc:71
 hemccalpar.cc:72
 hemccalpar.cc:73
 hemccalpar.cc:74
 hemccalpar.cc:75
 hemccalpar.cc:76
 hemccalpar.cc:77
 hemccalpar.cc:78
 hemccalpar.cc:79
 hemccalpar.cc:80
 hemccalpar.cc:81
 hemccalpar.cc:82
 hemccalpar.cc:83
 hemccalpar.cc:84
 hemccalpar.cc:85
 hemccalpar.cc:86
 hemccalpar.cc:87
 hemccalpar.cc:88
 hemccalpar.cc:89
 hemccalpar.cc:90
 hemccalpar.cc:91
 hemccalpar.cc:92
 hemccalpar.cc:93
 hemccalpar.cc:94
 hemccalpar.cc:95
 hemccalpar.cc:96
 hemccalpar.cc:97
 hemccalpar.cc:98
 hemccalpar.cc:99
 hemccalpar.cc:100
 hemccalpar.cc:101
 hemccalpar.cc:102
 hemccalpar.cc:103
 hemccalpar.cc:104
 hemccalpar.cc:105
 hemccalpar.cc:106
 hemccalpar.cc:107
 hemccalpar.cc:108
 hemccalpar.cc:109
 hemccalpar.cc:110
 hemccalpar.cc:111
 hemccalpar.cc:112
 hemccalpar.cc:113
 hemccalpar.cc:114
 hemccalpar.cc:115
 hemccalpar.cc:116
 hemccalpar.cc:117
 hemccalpar.cc:118
 hemccalpar.cc:119
 hemccalpar.cc:120
 hemccalpar.cc:121
 hemccalpar.cc:122
 hemccalpar.cc:123
 hemccalpar.cc:124
 hemccalpar.cc:125
 hemccalpar.cc:126
 hemccalpar.cc:127
 hemccalpar.cc:128
 hemccalpar.cc:129
 hemccalpar.cc:130
 hemccalpar.cc:131
 hemccalpar.cc:132
 hemccalpar.cc:133
 hemccalpar.cc:134
 hemccalpar.cc:135
 hemccalpar.cc:136
 hemccalpar.cc:137
 hemccalpar.cc:138
 hemccalpar.cc:139
 hemccalpar.cc:140
 hemccalpar.cc:141
 hemccalpar.cc:142
 hemccalpar.cc:143
 hemccalpar.cc:144
 hemccalpar.cc:145
 hemccalpar.cc:146
 hemccalpar.cc:147
 hemccalpar.cc:148
 hemccalpar.cc:149
 hemccalpar.cc:150
 hemccalpar.cc:151
 hemccalpar.cc:152
 hemccalpar.cc:153
 hemccalpar.cc:154
 hemccalpar.cc:155
 hemccalpar.cc:156
 hemccalpar.cc:157
 hemccalpar.cc:158
 hemccalpar.cc:159
 hemccalpar.cc:160
 hemccalpar.cc:161
 hemccalpar.cc:162
 hemccalpar.cc:163
 hemccalpar.cc:164
 hemccalpar.cc:165
 hemccalpar.cc:166
 hemccalpar.cc:167
 hemccalpar.cc:168
 hemccalpar.cc:169
 hemccalpar.cc:170
 hemccalpar.cc:171
 hemccalpar.cc:172
 hemccalpar.cc:173
 hemccalpar.cc:174
 hemccalpar.cc:175
 hemccalpar.cc:176
 hemccalpar.cc:177
 hemccalpar.cc:178
 hemccalpar.cc:179
 hemccalpar.cc:180
 hemccalpar.cc:181
 hemccalpar.cc:182
 hemccalpar.cc:183
 hemccalpar.cc:184
 hemccalpar.cc:185
 hemccalpar.cc:186
 hemccalpar.cc:187
 hemccalpar.cc:188
 hemccalpar.cc:189
 hemccalpar.cc:190
 hemccalpar.cc:191
 hemccalpar.cc:192
 hemccalpar.cc:193
 hemccalpar.cc:194
 hemccalpar.cc:195
 hemccalpar.cc:196
 hemccalpar.cc:197
 hemccalpar.cc:198
 hemccalpar.cc:199
 hemccalpar.cc:200
 hemccalpar.cc:201
 hemccalpar.cc:202
 hemccalpar.cc:203
 hemccalpar.cc:204
 hemccalpar.cc:205
 hemccalpar.cc:206
 hemccalpar.cc:207
 hemccalpar.cc:208