Changeset 3156 in Sophya for trunk/SophyaLib/HiStats


Ignore:
Timestamp:
Jan 22, 2007, 6:23:55 PM (19 years ago)
Author:
cmv
Message:

add write and read in/from ASCII file cmv 22/01/2007

Location:
trunk/SophyaLib/HiStats
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/HiStats/histerr.cc

    r3147 r3156  
    226226void HistoErr::Show(ostream & os) const
    227227{
    228   os <<"HistoErr(nmean="<<mMean<<")"<<endl
    229      <<"          nx="<<nx_<<" ["<<xmin_<<","<<xmax_<<"] dx="<<dx_<<endl;
    230 }
     228  os <<"HistoErr(nmean="<<mMean<<")"
     229     <<" nx="<<nx_<<" ["<<xmin_<<","<<xmax_<<"] dx="<<dx_<<endl;
     230}
     231
     232/********* Methode *********/
     233/*!
     234  Write to an ASCII file
     235*/
     236int HistoErr::WriteASCII(string fname)
     237{
     238  FILE *file = fopen(fname.c_str(),"w");
     239  if(file==NULL) {
     240    cout<<"HistoErr::WriteASCII_Error: error opening "<<fname<<endl;
     241    return -1;
     242  }
     243
     244  if(NBins()<=0) {
     245    cout<<"HistoErr::WriteASCII_Error: nbin= "<<NBins()<<endl;
     246    return -2;
     247  }
     248
     249  fprintf(file,"%ld %.17e %.17e %d\n",(long)NBins(),XMin(),XMax(),NMean());
     250  for(long i=0;i<NBins();i++) {
     251      fprintf(file,"%d %.17e %.17e %.17e %.0f\n"
     252             ,i,BinCenter(i),(*this)(i),Error2(i),NEntBin(i));
     253  }
     254
     255  fclose(file);
     256  return 0;
     257}
     258
     259/*!
     260  Read from an ASCII file
     261*/
     262#define __LENLINE_HistoErr_ReadASCII__ 2048
     263int HistoErr::ReadASCII(string fname)
     264{
     265  FILE *file = fopen(fname.c_str(),"r");
     266  if(file==NULL) {
     267    cout<<"HistoErr::ReadASCII_Error: error opening "<<fname<<endl;
     268    return -1;
     269  }
     270
     271  char line[__LENLINE_HistoErr_ReadASCII__];
     272  long n=0, nbin=0;
     273
     274  while ( fgets(line,__LENLINE_HistoErr_ReadASCII__,file) != NULL ) {
     275
     276    if(n==0) {
     277
     278      r_8 xmin,xmax; long mnmean=1;
     279      sscanf(line,"%d %lf %lf %d",&nbin,&xmin,&xmax,&mnmean);
     280      if(nbin<=0) {
     281        cout<<"HistoErr::ReadASCII_Error: nbin= "<<nbin<<endl;
     282        return -2;
     283      }
     284      CreateOrResize(xmin,xmax,nbin);
     285      SetMean(mnmean);
     286
     287    } else {
     288
     289      long i; r_8 x,v,e2,nb;
     290      sscanf(line,"%d %lf %lf %lf %lf",&i,&x,&v,&e2,&nb);
     291      SetBin(i,v);
     292      SetErr2(i,e2);
     293      SetNentB(i,nb);
     294
     295    }
     296
     297    n++;
     298  }
     299
     300  fclose(file);
     301  return 0;
     302}
     303
    231304
    232305///////////////////////////////////////////////////////////
  • trunk/SophyaLib/HiStats/histerr.h

    r3147 r3156  
    144144  void Show() const { Show(cout); }
    145145
     146  // Write ASCII
     147  int WriteASCII(string fname);
     148  int ReadASCII(string fname);
     149
    146150protected:
    147151  void CreateOrResize(r_8 xmin,r_8 xmax,int_4 nx);
Note: See TracChangeset for help on using the changeset viewer.