ROOT logo
//////////////////////////////////////////////////////////////////////////////
//
// @(#)hydraTrans/richNew:$Id: $
//
//*-- Author  : RICH team member
//*-- Revised : Martin Jurkovic <martin.jurkovic@ph.tum.de> 2010
//
//_HADES_CLASS_DESCRIPTION
//////////////////////////////////////////////////////////////////////////////
//
//  HRichCalPar
//
//  Parameter container for calibration data.
//
//////////////////////////////////////////////////////////////////////////////


#include "hdetpario.h"
#include "hpario.h"
#include "hrichcalpar.h"
#include "hrichcalparcell.h"
#include "richdef.h"

#include <fstream>

using namespace std;

ClassImp(HRichCalPar)

HRichCalPar::HRichCalPar(const Char_t* name,
                         const Char_t* title,
                         const Char_t* context)
   : HParSet(name, title, context)
{
   strcpy(detName,"Rich");
   HRichCalParCell* pCell = NULL;

   fLoc.setNIndex(3);
   fParamsTable.set(3, RICH_MAX_SECTORS, RICH_MAX_ROWS, RICH_MAX_COLS);
   fParamsTable.setCellClassName("HRichCalParCell");
   fParamsTable.makeObjTable();

   for (Int_t s = 0; s < RICH_MAX_SECTORS; ++s) {
      fLoc[0] = s;
      for (Int_t rows = 0; rows < RICH_MAX_ROWS; ++rows) {
         fLoc[1] = rows;
         for (Int_t cols = 0; cols < RICH_MAX_COLS; ++cols) {
            fLoc[2] = cols;
            pCell = static_cast<HRichCalParCell*>(fParamsTable.getSlot(fLoc));
            if (NULL != pCell) {
               pCell = new(pCell) HRichCalParCell;
               pCell->reset();
            } else {
               Error("HRichCalPar", "Slot not found:  %i %i %i", fLoc[0], fLoc[1], fLoc[2]);
            }
         }
      }
   }

   status = kFALSE;
   resetInputVersions();

}

HRichCalPar::~HRichCalPar()
{
   fParamsTable.deleteTab();
}

void
HRichCalPar::clear()
{
// initialize all cells to ZERO

   HRichCalParCell* pCell = NULL;

   for (Int_t s = 0; s < RICH_MAX_SECTORS; ++s) {
      fLoc[0] = s;
      for (Int_t r = 0; r < RICH_MAX_ROWS; ++r) {
         fLoc[1] = r;
         for (Int_t c = 0; c < RICH_MAX_COLS; ++c) {
            fLoc[2] = c;
            pCell = static_cast<HRichCalParCell*>(fParamsTable.getSlot(fLoc));
            if (NULL != pCell) {
               pCell->setParams(0., 0.);
            } else {
               Error("clear", "Slot not found:  %i %i %i", fLoc[0], fLoc[1], fLoc[2]);
               return;
            }
         }
      }
   }

   status = kFALSE;
   resetInputVersions();
}

Bool_t
HRichCalPar::init(HParIo* inp, Int_t* set)
{
// Initializes the container from an input

   HDetParIo* input = inp->getDetParIo("HRichParIo");
   if (NULL != input) {
      Bool_t returnValue = input->init(this, set);
#if DEBUG_LEVEL > 3
      printParams();
#endif
      return returnValue;
   }
   return kFALSE;
}

Int_t
HRichCalPar::write(HParIo* output)
{
// Writes the container to an output

   HDetParIo* out = output->getDetParIo("HRichParIo");
   if (NULL != out) {
      return out->write(this);
   }
   return -1;
}

Bool_t
HRichCalPar::readline(const Char_t * buf)
{
// Decodes one line read from ASCII file I/O and fills the cells

   Int_t   sec    = 0;
   Int_t   col    = 0;
   Int_t   row    = 0;
   Float_t offset = 0.0;
   Float_t sigma  = 0.0;

   sscanf(buf, "%i %i %i %f %f", &sec, &col, &row, &offset, &sigma);
   return setCell(sec, row, col, offset, sigma);
}

