[3770] | 1 | #include "sopnamsp.h"
|
---|
| 2 | #include "machdefs.h"
|
---|
| 3 | #include <iostream>
|
---|
| 4 | #include <stdlib.h>
|
---|
| 5 | #include <stdio.h>
|
---|
| 6 | #include <string.h>
|
---|
| 7 | #include <math.h>
|
---|
| 8 | #include <unistd.h>
|
---|
| 9 |
|
---|
| 10 | #include "sophyainit.h"
|
---|
| 11 | #include "timing.h"
|
---|
| 12 | #include "dvlist.h"
|
---|
| 13 | #include "ntuple.h"
|
---|
| 14 | #include "fabtcolread.h"
|
---|
| 15 |
|
---|
| 16 | #include "constcosmo.h"
|
---|
| 17 | #include "geneutils.h"
|
---|
| 18 | #include "genefluct3d.h"
|
---|
| 19 |
|
---|
| 20 | void usage(void);
|
---|
| 21 | void usage(void)
|
---|
| 22 | {
|
---|
| 23 | cout<<"cmvrvloscor rho.fits vlos.fits"<<endl;
|
---|
| 24 | }
|
---|
| 25 |
|
---|
| 26 | int main(int narg,char *arg[])
|
---|
| 27 | {
|
---|
| 28 | int nthread = 1;
|
---|
| 29 | int_8 ntfill = 100000;
|
---|
| 30 | SophyaInit();
|
---|
| 31 | InitTim();
|
---|
| 32 |
|
---|
| 33 | if(narg<=2) {usage(); return -1;}
|
---|
| 34 |
|
---|
| 35 | //----TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH
|
---|
| 36 | try {
|
---|
| 37 | //----TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH
|
---|
| 38 |
|
---|
| 39 | cout<<"> read rho: "<<arg[1]<<endl;
|
---|
| 40 | FitsImg3DRead f3dr(arg[1],0,5);
|
---|
| 41 | cout<<"> read vlos: "<<arg[2]<<endl;
|
---|
| 42 | FitsImg3DRead f3dv(arg[2],0,5);
|
---|
| 43 | long naxis1 = f3dr.ReadKeyL("NAXIS1");
|
---|
| 44 | long naxis2 = f3dr.ReadKeyL("NAXIS2");
|
---|
| 45 | long naxis3 = f3dr.ReadKeyL("NAXIS3");
|
---|
| 46 | cout<<"Naxis: 1="<<naxis1<<" 2="<<naxis2<<" 3="<<naxis3<<endl;
|
---|
| 47 | long nx = f3dr.ReadKeyL("Nx");
|
---|
| 48 | long ny = f3dr.ReadKeyL("Ny");;
|
---|
| 49 | long nz = f3dr.ReadKeyL("Nz");;
|
---|
| 50 | cout<<"N: x="<<nx<<" y="<<ny<<" z="<<nz<<endl;
|
---|
| 51 | double dx = f3dr.ReadKey("Dx");
|
---|
| 52 | double dy = f3dr.ReadKey("Dy");
|
---|
| 53 | double dz = f3dr.ReadKey("Dz");
|
---|
| 54 | cout<<"D: x="<<dx<<" y="<<dy<<" z="<<dz<<endl;
|
---|
| 55 | double zref = f3dr.ReadKey("ZREF");
|
---|
| 56 | double href = f3dr.ReadKey("HREF");
|
---|
| 57 | cout<<"Zref="<<zref<<" Href="<<href<<endl;
|
---|
| 58 |
|
---|
| 59 | POutPersist pos("cmvrvloscor.ppf");
|
---|
| 60 |
|
---|
| 61 | GeneFluct3D fluct3d(nx,ny,nz,dx,dy,dz,nthread,2);
|
---|
| 62 | fluct3d.Print();
|
---|
| 63 | TArray<GEN3D_TYPE>& rgen = fluct3d.GetRealArray();
|
---|
| 64 | rgen = 0.;
|
---|
| 65 | TVector<r_8> R(nz), Rdis(nz);
|
---|
| 66 |
|
---|
| 67 | const int nvar = 3;
|
---|
| 68 | const char *vname[nvar] = {"l","ll","d"};
|
---|
| 69 | NTuple nt(nvar,vname);
|
---|
| 70 | r_4 xnt[nvar];
|
---|
| 71 | int_8 ntmod = fluct3d.NPix()/ntfill; if(ntmod==0) ntmod = 1;
|
---|
| 72 |
|
---|
| 73 | cout<<"> filling redshift distorted cube"<<endl;
|
---|
| 74 | int_8 nf = 0;
|
---|
| 75 | for(int i=0;i<nx;i++) {
|
---|
| 76 | if(i%(nx/10)==0) cout<<"i="<<i<<endl;
|
---|
| 77 | for(int j=0;j<ny;j++) {
|
---|
| 78 | for(int l=0;l<nz;l++) R(l) = f3dr.Read(l,j,i);
|
---|
| 79 | Rdis = 0.;
|
---|
| 80 | for(int l=0;l<nz;l++) {
|
---|
| 81 | double d = (1.+zref) / href * f3dv.Read(l,j,i);
|
---|
| 82 | int ll = int((double)l + d/dz + 0.5);
|
---|
| 83 | if(ll<0 || ll>=nz) continue;
|
---|
| 84 | Rdis(ll) += R(l);
|
---|
| 85 | if(ntfill>0 && nf%ntmod==0)
|
---|
| 86 | {xnt[0]=l; xnt[1]=ll; xnt[2]=d; nt.Fill(xnt);}
|
---|
| 87 | nf++;
|
---|
| 88 | }
|
---|
| 89 | for(int l=0;l<nz;l++) rgen(l,j,i) += Rdis(l);
|
---|
| 90 | }
|
---|
| 91 | }
|
---|
| 92 | PrtTim(">>>> End filling redshift distorted cube");
|
---|
| 93 | pos.PutObject(nt,"nt");
|
---|
| 94 |
|
---|
| 95 | fluct3d.ReComputeFourier();
|
---|
| 96 | PrtTim(">>>> End ReComputing spectrum");
|
---|
| 97 |
|
---|
| 98 | cout<<endl<<"\n--- Computing final 1D spectrum"<<endl;
|
---|
| 99 | double dkmin = fluct3d.GetKincMin();
|
---|
| 100 | double knyqmax = fluct3d.GetKmax();
|
---|
| 101 | long nherr = long(knyqmax/dkmin+0.5);
|
---|
| 102 | cout<<"\nFor HistoErr: d="<<dkmin<<" max="<<knyqmax<<" n="<<nherr<<endl;
|
---|
| 103 | HistoErr hpkrec(0.,knyqmax,nherr); hpkrec.Zero();
|
---|
| 104 | hpkrec.ReCenterBin(); hpkrec.Show();
|
---|
| 105 | fluct3d.ComputeSpectrum(hpkrec);
|
---|
| 106 | pos.PutObject(hpkrec,"hpkrec");
|
---|
| 107 | PrtTim(">>>> End Computing final spectrum");
|
---|
| 108 |
|
---|
| 109 | cout<<"\n--- Computing final 2D spectrum"<<endl;
|
---|
| 110 | double dktmin = fluct3d.GetKTincMin();
|
---|
| 111 | double ktnyqmax = fluct3d.GetKTmax();
|
---|
| 112 | long nherrt = long(ktnyqmax/dktmin+0.5);
|
---|
| 113 | double dkzmin = fluct3d.GetKinc()[2];
|
---|
| 114 | double kznyqmax = fluct3d.GetKnyq()[2];
|
---|
| 115 | long nherrz = long(kznyqmax/dkzmin+0.5);
|
---|
| 116 | cout<<"For Histo2DErr: d="<<dktmin<<","<<dkzmin
|
---|
| 117 | <<" max="<<ktnyqmax<<","<<kznyqmax<<" n="<<nherrt<<","<<nherrz<<endl;
|
---|
| 118 | Histo2DErr hpkrec2(0.,ktnyqmax,nherrt,0.,kznyqmax,nherrz);
|
---|
| 119 | hpkrec2.ReCenterBin(); hpkrec2.Zero(); hpkrec2.Show();
|
---|
| 120 | fluct3d.ComputeSpectrum2D(hpkrec2);
|
---|
| 121 | pos.PutObject(hpkrec2,"hpkrec2");
|
---|
| 122 | PrtTim(">>>> End Computing final 2D spectrum");
|
---|
| 123 |
|
---|
| 124 | //----TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH
|
---|
| 125 | } catch (PException& exc) {
|
---|
| 126 | cerr<<"cmvrvloscor.cc catched PException"<<exc.Msg()<<endl;
|
---|
| 127 | return 77;
|
---|
| 128 | } catch (std::exception& sex) {
|
---|
| 129 | cerr << "cmvrvloscor.cc std::exception :"
|
---|
| 130 | << (string)typeid(sex).name() << "\n msg= "
|
---|
| 131 | << sex.what() << endl;
|
---|
| 132 | return 78;
|
---|
| 133 | } catch (...) {
|
---|
| 134 | cerr << "cmvrvloscor.cc catched unknown (...) exception " << endl;
|
---|
| 135 | return 79;
|
---|
| 136 | }
|
---|
| 137 | //----TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH
|
---|
| 138 |
|
---|
| 139 | return 0;
|
---|
| 140 | }
|
---|
| 141 |
|
---|
| 142 | /*
|
---|
| 143 | openppf cmvrvloscor.ppf
|
---|
| 144 |
|
---|
| 145 | n/plot hpkrec.val%x x>0 ! "nsta cpts logx"
|
---|
| 146 |
|
---|
| 147 | imag hpkrec2
|
---|
| 148 |
|
---|
| 149 | # proj selon kT (black), selon kZ (red)
|
---|
| 150 | n/plot hpkrec2.val%sqrt(x*x+y*y) ! ! "nsta cpts"
|
---|
| 151 |
|
---|
| 152 | */
|
---|