#include "sopnamsp.h" #include "machdefs.h" #include #include #include #include #include #include #include "sophyainit.h" #include "timing.h" #include "ntuple.h" #include "matharr.h" #include "randfmt.h" //#include "randr48.h" #include "srandgen.h" #include "constcosmo.h" #include "cosmocalc.h" #include "geneutils.h" #include "genefluct3d.h" void usage(void); void usage(void) { cout<<"cmvobserv3d [...options...]"<, poisson fluctuate then convert to HI mass (def)"<0 compute directly , do NOT poisson fluctuate with "< scalemass=1.e-8"<,sigma,powlaw :"<0) { cout<<"\n--- Arguments: "<SelectGaussianAlgo(C_Gaussian_RandLibSNorm); RandGen->SelectPoissonAlgo(C_Poisson_Ahrens); RandomGeneratorInterface::SetGlobalRandGenP(RandGen); // --- Decodage des arguments char c; while((c = getopt(narg,arg,"ha0PWSV2U:G:F:x:y:z:s:Z:M:A:T:N:Q:R:8:O:o:")) != -1) { int nth = 0; switch (c) { case 'a' : AutoInitRand(5); break; case '0' : computefourier0 = true; break; case 'G' : sscanf(optarg,"%d",&use_growth_factor); break; case 'U' : sscanf(optarg,"%d",&no_poisson_type); break; case 'F' : sscanf(optarg,"%d",&filter_by_pixel); break; case 'x' : sscanf(optarg,"%ld,%lf",&nx,&dx); break; case 'y' : sscanf(optarg,"%ld,%lf",&ny,&dy); break; case 'z' : sscanf(optarg,"%ld,%lf",&nz,&dz); break; case 's' : sscanf(optarg,"%lf,%d",&snoise,&noise_evol); break; case 'Z' : sscanf(optarg,"%lf",&zref); break; case '2' : comp2dspec = true; break; case 'N' : sscanf(optarg,"%lf",&scalemass); if(scalemass==0.) scalemass = 1.; break; case 'M' : sscanf(optarg,"%lf,%lf,%d",&schmin,&schmax,&schnpt); break; case 'Q' : use_schmassdist = true; sscanf(optarg,"%ld",&naleagal); break; case 'R' : schmassdistfile = optarg; break; //// case 'A' : ////do_agn = true; ////sscanf(optarg,"%lf,%lf,%lf",&lfjy_agn,&lsigma_agn,&powlaw_agn); ////break; case '8' : sscanf(optarg,"%lf,%lf",&sigmaR,&R); break; case 'V' : compvarreal = true; break; case 'W' : wfits = true; break; case 'P' : wppf = true; break; case 'O' : sscanf(optarg,"%hu,%hu,%hu,%hu,%hu" ,&whattowrt[0],&whattowrt[1],&whattowrt[2],&whattowrt[3],&whattowrt[4]); break; case 'S' : wslice = true; break; case 'o' : rootnameout = optarg; break; case 'T' : sscanf(optarg,"%d",&nth); nthread = (nth<1)? 0: nth; break; case 'h' : default : usage(); return -1; } } //----TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH try { //----TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH double lschmin=log10(schmin), lschmax=log10(schmax); if(schnpt<=0) { // alors c'est un nombre de points par decade schnpt = long( (-schnpt)*(lschmax-lschmin+1.) + 0.5 ); if(schnpt<=2) schnpt = 1000; } if(naleagal<=2) naleagal = 100000; cout<<"zref="<="< dloscom = "< sigma="< sigma="<0) { cout<<"\nSchechterMassDist read from "<1e-4*schmin || fabs(m2-schmax)>1e-4*schmax) { cout<<"FATAL_ERROR: INCONSISTENT SchechterMassDist file / Schechter or limits"<>>> End of definition"); //----------------------------------------------------------------- // FFTW3 (p26): faster if sizes 2^a 3^b 5^c 7^d 11^e 13^f with e+f=0 ou 1 cout< >& pkgen = fluct3d.GetComplexArray(); //TArray& rgen = fluct3d.GetRealArray(); cout< sigma="<>>> End Initialisation de GeneFluct3D"); //----------------------------------------------------------------- cout<<"\n--- Computing a realization in Fourier space"<0) pkz.SetZ(0.); else pkz.SetZ(zref); cout<<"Power spectrum set at redshift: "<>>> End Computing a realization in Fourier space"); cout<<"\n--- Checking realization spectra"<>>> End Checking realization spectra"); if(comp2dspec) { cout<<"\n--- Checking realization 2D spectra"<>>> End Checking realization 2D spectra"); } if(filter_by_pixel!=0) { cout<<"\n--- Computing convolution by pixel shape"<>>> End Computing convolution by pixel shape"); cout<<"\n--- Checking realization spectra after pixel shape convol."<>>> End Checking realization spectra"); cout<<"\n--- Checking realization spectra after pixel shape convol. with pixel correc."<>>> End Checking realization spectra with pixel correc."); if(comp2dspec) { cout<<"\n--- Checking realization 2D spectra after pixel shape convol."<>>> End Checking realization 2D spectra"); cout<<"\n--- Checking realization 2D spectra after pixel shape convol. with pixel correc."<>>> End Checking realization 2D spectra with pixel correc."); } } if(whattowrt[0]==1) { if(wfits) { tagobs = "!" + rootnameout + "_k0.fits"; fluct3d.WriteFits(tagobs); PrtTim(">>>> End WriteFits"); } if(wppf) { tagobs = rootnameout + "_k0.ppf"; fluct3d.WritePPF(tagobs,false); PrtTim(">>>> End WritePPF"); } } //----------------------------------------------------------------- cout<<"\n--- Computing a realization in real space"<>>> End Computing a realization in real space"); if(use_growth_factor>0) { cout<<"\n--- Apply Growth factor"<>>> End Applying growth factor"); } int_8 nm; double rmref,rs2ref; cout<<"\n--- Computing reference variance in real space"<>>> End Computing reference variance in real space"); if(whattowrt[1]==1) { if(wfits) { tagobs = "!" + rootnameout + "_r0.fits"; fluct3d.WriteFits(tagobs); PrtTim(">>>> End WriteFits"); } if(wppf) { tagobs = rootnameout + "_r0.ppf"; fluct3d.WritePPF(tagobs,true); PrtTim(">>>> End WritePPF"); } if(wslice) { tagobs = rootnameout + "_s_r0.ppf"; fluct3d.WriteSlicePPF(tagobs); PrtTim(">>>> End WriteSlicePPF"); } } cout<<"\n--- Check mean and variance in real space"<>>> End Check mean and variance in real space"); if(compvarreal) { cout<<"\n--- Check variance sigmaR in real space"<>>> End Check variance sigmaR in real space"); } //----------------------------------------------------------------- if(no_poisson_type!=0) { cout<<"\n--- Converting !!!DIRECTLY!!! mass into HI mass: mass per pixel =" <0.) cout<<"normalised sigma(dM/M) is "<>>> End Converting mass into galaxy number or mass"); if( no_poisson_type==0 ) { cout<<"\n--- Apply poisson on galaxy number"<>>> End Apply poisson on galaxy number"); if(wslice) { tagobs = rootnameout + "_s_rn.ppf"; fluct3d.WriteSlicePPF(tagobs); PrtTim(">>>> End WriteSlicePPF"); } cout<<"\n--- Convert Galaxy number to HI mass"<>>> End creating tabulated histograms for trials"); } mhi = fluct3d.TurnNGal2MassQuick(schmdist); schmdist.PrintStatus(); } else { mhi = fluct3d.TurnNGal2Mass(tirhmdndm,true); } cout<>>> End Convert Galaxy number to HI mass"); } //----------------------------------------------------------------- if(whattowrt[2]==1) { if(wfits) { tagobs = "!" + rootnameout + "_r.fits"; fluct3d.WriteFits(tagobs); PrtTim(">>>> End WriteFits"); } if(wppf) { tagobs = rootnameout + "_r.ppf"; fluct3d.WritePPF(tagobs,true); PrtTim(">>>> End WritePPF"); } if(wslice) { tagobs = rootnameout + "_s_r.ppf"; fluct3d.WriteSlicePPF(tagobs); PrtTim(">>>> End WriteSlicePPF"); } } //----------------------------------------------------------------- ////if(do_agn) { //// cout<<"\n--- Add AGN: ="<>>> End Add AGN"); ////} //----------------------------------------------------------------- double snoisesave = 0.; if(snoise>0.) { cout<<"\n--- Add noise to HI Flux snoise="<>>> End Add noise"); } //----------------------------------------------------------------- if(scalemass!=0. && scalemass!=1.) { // Si scalemass==0 pas de normalisation if(scalemass<0.) scalemass = 1. / (-scalemass * mass_by_pixel); cout<<"\n--- Scale cube scale="<>>> End Scale cube"); } fluct3d.NTupleCheck(posobs,string("ntfin"),ntnent); //----------------------------------------------------------------- if(whattowrt[3]==1) { if(wfits) { tagobs = "!" + rootnameout + "_rf.fits"; fluct3d.WriteFits(tagobs); PrtTim(">>>> End WriteFits"); } if(wppf) { tagobs = rootnameout + "_rf.ppf"; fluct3d.WritePPF(tagobs,true); PrtTim(">>>> End WritePPF"); } if(wslice) { tagobs = rootnameout + "_s_rf.ppf"; fluct3d.WriteSlicePPF(tagobs); PrtTim(">>>> End WriteSlicePPF"); } } //----------------------------------------------------------------- // -- NE PAS FAIRE CA SI ON VEUT CONTINUER LA SIMULATION -> d_rho/rho ecrase cout<>>> End ReComputing spectrum"); if(whattowrt[4]==1) { if(wfits) { tagobs = "!" + rootnameout + "_k.fits"; fluct3d.WriteFits(tagobs); PrtTim(">>>> End WriteFits"); } if(wppf) { tagobs = rootnameout + "_k.ppf"; fluct3d.WritePPF(tagobs,false); PrtTim(">>>> End WritePPF"); } } cout<>>> End Computing final spectrum"); cout<>>> End Computing final spectrum with pixel deconv."); if(comp2dspec) { cout<<"\n--- Computing final 2D spectrum"<>>> End Computing final 2D spectrum"); cout<<"\n--- Computing final 2D spectrum with pixel deconv."<>>> End Computing final 2D spectrum with pixel deconv."); } //----------------------------------------------------------------- delete RandGen; PrtTim(">>>> End Of Job"); //----TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH-TRY-CATCH } catch (PException& exc) { cerr<<"cmvobserv3d.cc catched PException"<