void
HRichCalPar::write(fstream& fout)
{
// Writes the Rich Calibration Parameters to an ASCII file.

   HRichCalParCell* pCell = NULL;

   for (Int_t s = 0; s < RICH_MAX_SECTORS; ++s) {
      fLoc[0] = s;
      for (Int_t r = 0; r < RICH_MAX_ROWS; ++r) {
         fLoc[1] = r;
         for (Int_t c = 0; c < RICH_MAX_COLS; ++c) {
            fLoc[2] = c;

            pCell = static_cast<HRichCalParCell*>(fParamsTable.getSlot(fLoc));
            if (NULL != pCell) {
               if (0 != pCell->getOffset() &&
                   0 != pCell->getSigma()) {
                  fout.width(4); // sec
                  fout << left << s;
                  fout.width(4); // col
                  fout << left << c;
                  fout.width(4); // row
                  fout << left << r;
                  fout.width(10); // offset
                  fout << left << pCell->getOffset();
                  fout.width(10); // sigma
                  fout << left << pCell->getSigma();
                  fout << endl;
               }
            } else {
               Error("write", "Slot not found:  %i %i %i", fLoc[0], fLoc[1], fLoc[2]);
               return;
            }
         }
      }
   }
}

Bool_t
HRichCalPar::setCell(Int_t sec, Int_t row, Int_t col,
                     Float_t offset, Float_t sigma)
{

   HRichCalParCell* pCell = NULL;

   if (sec >= RICH_MAX_SECTORS || row >= RICH_MAX_ROWS || col >= RICH_MAX_COLS) {
      Error("setCell", "Wrong SW pad coordinates");
      return kFALSE;
   }

   fLoc[0] = sec;
   fLoc[1] = row;
   fLoc[2] = col;

   pCell = static_cast<HRichCalParCell*>(fParamsTable.getSlot(fLoc));
   if (NULL != pCell) {
      pCell->setParams(offset, sigma);
   } else {
      Error("setCell", "Cell not found.");
      return kFALSE;
   }
   return kTRUE;
}

void
HRichCalPar::printParams()
{
// Prints the lookup table

   HRichCalParCell* pCell = NULL;

   for (Int_t s = 0; s < RICH_MAX_SECTORS; ++s) {
      fLoc[0] = s;
      for (Int_t r = 0; r < RICH_MAX_ROWS; ++r) {
         fLoc[1] = r;
         for (Int_t c = 0; c < RICH_MAX_COLS; ++c) {
            fLoc[2] = c;

            pCell = static_cast<HRichCalParCell*>(fParamsTable.getSlot(fLoc));
            if (NULL != pCell) {
               if (0 != pCell->getOffset() &&
                   0 != pCell->getSigma()) {
                  cout.width(4); // sec
                  cout << left << s;
                  cout.width(4); // col
                  cout << left << c;
                  cout.width(4); // row
                  cout << left << r;
                  cout.width(10); // offset
                  cout << left << pCell->getOffset();
                  cout.width(10); // sigma
                  cout << left << pCell->getSigma();
                  cout << endl;
               }
            } else {
               Error("printParams", "Slot not found:  %i %i %i", fLoc[0], fLoc[1], fLoc[2]);
               return;
            }
         }
      }
   }

   cout << "#########################################################################" << endl;

}

void
HRichCalPar::putAsciiHeader(TString & header)
{
   // puts the ASCII header to the string used in HDetParAsciiFileIo
   header =
      "# Rich calibration parameters\n"
      "# Format:\n"
      "# Sec Col Row Offset Sigma\n";
}

HRichCalParCell* HRichCalPar::getSlot(HLocation &loc)
{
   return static_cast<HRichCalParCell*>(fParamsTable.getSlot(loc));
}

