Changeset 3150 in Sophya for trunk/Cosmo/SimLSS/cmvconcherr.cc
- Timestamp:
- Jan 18, 2007, 7:23:56 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/SimLSS/cmvconcherr.cc
r3141 r3150 9 9 #include "timing.h" 10 10 #include "histerr.h" 11 11 #include "hist2err.h" 12 #include "fitshisterr.h" 13 14 int ObjectType(string nameh,string nameppf); 15 int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp); 16 int ConcatHisto2DErr(string nameh,vector<string> ppfname,int wrtyp); 12 17 void usage(void); 13 18 void usage(void) 14 19 { 15 cout<<"cmvconchprof -n name_histoerr file1.ppf file2.ppf ..."<<endl; 16 } 17 20 cout 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 //--------------------------------------------------------------- 18 28 int main(int narg,char *arg[]) 19 29 { 20 string nameh = ""; // "hpkgen" "hpkgenf" "hpkrec" 30 // "hpkgen" "hpkgenf" "hpkrec" "hpkgen2" "hpkgenf2" "hpkrec2" 31 string nameh = ""; 21 32 vector<string> ppfname; 33 int Write_Type = 3; 22 34 23 35 // --- Decodage arguments 24 36 char c; 25 while((c = getopt(narg,arg,"hn: ")) != -1) {37 while((c = getopt(narg,arg,"hn:w:")) != -1) { 26 38 switch (c) { 27 39 case 'n' : 28 40 nameh = optarg; 41 break; 42 case 'w' : 43 sscanf(optarg,"%d",&Write_Type); 29 44 break; 30 45 case 'h' : … … 35 50 if(nameh.size()<=0 || optind>=narg) {usage(); return -1;} 36 51 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 //--------------------------------------------------------------- 72 int 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 //--------------------------------------------------------------- 97 int ConcatHistoErr(string nameh,vector<string> ppfname,int wrtyp) 98 { 99 if(ppfname.size()<=0) return 0; 100 40 101 HistoErr *herrconc = NULL; 41 int nherr = 0; 42 int itest = 0; 102 int nherr=0, nread=0, itest=0; 43 103 double sum=0., sum2=0., nsum=0; 44 104 for (int ifile=0;ifile<ppfname.size();ifile++) { … … 46 106 HistoErr herr; 47 107 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; 50 109 if(ifile==0) { 51 110 herrconc = new HistoErr(herr.XMin(),herr.XMax(),herr.NBins()); 52 nherr = n;111 nherr = herr.NBins(); 53 112 itest = int(herrconc->NBins()/5.+0.5); 113 } else if(nherr!=herr.NBins()) { 114 cout<<"BAD NUMBER OF BINS"<<endl; 115 continue; 54 116 } 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++; 56 120 for(int i=0;i<nherr;i++) herrconc->AddBin(i,herr(i)); 57 121 sum+=herr(itest); sum2+=herr(itest)*herr(itest), nsum++; 58 122 } 59 herrconc->To Correl();123 herrconc->ToVariance(); 60 124 if(nsum>0) {sum/=nsum; sum2/=nsum; sum2-=sum*sum;} 61 125 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()); 68 135 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)); 71 138 } 72 139 fclose(fdata); 73 140 } 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 } 79 150 80 151 delete herrconc; 81 152 82 return 0; 153 return nread; 154 } 155 156 //--------------------------------------------------------------- 157 int 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; 83 210 } 84 211 85 212 /* 86 openppf cmvconchprof.ppf 87 88 disp herrconc 213 #### HistoErr 1D 214 openppf cmvconcherr.ppf 215 216 disp herrconc "hbincont err" 217 disp herrconc "hbinerr" 218 disp herrconc "hbinent" 89 219 90 220 n/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" 221 n/plot herrconc.sqrt(err2)%log10(x) x>0&&err2>0. ! "connectpoints same red" 222 223 n/plot herrconc.sqrt(err2)/val%log10(x) x>0&&err2>0.&&val>0 ! "connectpoints" 224 225 #### Histo2DErr 2D 226 openppf cmvconcherr2.ppf 227 228 disp herrconc2 "hbincont" 229 disp herrconc2 "hbinerr" 230 disp herrconc2 "hbinent" 94 231 */
Note:
See TracChangeset
for help on using the changeset viewer.