#include "hrpcparasciifileio.h"
#include "hrpcdetector.h"
#include "hrpcdigipar.h"
#include "hrpcgeomcellpar.h"
#include "hades.h"
#include "hspectrometer.h"
#include "hruntimedb.h"
#include "hrpccalpar.h"
#include "hrpctrb2lookup.h"
#include "hrpctrb3lookup.h"
                                                                                              
ClassImp(HRpcParAsciiFileIo)
                                                                                              
  HRpcParAsciiFileIo::HRpcParAsciiFileIo(fstream* f) : HDetParAsciiFileIo(f) {
  
  fName="HRpcParIo";
  HRpcDetector* det=(HRpcDetector*)gHades->getSetup()->getDetector("Rpc");  
  setSize=det->getMaxSectors(); 
}
                                                                                              
Bool_t HRpcParAsciiFileIo::init(HParSet* pPar,Int_t* set) {
  
  const  Text_t* name=pPar->GetName();
  if (pFile) {
    pFile->clear();
    pFile->seekg(0,ios::beg);
    if (!strcmp(name,"RpcCalPar")) return read((HRpcCalPar*)pPar,set);
    if (!strcmp(name,"RpcTrb2Lookup")) return read((HRpcTrb2Lookup*)pPar);
    if (!strcmp(name,"RpcTrb3Lookup")) return read((HRpcTrb3Lookup*)pPar);
    if (!strcmp(name,"RpcGeomPar"))
       return HDetParAsciiFileIo::read((HDetGeomPar*)pPar,set);
    cerr<<"initialization of "<<name<<" not possible from Ascii file!"<<endl;
    return kFALSE;
  }
  cerr<<"no input file open"<<endl;
  return kFALSE;
}
                                                                                              
Int_t HRpcParAsciiFileIo::write(HParSet* pPar) {
  
  if (pFile) {
    const  Text_t* name=pPar->GetName();
    if (!strcmp(name,"RpcCalPar")) return writeFile3((HRpcCalPar*)pPar);
    if (!strcmp(name,"RpcTrb2Lookup")) return write((HRpcTrb2Lookup*)pPar);
    if (!strcmp(name,"RpcTrb3Lookup")) return write((HRpcTrb3Lookup*)pPar);
    if (!strcmp(name,"RpcGeomPar"))
        return HDetParAsciiFileIo::writeFile((HDetGeomPar*)pPar);
    cerr<<name<<" could not be written to Ascii file"<<endl;
    return -1;
  }
  cerr<<"no output file open"<<endl;
  return -1;
}
template<class T> Int_t HRpcParAsciiFileIo::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 HRpcParAsciiFileIo::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;
}
template<class T> Bool_t HRpcParAsciiFileIo::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 HRpcParAsciiFileIo::read(T* pPar, Int_t* set,
                                                  Bool_t needsClear) {
  
  
  
  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);
  } else {
    for(Int_t i=0; i<setSize; 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;
}
                                                                                              
 hrpcparasciifileio.cc:100  hrpcparasciifileio.cc:101  hrpcparasciifileio.cc:102  hrpcparasciifileio.cc:103  hrpcparasciifileio.cc:104  hrpcparasciifileio.cc:105  hrpcparasciifileio.cc:106  hrpcparasciifileio.cc:107  hrpcparasciifileio.cc:108  hrpcparasciifileio.cc:109  hrpcparasciifileio.cc:110  hrpcparasciifileio.cc:111  hrpcparasciifileio.cc:112  hrpcparasciifileio.cc:113  hrpcparasciifileio.cc:114  hrpcparasciifileio.cc:115  hrpcparasciifileio.cc:116  hrpcparasciifileio.cc:117  hrpcparasciifileio.cc:118  hrpcparasciifileio.cc:119  hrpcparasciifileio.cc:120  hrpcparasciifileio.cc:121  hrpcparasciifileio.cc:122  hrpcparasciifileio.cc:123  hrpcparasciifileio.cc:124  hrpcparasciifileio.cc:125  hrpcparasciifileio.cc:126  hrpcparasciifileio.cc:127  hrpcparasciifileio.cc:128  hrpcparasciifileio.cc:129  hrpcparasciifileio.cc:130  hrpcparasciifileio.cc:131  hrpcparasciifileio.cc:132  hrpcparasciifileio.cc:133  hrpcparasciifileio.cc:134  hrpcparasciifileio.cc:135  hrpcparasciifileio.cc:136  hrpcparasciifileio.cc:137  hrpcparasciifileio.cc:138  hrpcparasciifileio.cc:139  hrpcparasciifileio.cc:140  hrpcparasciifileio.cc:141  hrpcparasciifileio.cc:142  hrpcparasciifileio.cc:143  hrpcparasciifileio.cc:144  hrpcparasciifileio.cc:145  hrpcparasciifileio.cc:146  hrpcparasciifileio.cc:147  hrpcparasciifileio.cc:148  hrpcparasciifileio.cc:149  hrpcparasciifileio.cc:150  hrpcparasciifileio.cc:151  hrpcparasciifileio.cc:152  hrpcparasciifileio.cc:153  hrpcparasciifileio.cc:154  hrpcparasciifileio.cc:155  hrpcparasciifileio.cc:156  hrpcparasciifileio.cc:157  hrpcparasciifileio.cc:158  hrpcparasciifileio.cc:159  hrpcparasciifileio.cc:160  hrpcparasciifileio.cc:161  hrpcparasciifileio.cc:162  hrpcparasciifileio.cc:163  hrpcparasciifileio.cc:164