ROOT logo
//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////
//
// HPionTrackerCalPar
//
// Container class for PionTracker calibration parameters
//
/////////////////////////////////////////////////////////////

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

ClassImp(HPionTrackerCalPar)
ClassImp(HPionTrackerCalParMod)
ClassImp(HPionTrackerCalParCell)

void HPionTrackerCalParCell::clear() {
  tdcSlope  = 1.F;
  tdcOffset = 0.F;
  adcSlope  = 1.F;
  adcOffset = 0.F;
}

void HPionTrackerCalParCell::fill(Float_t ts, Float_t to, Float_t as, Float_t ao) {
  tdcSlope = ts;
  tdcOffset = to;
  adcSlope = as;
  adcOffset = ao;
}

void HPionTrackerCalParCell::fill(Float_t* data) {
  tdcSlope = data[0];
  tdcOffset = data[1];
  adcSlope = data[2];
  adcOffset = data[3];
}

void HPionTrackerCalParCell::fill(HPionTrackerCalParCell& r) {
  tdcSlope  = r.getTdcSlope();
  tdcOffset = r.getTdcOffset();
  adcSlope  = r.getAdcSlope();
  adcOffset = r.getAdcOffset();
}


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

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


HPionTrackerCalPar::HPionTrackerCalPar(const Char_t* name, const Char_t* title,
                             const Char_t* context)
                   : HParSet(name, title, context) {
  // constructor creates an array of pointers of type HPionTrackerCalParMod
  strcpy(detName, "PionTracker");
  HPionTrackerDetector* det = (HPionTrackerDetector*)(gHades->getSetup()->getDetector("PionTracker"));
  Int_t nMod = det->getMaxModInSetup();
  Int_t nComp = det->getMaxComponents();
  array = new TObjArray(nMod);
  for (Int_t i = 0; i < nMod; i++) {
    if (det->getModule(-1, i) > 0) {
      array->AddAt(new HPionTrackerCalParMod(nComp), i);
    } else {
      array->AddAt(new HPionTrackerCalParMod(0), i);
    }
  }
}

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

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

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

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

void HPionTrackerCalPar::printParams() {
  // prints the calibration parameters
  printf("Calibration parameters for the PionTracker\n");
  printf("module  strip  TdcSlope  TdcOffset  AdcSlope  AdcOffset\n");
  Float_t data[4];
  for (Int_t i = 0; i < getSize(); i++) {
    HPionTrackerCalParMod& mod = (*this)[i];
    for (Int_t j = 0; j < mod.getSize(); j++) {
      HPionTrackerCalParCell& cell = mod[j];
      cell.getData(data);
      printf("%4i %4i %10.5f %10.3f %10.5f %10.3f\n",
             i, j, data[0], data[1], data[2], data[3]);
    }
  }
}

void HPionTrackerCalPar::readline(const Char_t *buf, Int_t *set) {
  // decodes one line read from ASCII file I/O
  Int_t mod, strip;
  Float_t data[4] = {0.F, 0.F, 0.F, 0.F};
  sscanf(buf, "%i%i%f%f%f%f", &mod, &strip, &data[0], &data[1], &data[2], &data[3]);
  if (!set[mod]) return;
  (*this)[mod][strip].fill(data);
  set[mod] = 999;
}

void HPionTrackerCalPar::putAsciiHeader(TString& header) {
  // puts the ascii header to the string used in HPionTrackerParAsciiFileIo
  header = "# Calibration parameters for the PionTracker\n"
           "# Format:\n"
           "# module   strip   TdcSlope  TdcOffset AdcSlope  AdcOffset\n";
}

