ROOT logo
//*-- AUTHOR : Ilse Koenig
//*-- modified : 28/01/2009 by Ilse Koenig


//_HADES_CLASS_DESCRIPTION 
/////////////////////////////////////////////////////////////
//
// HDetParAsciiFileIo
//
// Class for parameter input/output from/into ASCII file
//
/////////////////////////////////////////////////////////////

#include "hdetparasciifileio.h"
#include "hdetgeompar.h"
#include "hgeomcompositevolume.h"
#include "hgeomshapes.h"
#include "htrb3calpar.h"
#include "TClass.h"

ClassImp(HDetParAsciiFileIo)

HDetParAsciiFileIo::HDetParAsciiFileIo(fstream* f) {
  // constructor
  pFile=f;
  sepLine=
    "##############################################################################\n";
}


Bool_t HDetParAsciiFileIo::findContainer(const Text_t* name) {
  // searches the container in the file
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf];
  Text_t buf2[maxbuf];
  sprintf(buf2,"%s%s%s","[",name,"]");
  pFile->clear();
  pFile->seekg(0,ios::beg);
  while (!pFile->eof()) {
    pFile->getline(buf,maxbuf);
    if (buf[0]!='[') continue;
    if (!strncmp(buf,buf2,strlen(buf2))) break;
  }
  if (pFile->eof()) return kFALSE;
  return kTRUE;
}


Bool_t HDetParAsciiFileIo::checkAllFound(Int_t* set, Int_t setSize) {
  // checks if all modules have been initialized
  Bool_t allFound=kTRUE;
  for(Int_t i=0; i<setSize; i++) {
    if (set[i]==999) {
      set[i]=0;
      printf(" %i",i);
    }
    if (set[i]) allFound=kFALSE;
  }
  printf("\n");
  return allFound;
}


void HDetParAsciiFileIo::writeHeader(const Text_t* name, const Text_t* context,
                                     const Text_t* author, const Text_t* description) {
  // calls the function putAsciiHeader(...) of the parameter container
  // class and writes the header to the file
  pFile->write(sepLine,strlen(sepLine));
  pFile->write(fHeader.Data(),fHeader.Length());
  pFile->write(sepLine,strlen(sepLine));
  *pFile<<"["<<name<<"]\n";
  if (strlen(context)>0) *pFile<<"// Parameter Context: "<<context<<"\n";
  if (strlen(author)>0) *pFile<<"author:      "<<author<<"\n";
  TString t=description;
  if (!t.IsNull()) {
    t=t.ReplaceAll("\n"," \\\n");
    *pFile<<"description: "<<t<<"\n";
  }
  *pFile<<"//-----------------------------------------------------------"
            "-----------------\n";
}


void HDetParAsciiFileIo::readComment(const Char_t* lastBuf, HParSet* pPar) {
  // reads the author or the description
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf];
  TString s=lastBuf;
  TString pName, pVal;
  Ssiz_t n=s.First(':');
  Ssiz_t m=s.Last('\\');
  pName=s(0,n);
  if (m>0) pVal=s(n+1,m-n-1);
  else pVal=s(n+1,s.Length()-n-1);
  pVal=pVal.Strip(pVal.kLeading);
  while (m>0) {
    pVal+="\n";
    pFile->getline(buf,maxbuf);
    if (buf[0]!='/') {
      s=buf;
      m=s.Last('\\');
      if (m>0) pVal+=s(0,m);
      else pVal+=s;
    }
  }
  if (pName.CompareTo("author")==0) pPar->setAuthor(pVal.Data());
  else if ( pName.CompareTo("description")==0) pPar->setDescription(pVal.Data());
}

void HDetParAsciiFileIo::writeComment(HParSet* pPar) {
  TString t=pPar->getAuthor();
  if (!t.IsNull()) *pFile<<"author:      "<<t<<"\n";
  t=pPar->getDescription();
  if (!t.IsNull()) {
    t=t.ReplaceAll("\n"," \\\n");
    *pFile<<"description: "<<t<<"\n";
  }
}

