ROOT logo
//*-- AUTHOR : ???
//*-- modified : 08/03/2000 by Ilse Koenig

//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
// HMdcParAsciiFileIo
//
// Class for Mdc parameter input/output from/into Ascii file
//
/////////////////////////////////////////////////////////////

#include "hmdcparasciifileio.h"
#include "hmdcrawstruct.h"
#include "hmdcgeomstruct.h"
#include "hmdccalparraw.h"
#include "hmdctdcthreshold.h"
#include "hmdctdcchannel.h"
#include "hmdccal2par.h"
#include "hmdccal2parsim.h"
#include "hmdccelleff.h"
#include "hmdclookupgeom.h"
#include "hmdclookupraw.h"
#include "hmdclayergeompar.h"
#include "hmdcgeompar.h"
#include "hmdctimecut.h"

ClassImp(HMdcParAsciiFileIo)

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

Bool_t HMdcParAsciiFileIo::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,"MdcRawStruct"))
        return read((HMdcRawStruct*)pPar,set);
    if (!strcmp(name,"MdcGeomStruct"))
        return read((HMdcGeomStruct*)pPar,set);
    if (!strncmp(name,"MdcCalParRaw",strlen("MdcCalParRaw")))
        return read((HMdcCalParRaw*)pPar,set);
    if (!strncmp(name,"MdcTdcThreshold",strlen("MdcTdcThreshold")))
        return read((HMdcTdcThreshold*)pPar,set);
    if (!strncmp(name,"MdcTdcChannel",strlen("MdcTdcChannel")))
        return read((HMdcTdcChannel*)pPar,set);
    if (!strcmp(name,"MdcCal2ParSim"))
        return read((HMdcCal2ParSim*)pPar,set);
    if (!strncmp(name,"MdcCellEff",strlen("MdcCellEff")))
        return read((HMdcCellEff*)pPar,set,4);
    if (!strcmp(name,"MdcLookupGeom"))
        return read((HMdcLookupGeom*)pPar,set);
    if (!strcmp(name,"MdcLayerGeomPar"))
        return read((HMdcLayerGeomPar*)pPar,set);
    if (!strcmp(name,"MdcGeomPar"))
        return HDetParAsciiFileIo::read((HDetGeomPar*)pPar,set);
    if (!strncmp(name,"MdcTimeCut",strlen("MdcTimeCut")))
      return read((HMdcTimeCut*)pPar,set);

    Error("HMdcParAsciiFileIo::init()","initialization of %s not possible from file!",name);
   
    return kFALSE;
  }
  Error("HMdcParAsciiFileIo::init()","no input file open");
  return kFALSE;
}

Int_t HMdcParAsciiFileIo::write(HParSet* pPar) {
  // calls the appropriate write function for the container
  if (pFile) {
    const  Text_t* name=pPar->GetName();
    if (!strcmp(name,"MdcRawStruct"))
        return writeFile3((HMdcRawStruct*)pPar);
    if (!strcmp(name,"MdcGeomStruct"))
        return writeFile3((HMdcGeomStruct*)pPar);
    if (!strncmp(name,"MdcCalParRaw",strlen("MdcCalParRaw")))
        return writeFile4((HMdcCalParRaw*)pPar);
    if (!strncmp(name,"MdcTdcThreshold",strlen("MdcTdcThreshold")))
        return writeFile4((HMdcTdcThreshold*)pPar);
    if (!strncmp(name,"MdcTdcChannel",strlen("MdcTdcChannel")))
        return writeFile4((HMdcTdcChannel*)pPar);
    if (!strcmp(name,"MdcCal2Par"))
        return writeFile3_x((HMdcCal2Par*)pPar);
    if (!strcmp(name,"MdcCal2ParSim"))
        return writeFile3_x((HMdcCal2ParSim*)pPar);
    if (!strncmp(name,"MdcCellEff",strlen("MdcCellEff")))
        return writeFile2((HMdcCellEff*)pPar);
    if (!strcmp(name,"MdcLookupGeom"))
        return writeFile4((HMdcLookupGeom*)pPar);
    if (!strcmp(name,"MdcLookupRaw"))
        return writeFile4((HMdcLookupRaw*)pPar);
    if (!strcmp(name,"MdcLayerGeomPar"))
        return writeFile3((HMdcLayerGeomPar*)pPar);
    if (!strcmp(name,"MdcGeomPar"))
        return HDetParAsciiFileIo::writeFile((HDetGeomPar*)pPar);
    if(!strncmp(name,"MdcTimeCut",strlen("MdcTimeCut")))
      return writeFile2((HMdcTimeCut*)pPar);

    Error("HMdcParAsciiFileIo::write()","%s could not be written to Ascii file",name);
    return -1;
  }
  Error("HMdcParAsciiFileIo::write()","no output file open");
  return -1;
}

