Changeset 3282 in Sophya


Ignore:
Timestamp:
Jul 19, 2007, 10:13:51 AM (18 years ago)
Author:
cmv
Message:

calcul covariance pour une ligne Kz ou Kt 2D cmv 19/07/2007

File:
1 edited

Legend:

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

    r3246 r3282  
    1313
    1414int ObjectType(string nameh,string nameppf);
    15 int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp,bool do_cov);
    16 int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp);
     15int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp=2,bool do_cov=false);
     16int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp=2,int ibinkt=-1,int ibinkz=-1);
    1717void usage(void);
    1818void usage(void)
     
    2222<<"  name_histoerr: object name"<<endl
    2323<<"  wtyp: bit0 write ASCII, bit1 write PPF, bit2 write FITS (all=7)"<<endl
    24 <<"  -C : compute covariance for 1D spectrum"<<endl;
     24<<"  -C : compute covariance for 1D spectrum"<<endl
     25<<"  -Z ibinKt : compute covariance of line Pk(ibinKt,.) along Kz for 2D"<<endl
     26<<"  -T ibinKz : compute covariance of line Pk(.,ibinKz) along Kt for 2D"<<endl
     27<<endl;
    2528}
    2629
     
    3235 string nameh = "";
    3336 vector<string> ppfname;
    34  int Write_Type = 3;
     37 int Write_Type = 2;
    3538 bool Do_Cov = false;
     39 int ibinKt=-1, ibinKz=-1;
    3640
    3741 // --- Decodage arguments
    3842 char c;
    39  while((c = getopt(narg,arg,"hCn:w:")) != -1) {
     43 while((c = getopt(narg,arg,"hCn:w:Z:T:")) != -1) {
    4044  switch (c) {
    4145  case 'n' :
     
    4751  case 'C' :
    4852    Do_Cov = true;
     53    break;
     54  case 'Z' :
     55    sscanf(optarg,"%d",&ibinKt);
     56    break;
     57  case 'T' :
     58    sscanf(optarg,"%d",&ibinKz);
    4959    break;
    5060  case 'h' :
     
    6575 int nread=0;
    6676 if(obtyp==1) nread = ConcatHistoErr(nameh,ppfname,Write_Type,Do_Cov);
    67  else if(obtyp==2) nread = ConcatHisto2DErr(nameh,ppfname,Write_Type);
     77 else if(obtyp==2) nread = ConcatHisto2DErr(nameh,ppfname,Write_Type,ibinKt,ibinKz);
    6878 else {
    6979   cout<<"Type of object "<<nameh<<" not decoded"<<endl;
     
    108118 int nherr=0, nread=0, itest=0;
    109119 double sum=0., sum2=0., nsum=0;
    110  for (int ifile=0;ifile<ppfname.size();ifile++) {
     120 for (unsigned int ifile=0;ifile<ppfname.size();ifile++) {
    111121   PInPersist pis(ppfname[ifile].c_str());
    112122   HistoErr herr;
    113123   pis.GetObject(herr,nameh);
    114124   cout<<ifile<<" : "<<ppfname[ifile]<<"  nbin="<<herr.NBins()<<endl;
     125
    115126   if(ifile==0) {
    116127     herrconc = new HistoErr(herr.XMin(),herr.XMax(),herr.NBins());
     
    122133     continue;
    123134   }
     135
    124136   if(herr.NMean()!=1) cout<<"ATTENTION: file="<<ppfname[ifile]
    125                              <<" nmean="<<herr.NMean()<<endl;
     137                           <<" nmean="<<herr.NMean()<<endl;
    126138   nread++;
    127139   for(int i=0;i<nherr;i++) herrconc->AddBin(i,herr(i));
     
    175187
    176188//---------------------------------------------------------------
    177 int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp)
     189int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp,int ibinkt,int ibinkz)
    178190{
    179191 if(ppfname.size()<=0) return 0;
    180192
    181193 Histo2DErr *herrconc = NULL;
     194 TVector<r_8> Tsum_kz; TMatrix<r_8> Tsum2_kz;
     195 TVector<r_8> Tsum_kt; TMatrix<r_8> Tsum2_kt;
    182196 int nherrx=0, nherry=0, nread=0, itestx=0, itesty=0;
    183197 double sum=0., sum2=0., nsum=0;
    184  for (int ifile=0;ifile<ppfname.size();ifile++) {
     198 for (unsigned int ifile=0;ifile<ppfname.size();ifile++) {
    185199   PInPersist pis(ppfname[ifile].c_str());
    186200   Histo2DErr herr;
     
    188202   cout<<ifile<<" : "<<ppfname[ifile]<<"  nbin="
    189203       <<herr.NBinX()<<","<<herr.NBinY()<<endl;
     204
    190205   if(ifile==0) {
    191206     herrconc = new Histo2DErr(herr.XMin(),herr.XMax(),herr.NBinX()
     
    194209     itestx = int(herrconc->NBinX()/5.+0.5);
    195210     itesty = int(herrconc->NBinY()/5.+0.5);
     211     if(ibinkt>=0) { // matrix de covariance pour une ligne Kz
     212       if(ibinkt>=nherrx) ibinkt = nherrx-1;
     213       Tsum_kz.ReSize(nherry); Tsum_kz=0.;
     214       Tsum2_kz.ReSize(nherry,nherry); Tsum2_kz=0.;
     215     }
     216     if(ibinkz>=0) { // matrix de covariance pour une ligne Kt
     217       if(ibinkz>=nherry) ibinkz = nherry-1;
     218       Tsum_kt.ReSize(nherrx); Tsum_kt=0.;
     219       Tsum2_kt.ReSize(nherrx,nherrx); Tsum2_kt=0.;
     220     }
    196221   } else if(nherrx!=herr.NBinX() || nherry!=herr.NBinY()) {
    197222     cout<<"BAD NUMBER OF BINS"<<endl;
    198223     continue;
    199224   }
     225
    200226   if(herr.NMean()!=1) cout<<"ATTENTION: file="<<ppfname[ifile]
    201                              <<" nmean="<<herr.NMean()<<endl;
     227                           <<" nmean="<<herr.NMean()<<endl;
    202228   nread++;
    203229   for(int i=0;i<nherrx;i++)
    204230     for(int j=0;j<nherry;j++) herrconc->AddBin(i,j,herr(i,j));
    205231   sum+=herr(itestx,itesty); sum2+=herr(itestx,itesty)*herr(itestx,itesty); nsum++;
     232
     233   if(ibinkt>=0) {
     234     for(int i=0;i<Tsum_kz.Size();i++) {
     235       Tsum_kz(i) += herr(ibinkt,i);
     236       for(int j=0;j<Tsum_kz.Size();j++) Tsum2_kz(i,j) += herr(ibinkt,i)*herr(ibinkt,j);
     237     }
     238   }
     239
     240   if(ibinkz>=0) {
     241     for(int i=0;i<Tsum_kt.Size();i++) {
     242       Tsum_kt(i) += herr(i,ibinkz);
     243       for(int j=0;j<Tsum_kt.Size();j++) Tsum2_kt(i,j) += herr(i,ibinkz)*herr(j,ibinkz);
     244     }
     245   }
     246
    206247 }
    207248 herrconc->ToVariance();
     
    212253                  <<" sigma^2="<<herrconc->Error2(itestx,itesty)<<endl;
    213254
     255 // --- Covariance
     256 if(ibinkt>=0 && nread>1) {
     257   Tsum_kz /= nread;
     258   Tsum2_kz /= nread;
     259   for(int i=0;i<Tsum_kz.Size();i++)
     260     for(int j=0;j<Tsum_kz.Size();j++) Tsum2_kz(i,j) -= Tsum_kz(i)*Tsum_kz(j);
     261 }
     262 if(ibinkz>=0 && nread>1) {
     263   Tsum_kt /= nread;
     264   Tsum2_kt /= nread;
     265   for(int i=0;i<Tsum_kt.Size();i++)
     266     for(int j=0;j<Tsum_kt.Size();j++) Tsum2_kt(i,j) -= Tsum_kt(i)*Tsum_kt(j);
     267 }
     268
    214269 // --- ecriture
    215270 if(wrtyp&1) {   // ecriture ASCII
     
    221276   POutPersist posobs(tagobs);
    222277   tagobs = "herrconc2"; posobs.PutObject(*herrconc,tagobs);
     278   if(ibinkt>=0) {
     279     char str[32];
     280     sprintf(str,"kzm%d",ibinkt);
     281     posobs.PutObject(Tsum_kz,str);
     282     sprintf(str,"kzc%d",ibinkt);
     283     posobs.PutObject(Tsum2_kz,str);
     284   }
     285   if(ibinkz>=0) {
     286     char str[32];
     287     sprintf(str,"ktm%d",ibinkz);
     288     posobs.PutObject(Tsum_kt,str);
     289     sprintf(str,"ktc%d",ibinkz);
     290     posobs.PutObject(Tsum2_kt,str);
     291   }
    223292 }
    224293 if(wrtyp&4) {   // ecriture FITS
     
    233302
    234303/*
     304####
    235305#### HistoErr 1D
     306####
    236307openppf cmvconcherr.ppf
    237308
     
    264335imag cor
    265336
     337####
    266338#### Histo2DErr 2D
     339####
    267340openppf cmvconcherr2.ppf
    268341
     
    271344imag herrconc2 "hbinerr"
    272345imag herrconc2 "hbinent"
     346
     347zone
     348
     349set mean kzm140
     350set cov kzc140
     351
     352set mean ktm32
     353set cov ktc32
     354
     355n/plot $mean.val%n ! ! "connectpoints"
     356disp $cov
     357n/plot $cov.val%c r==32 ! "connectpoints"
     358
     359set cor ${cov}cor
     360del $cor
     361c++exec \
     362TMatrix<r_8> $cor($cov,false); $cor = 0.; \
     363for(int i=0;i<$cor.NRows();i++) { \
     364  for(int j=0;j<$cor.NCols();j++) { \
     365    double v = $cov(i,i)*$cov(j,j); \
     366    if(v<=0.) continue; \
     367    $cor(i,j) = $cov(i,j)/sqrt(v); \
     368} } \
     369KeepObj($cor); \
     370cout<<"Matrice cor cree "<<endl;
     371
     372disp $cor
     373n/plot $cor.val%c r==32 ! "connectpoints"
    273374*/
Note: See TracChangeset for help on using the changeset viewer.