Int_t HDetParAsciiFileIo::writeFile(HDetGeomPar* pPar) {
  if (pFile) {
    Text_t buf[4000];
    const Text_t* detName=pPar->getDetectorName();
    Text_t com1[]=
        "# Parameters describing the geometry of the ";
    Text_t com2[]="\n"
        "#\n"
        "# Format:\n"
        "#   [";
    Text_t com3[]="GeomLabPositions] lab positions of the modules:\n"
        "#      name of volume   name of reference module\n"
        "#      rotation matrix\n"
        "#      translation vector\n"
        "#\n"
        "#   [";
    Text_t com4[]="GeomVolumes] parameters of the volumes:\n"
        "#      name of volume   shape   name of mother\n"
        "#      x, y and z components of points \n"
        "#      rotation matrix\n"
        "#      translation vector\n"
        "#\n";
    pFile->write(sepLine,strlen(sepLine));
    sprintf(buf,"%s%s%s%s%s%s%s",
         com1,detName,com2,detName,com3,detName,com4);
    pFile->write(buf,strlen(buf));
    pFile->write(sepLine,strlen(sepLine));
    sprintf(buf,"[%s%s]\n",detName,"GeomLabPositions");
    pFile->write(buf,strlen(buf));
    writeComment(pPar);
    const Char_t* sl="// ------------------------------------------------------\n";
    for(Int_t m=0;m<pPar->getNumModules();m++) {
      HModGeomPar* mod=pPar->getModule(m);
      if (mod) {
        pFile->write(sl,strlen(sl));
        sprintf(buf,"%s  %s\n",mod->GetName(),mod->getRefName());
        pFile->write(buf,strlen(buf));
        writeTransform(mod->getLabTransform());
      }
    }
    pFile->write(sepLine,strlen(sepLine));
    sprintf(buf,"[%s%s]\n",detName,"GeomVolumes");
    pFile->write(buf,strlen(buf));
    HGeomShapes* shapes=pPar->getShapes();
    for(Int_t m=0;m<pPar->getNumRefModules();m++) {
      HGeomCompositeVolume* mod=pPar->getRefVolume(m);
      if (mod) {
        writeVolume(mod,shapes);
        for(Int_t c=0;c<mod->getNumComponents();c++) {
          HGeomVolume* vol=mod->getComponent(c);
          if (vol&&strlen(vol->GetName())>0) writeVolume(vol,shapes);
        }
      }
    }
    pFile->write(sepLine,strlen(sepLine));
    pPar->setChanged(kFALSE);
    return 1;
  }
  cerr<<"Output is not writable"<<endl;
  return -1;
}  


Bool_t HDetParAsciiFileIo::read(HDetGeomPar* pPar,Int_t* set) {
  if (!pFile) return kFALSE;
  pFile->clear();
  pFile->seekg(0,ios::beg);
  const Char_t* detName=pPar->getDetectorName();
  TString key1(detName);
  key1+="GeomLabPositions";
  Bool_t allFound=readLabPositions(key1,pPar,set,pPar->getMaxSectors(),
                                   pPar->getMaxModules());
  if (pPar->isFirstInitialization() && allFound) {
    TString key2(detName);
    key2+="GeomVolumes";
    if (readVolumes(key2,pPar)==kFALSE) allFound=kFALSE;
  }
  if (allFound) {
    pPar->setInputVersion(1,inputNumber);
    pPar->setChanged();
    pPar->setNotFirstInit();
    printf("%s initialized from Ascii file\n",pPar->GetName());
  } else pPar->setInputVersion(-1,inputNumber);
  return allFound;  
}


