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


Ignore:
Timestamp:
Mar 21, 2007, 7:18:25 PM (19 years ago)
Author:
cmv
Message:

petis changements cmv 21/03/2007

File:
1 edited

Legend:

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

    r3184 r3193  
    1313
    1414int ObjectType(string nameh,string nameppf);
    15 int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp);
     15int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp,bool do_cov);
    1616int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp);
    1717void usage(void);
     
    2121<<"cmvconcherr -w wtyp -n name_histoerr file1.ppf file2.ppf ..."<<endl
    2222<<"  name_histoerr: object name"<<endl
    23 <<"  wtyp: bit0 write ASCII, bit1 write PPF, bit2 write FITS (all=7)"<<endl;
     23<<"  wtyp: bit0 write ASCII, bit1 write PPF, bit2 write FITS (all=7)"<<endl
     24<<"  -C : compute covariance for 1D spectrum"<<endl;
    2425}
    2526
     
    3233 vector<string> ppfname;
    3334 int Write_Type = 3;
     35 bool Do_Cov = false;
    3436
    3537 // --- Decodage arguments
    3638 char c;
    37  while((c = getopt(narg,arg,"hn:w:")) != -1) {
     39 while((c = getopt(narg,arg,"hCn:w:")) != -1) {
    3840  switch (c) {
    3941  case 'n' :
     
    4345    sscanf(optarg,"%d",&Write_Type);
    4446    break;
     47  case 'C' :
     48    Do_Cov = true;
     49    break;
    4550  case 'h' :
    4651  default :
     
    5964 // --- lecture et moyenne des HistoErr ou Histo2DErr
    6065 int nread=0;
    61  if(obtyp==1) nread = ConcatHistoErr(nameh,ppfname,Write_Type);
     66 if(obtyp==1) nread = ConcatHistoErr(nameh,ppfname,Write_Type,Do_Cov);
    6267 else if(obtyp==2) nread = ConcatHisto2DErr(nameh,ppfname,Write_Type);
    6368 else {
     
    95100
    96101//---------------------------------------------------------------
    97 int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp)
     102int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp,bool do_cov)
    98103{
    99104 if(ppfname.size()<=0) return 0;
    100105
    101106 HistoErr *herrconc = NULL;
     107 TVector<r_8> Tsum; TMatrix<r_8> Tsum2;
    102108 int nherr=0, nread=0, itest=0;
    103109 double sum=0., sum2=0., nsum=0;
     
    111117     nherr = herr.NBins();
    112118     itest = int(herrconc->NBins()/5.+0.5);
     119     if(do_cov) {Tsum.ReSize(nherr); Tsum=0.; Tsum2.ReSize(nherr,nherr); Tsum2=0.;}
    113120   } else if(nherr!=herr.NBins()) {
    114121     cout<<"BAD NUMBER OF BINS"<<endl;
     
    120127   for(int i=0;i<nherr;i++) herrconc->AddBin(i,herr(i));
    121128   sum+=herr(itest); sum2+=herr(itest)*herr(itest); nsum++;
     129
     130   if(do_cov) {
     131     for(int i=0;i<nherr;i++) {
     132       Tsum(i) += herr(i);
     133       for(int j=0;j<nherr;j++) Tsum2(i,j) += herr(i)*herr(j);
     134     }
     135   }
     136
    122137 }
    123138 herrconc->ToVariance();
     
    127142                  <<" sigma^2="<<herrconc->Error2(itest)<<endl;
    128143
     144 // --- Covariance
     145 if(do_cov && nread>1) {
     146   Tsum /= nread;
     147   Tsum2 /= nread;
     148   for(int i=0;i<nherr;i++)
     149     for(int j=0;j<nherr;j++) Tsum2(i,j) -= Tsum(i)*Tsum(j);
     150 }
     151
    129152 // --- ecriture
    130153 if(wrtyp&1) {   // ecriture ASCII
     
    132155   herrconc->WriteASCII(asname);
    133156 }
    134  if(wrtyp&2) {   // ecriture PPF
     157 if(wrtyp&2 || do_cov) {   // ecriture PPF
    135158   string tagobs = "cmvconcherr.ppf";
    136159   POutPersist posobs(tagobs);
    137160   tagobs = "herrconc"; posobs.PutObject(*herrconc,tagobs);
     161   if(do_cov) {
     162     tagobs = "mean"; posobs.PutObject(Tsum,tagobs);
     163     tagobs = "cov"; posobs.PutObject(Tsum2,tagobs);
     164   }
    138165 }
    139166 if(wrtyp&4) {   // ecriture FITS
     
    220247n/plot herrconc.sqrt(err2)/val%log10(x) x>0&&err2>0&&val>0 ! "connectpoints"
    221248
     249disp mean
     250imag cov
     251
     252del cor
     253c++exec \
     254TMatrix<r_8> cor(cov,false); cor = 0.; \
     255for(int i=0;i<cor.NRows();i++) { \
     256  for(int j=0;j<cor.NCols();j++) { \
     257    double v = cov(i,i)*cov(j,j); \
     258    if(v<=0.) continue; \
     259    cor(i,j) = cov(i,j)/sqrt(v); \
     260} } \
     261KeepObj(cor); \
     262cout<<"Matrice cor cree "<<endl;
     263
     264imag cor
     265
    222266#### Histo2DErr 2D
    223267openppf cmvconcherr2.ppf
Note: See TracChangeset for help on using the changeset viewer.