ROOT logo
//*-- AUTHOR :  Pablo Cabanelas
//*-- Created : 17/10/2005
//*-- Modified: 08/09/2006 by D. Gonzalez-Diaz
//*-- Modified: 12/09/2006
//*-- Modified: 26/09/2006
//*-- Modified: 18/08/2007 by P. Cabanelas
                                                                                              
//_HADES_CLASS_DESCRIPTION
/////////////////////////////////////////////////////////////
// HRpcParAsciiFileIo
//
// Class for RPC parameter input/output from/into Ascii file
//
/////////////////////////////////////////////////////////////
                                                                                              
#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) {
  // constructor calls the base class constructor
  fName="HRpcParIo";
  HRpcDetector* det=(HRpcDetector*)gHades->getSetup()->getDetector("Rpc");  
  setSize=det->getMaxSectors(); 
}
                                                                                              
Bool_t HRpcParAsciiFileIo::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,"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) {
  // calls the appropriate write function for the container
  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) {
  // 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 HRpcParAsciiFileIo::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;
}

template<class T> Bool_t HRpcParAsciiFileIo::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 HRpcParAsciiFileIo::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();
  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:1
 hrpcparasciifileio.cc:2
 hrpcparasciifileio.cc:3
 hrpcparasciifileio.cc:4
 hrpcparasciifileio.cc:5
 hrpcparasciifileio.cc:6
 hrpcparasciifileio.cc:7
 hrpcparasciifileio.cc:8
 hrpcparasciifileio.cc:9
 hrpcparasciifileio.cc:10
 hrpcparasciifileio.cc:11
 hrpcparasciifileio.cc:12
 hrpcparasciifileio.cc:13
 hrpcparasciifileio.cc:14
 hrpcparasciifileio.cc:15
 hrpcparasciifileio.cc:16
 hrpcparasciifileio.cc:17
 hrpcparasciifileio.cc:18
 hrpcparasciifileio.cc:19
 hrpcparasciifileio.cc:20
 hrpcparasciifileio.cc:21
 hrpcparasciifileio.cc:22
 hrpcparasciifileio.cc:23
 hrpcparasciifileio.cc:24
 hrpcparasciifileio.cc:25
 hrpcparasciifileio.cc:26
 hrpcparasciifileio.cc:27
 hrpcparasciifileio.cc:28
 hrpcparasciifileio.cc:29
 hrpcparasciifileio.cc:30
 hrpcparasciifileio.cc:31
 hrpcparasciifileio.cc:32
 hrpcparasciifileio.cc:33
 hrpcparasciifileio.cc:34
 hrpcparasciifileio.cc:35
 hrpcparasciifileio.cc:36
 hrpcparasciifileio.cc:37
 hrpcparasciifileio.cc:38
 hrpcparasciifileio.cc:39
 hrpcparasciifileio.cc:40
 hrpcparasciifileio.cc:41
 hrpcparasciifileio.cc:42
 hrpcparasciifileio.cc:43
 hrpcparasciifileio.cc:44
 hrpcparasciifileio.cc:45
 hrpcparasciifileio.cc:46
 hrpcparasciifileio.cc:47
 hrpcparasciifileio.cc:48
 hrpcparasciifileio.cc:49
 hrpcparasciifileio.cc:50
 hrpcparasciifileio.cc:51
 hrpcparasciifileio.cc:52
 hrpcparasciifileio.cc:53
 hrpcparasciifileio.cc:54
 hrpcparasciifileio.cc:55
 hrpcparasciifileio.cc:56
 hrpcparasciifileio.cc:57
 hrpcparasciifileio.cc:58
 hrpcparasciifileio.cc:59
 hrpcparasciifileio.cc:60
 hrpcparasciifileio.cc:61
 hrpcparasciifileio.cc:62
 hrpcparasciifileio.cc:63
 hrpcparasciifileio.cc:64
 hrpcparasciifileio.cc:65
 hrpcparasciifileio.cc:66
 hrpcparasciifileio.cc:67
 hrpcparasciifileio.cc:68
 hrpcparasciifileio.cc:69
 hrpcparasciifileio.cc:70
 hrpcparasciifileio.cc:71
 hrpcparasciifileio.cc:72
 hrpcparasciifileio.cc:73
 hrpcparasciifileio.cc:74
 hrpcparasciifileio.cc:75
 hrpcparasciifileio.cc:76
 hrpcparasciifileio.cc:77
 hrpcparasciifileio.cc:78
 hrpcparasciifileio.cc:79
 hrpcparasciifileio.cc:80
 hrpcparasciifileio.cc:81
 hrpcparasciifileio.cc:82
 hrpcparasciifileio.cc:83
 hrpcparasciifileio.cc:84
 hrpcparasciifileio.cc:85
 hrpcparasciifileio.cc:86
 hrpcparasciifileio.cc:87
 hrpcparasciifileio.cc:88
 hrpcparasciifileio.cc:89
 hrpcparasciifileio.cc:90
 hrpcparasciifileio.cc:91
 hrpcparasciifileio.cc:92
 hrpcparasciifileio.cc:93
 hrpcparasciifileio.cc:94
 hrpcparasciifileio.cc:95
 hrpcparasciifileio.cc:96
 hrpcparasciifileio.cc:97
 hrpcparasciifileio.cc:98
 hrpcparasciifileio.cc:99
 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