template<class T> Int_t HMdcParAsciiFileIo::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[800];
  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;
}

template<class T> Int_t HMdcParAsciiFileIo::writeFile2_x(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[800];
  Int_t n0 = (*pPar).getSize();
  Int_t numberOfLines=(*pPar).getNumberOfLines();
  for(Int_t i0=0; i0<n0; i0++) {
      Int_t n1 = (*pPar)[i0].getSize();
      for(Int_t i1=0; i1<n1; i1++) {
	  for(Int_t i2=0; i2<numberOfLines; i2++) {
	      if (pPar->writeline(buf, i0,i1))
		  pFile->write(buf,strlen(buf));
	  }
      }
  }
  pPar->setChanged(kFALSE);
  pFile->write(sepLine,strlen(sepLine));
  return 1;
}


template<class T> Int_t HMdcParAsciiFileIo::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[800];
  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> Int_t HMdcParAsciiFileIo::writeFile3_x(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[800];
  Int_t n0 = (*pPar).getSize();
  Int_t numberOfLines=(*pPar).getNumberOfLines();
  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++) {
	  for(Int_t i3=0; i3<numberOfLines; i3++) {
	      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> Int_t HMdcParAsciiFileIo::writeFile4(T* pPar) {
  // template function for all parameter containers with 4 levels
  // writes the header, loops over the container and calls its member
  //   function writeline(...)
  pPar->putAsciiHeader(fHeader);
  writeHeader(pPar->GetName());
  Text_t buf[800];
  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++) {
        Int_t n3 = (*pPar)[i0][i1][i2].getSize();
        for(Int_t i3=0; i3<n3; i3++) {
          if (pPar->writeline(buf, i0, i1, i2, i3))
            pFile->write(buf,strlen(buf));
        }
      }
    }
  }
  pPar->setChanged(kFALSE);
  pFile->write(sepLine,strlen(sepLine));
  return 1;
}

