Changeset 3150 in Sophya for trunk/Cosmo/SimLSS/cmvconcherr.cc


Ignore:
Timestamp:
Jan 18, 2007, 7:23:56 PM (19 years ago)
Author:
cmv
Message:

suite modifs structure code + bug HistoErr/2D dans ComputeSpectrum cmv 18/01/2007

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Cosmo/SimLSS/cmvconcherr.cc

    r3141 r3150  
    99#include "timing.h"
    1010#include "histerr.h"
    11 
     11#include "hist2err.h"
     12#include "fitshisterr.h"
     13
     14int ObjectType(string nameh,string nameppf);
     15int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp);
     16int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp);
    1217void usage(void);
    1318void usage(void)
    1419{
    15  cout<<"cmvconchprof -n name_histoerr file1.ppf file2.ppf ..."<<endl;
    16 }
    17 
     20cout
     21<<"cmvconcherr -w wtyp -n name_histoerr file1.ppf file2.ppf ..."<<endl
     22<<"  name_histoerr: object name"<<endl
     23<<"  wtyp: bit0 write ASCII, bit1 write PPF, bit2 write FITS (all=7)"<<endl;
     24}
     25
     26
     27//---------------------------------------------------------------
    1828int main(int narg,char *arg[])
    1929{
    20  string nameh = ""; // "hpkgen" "hpkgenf" "hpkrec"
     30 // "hpkgen" "hpkgenf" "hpkrec" "hpkgen2" "hpkgenf2" "hpkrec2"
     31 string nameh = "";
    2132 vector<string> ppfname;
     33 int Write_Type = 3;
    2234
    2335 // --- Decodage arguments
    2436 char c;
    25  while((c = getopt(narg,arg,"hn:")) != -1) {
     37 while((c = getopt(narg,arg,"hn:w:")) != -1) {
    2638  switch (c) {
    2739  case 'n' :
    2840    nameh = optarg;
     41    break;
     42  case 'w' :
     43    sscanf(optarg,"%d",&Write_Type);
    2944    break;
    3045  case 'h' :
     
    3550 if(nameh.size()<=0 || optind>=narg) {usage(); return -1;}
    3651 for (int i=optind;i<narg;i++) ppfname.push_back(arg[i]);
    37  cout<<"nameh = "<<nameh<<" , number of file to be read = "<<ppfname.size()<<endl;
    38 
    39  // --- lecture et moyenne des HistoErr
     52 cout<<"nameh = "<<nameh
     53     <<" , number of file to be read = "<<ppfname.size()
     54     <<" , write_type="<<Write_Type<<endl;
     55
     56 // --- Quel type d'objet ?
     57 int obtyp = ObjectType(nameh,ppfname[0]);
     58
     59 // --- lecture et moyenne des HistoErr ou Histo2DErr
     60 int nread=0;
     61 if(obtyp==1) nread = ConcatHistoErr(nameh,ppfname,Write_Type);
     62 else if(obtyp==2) nread = ConcatHisto2DErr(nameh,ppfname,Write_Type);
     63 else {
     64   cout<<"Type of object "<<nameh<<" not decoded"<<endl;
     65   return -1;
     66 }
     67 cout<<"Number of file read: "<<nread<<endl;
     68 return 0;
     69}
     70
     71//---------------------------------------------------------------
     72int ObjectType(string nameh,string nameppf)
     73// retourne: 1 si HistoErr
     74//           2 si Histo2DErr,
     75//           0 si autre objet
     76//          -1 si il n'y a pas d'objet de nom "nameh"
     77{
     78 PInPersist pis(nameppf.c_str());
     79
     80 bool found_tag = pis.GotoNameTag(nameh.c_str());
     81 if(!found_tag) return -1;
     82
     83 PPersist *pps = pis.ReadObject();
     84 AnyDataObj *obj = pps->DataObj();
     85 cout<<"Object type read from input PPF file : "<<typeid(*obj).name()<< endl;
     86
     87 HistoErr *herr = dynamic_cast<HistoErr *>(obj);
     88 if(herr) return 1;
     89
     90 Histo2DErr *herr2 = dynamic_cast<Histo2DErr *>(obj);
     91 if(herr2) return 2;
     92
     93 return 0;
     94}
     95
     96//---------------------------------------------------------------
     97int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp)
     98{
     99 if(ppfname.size()<=0) return 0;
     100
    40101 HistoErr *herrconc = NULL;
    41  int nherr = 0;
    42  int itest = 0;
     102 int nherr=0, nread=0, itest=0;
    43103 double sum=0., sum2=0., nsum=0;
    44104 for (int ifile=0;ifile<ppfname.size();ifile++) {
     
    46106   HistoErr herr;
    47107   pis.GetObject(herr,nameh);
    48    int n = herr.NBins();
    49    cout<<ifile<<" : "<<ppfname[ifile]<<"  nbin="<<n<<endl;
     108   cout<<ifile<<" : "<<ppfname[ifile]<<"  nbin="<<herr.NBins()<<endl;
    50109   if(ifile==0) {
    51110     herrconc = new HistoErr(herr.XMin(),herr.XMax(),herr.NBins());
    52      nherr = n;
     111     nherr = herr.NBins();
    53112     itest = int(herrconc->NBins()/5.+0.5);
     113   } else if(nherr!=herr.NBins()) {
     114     cout<<"BAD NUMBER OF BINS"<<endl;
     115     continue;
    54116   }
    55    if(n!=nherr) {cout<<"BAD NUMBER OF BINS"<<endl; continue;}
     117   if(herr.NMean()!=1) cout<<"ATTENTION: file="<<ppfname[ifile]
     118                             <<" nmean="<<herr.NMean()<<endl;
     119   nread++;
    56120   for(int i=0;i<nherr;i++) herrconc->AddBin(i,herr(i));
    57121   sum+=herr(itest); sum2+=herr(itest)*herr(itest), nsum++;
    58122 }
    59  herrconc->ToCorrel();
     123 herrconc->ToVariance();
    60124 if(nsum>0) {sum/=nsum; sum2/=nsum; sum2-=sum*sum;}
    61125 cout<<"Test bin "<<itest<<" mean="<<sum<<" sigma^2="<<sum2<<"  nsum="<<nsum<<endl;
    62  cout<<"         "<<" mean="<<(*herrconc)(itest)<<" sigma^2="<<herrconc->Error2(itest)<<endl;
    63 
    64  // --- ecriture ascii
    65  if(1) {
    66    FILE * fdata = fopen("cmvconchprof.data","w");
    67    fprintf(fdata,"# k(Mpc^-1) <pkz_reconstruit> variance_pkz\n");
     126 cout<<"         "<<" mean="<<(*herrconc)(itest)
     127                  <<" sigma^2="<<herrconc->Error2(itest)<<endl;
     128
     129 // --- ecriture
     130 if(wrtyp&1) {   // ecriture ASCII
     131   FILE * fdata = fopen("cmvconcherr.data","w");
     132   fprintf(fdata,"# x <mean> variance\n");
     133   fprintf(fdata,"%.17e %.17e %d %d\n",herrconc->XMin(),herrconc->XMax()
     134          ,herrconc->NBins(),herrconc->NMean());
    68135   for(int i=0;i<herrconc->NBins();i++) {
    69      double k = herrconc->BinCenter(i);
    70      fprintf(fdata,"%e %e %e\n",k,(*herrconc)(i),herrconc->Error2(i));
     136     double x = herrconc->BinCenter(i);
     137     fprintf(fdata,"%e %e %e\n",x,(*herrconc)(i),herrconc->Error2(i));
    71138   }
    72139   fclose(fdata);
    73140 }
    74 
    75  // --- ecriture ppf
    76  string tagobs = "cmvconchprof.ppf";
    77  POutPersist posobs(tagobs);
    78  tagobs = "herrconc"; posobs.PutObject(*herrconc,tagobs);
     141 if(wrtyp&2) {   // ecriture PPF
     142   string tagobs = "cmvconcherr.ppf";
     143   POutPersist posobs(tagobs);
     144   tagobs = "herrconc"; posobs.PutObject(*herrconc,tagobs);
     145 }
     146 if(wrtyp&4) {   // ecriture FITS
     147   FitsInOutFile fio("!cmvconcherr.fits",FitsInOutFile::Fits_Create);
     148   fio << *herrconc;
     149 }
    79150
    80151 delete herrconc;
    81152
    82  return 0;
     153 return nread;
     154}
     155
     156//---------------------------------------------------------------
     157int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp)
     158{
     159 if(ppfname.size()<=0) return 0;
     160
     161 Histo2DErr *herrconc = NULL;
     162 int nherrx=0, nherry=0, nread=0, itestx=0, itesty=0;
     163 double sum=0., sum2=0., nsum=0;
     164 for (int ifile=0;ifile<ppfname.size();ifile++) {
     165   PInPersist pis(ppfname[ifile].c_str());
     166   Histo2DErr herr;
     167   pis.GetObject(herr,nameh);
     168   cout<<ifile<<" : "<<ppfname[ifile]<<"  nbin="
     169       <<herr.NBinX()<<","<<herr.NBinY()<<endl;
     170   if(ifile==0) {
     171     herrconc = new Histo2DErr(herr.XMin(),herr.XMax(),herr.NBinX()
     172                              ,herr.YMin(),herr.YMax(),herr.NBinY());
     173     nherrx = herr.NBinX(); nherry = herr.NBinY();
     174     itestx = int(herrconc->NBinX()/5.+0.5);
     175     itesty = int(herrconc->NBinY()/5.+0.5);
     176   } else if(nherrx!=herr.NBinX() || nherry!=herr.NBinY()) {
     177     cout<<"BAD NUMBER OF BINS"<<endl;
     178     continue;
     179   }
     180   if(herr.NMean()!=1) cout<<"ATTENTION: file="<<ppfname[ifile]
     181                             <<" nmean="<<herr.NMean()<<endl;
     182   nread++;
     183   for(int i=0;i<nherrx;i++)
     184     for(int j=0;j<nherrx;j++) herrconc->AddBin(i,j,herr(i,j));
     185   sum+=herr(itestx,itesty); sum2+=herr(itestx,itesty)*herr(itestx,itesty), nsum++;
     186 }
     187 herrconc->ToVariance();
     188 cout<<"Test bin "<<itestx<<","<<itesty
     189     <<" mean="<<sum<<" sigma^2="<<sum2<<"  nsum="<<nsum<<endl;
     190 cout<<"         "<<" mean="<<(*herrconc)(itestx,itesty)
     191                  <<" sigma^2="<<herrconc->Error2(itestx,itesty)<<endl;
     192
     193 // --- ecriture
     194 if(wrtyp&1) {   // ecriture ASCII
     195   cout<<"ERROR: No ASCII writing implemented"<<endl;
     196 }
     197 if(wrtyp&2) {   // ecriture PPF
     198   string tagobs = "cmvconcherr2.ppf";
     199   POutPersist posobs(tagobs);
     200   tagobs = "herrconc2"; posobs.PutObject(*herrconc,tagobs);
     201 }
     202 if(wrtyp&4) {   // ecriture FITS
     203   FitsInOutFile fio("!cmvconcherr2.fits",FitsInOutFile::Fits_Create);
     204   fio << *herrconc;
     205 }
     206
     207 delete herrconc;
     208
     209 return nread;
    83210}
    84211
    85212/*
    86 openppf cmvconchprof.ppf
    87 
    88 disp herrconc
     213#### HistoErr 1D
     214openppf cmvconcherr.ppf
     215
     216disp herrconc "hbincont err"
     217disp herrconc "hbinerr"
     218disp herrconc "hbinent"
    89219
    90220n/plot herrconc.val%log10(x) x>0 ! "connectpoints"
    91 n/plot herrconc.err%log10(x) x>0 ! "connectpoints same red"
    92 
    93 n/plot herrconc.err/val%log10(x) x>0&&val>0 ! "connectpoints"
     221n/plot herrconc.sqrt(err2)%log10(x) x>0&&err2>0. ! "connectpoints same red"
     222
     223n/plot herrconc.sqrt(err2)/val%log10(x) x>0&&err2>0.&&val>0 ! "connectpoints"
     224
     225#### Histo2DErr 2D
     226openppf cmvconcherr2.ppf
     227
     228disp herrconc2 "hbincont"
     229disp herrconc2 "hbinerr"
     230disp herrconc2 "hbinent"
    94231*/
Note: See TracChangeset for help on using the changeset viewer.