HRichCalParCell* HRichCalPar::getObject(HLocation &loc)
{
   return static_cast<HRichCalParCell*>(fParamsTable.getObject(loc));
}

 hrichcalpar.cc:1
 hrichcalpar.cc:2
 hrichcalpar.cc:3
 hrichcalpar.cc:4
 hrichcalpar.cc:5
 hrichcalpar.cc:6
 hrichcalpar.cc:7
 hrichcalpar.cc:8
 hrichcalpar.cc:9
 hrichcalpar.cc:10
 hrichcalpar.cc:11
 hrichcalpar.cc:12
 hrichcalpar.cc:13
 hrichcalpar.cc:14
 hrichcalpar.cc:15
 hrichcalpar.cc:16
 hrichcalpar.cc:17
 hrichcalpar.cc:18
 hrichcalpar.cc:19
 hrichcalpar.cc:20
 hrichcalpar.cc:21
 hrichcalpar.cc:22
 hrichcalpar.cc:23
 hrichcalpar.cc:24
 hrichcalpar.cc:25
 hrichcalpar.cc:26
 hrichcalpar.cc:27
 hrichcalpar.cc:28
 hrichcalpar.cc:29
 hrichcalpar.cc:30
 hrichcalpar.cc:31
 hrichcalpar.cc:32
 hrichcalpar.cc:33
 hrichcalpar.cc:34
 hrichcalpar.cc:35
 hrichcalpar.cc:36
 hrichcalpar.cc:37
 hrichcalpar.cc:38
 hrichcalpar.cc:39
 hrichcalpar.cc:40
 hrichcalpar.cc:41
 hrichcalpar.cc:42
 hrichcalpar.cc:43
 hrichcalpar.cc:44
 hrichcalpar.cc:45
 hrichcalpar.cc:46
 hrichcalpar.cc:47
 hrichcalpar.cc:48
 hrichcalpar.cc:49
 hrichcalpar.cc:50
 hrichcalpar.cc:51
 hrichcalpar.cc:52
 hrichcalpar.cc:53
 hrichcalpar.cc:54
 hrichcalpar.cc:55
 hrichcalpar.cc:56
 hrichcalpar.cc:57
 hrichcalpar.cc:58
 hrichcalpar.cc:59
 hrichcalpar.cc:60
 hrichcalpar.cc:61
 hrichcalpar.cc:62
 hrichcalpar.cc:63
 hrichcalpar.cc:64
 hrichcalpar.cc:65
 hrichcalpar.cc:66
 hrichcalpar.cc:67
 hrichcalpar.cc:68
 hrichcalpar.cc:69
 hrichcalpar.cc:70
 hrichcalpar.cc:71
 hrichcalpar.cc:72
 hrichcalpar.cc:73
 hrichcalpar.cc:74
 hrichcalpar.cc:75
 hrichcalpar.cc:76
 hrichcalpar.cc:77
 hrichcalpar.cc:78
 hrichcalpar.cc:79
 hrichcalpar.cc:80
 hrichcalpar.cc:81
 hrichcalpar.cc:82
 hrichcalpar.cc:83
 hrichcalpar.cc:84
 hrichcalpar.cc:85
 hrichcalpar.cc:86
 hrichcalpar.cc:87
 hrichcalpar.cc:88
 hrichcalpar.cc:89
 hrichcalpar.cc:90
 hrichcalpar.cc:91
 hrichcalpar.cc:92
 hrichcalpar.cc:93
 hrichcalpar.cc:94
 hrichcalpar.cc:95
 hrichcalpar.cc:96
 hrichcalpar.cc:97
 hrichcalpar.cc:98
 hrichcalpar.cc:99
 hrichcalpar.cc:100
 hrichcalpar.cc:101
 hrichcalpar.cc:102
 hrichcalpar.cc:103
 hrichcalpar.cc:104
 hrichcalpar.cc:105
 hrichcalpar.cc:106
 hrichcalpar.cc:107
 hrichcalpar.cc:108
 hrichcalpar.cc:109
 hrichcalpar.cc:110
 hrichcalpar.cc:111
 hrichcalpar.cc:112
 hrichcalpar.cc:113
 hrichcalpar.cc:114
 hrichcalpar.cc:115
 hrichcalpar.cc:116
 hrichcalpar.cc:117
 hrichcalpar.cc:118
 hrichcalpar.cc:119
 hrichcalpar.cc:120
 hrichcalpar.cc:121
 hrichcalpar.cc:122
 hrichcalpar.cc:123
 hrichcalpar.cc:124
 hrichcalpar.cc:125
 hrichcalpar.cc:126
 hrichcalpar.cc:127
 hrichcalpar.cc:128
 hrichcalpar.cc:129
 hrichcalpar.cc:130
 hrichcalpar.cc:131
 hrichcalpar.cc:132
 hrichcalpar.cc:133
 hrichcalpar.cc:134
 hrichcalpar.cc:135
 hrichcalpar.cc:136
 hrichcalpar.cc:137
 hrichcalpar.cc:138
 hrichcalpar.cc:139
 hrichcalpar.cc:140
 hrichcalpar.cc:141
 hrichcalpar.cc:142
 hrichcalpar.cc:143
 hrichcalpar.cc:144
 hrichcalpar.cc:145
 hrichcalpar.cc:146
 hrichcalpar.cc:147
 hrichcalpar.cc:148
 hrichcalpar.cc:149
 hrichcalpar.cc:150
 hrichcalpar.cc:151
 hrichcalpar.cc:152
 hrichcalpar.cc:153
 hrichcalpar.cc:154
 hrichcalpar.cc:155
 hrichcalpar.cc:156
 hrichcalpar.cc:157
 hrichcalpar.cc:158
 hrichcalpar.cc:159
 hrichcalpar.cc:160
 hrichcalpar.cc:161
 hrichcalpar.cc:162
 hrichcalpar.cc:163
 hrichcalpar.cc:164
 hrichcalpar.cc:165
 hrichcalpar.cc:166
 hrichcalpar.cc:167
 hrichcalpar.cc:168
 hrichcalpar.cc:169
 hrichcalpar.cc:170
 hrichcalpar.cc:171
 hrichcalpar.cc:172
 hrichcalpar.cc:173
 hrichcalpar.cc:174
 hrichcalpar.cc:175
 hrichcalpar.cc:176
 hrichcalpar.cc:177
 hrichcalpar.cc:178
 hrichcalpar.cc:179
 hrichcalpar.cc:180
 hrichcalpar.cc:181
 hrichcalpar.cc:182
 hrichcalpar.cc:183
 hrichcalpar.cc:184
 hrichcalpar.cc:185
 hrichcalpar.cc:186
 hrichcalpar.cc:187
 hrichcalpar.cc:188
 hrichcalpar.cc:189
 hrichcalpar.cc:190
 hrichcalpar.cc:191
 hrichcalpar.cc:192
 hrichcalpar.cc:193
 hrichcalpar.cc:194
 hrichcalpar.cc:195
 hrichcalpar.cc:196
 hrichcalpar.cc:197
 hrichcalpar.cc:198
 hrichcalpar.cc:199
 hrichcalpar.cc:200
 hrichcalpar.cc:201
 hrichcalpar.cc:202
 hrichcalpar.cc:203
 hrichcalpar.cc:204
 hrichcalpar.cc:205
 hrichcalpar.cc:206
 hrichcalpar.cc:207
 hrichcalpar.cc:208
 hrichcalpar.cc:209
 hrichcalpar.cc:210
 hrichcalpar.cc:211
 hrichcalpar.cc:212
 hrichcalpar.cc:213
 hrichcalpar.cc:214
 hrichcalpar.cc:215
 hrichcalpar.cc:216
 hrichcalpar.cc:217
 hrichcalpar.cc:218
 hrichcalpar.cc:219
 hrichcalpar.cc:220
 hrichcalpar.cc:221
 hrichcalpar.cc:222
 hrichcalpar.cc:223
 hrichcalpar.cc:224
 hrichcalpar.cc:225
 hrichcalpar.cc:226
 hrichcalpar.cc:227
 hrichcalpar.cc:228
 hrichcalpar.cc:229
 hrichcalpar.cc:230
 hrichcalpar.cc:231
 hrichcalpar.cc:232
 hrichcalpar.cc:233
 hrichcalpar.cc:234
 hrichcalpar.cc:235
 hrichcalpar.cc:236
 hrichcalpar.cc:237
 hrichcalpar.cc:238
 hrichcalpar.cc:239
 hrichcalpar.cc:240
 hrichcalpar.cc:241
 hrichcalpar.cc:242
 hrichcalpar.cc:243
 hrichcalpar.cc:244
 hrichcalpar.cc:245
 hrichcalpar.cc:246
 hrichcalpar.cc:247
 hrichcalpar.cc:248
 hrichcalpar.cc:249
 hrichcalpar.cc:250
 hrichcalpar.cc:251
 hrichcalpar.cc:252
 hrichcalpar.cc:253
 hrichcalpar.cc:254
 hrichcalpar.cc:255
 hrichcalpar.cc:256
 hrichcalpar.cc:257
 hrichcalpar.cc:258
 hrichcalpar.cc:259
 hrichcalpar.cc:260
 hrichcalpar.cc:261
 hrichcalpar.cc:262
 hrichcalpar.cc:263
 hrichcalpar.cc:264
 hrichcalpar.cc:265
 hrichcalpar.cc:266
 hrichcalpar.cc:267