ROOT logo
//*-- modified : 06/10/2000 by I.Koenig

//_HADES_CLASS_DESCRIPTION
///////////////////////////////////////////////////////////////
// HStartParAsciiFileIo
//
// Class for Start parameter input/output from/into Ascii file
//
///////////////////////////////////////////////////////////////

#include "hades.h"
#include "hdetector.h"
#include "hspectrometer.h"
#include "hstart2calpar.h"
#include "hstart2detector.h"
#include "hstart2trb2lookup.h"
#include "hstart2calrunpar.h"
#include "hstart2geompar.h"
#include "hstart2trb3lookup.h"
#include "hstart2trb3calpar.h"
#include "hstartparasciifileio.h"

ClassImp(HStartParAsciiFileIo)

HStartParAsciiFileIo::HStartParAsciiFileIo(fstream* f) : HDetParAsciiFileIo(f)
{
   // constructor calls the base class constructor
   fName = "HStartParIo";
}

Bool_t HStartParAsciiFileIo::init(HParSet* pPar, Int_t* set)
{
   // calls the appropriate read function for the container
   const  Text_t* name = pPar->GetName();
   if (pFile) {
      if (!strcmp(name, "Start2Trb2Lookup")) return read((HStart2Trb2Lookup*)pPar);
      if (!strcmp(name, "Start2Calpar"))     return read((HStart2Calpar*)pPar, set, kTRUE);
      if (!strcmp(name, "Start2GeomPar"))
            return HDetParAsciiFileIo::read((HDetGeomPar*)pPar,set);
      if (!strcmp(name, "Start2Trb3Lookup")) return read((HStart2Trb3Lookup*)pPar);
      if (!strcmp(name, "Start2Trb3Calpar"))
            return HDetParAsciiFileIo::read((HTrb3Calpar*)pPar);
       Error("init(HParSet*,Int_t*)",
            "initialization of %s not possible from  ASCII file!", name);
      return kFALSE;
   }
   Error("init(HParSet*,Int_t*)", "No input file open");
   return kFALSE;
}

Int_t HStartParAsciiFileIo::write(HParSet* pPar)
{
   // calls the appropriate write function for the container
   if (pFile) {
      const  Text_t* name = pPar->GetName();
      if (!strcmp(name, "Start2Trb2Lookup")) return write((HStart2Trb2Lookup*)pPar);
      if (!strcmp(name, "Start2Calpar"))     return writeFile2((HStart2Calpar*)pPar);
      if (!strcmp(name, "Start2CalRunPar"))  return write((HStart2CalRunPar*)pPar);
      if (!strcmp(name, "Start2GeomPar"))
            return HDetParAsciiFileIo::writeFile((HDetGeomPar*)pPar);
      if (!strcmp(name, "Start2Trb3Lookup")) return write((HStart2Trb3Lookup*)pPar);
      if (!strcmp(name, "Start2Trb3Calpar"))
            return HDetParAsciiFileIo::writeFile((HTrb3Calpar*)pPar);
       Error("write(HParSet*)", "%s could not be written to ASCII file", name);
      return -1;
   }
   Error("write(HParSet*)", "No output file open");
   return -1;
}

template<class T> Bool_t HStartParAsciiFileIo::read(T* pPar)
{
   // template function for parameter containers
   // searches the container in the file, reads the data line by line and
   // called the member function readline(...) of the container class
   // does not check the detector setup
   if (!findContainer(pPar->GetName())) return kFALSE;
   pPar->clear();
   const Int_t maxbuf = 155;
   Text_t buf[maxbuf];
   Bool_t rc = kTRUE;
   while (!pFile->eof() && rc) {
      pFile->getline(buf, maxbuf);
      if (buf[0] == '#') break;
      if (buf[0] != '/' && buf[0] != '\0') rc = pPar->readline(buf);
   }
   if (rc) {
      pPar->setInputVersion(1, inputNumber);
      pPar->setChanged();
      printf("%s initialized from Ascii file\n", pPar->GetName());
   }
   return rc;
}