Bool_t HDetParAsciiFileIo::readLabPositions(const Text_t* keyName,
            HDetGeomPar* pPar,Int_t* set, Int_t maxSec, Int_t maxMod) {
  // reads the lab positions of all modules
  if (!findContainer(keyName)) return kFALSE;
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf], name[10], ref[10];
  Int_t s=-1,m,n;
  HGeomTransform transform;
  Bool_t all=kFALSE;
  while (!all && !pFile->eof()) {             
    pFile->getline(buf,maxbuf);
    if (buf[0]=='#') all=kTRUE;
    else {
      if (buf[0]!='/') {
        if (strstr(buf,":")) readComment(buf,pPar);
        else {
          sscanf(buf,"%s%s",name,ref);
          readTransform(transform);
          if (maxSec>0) s=pPar->getSecNum(name);
          m=pPar->getModNumInMod(name);
          if (maxSec>0) n=s*maxMod+m;
          else n=m;
          HModGeomPar* mod=0;
          if (set[n] && (mod=pPar->getModule(s,m))) {
            mod->getLabTransform().setTransform(transform);
            if (pPar->isFirstInitialization()) {
              mod->SetName(name);
              mod->setRefName(ref);
              Int_t mr=pPar->getModNumInMod(ref);
              HGeomCompositeVolume* refMod=pPar->getRefVolume(mr);
              if (refMod==0) {
                Int_t num=pPar->getNumComponents();
                refMod=new HGeomCompositeVolume(num);
                refMod->SetName(ref);
                pPar->addRefVolume(refMod,mr);
              }
              mod->setVolume(refMod);
            }
            set[n]=999;
          }
        }
      }
    }
  }
  Int_t setSize=0;
  if (maxSec>0) setSize=maxSec*maxMod;
  else setSize=maxMod;
  return checkAllFound(set,setSize);
}


Bool_t HDetParAsciiFileIo::readVolumes(const Text_t* keyName,HDetGeomPar* pPar) {
  // reads the geometry parameters of all volumes
  if (!findContainer(keyName)) return kFALSE;
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf], name[10], mother[10], shape[10];
  HGeomVolume volume;
  HGeomShapes* shapes=pPar->getShapes();
  Bool_t all=kFALSE;
  while (!all && !pFile->eof()) {             
    pFile->getline(buf,maxbuf);
    if (buf[0]=='#') all=kTRUE;
    else {
      if (buf[0]!='/') {
        sscanf(buf,"%s%s%s",name,shape,mother);
        TString s(shape);
        s.ToUpper();
        if (s.Length()==3) s.Append(' ');
        volume.setShape(s);
        volume.setMother(mother);
        Int_t nPoints=shapes->readPoints(pFile,&volume);
        if (nPoints==0) return kFALSE;
        HGeomTransform& t=volume.getTransform();
        readTransform(t);
        Int_t m, l;
        if (strcmp(mother,"CAVE")==0) {
          m=pPar->getModNumInMod(name);
          l=-1;
        } 
        else {
          m=pPar->getModNumInComp(name);
          l=pPar->getCompNum(name);
        }
        HGeomCompositeVolume* volu=pPar->getRefVolume(m);
        if (volu) {
          if (l==-1) {
            if (volu->getNumPoints()==0) volu->setVolumePar(volume);
          } else {
            HGeomVolume* v=volu->getComponent(l);
            if (v->getNumPoints()==0) {
              v->SetName(name);
              v->setVolumePar(volume);
            } 
          }
        }
      }
    }
  }
  Bool_t allFound=kTRUE;
  HGeomCompositeVolume* v;
  for(Int_t i=0;i<pPar->getNumRefModules();i++) {
    v=pPar->getRefVolume(i);
    if (v && v->getNumPoints()==0) allFound=kFALSE;
  }
  return allFound;
}


void HDetParAsciiFileIo::readTransform(HGeomTransform& tf) {
  const Int_t maxbuf=4000;
  Text_t buf[maxbuf];
  Double_t r[9], t[3];
  pFile->getline(buf,maxbuf);
  sscanf(buf,"%lf%lf%lf%lf%lf%lf%lf%lf%lf",&r[0],&r[1],&r[2],
         &r[3],&r[4],&r[5],&r[6],&r[7],&r[8]);
  pFile->getline(buf,maxbuf);
  sscanf(buf,"%lf%lf%lf",&t[0],&t[1],&t[2]);
  tf.setRotMatrix(r);
  tf.setTransVector(t);
}


void HDetParAsciiFileIo::writeTransform(const HGeomTransform& tf) {
  Text_t buf[155];
  const HGeomRotation& r=tf.getRotMatrix();
  sprintf(buf,"%10.7f%11.7f%11.7f%11.7f%11.7f%11.7f%11.7f%11.7f%11.7f\n",
            r(0),r(1),r(2),r(3),r(4),r(5),r(6),r(7),r(8));
  pFile->write(buf,strlen(buf));
  const HGeomVector& v=tf.getTransVector();
  sprintf(buf,"%9.3f%10.3f%10.3f\n",v(0),v(1),v(2));
  pFile->write(buf,strlen(buf));
}


