ROOT logo
//*-- AUTHOR : Ilse Koenig
//*-- Created : 17/01/2005
// Modified by M.Golubeva 01.11.2006

//_HADES_CLASS_DESCRIPTION 
//////////////////////////////////////////////////////////////////////
//
//  HWallParAsciiFileIo
//
//  Class for Forward Wall parameter input/output from/into Ascii file
//
//////////////////////////////////////////////////////////////////////

#include "hwallparasciifileio.h"
#include "hwalllookup.h"
#include "hwalltrb2lookup.h"
#include "hwallcalpar.h"
#include "hdetector.h"
#include "hwalldetector.h"

ClassImp(HWallParAsciiFileIo)

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

Bool_t HWallParAsciiFileIo::init(HParSet* pPar,Int_t* set) {
  // calls the appropriate read function for the container
  const  Text_t* name=pPar->GetName();
  if (pFile) {
    pFile->clear();
    pFile->seekg(0,ios::beg);
    if (!strcmp(name,"WallLookup"))     return read((HWallLookup*)pPar,set);
    if (!strcmp(name,"WallCalPar"))     return read((HWallCalPar*)pPar,set);
    if (!strcmp(name,"WallTrb2Lookup")) return read((HWallTrb2Lookup*)pPar);
    if (!strcmp(name,"WallGeomPar"))
        return HDetParAsciiFileIo::read((HDetGeomPar*)pPar,set);
    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 HWallParAsciiFileIo::write(HParSet* pPar) {
  // calls the appropriate write function for the container
  if (pFile) {
    const  Text_t* name=pPar->GetName();
    if (!strcmp(name,"WallLookup"))     return writeFile3((HWallLookup*)pPar);
    if (!strcmp(name,"WallCalPar"))     return writeFile1((HWallCalPar*)pPar);
    if (!strcmp(name,"WallTrb2Lookup")) return write((HWallTrb2Lookup*)pPar);
    if (!strcmp(name,"WallGeomPar"))
        return HDetParAsciiFileIo::writeFile((HDetGeomPar*)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 HWallParAsciiFileIo::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 HWallParAsciiFileIo::read(T* pPar, Int_t* set) {
  // template function for all parameter containers without levels
  // 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;
  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);
  }
  Bool_t allFound=kFALSE;
  if (set[0]==999) {
    set[0]=1;
    allFound=kTRUE;
    printf("%s initialized from ASCII file\n",name);
    pPar->setInputVersion(1,inputNumber);
    pPar->setChanged();
  }
  return allFound;
}

template<class T> Int_t HWallParAsciiFileIo::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 HWallParAsciiFileIo::writeFile1(T* pPar) {
  // template function for all parameter containers with 1 level
  // writes the header, loops over the container and calls its member
  //   function writeline(...)
  pPar->putAsciiHeader(fHeader);
  writeHeader(pPar->GetName());
  Text_t buf[155];
  for(Int_t i=0; i<(*pPar).getSize(); i++) {
    if (pPar->writeline(buf,i)) pFile->write(buf,strlen(buf));       
  }
  pPar->setChanged(kFALSE);
  pFile->write(sepLine,strlen(sepLine));
  return 1;
}

template<class T> Int_t HWallParAsciiFileIo::writeFile3(T* pPar) {
  // template function for all parameter containers with 3 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++) {
      Int_t n2 = (*pPar)[i0][i1].getSize();
      for(Int_t i2=0; i2<n2; i2++) {
        if (pPar->writeline(buf, i0, i1, i2))
          pFile->write(buf,strlen(buf));
	}
    }
  }
  pPar->setChanged(kFALSE);
  pFile->write(sepLine,strlen(sepLine));
  return 1;
}
 hwallparasciifileio.cc:1
 hwallparasciifileio.cc:2
 hwallparasciifileio.cc:3
 hwallparasciifileio.cc:4
 hwallparasciifileio.cc:5
 hwallparasciifileio.cc:6
 hwallparasciifileio.cc:7
 hwallparasciifileio.cc:8
 hwallparasciifileio.cc:9
 hwallparasciifileio.cc:10
 hwallparasciifileio.cc:11
 hwallparasciifileio.cc:12
 hwallparasciifileio.cc:13
 hwallparasciifileio.cc:14
 hwallparasciifileio.cc:15
 hwallparasciifileio.cc:16
 hwallparasciifileio.cc:17
 hwallparasciifileio.cc:18
 hwallparasciifileio.cc:19
 hwallparasciifileio.cc:20
 hwallparasciifileio.cc:21
 hwallparasciifileio.cc:22
 hwallparasciifileio.cc:23
 hwallparasciifileio.cc:24
 hwallparasciifileio.cc:25
 hwallparasciifileio.cc:26
 hwallparasciifileio.cc:27
 hwallparasciifileio.cc:28
 hwallparasciifileio.cc:29
 hwallparasciifileio.cc:30
 hwallparasciifileio.cc:31
 hwallparasciifileio.cc:32
 hwallparasciifileio.cc:33
 hwallparasciifileio.cc:34
 hwallparasciifileio.cc:35
 hwallparasciifileio.cc:36
 hwallparasciifileio.cc:37
 hwallparasciifileio.cc:38
 hwallparasciifileio.cc:39
 hwallparasciifileio.cc:40
 hwallparasciifileio.cc:41
 hwallparasciifileio.cc:42
 hwallparasciifileio.cc:43
 hwallparasciifileio.cc:44
 hwallparasciifileio.cc:45
 hwallparasciifileio.cc:46
 hwallparasciifileio.cc:47
 hwallparasciifileio.cc:48
 hwallparasciifileio.cc:49
 hwallparasciifileio.cc:50
 hwallparasciifileio.cc:51
 hwallparasciifileio.cc:52
 hwallparasciifileio.cc:53
 hwallparasciifileio.cc:54
 hwallparasciifileio.cc:55
 hwallparasciifileio.cc:56
 hwallparasciifileio.cc:57
 hwallparasciifileio.cc:58
 hwallparasciifileio.cc:59
 hwallparasciifileio.cc:60
 hwallparasciifileio.cc:61
 hwallparasciifileio.cc:62
 hwallparasciifileio.cc:63
 hwallparasciifileio.cc:64
 hwallparasciifileio.cc:65
 hwallparasciifileio.cc:66
 hwallparasciifileio.cc:67
 hwallparasciifileio.cc:68
 hwallparasciifileio.cc:69
 hwallparasciifileio.cc:70
 hwallparasciifileio.cc:71
 hwallparasciifileio.cc:72
 hwallparasciifileio.cc:73
 hwallparasciifileio.cc:74
 hwallparasciifileio.cc:75
 hwallparasciifileio.cc:76
 hwallparasciifileio.cc:77
 hwallparasciifileio.cc:78
 hwallparasciifileio.cc:79
 hwallparasciifileio.cc:80
 hwallparasciifileio.cc:81
 hwallparasciifileio.cc:82
 hwallparasciifileio.cc:83
 hwallparasciifileio.cc:84
 hwallparasciifileio.cc:85
 hwallparasciifileio.cc:86
 hwallparasciifileio.cc:87
 hwallparasciifileio.cc:88
 hwallparasciifileio.cc:89
 hwallparasciifileio.cc:90
 hwallparasciifileio.cc:91
 hwallparasciifileio.cc:92
 hwallparasciifileio.cc:93
 hwallparasciifileio.cc:94
 hwallparasciifileio.cc:95
 hwallparasciifileio.cc:96
 hwallparasciifileio.cc:97
 hwallparasciifileio.cc:98
 hwallparasciifileio.cc:99
 hwallparasciifileio.cc:100
 hwallparasciifileio.cc:101
 hwallparasciifileio.cc:102
 hwallparasciifileio.cc:103
 hwallparasciifileio.cc:104
 hwallparasciifileio.cc:105
 hwallparasciifileio.cc:106
 hwallparasciifileio.cc:107
 hwallparasciifileio.cc:108
 hwallparasciifileio.cc:109
 hwallparasciifileio.cc:110
 hwallparasciifileio.cc:111
 hwallparasciifileio.cc:112
 hwallparasciifileio.cc:113
 hwallparasciifileio.cc:114
 hwallparasciifileio.cc:115
 hwallparasciifileio.cc:116
 hwallparasciifileio.cc:117
 hwallparasciifileio.cc:118
 hwallparasciifileio.cc:119
 hwallparasciifileio.cc:120
 hwallparasciifileio.cc:121
 hwallparasciifileio.cc:122
 hwallparasciifileio.cc:123
 hwallparasciifileio.cc:124
 hwallparasciifileio.cc:125
 hwallparasciifileio.cc:126
 hwallparasciifileio.cc:127
 hwallparasciifileio.cc:128
 hwallparasciifileio.cc:129
 hwallparasciifileio.cc:130
 hwallparasciifileio.cc:131
 hwallparasciifileio.cc:132
 hwallparasciifileio.cc:133
 hwallparasciifileio.cc:134
 hwallparasciifileio.cc:135
 hwallparasciifileio.cc:136
 hwallparasciifileio.cc:137
 hwallparasciifileio.cc:138
 hwallparasciifileio.cc:139
 hwallparasciifileio.cc:140
 hwallparasciifileio.cc:141
 hwallparasciifileio.cc:142
 hwallparasciifileio.cc:143
 hwallparasciifileio.cc:144
 hwallparasciifileio.cc:145
 hwallparasciifileio.cc:146
 hwallparasciifileio.cc:147
 hwallparasciifileio.cc:148
 hwallparasciifileio.cc:149
 hwallparasciifileio.cc:150
 hwallparasciifileio.cc:151
 hwallparasciifileio.cc:152
 hwallparasciifileio.cc:153
 hwallparasciifileio.cc:154
 hwallparasciifileio.cc:155
 hwallparasciifileio.cc:156
 hwallparasciifileio.cc:157
 hwallparasciifileio.cc:158
 hwallparasciifileio.cc:159