template<class T> Bool_t HStartParAsciiFileIo::read(T* pPar, Int_t* set,
                                                    Bool_t needsClear)
{
   // template function for all parameter containers
   // searches the container in the file, reads the data line by line and
   //   called the member function readline(...) of the container class
   const Text_t* name = pPar->GetName();
   HDetector* det = gHades->getSetup()->getDetector("Start");
   Int_t nSize = det->getMaxModules();
   if (!findContainer(name)) return kFALSE;
   if (needsClear) pPar->clear();
   const Int_t maxbuf = 155;
   Text_t buf[maxbuf];
   while (!pFile->eof()) {
      pFile->getline(buf, maxbuf);
      if (buf[0] == '#') break;
      if (buf[0] != '/' && buf[0] != '\0') pPar->readline(buf, set);
   }
   pPar->setInputVersion(1, inputNumber);
   pPar->setChanged();
   Bool_t allFound = kTRUE;
   if (!needsClear) {
      printf("%s: module(s) initialized from Ascii file:\n", name);
      allFound = checkAllFound(set, nSize);
   } else {
      for (Int_t i = 0; i < nSize; i++) {
         if (set[i]) {
            if (set[i] == 999) set[i] = 1;
            else allFound = kFALSE;
         }
      }
      if (allFound) printf("%s initialized from Ascii file\n", name);
   }
   return allFound;
}

template<class T> Bool_t HStartParAsciiFileIo::readStartModule(T* pPar, Int_t* set,
      Bool_t needsClear)
{
   // template function for start module parameter containers
   // searches the container in the file, reads the data line by line and
   //   called the member function readline(...) of the container class
   const  Text_t* name = pPar->GetName();
   if (!findContainer(name)) return kFALSE;
   if (needsClear) pPar->clear();
   const Int_t maxbuf = 155;
   Text_t buf[maxbuf];
   while (!pFile->eof()) {
      pFile->getline(buf, maxbuf);
      if (buf[0] == '#') break;
      if (buf[0] != '/' && buf[0] != '\0') pPar->readline(buf, set);
   }
   pPar->setInputVersion(1, inputNumber);
   pPar->setChanged();
   Bool_t allFound = kTRUE;
   if (!needsClear) {
      printf("%s: module(s) initialized from Ascii file:\n", name);
      allFound = checkAllFound(set, 1);
   } else {
      for (Int_t i = 0; i < 1; i++) {
         if (set[i]) {
            if (set[i] == 999) set[i] = 1;
            else allFound = kFALSE;
         }
      }
      if (allFound) printf("%s initialized from Ascii file\n", name);
   }
   return allFound;
}

template<class T> Int_t HStartParAsciiFileIo::write(T* pPar)
{
   // template function for parameter containers
   // calls the function putAsciiHeader(TString&) of the parameter container,
   // writes the header and calls the function write(fstream&) of the class
   pPar->putAsciiHeader(fHeader);
   writeHeader(pPar->GetName(), pPar->getParamContext());
   pPar->write(*pFile);
   pFile->write(sepLine, strlen(sepLine));
   pPar->setChanged(kFALSE);
   return 1;
}