Bool_t HDetParAsciiFileIo::readVolume(HGeomVolume* volu,HGeomShapes* shapes,
                                    Text_t* buf) {
  Text_t name[10], mother[10], shape[10];
  sscanf(buf,"%s%s%s",name,shape,mother);
  volu->SetName(name);
  volu->setMother(mother);
  TString s(shape);
  s.ToUpper();
  if (s.Length()==3) s.Append(' ');
  volu->setShape(s);
  Int_t nPoints=shapes->readPoints(pFile,volu);
  if (nPoints==0) return kFALSE;
  HGeomTransform& t=volu->getTransform();
  readTransform(t);
  return kTRUE;
}


void HDetParAsciiFileIo::writeVolume(HGeomVolume* volu,HGeomShapes* shapes) {
  Text_t buf[120];
  sprintf(buf,"%s\n",
          "// ------------------------------------------------------");
  pFile->write(buf,strlen(buf));
  sprintf(buf,"%s  %s  %s\n",volu->GetName(),
            (const Char_t*)volu->getShape(),(const Char_t*)volu->getMother());
  pFile->write(buf,strlen(buf));
  shapes->writePoints(pFile,volu);
  writeTransform(volu->getTransform());
}


Bool_t HDetParAsciiFileIo::read(HTrb3Calpar* pPar) {
  if (!findContainer(pPar->GetName())) return kFALSE;
  pPar->clear();
  const Int_t maxbuf = 155;
  Text_t buf[maxbuf], key1[30], key2[30], key3[30], key4[30], key5[30];
  const Char_t delim[]=" ";
  Int_t address=0, subevid=0, nChan=0, nBin=0, nData=0, nEdges;
  Bool_t rc = kTRUE;
  while (!pFile->eof() && rc) {
    pFile->getline(buf, maxbuf);
    if (buf[0] == '#') break;
    if (buf[0] != '/' && buf[0] != '\0') {
      if (strstr(buf,"trbnet-address")) {
        Int_t n = sscanf(buf,"%s 0x%x %s 0x%x %s %i %s %i %s %i",key1,&address,key2,&subevid,key3,&nEdges,key4,&nChan,key5,&nBin);
        if (n != 10) {
          Error("read(HTrb3Calpar*)","Invalid data in line %s\n", buf);
          rc = kFALSE;
          break;
        }
        HTrb3CalparTdc* tdc = pPar->addTdc(address);
        nData = tdc->makeArray(subevid,nEdges,nChan,nBin);
        Float_t* arr = tdc->getBinsPar();
        Int_t l = 0;
        if (nData>0 && arr) {
          do {
            pFile->getline(buf,maxbuf);
            if (strstr(buf,"trbnet-address")) {
              rc = kFALSE;
              break;
            }
            Char_t* ss=strtok(buf,delim);
            while (ss!=0 && l<nData) {
              sscanf(ss,"%f",&arr[l]);
              l++;
              ss=strtok(NULL,delim);
            }
          } while (l<nData && buf[0]!='#' && buf[0]!='/' && !pFile->eof());
        }
        if (l<nData) {
          Error("read(HTrb3Calpar*)",
                "Not enough data for trbnet_address 0x%x\n", address );
          rc = kFALSE;
        }
      }
    }
  }
  if (rc && address > 0) {
    pPar->setInputVersion(1, inputNumber);
    pPar->setChanged();
    printf("%s initialized from Ascii file\n", pPar->GetName());
    return kTRUE;
  }
  return kFALSE;
}
 hdetparasciifileio.cc:1
 hdetparasciifileio.cc:2
 hdetparasciifileio.cc:3
 hdetparasciifileio.cc:4
 hdetparasciifileio.cc:5
 hdetparasciifileio.cc:6
 hdetparasciifileio.cc:7
 hdetparasciifileio.cc:8
 hdetparasciifileio.cc:9
 hdetparasciifileio.cc:10
 hdetparasciifileio.cc:11
 hdetparasciifileio.cc:12
 hdetparasciifileio.cc:13
 hdetparasciifileio.cc:14
 hdetparasciifileio.cc:15
 hdetparasciifileio.cc:16
 hdetparasciifileio.cc:17
 hdetparasciifileio.cc:18
 hdetparasciifileio.cc:19
 hdetparasciifileio.cc:20
 hdetparasciifileio.cc:21
 hdetparasciifileio.cc:22
 hdetparasciifileio.cc:23
 hdetparasciifileio.cc:24
 hdetparasciifileio.cc:25
 hdetparasciifileio.cc:26
 hdetparasciifileio.cc:27
 hdetparasciifileio.cc:28
 hdetparasciifileio.cc:29
 hdetparasciifileio.cc:30
 hdetparasciifileio.cc:31
 hdetparasciifileio.cc:32
 hdetparasciifileio.cc:33
 hdetparasciifileio.cc:34
 hdetparasciifileio.cc:35
 hdetparasciifileio.cc:36
 hdetparasciifileio.cc:37
 hdetparasciifileio.cc:38
 hdetparasciifileio.cc:39
 hdetparasciifileio.cc:40
 hdetparasciifileio.cc:41
 hdetparasciifileio.cc:42
 hdetparasciifileio.cc:43
 hdetparasciifileio.cc:44
 hdetparasciifileio.cc:45
 hdetparasciifileio.cc:46
 hdetparasciifileio.cc:47
 hdetparasciifileio.cc:48
 hdetparasciifileio.cc:49
 hdetparasciifileio.cc:50
 hdetparasciifileio.cc:51
 hdetparasciifileio.cc:52
 hdetparasciifileio.cc:53
 hdetparasciifileio.cc:54
 hdetparasciifileio.cc:55
 hdetparasciifileio.cc:56
 hdetparasciifileio.cc:57
 hdetparasciifileio.cc:58
 hdetparasciifileio.cc:59
 hdetparasciifileio.cc:60
 hdetparasciifileio.cc:61
 hdetparasciifileio.cc:62
 hdetparasciifileio.cc:63
 hdetparasciifileio.cc:64
 hdetparasciifileio.cc:65
 hdetparasciifileio.cc:66
 hdetparasciifileio.cc:67
 hdetparasciifileio.cc:68
 hdetparasciifileio.cc:69
 hdetparasciifileio.cc:70
 hdetparasciifileio.cc:71
 hdetparasciifileio.cc:72
 hdetparasciifileio.cc:73
 hdetparasciifileio.cc:74
 hdetparasciifileio.cc:75
 hdetparasciifileio.cc:76
 hdetparasciifileio.cc:77
 hdetparasciifileio.cc:78
 hdetparasciifileio.cc:79
 hdetparasciifileio.cc:80
 hdetparasciifileio.cc:81
 hdetparasciifileio.cc:82
 hdetparasciifileio.cc:83
 hdetparasciifileio.cc:84
 hdetparasciifileio.cc:85
 hdetparasciifileio.cc:86
 hdetparasciifileio.cc:87
 hdetparasciifileio.cc:88
 hdetparasciifileio.cc:89
 hdetparasciifileio.cc:90
 hdetparasciifileio.cc:91
 hdetparasciifileio.cc:92
 hdetparasciifileio.cc:93
 hdetparasciifileio.cc:94
 hdetparasciifileio.cc:95
 hdetparasciifileio.cc:96
 hdetparasciifileio.cc:97
 hdetparasciifileio.cc:98
 hdetparasciifileio.cc:99
 hdetparasciifileio.cc:100
 hdetparasciifileio.cc:101
 hdetparasciifileio.cc:102
 hdetparasciifileio.cc:103
 hdetparasciifileio.cc:104
 hdetparasciifileio.cc:105
 hdetparasciifileio.cc:106
 hdetparasciifileio.cc:107
 hdetparasciifileio.cc:108
 hdetparasciifileio.cc:109
 hdetparasciifileio.cc:110
 hdetparasciifileio.cc:111
 hdetparasciifileio.cc:112
 hdetparasciifileio.cc:113
 hdetparasciifileio.cc:114
 hdetparasciifileio.cc:115
 hdetparasciifileio.cc:116
 hdetparasciifileio.cc:117
 hdetparasciifileio.cc:118
 hdetparasciifileio.cc:119
 hdetparasciifileio.cc:120
 hdetparasciifileio.cc:121
 hdetparasciifileio.cc:122
 hdetparasciifileio.cc:123
 hdetparasciifileio.cc:124
 hdetparasciifileio.cc:125
 hdetparasciifileio.cc:126
 hdetparasciifileio.cc:127
 hdetparasciifileio.cc:128
 hdetparasciifileio.cc:129
 hdetparasciifileio.cc:130
 hdetparasciifileio.cc:131
 hdetparasciifileio.cc:132
 hdetparasciifileio.cc:133
 hdetparasciifileio.cc:134
 hdetparasciifileio.cc:135
 hdetparasciifileio.cc:136
 hdetparasciifileio.cc:137
 hdetparasciifileio.cc:138
 hdetparasciifileio.cc:139
 hdetparasciifileio.cc:140
 hdetparasciifileio.cc:141
 hdetparasciifileio.cc:142
 hdetparasciifileio.cc:143
 hdetparasciifileio.cc:144
 hdetparasciifileio.cc:145
 hdetparasciifileio.cc:146
 hdetparasciifileio.cc:147
 hdetparasciifileio.cc:148
 hdetparasciifileio.cc:149
 hdetparasciifileio.cc:150
 hdetparasciifileio.cc:151
 hdetparasciifileio.cc:152
 hdetparasciifileio.cc:153
 hdetparasciifileio.cc:154
 hdetparasciifileio.cc:155
 hdetparasciifileio.cc:156
 hdetparasciifileio.cc:157
 hdetparasciifileio.cc:158
 hdetparasciifileio.cc:159
 hdetparasciifileio.cc:160
 hdetparasciifileio.cc:161
 hdetparasciifileio.cc:162
 hdetparasciifileio.cc:163
 hdetparasciifileio.cc:164
 hdetparasciifileio.cc:165
 hdetparasciifileio.cc:166
 hdetparasciifileio.cc:167
 hdetparasciifileio.cc:168
 hdetparasciifileio.cc:169
 hdetparasciifileio.cc:170
 hdetparasciifileio.cc:171
 hdetparasciifileio.cc:172
 hdetparasciifileio.cc:173
 hdetparasciifileio.cc:174
 hdetparasciifileio.cc:175
 hdetparasciifileio.cc:176
 hdetparasciifileio.cc:177
 hdetparasciifileio.cc:178
 hdetparasciifileio.cc:179
 hdetparasciifileio.cc:180
 hdetparasciifileio.cc:181
 hdetparasciifileio.cc:182
 hdetparasciifileio.cc:183
 hdetparasciifileio.cc:184
 hdetparasciifileio.cc:185
 hdetparasciifileio.cc:186
 hdetparasciifileio.cc:187
 hdetparasciifileio.cc:188
 hdetparasciifileio.cc:189
 hdetparasciifileio.cc:190
 hdetparasciifileio.cc:191
 hdetparasciifileio.cc:192
 hdetparasciifileio.cc:193
 hdetparasciifileio.cc:194
 hdetparasciifileio.cc:195
 hdetparasciifileio.cc:196
 hdetparasciifileio.cc:197
 hdetparasciifileio.cc:198
 hdetparasciifileio.cc:199
 hdetparasciifileio.cc:200
 hdetparasciifileio.cc:201
 hdetparasciifileio.cc:202
 hdetparasciifileio.cc:203
 hdetparasciifileio.cc:204
 hdetparasciifileio.cc:205
 hdetparasciifileio.cc:206
 hdetparasciifileio.cc:207
 hdetparasciifileio.cc:208
 hdetparasciifileio.cc:209
 hdetparasciifileio.cc:210
 hdetparasciifileio.cc:211
 hdetparasciifileio.cc:212
 hdetparasciifileio.cc:213
 hdetparasciifileio.cc:214
 hdetparasciifileio.cc:215
 hdetparasciifileio.cc:216
 hdetparasciifileio.cc:217
 hdetparasciifileio.cc:218
 hdetparasciifileio.cc:219
 hdetparasciifileio.cc:220
 hdetparasciifileio.cc:221
 hdetparasciifileio.cc:222
 hdetparasciifileio.cc:223
 hdetparasciifileio.cc:224
 hdetparasciifileio.cc:225
 hdetparasciifileio.cc:226
 hdetparasciifileio.cc:227
 hdetparasciifileio.cc:228
 hdetparasciifileio.cc:229
 hdetparasciifileio.cc:230
 hdetparasciifileio.cc:231
 hdetparasciifileio.cc:232
 hdetparasciifileio.cc:233
 hdetparasciifileio.cc:234
 hdetparasciifileio.cc:235
 hdetparasciifileio.cc:236
 hdetparasciifileio.cc:237
 hdetparasciifileio.cc:238
 hdetparasciifileio.cc:239
 hdetparasciifileio.cc:240
 hdetparasciifileio.cc:241
 hdetparasciifileio.cc:242
 hdetparasciifileio.cc:243
 hdetparasciifileio.cc:244
 hdetparasciifileio.cc:245
 hdetparasciifileio.cc:246
 hdetparasciifileio.cc:247
 hdetparasciifileio.cc:248
 hdetparasciifileio.cc:249
 hdetparasciifileio.cc:250
 hdetparasciifileio.cc:251
 hdetparasciifileio.cc:252
 hdetparasciifileio.cc:253
 hdetparasciifileio.cc:254
 hdetparasciifileio.cc:255
 hdetparasciifileio.cc:256
 hdetparasciifileio.cc:257
 hdetparasciifileio.cc:258
 hdetparasciifileio.cc:259
 hdetparasciifileio.cc:260
 hdetparasciifileio.cc:261
 hdetparasciifileio.cc:262
 hdetparasciifileio.cc:263
 hdetparasciifileio.cc:264
 hdetparasciifileio.cc:265
 hdetparasciifileio.cc:266
 hdetparasciifileio.cc:267
 hdetparasciifileio.cc:268
 hdetparasciifileio.cc:269
 hdetparasciifileio.cc:270
 hdetparasciifileio.cc:271
 hdetparasciifileio.cc:272
 hdetparasciifileio.cc:273
 hdetparasciifileio.cc:274
 hdetparasciifileio.cc:275
 hdetparasciifileio.cc:276
 hdetparasciifileio.cc:277
 hdetparasciifileio.cc:278
 hdetparasciifileio.cc:279
 hdetparasciifileio.cc:280
 hdetparasciifileio.cc:281
 hdetparasciifileio.cc:282
 hdetparasciifileio.cc:283
 hdetparasciifileio.cc:284
 hdetparasciifileio.cc:285
 hdetparasciifileio.cc:286
 hdetparasciifileio.cc:287
 hdetparasciifileio.cc:288
 hdetparasciifileio.cc:289
 hdetparasciifileio.cc:290
 hdetparasciifileio.cc:291
 hdetparasciifileio.cc:292
 hdetparasciifileio.cc:293
 hdetparasciifileio.cc:294
 hdetparasciifileio.cc:295
 hdetparasciifileio.cc:296
 hdetparasciifileio.cc:297
 hdetparasciifileio.cc:298
 hdetparasciifileio.cc:299
 hdetparasciifileio.cc:300
 hdetparasciifileio.cc:301
 hdetparasciifileio.cc:302
 hdetparasciifileio.cc:303
 hdetparasciifileio.cc:304
 hdetparasciifileio.cc:305
 hdetparasciifileio.cc:306
 hdetparasciifileio.cc:307
 hdetparasciifileio.cc:308
 hdetparasciifileio.cc:309
 hdetparasciifileio.cc:310
 hdetparasciifileio.cc:311
 hdetparasciifileio.cc:312
 hdetparasciifileio.cc:313
 hdetparasciifileio.cc:314
 hdetparasciifileio.cc:315
 hdetparasciifileio.cc:316
 hdetparasciifileio.cc:317
 hdetparasciifileio.cc:318
 hdetparasciifileio.cc:319
 hdetparasciifileio.cc:320
 hdetparasciifileio.cc:321
 hdetparasciifileio.cc:322
 hdetparasciifileio.cc:323
 hdetparasciifileio.cc:324
 hdetparasciifileio.cc:325
 hdetparasciifileio.cc:326
 hdetparasciifileio.cc:327
 hdetparasciifileio.cc:328
 hdetparasciifileio.cc:329
 hdetparasciifileio.cc:330
 hdetparasciifileio.cc:331
 hdetparasciifileio.cc:332
 hdetparasciifileio.cc:333
 hdetparasciifileio.cc:334
 hdetparasciifileio.cc:335
 hdetparasciifileio.cc:336
 hdetparasciifileio.cc:337
 hdetparasciifileio.cc:338
 hdetparasciifileio.cc:339
 hdetparasciifileio.cc:340
 hdetparasciifileio.cc:341
 hdetparasciifileio.cc:342
 hdetparasciifileio.cc:343
 hdetparasciifileio.cc:344
 hdetparasciifileio.cc:345
 hdetparasciifileio.cc:346
 hdetparasciifileio.cc:347
 hdetparasciifileio.cc:348
 hdetparasciifileio.cc:349
 hdetparasciifileio.cc:350
 hdetparasciifileio.cc:351
 hdetparasciifileio.cc:352
 hdetparasciifileio.cc:353
 hdetparasciifileio.cc:354
 hdetparasciifileio.cc:355
 hdetparasciifileio.cc:356
 hdetparasciifileio.cc:357
 hdetparasciifileio.cc:358
 hdetparasciifileio.cc:359
 hdetparasciifileio.cc:360
 hdetparasciifileio.cc:361
 hdetparasciifileio.cc:362
 hdetparasciifileio.cc:363
 hdetparasciifileio.cc:364
 hdetparasciifileio.cc:365
 hdetparasciifileio.cc:366
 hdetparasciifileio.cc:367
 hdetparasciifileio.cc:368
 hdetparasciifileio.cc:369
 hdetparasciifileio.cc:370
 hdetparasciifileio.cc:371
 hdetparasciifileio.cc:372
 hdetparasciifileio.cc:373
 hdetparasciifileio.cc:374
 hdetparasciifileio.cc:375
 hdetparasciifileio.cc:376
 hdetparasciifileio.cc:377
 hdetparasciifileio.cc:378
 hdetparasciifileio.cc:379
 hdetparasciifileio.cc:380
 hdetparasciifileio.cc:381
 hdetparasciifileio.cc:382
 hdetparasciifileio.cc:383
 hdetparasciifileio.cc:384
 hdetparasciifileio.cc:385
 hdetparasciifileio.cc:386
 hdetparasciifileio.cc:387
 hdetparasciifileio.cc:388
 hdetparasciifileio.cc:389
 hdetparasciifileio.cc:390
 hdetparasciifileio.cc:391
 hdetparasciifileio.cc:392
 hdetparasciifileio.cc:393
 hdetparasciifileio.cc:394
 hdetparasciifileio.cc:395
 hdetparasciifileio.cc:396
 hdetparasciifileio.cc:397
 hdetparasciifileio.cc:398
 hdetparasciifileio.cc:399
 hdetparasciifileio.cc:400
 hdetparasciifileio.cc:401
 hdetparasciifileio.cc:402
 hdetparasciifileio.cc:403
 hdetparasciifileio.cc:404
 hdetparasciifileio.cc:405
 hdetparasciifileio.cc:406
 hdetparasciifileio.cc:407
 hdetparasciifileio.cc:408
 hdetparasciifileio.cc:409
 hdetparasciifileio.cc:410
 hdetparasciifileio.cc:411
 hdetparasciifileio.cc:412
 hdetparasciifileio.cc:413
 hdetparasciifileio.cc:414
 hdetparasciifileio.cc:415
 hdetparasciifileio.cc:416
 hdetparasciifileio.cc:417
 hdetparasciifileio.cc:418
 hdetparasciifileio.cc:419
 hdetparasciifileio.cc:420
 hdetparasciifileio.cc:421
 hdetparasciifileio.cc:422
 hdetparasciifileio.cc:423
 hdetparasciifileio.cc:424
 hdetparasciifileio.cc:425