template<class T> Bool_t HMdcParAsciiFileIo::read(T* pPar, Int_t* set,Int_t num) {
  // 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;
  const Int_t maxbuf=800;
  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();
  gHades->getMsg()->info(10,HMessageMgr::DET_MDC,GetName(),"%s: module(s) initialized from Ascii file:",name);
  return checkAllFound(set,num);
  INFO_msg(10,HMessageMgr::DET_MDC,"end of reading");
  return kFALSE;
}
 hmdcparasciifileio.cc:1
 hmdcparasciifileio.cc:2
 hmdcparasciifileio.cc:3
 hmdcparasciifileio.cc:4
 hmdcparasciifileio.cc:5
 hmdcparasciifileio.cc:6
 hmdcparasciifileio.cc:7
 hmdcparasciifileio.cc:8
 hmdcparasciifileio.cc:9
 hmdcparasciifileio.cc:10
 hmdcparasciifileio.cc:11
 hmdcparasciifileio.cc:12
 hmdcparasciifileio.cc:13
 hmdcparasciifileio.cc:14
 hmdcparasciifileio.cc:15
 hmdcparasciifileio.cc:16
 hmdcparasciifileio.cc:17
 hmdcparasciifileio.cc:18
 hmdcparasciifileio.cc:19
 hmdcparasciifileio.cc:20
 hmdcparasciifileio.cc:21
 hmdcparasciifileio.cc:22
 hmdcparasciifileio.cc:23
 hmdcparasciifileio.cc:24
 hmdcparasciifileio.cc:25
 hmdcparasciifileio.cc:26
 hmdcparasciifileio.cc:27
 hmdcparasciifileio.cc:28
 hmdcparasciifileio.cc:29
 hmdcparasciifileio.cc:30
 hmdcparasciifileio.cc:31
 hmdcparasciifileio.cc:32
 hmdcparasciifileio.cc:33
 hmdcparasciifileio.cc:34
 hmdcparasciifileio.cc:35
 hmdcparasciifileio.cc:36
 hmdcparasciifileio.cc:37
 hmdcparasciifileio.cc:38
 hmdcparasciifileio.cc:39
 hmdcparasciifileio.cc:40
 hmdcparasciifileio.cc:41
 hmdcparasciifileio.cc:42
 hmdcparasciifileio.cc:43
 hmdcparasciifileio.cc:44
 hmdcparasciifileio.cc:45
 hmdcparasciifileio.cc:46
 hmdcparasciifileio.cc:47
 hmdcparasciifileio.cc:48
 hmdcparasciifileio.cc:49
 hmdcparasciifileio.cc:50
 hmdcparasciifileio.cc:51
 hmdcparasciifileio.cc:52
 hmdcparasciifileio.cc:53
 hmdcparasciifileio.cc:54
 hmdcparasciifileio.cc:55
 hmdcparasciifileio.cc:56
 hmdcparasciifileio.cc:57
 hmdcparasciifileio.cc:58
 hmdcparasciifileio.cc:59
 hmdcparasciifileio.cc:60
 hmdcparasciifileio.cc:61
 hmdcparasciifileio.cc:62
 hmdcparasciifileio.cc:63
 hmdcparasciifileio.cc:64
 hmdcparasciifileio.cc:65
 hmdcparasciifileio.cc:66
 hmdcparasciifileio.cc:67
 hmdcparasciifileio.cc:68
 hmdcparasciifileio.cc:69
 hmdcparasciifileio.cc:70
 hmdcparasciifileio.cc:71
 hmdcparasciifileio.cc:72
 hmdcparasciifileio.cc:73
 hmdcparasciifileio.cc:74
 hmdcparasciifileio.cc:75
 hmdcparasciifileio.cc:76
 hmdcparasciifileio.cc:77
 hmdcparasciifileio.cc:78
 hmdcparasciifileio.cc:79
 hmdcparasciifileio.cc:80
 hmdcparasciifileio.cc:81
 hmdcparasciifileio.cc:82
 hmdcparasciifileio.cc:83
 hmdcparasciifileio.cc:84
 hmdcparasciifileio.cc:85
 hmdcparasciifileio.cc:86
 hmdcparasciifileio.cc:87
 hmdcparasciifileio.cc:88
 hmdcparasciifileio.cc:89
 hmdcparasciifileio.cc:90
 hmdcparasciifileio.cc:91
 hmdcparasciifileio.cc:92
 hmdcparasciifileio.cc:93
 hmdcparasciifileio.cc:94
 hmdcparasciifileio.cc:95
 hmdcparasciifileio.cc:96
 hmdcparasciifileio.cc:97
 hmdcparasciifileio.cc:98
 hmdcparasciifileio.cc:99
 hmdcparasciifileio.cc:100
 hmdcparasciifileio.cc:101
 hmdcparasciifileio.cc:102
 hmdcparasciifileio.cc:103
 hmdcparasciifileio.cc:104
 hmdcparasciifileio.cc:105
 hmdcparasciifileio.cc:106
 hmdcparasciifileio.cc:107
 hmdcparasciifileio.cc:108
 hmdcparasciifileio.cc:109
 hmdcparasciifileio.cc:110
 hmdcparasciifileio.cc:111
 hmdcparasciifileio.cc:112
 hmdcparasciifileio.cc:113
 hmdcparasciifileio.cc:114
 hmdcparasciifileio.cc:115
 hmdcparasciifileio.cc:116
 hmdcparasciifileio.cc:117
 hmdcparasciifileio.cc:118
 hmdcparasciifileio.cc:119
 hmdcparasciifileio.cc:120
 hmdcparasciifileio.cc:121
 hmdcparasciifileio.cc:122
 hmdcparasciifileio.cc:123
 hmdcparasciifileio.cc:124
 hmdcparasciifileio.cc:125
 hmdcparasciifileio.cc:126
 hmdcparasciifileio.cc:127
 hmdcparasciifileio.cc:128
 hmdcparasciifileio.cc:129
 hmdcparasciifileio.cc:130
 hmdcparasciifileio.cc:131
 hmdcparasciifileio.cc:132
 hmdcparasciifileio.cc:133
 hmdcparasciifileio.cc:134
 hmdcparasciifileio.cc:135
 hmdcparasciifileio.cc:136
 hmdcparasciifileio.cc:137
 hmdcparasciifileio.cc:138
 hmdcparasciifileio.cc:139
 hmdcparasciifileio.cc:140
 hmdcparasciifileio.cc:141
 hmdcparasciifileio.cc:142
 hmdcparasciifileio.cc:143
 hmdcparasciifileio.cc:144
 hmdcparasciifileio.cc:145
 hmdcparasciifileio.cc:146
 hmdcparasciifileio.cc:147
 hmdcparasciifileio.cc:148
 hmdcparasciifileio.cc:149
 hmdcparasciifileio.cc:150
 hmdcparasciifileio.cc:151
 hmdcparasciifileio.cc:152
 hmdcparasciifileio.cc:153
 hmdcparasciifileio.cc:154
 hmdcparasciifileio.cc:155
 hmdcparasciifileio.cc:156
 hmdcparasciifileio.cc:157
 hmdcparasciifileio.cc:158
 hmdcparasciifileio.cc:159
 hmdcparasciifileio.cc:160
 hmdcparasciifileio.cc:161
 hmdcparasciifileio.cc:162
 hmdcparasciifileio.cc:163
 hmdcparasciifileio.cc:164
 hmdcparasciifileio.cc:165
 hmdcparasciifileio.cc:166
 hmdcparasciifileio.cc:167
 hmdcparasciifileio.cc:168
 hmdcparasciifileio.cc:169
 hmdcparasciifileio.cc:170
 hmdcparasciifileio.cc:171
 hmdcparasciifileio.cc:172
 hmdcparasciifileio.cc:173
 hmdcparasciifileio.cc:174
 hmdcparasciifileio.cc:175
 hmdcparasciifileio.cc:176
 hmdcparasciifileio.cc:177
 hmdcparasciifileio.cc:178
 hmdcparasciifileio.cc:179
 hmdcparasciifileio.cc:180
 hmdcparasciifileio.cc:181
 hmdcparasciifileio.cc:182
 hmdcparasciifileio.cc:183
 hmdcparasciifileio.cc:184
 hmdcparasciifileio.cc:185
 hmdcparasciifileio.cc:186
 hmdcparasciifileio.cc:187
 hmdcparasciifileio.cc:188
 hmdcparasciifileio.cc:189
 hmdcparasciifileio.cc:190
 hmdcparasciifileio.cc:191
 hmdcparasciifileio.cc:192
 hmdcparasciifileio.cc:193
 hmdcparasciifileio.cc:194
 hmdcparasciifileio.cc:195
 hmdcparasciifileio.cc:196
 hmdcparasciifileio.cc:197
 hmdcparasciifileio.cc:198
 hmdcparasciifileio.cc:199
 hmdcparasciifileio.cc:200
 hmdcparasciifileio.cc:201
 hmdcparasciifileio.cc:202
 hmdcparasciifileio.cc:203
 hmdcparasciifileio.cc:204
 hmdcparasciifileio.cc:205
 hmdcparasciifileio.cc:206
 hmdcparasciifileio.cc:207
 hmdcparasciifileio.cc:208
 hmdcparasciifileio.cc:209
 hmdcparasciifileio.cc:210
 hmdcparasciifileio.cc:211
 hmdcparasciifileio.cc:212
 hmdcparasciifileio.cc:213
 hmdcparasciifileio.cc:214
 hmdcparasciifileio.cc:215
 hmdcparasciifileio.cc:216
 hmdcparasciifileio.cc:217
 hmdcparasciifileio.cc:218
 hmdcparasciifileio.cc:219
 hmdcparasciifileio.cc:220
 hmdcparasciifileio.cc:221
 hmdcparasciifileio.cc:222
 hmdcparasciifileio.cc:223
 hmdcparasciifileio.cc:224
 hmdcparasciifileio.cc:225
 hmdcparasciifileio.cc:226
 hmdcparasciifileio.cc:227
 hmdcparasciifileio.cc:228
 hmdcparasciifileio.cc:229
 hmdcparasciifileio.cc:230
 hmdcparasciifileio.cc:231
 hmdcparasciifileio.cc:232
 hmdcparasciifileio.cc:233
 hmdcparasciifileio.cc:234
 hmdcparasciifileio.cc:235
 hmdcparasciifileio.cc:236
 hmdcparasciifileio.cc:237
 hmdcparasciifileio.cc:238
 hmdcparasciifileio.cc:239
 hmdcparasciifileio.cc:240
 hmdcparasciifileio.cc:241
 hmdcparasciifileio.cc:242
 hmdcparasciifileio.cc:243
 hmdcparasciifileio.cc:244
 hmdcparasciifileio.cc:245
 hmdcparasciifileio.cc:246
 hmdcparasciifileio.cc:247