void HPionTrackerCalPar::write(fstream& fout) {
  Text_t buf[155];
  Float_t data[4];
  for (Int_t i = 0; i < getSize(); i++) {
    HPionTrackerCalParMod& mod = (*this)[i];
    for (Int_t j = 0; j < mod.getSize(); j++) {
      HPionTrackerCalParCell& cell = mod[j];
      cell.getData(data);
      sprintf(buf, "%4i %4i %10.5f %10.1f %10.5f %10.1f\n",
              i, j, data[0], data[1], data[2], data[3]);
      fout<<buf;
    }
  }
  
}
 hpiontrackercalpar.cc:1
 hpiontrackercalpar.cc:2
 hpiontrackercalpar.cc:3
 hpiontrackercalpar.cc:4
 hpiontrackercalpar.cc:5
 hpiontrackercalpar.cc:6
 hpiontrackercalpar.cc:7
 hpiontrackercalpar.cc:8
 hpiontrackercalpar.cc:9
 hpiontrackercalpar.cc:10
 hpiontrackercalpar.cc:11
 hpiontrackercalpar.cc:12
 hpiontrackercalpar.cc:13
 hpiontrackercalpar.cc:14
 hpiontrackercalpar.cc:15
 hpiontrackercalpar.cc:16
 hpiontrackercalpar.cc:17
 hpiontrackercalpar.cc:18
 hpiontrackercalpar.cc:19
 hpiontrackercalpar.cc:20
 hpiontrackercalpar.cc:21
 hpiontrackercalpar.cc:22
 hpiontrackercalpar.cc:23
 hpiontrackercalpar.cc:24
 hpiontrackercalpar.cc:25
 hpiontrackercalpar.cc:26
 hpiontrackercalpar.cc:27
 hpiontrackercalpar.cc:28
 hpiontrackercalpar.cc:29
 hpiontrackercalpar.cc:30
 hpiontrackercalpar.cc:31
 hpiontrackercalpar.cc:32
 hpiontrackercalpar.cc:33
 hpiontrackercalpar.cc:34
 hpiontrackercalpar.cc:35
 hpiontrackercalpar.cc:36
 hpiontrackercalpar.cc:37
 hpiontrackercalpar.cc:38
 hpiontrackercalpar.cc:39
 hpiontrackercalpar.cc:40
 hpiontrackercalpar.cc:41
 hpiontrackercalpar.cc:42
 hpiontrackercalpar.cc:43
 hpiontrackercalpar.cc:44
 hpiontrackercalpar.cc:45
 hpiontrackercalpar.cc:46
 hpiontrackercalpar.cc:47
 hpiontrackercalpar.cc:48
 hpiontrackercalpar.cc:49
 hpiontrackercalpar.cc:50
 hpiontrackercalpar.cc:51
 hpiontrackercalpar.cc:52
 hpiontrackercalpar.cc:53
 hpiontrackercalpar.cc:54
 hpiontrackercalpar.cc:55
 hpiontrackercalpar.cc:56
 hpiontrackercalpar.cc:57
 hpiontrackercalpar.cc:58
 hpiontrackercalpar.cc:59
 hpiontrackercalpar.cc:60
 hpiontrackercalpar.cc:61
 hpiontrackercalpar.cc:62
 hpiontrackercalpar.cc:63
 hpiontrackercalpar.cc:64
 hpiontrackercalpar.cc:65
 hpiontrackercalpar.cc:66
 hpiontrackercalpar.cc:67
 hpiontrackercalpar.cc:68
 hpiontrackercalpar.cc:69
 hpiontrackercalpar.cc:70
 hpiontrackercalpar.cc:71
 hpiontrackercalpar.cc:72
 hpiontrackercalpar.cc:73
 hpiontrackercalpar.cc:74
 hpiontrackercalpar.cc:75
 hpiontrackercalpar.cc:76
 hpiontrackercalpar.cc:77
 hpiontrackercalpar.cc:78
 hpiontrackercalpar.cc:79
 hpiontrackercalpar.cc:80
 hpiontrackercalpar.cc:81
 hpiontrackercalpar.cc:82
 hpiontrackercalpar.cc:83
 hpiontrackercalpar.cc:84
 hpiontrackercalpar.cc:85
 hpiontrackercalpar.cc:86
 hpiontrackercalpar.cc:87
 hpiontrackercalpar.cc:88
 hpiontrackercalpar.cc:89
 hpiontrackercalpar.cc:90
 hpiontrackercalpar.cc:91
 hpiontrackercalpar.cc:92
 hpiontrackercalpar.cc:93
 hpiontrackercalpar.cc:94
 hpiontrackercalpar.cc:95
 hpiontrackercalpar.cc:96
 hpiontrackercalpar.cc:97
 hpiontrackercalpar.cc:98
 hpiontrackercalpar.cc:99
 hpiontrackercalpar.cc:100
 hpiontrackercalpar.cc:101
 hpiontrackercalpar.cc:102
 hpiontrackercalpar.cc:103
 hpiontrackercalpar.cc:104
 hpiontrackercalpar.cc:105
 hpiontrackercalpar.cc:106
 hpiontrackercalpar.cc:107
 hpiontrackercalpar.cc:108
 hpiontrackercalpar.cc:109
 hpiontrackercalpar.cc:110
 hpiontrackercalpar.cc:111
 hpiontrackercalpar.cc:112
 hpiontrackercalpar.cc:113
 hpiontrackercalpar.cc:114
 hpiontrackercalpar.cc:115
 hpiontrackercalpar.cc:116
 hpiontrackercalpar.cc:117
 hpiontrackercalpar.cc:118
 hpiontrackercalpar.cc:119
 hpiontrackercalpar.cc:120
 hpiontrackercalpar.cc:121
 hpiontrackercalpar.cc:122
 hpiontrackercalpar.cc:123
 hpiontrackercalpar.cc:124
 hpiontrackercalpar.cc:125
 hpiontrackercalpar.cc:126
 hpiontrackercalpar.cc:127
 hpiontrackercalpar.cc:128
 hpiontrackercalpar.cc:129
 hpiontrackercalpar.cc:130
 hpiontrackercalpar.cc:131
 hpiontrackercalpar.cc:132
 hpiontrackercalpar.cc:133
 hpiontrackercalpar.cc:134
 hpiontrackercalpar.cc:135
 hpiontrackercalpar.cc:136
 hpiontrackercalpar.cc:137
 hpiontrackercalpar.cc:138
 hpiontrackercalpar.cc:139
 hpiontrackercalpar.cc:140
 hpiontrackercalpar.cc:141
 hpiontrackercalpar.cc:142
 hpiontrackercalpar.cc:143
 hpiontrackercalpar.cc:144
 hpiontrackercalpar.cc:145
 hpiontrackercalpar.cc:146
 hpiontrackercalpar.cc:147
 hpiontrackercalpar.cc:148
 hpiontrackercalpar.cc:149
 hpiontrackercalpar.cc:150
 hpiontrackercalpar.cc:151
 hpiontrackercalpar.cc:152
 hpiontrackercalpar.cc:153
 hpiontrackercalpar.cc:154
 hpiontrackercalpar.cc:155
 hpiontrackercalpar.cc:156
 hpiontrackercalpar.cc:157
 hpiontrackercalpar.cc:158
 hpiontrackercalpar.cc:159
 hpiontrackercalpar.cc:160
 hpiontrackercalpar.cc:161
 hpiontrackercalpar.cc:162
 hpiontrackercalpar.cc:163
 hpiontrackercalpar.cc:164