template<class T> Int_t HStartParAsciiFileIo::writeFile2(T* pPar)
{
   // template function for all parameter containers with 2 levels
   // writes the header, loops over the container and calls its member
   //   function writeline(...)
   pPar->putAsciiHeader(fHeader);
   writeHeader(pPar->GetName());
   Text_t buf[155];
   Int_t n0 = (*pPar).getSize();
   for (Int_t i0 = 0; i0 < n0; i0++) {
      Int_t n1 = (*pPar)[i0].getSize();
      for (Int_t i1 = 0; i1 < n1; i1++) {
         if (pPar->writeline(buf, i0, i1)) pFile->write(buf, strlen(buf));
      }
   }
   pPar->setChanged(kFALSE);
   pFile->write(sepLine, strlen(sepLine));
   return 1;
}
 hstartparasciifileio.cc:1
 hstartparasciifileio.cc:2
 hstartparasciifileio.cc:3
 hstartparasciifileio.cc:4
 hstartparasciifileio.cc:5
 hstartparasciifileio.cc:6
 hstartparasciifileio.cc:7
 hstartparasciifileio.cc:8
 hstartparasciifileio.cc:9
 hstartparasciifileio.cc:10
 hstartparasciifileio.cc:11
 hstartparasciifileio.cc:12
 hstartparasciifileio.cc:13
 hstartparasciifileio.cc:14
 hstartparasciifileio.cc:15
 hstartparasciifileio.cc:16
 hstartparasciifileio.cc:17
 hstartparasciifileio.cc:18
 hstartparasciifileio.cc:19
 hstartparasciifileio.cc:20
 hstartparasciifileio.cc:21
 hstartparasciifileio.cc:22
 hstartparasciifileio.cc:23
 hstartparasciifileio.cc:24
 hstartparasciifileio.cc:25
 hstartparasciifileio.cc:26
 hstartparasciifileio.cc:27
 hstartparasciifileio.cc:28
 hstartparasciifileio.cc:29
 hstartparasciifileio.cc:30
 hstartparasciifileio.cc:31
 hstartparasciifileio.cc:32
 hstartparasciifileio.cc:33
 hstartparasciifileio.cc:34
 hstartparasciifileio.cc:35
 hstartparasciifileio.cc:36
 hstartparasciifileio.cc:37
 hstartparasciifileio.cc:38
 hstartparasciifileio.cc:39
 hstartparasciifileio.cc:40
 hstartparasciifileio.cc:41
 hstartparasciifileio.cc:42
 hstartparasciifileio.cc:43
 hstartparasciifileio.cc:44
 hstartparasciifileio.cc:45
 hstartparasciifileio.cc:46
 hstartparasciifileio.cc:47
 hstartparasciifileio.cc:48
 hstartparasciifileio.cc:49
 hstartparasciifileio.cc:50
 hstartparasciifileio.cc:51
 hstartparasciifileio.cc:52
 hstartparasciifileio.cc:53
 hstartparasciifileio.cc:54
 hstartparasciifileio.cc:55
 hstartparasciifileio.cc:56
 hstartparasciifileio.cc:57
 hstartparasciifileio.cc:58
 hstartparasciifileio.cc:59
 hstartparasciifileio.cc:60
 hstartparasciifileio.cc:61
 hstartparasciifileio.cc:62
 hstartparasciifileio.cc:63
 hstartparasciifileio.cc:64
 hstartparasciifileio.cc:65
 hstartparasciifileio.cc:66
 hstartparasciifileio.cc:67
 hstartparasciifileio.cc:68
 hstartparasciifileio.cc:69
 hstartparasciifileio.cc:70
 hstartparasciifileio.cc:71
 hstartparasciifileio.cc:72
 hstartparasciifileio.cc:73
 hstartparasciifileio.cc:74
 hstartparasciifileio.cc:75
 hstartparasciifileio.cc:76
 hstartparasciifileio.cc:77
 hstartparasciifileio.cc:78
 hstartparasciifileio.cc:79
 hstartparasciifileio.cc:80
 hstartparasciifileio.cc:81
 hstartparasciifileio.cc:82
 hstartparasciifileio.cc:83
 hstartparasciifileio.cc:84
 hstartparasciifileio.cc:85
 hstartparasciifileio.cc:86
 hstartparasciifileio.cc:87
 hstartparasciifileio.cc:88
 hstartparasciifileio.cc:89
 hstartparasciifileio.cc:90
 hstartparasciifileio.cc:91
 hstartparasciifileio.cc:92
 hstartparasciifileio.cc:93
 hstartparasciifileio.cc:94
 hstartparasciifileio.cc:95
 hstartparasciifileio.cc:96
 hstartparasciifileio.cc:97
 hstartparasciifileio.cc:98
 hstartparasciifileio.cc:99
 hstartparasciifileio.cc:100
 hstartparasciifileio.cc:101
 hstartparasciifileio.cc:102
 hstartparasciifileio.cc:103
 hstartparasciifileio.cc:104
 hstartparasciifileio.cc:105
 hstartparasciifileio.cc:106
 hstartparasciifileio.cc:107
 hstartparasciifileio.cc:108
 hstartparasciifileio.cc:109
 hstartparasciifileio.cc:110
 hstartparasciifileio.cc:111
 hstartparasciifileio.cc:112
 hstartparasciifileio.cc:113
 hstartparasciifileio.cc:114
 hstartparasciifileio.cc:115
 hstartparasciifileio.cc:116
 hstartparasciifileio.cc:117
 hstartparasciifileio.cc:118
 hstartparasciifileio.cc:119
 hstartparasciifileio.cc:120
 hstartparasciifileio.cc:121
 hstartparasciifileio.cc:122
 hstartparasciifileio.cc:123
 hstartparasciifileio.cc:124
 hstartparasciifileio.cc:125
 hstartparasciifileio.cc:126
 hstartparasciifileio.cc:127
 hstartparasciifileio.cc:128
 hstartparasciifileio.cc:129
 hstartparasciifileio.cc:130
 hstartparasciifileio.cc:131
 hstartparasciifileio.cc:132
 hstartparasciifileio.cc:133
 hstartparasciifileio.cc:134
 hstartparasciifileio.cc:135
 hstartparasciifileio.cc:136
 hstartparasciifileio.cc:137
 hstartparasciifileio.cc:138
 hstartparasciifileio.cc:139
 hstartparasciifileio.cc:140
 hstartparasciifileio.cc:141
 hstartparasciifileio.cc:142
 hstartparasciifileio.cc:143
 hstartparasciifileio.cc:144
 hstartparasciifileio.cc:145
 hstartparasciifileio.cc:146
 hstartparasciifileio.cc:147
 hstartparasciifileio.cc:148
 hstartparasciifileio.cc:149
 hstartparasciifileio.cc:150
 hstartparasciifileio.cc:151
 hstartparasciifileio.cc:152
 hstartparasciifileio.cc:153
 hstartparasciifileio.cc:154
 hstartparasciifileio.cc:155
 hstartparasciifileio.cc:156
 hstartparasciifileio.cc:157
 hstartparasciifileio.cc:158
 hstartparasciifileio.cc:159
 hstartparasciifileio.cc:160
 hstartparasciifileio.cc:161
 hstartparasciifileio.cc:162
 hstartparasciifileio.cc:163
 hstartparasciifileio.cc:164
 hstartparasciifileio.cc:165
 hstartparasciifileio.cc:166
 hstartparasciifileio.cc:167
 hstartparasciifileio.cc:168
 hstartparasciifileio.cc:169
 hstartparasciifileio.cc:170
 hstartparasciifileio.cc:171
 hstartparasciifileio.cc:172
 hstartparasciifileio.cc:173
 hstartparasciifileio.cc:174
 hstartparasciifileio.cc:175
 hstartparasciifileio.cc:176
 hstartparasciifileio.cc:177
 hstartparasciifileio.cc:178
 hstartparasciifileio.cc:179
 hstartparasciifileio.cc:180
 hstartparasciifileio.cc:181
 hstartparasciifileio.cc:182
 hstartparasciifileio.cc:183
 hstartparasciifileio.cc:184
 hstartparasciifileio.cc:185
 hstartparasciifileio.cc:186
 hstartparasciifileio.cc:187
 hstartparasciifileio.cc:188
 hstartparasciifileio.cc:189
 hstartparasciifileio.cc:190
 hstartparasciifileio.cc:191
 hstartparasciifileio.cc:192
 hstartparasciifileio.cc:193
 hstartparasciifileio.cc:194
 hstartparasciifileio.cc:195
 hstartparasciifileio.cc:196