#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) {
  
  fName="HWallParIo";
}
Bool_t HWallParAsciiFileIo::init(HParSet* pPar,Int_t* set) {
  
  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) {
  
  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) {
  
  
  
  
  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) {
  
  
  
  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) {
  
  
  
  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) {
  
  
  
  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) {
  
  
  
  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: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