source: Sophya/trunk/SophyaProg/PrgMap/extrap2sph.cc@ 3051

Last change on this file since 3051 was 2615, checked in by cmv, 21 years ago

using namespace sophya enleve de machdefs.h, nouveau sopnamsp.h cmv 10/09/2004

File size: 6.7 KB
Line 
1// Pour boucher les trous d'une sphere HEALPIX en utilisant
2// une autre sphere HEALPIX
3// cmv 13/6/01
4// extrap2sph -w sph143k05_e.fits sph143k05.fits sphred.fits sphout_2.fits
5// extrap2sph -m -1.e-30 -M +1.e-30 sph143k05.fits sphred.fits sphout_22.fits
6#include "sopnamsp.h"
7#include "machdefs.h"
8#include <unistd.h>
9#include <stdexcept>
10#include <iostream>
11#include <stdio.h>
12#include <stdlib.h>
13#include "skymapinit.h"
14#include "skymap.h"
15#include "fitsspherehealpix.h"
16
17/*!
18 \ingroup PrgMap
19 \file extrap2sph.cc
20 \brief \b extrap2sph: Fill holes in a sphere of datas by using
21 an other sphere of datas.
22 A mask to define the place to be tested in the sphere might be given.
23 \verbatim
24csh> extrap2sph -h
25extrap2sph [-m valmin -M valmax -r rvalmin -R rvalmax]
26 [-w sphinw.fits] sphin.fits sphred.fits sphout.fits
27 -w sphinw.fits : input sphere weight, if sphinw_value<=0. (def=NULL)
28 if sphinw_value<=0. pixel has not to be filled
29 -m minval : min value to identify EMPTY pixel of sphin (def=no_test)
30 -M maxval : max value to identify EMPTY pixel of sphin (def=no_test)
31 condition for EMPTY pixel is (minval<=val<=maxval)
32 -n : negate the previous condition, condition for EMPTY pixel
33 becomes: (val<minval || maxval<val)
34 -r rminval : min value to identify GOOD pixel of sphred (def=no_test)
35 -R rmaxval : max value to identify GOOD pixel of sphred (def=no_test)
36 condition for GOOD pixel is (minval<=val<=maxval)
37 -n : negate the previous condition, condition for GOOD pixel
38 becomes: (val<minval || maxval<val)
39 sphin.fits : input sphere
40 sphred.fits : input reducted sphere
41 sphout.fits : output sphere
42 \endverbatim
43*/
44
45void usage();
46void usage()
47{
48cout<<"extrap2sph [-m valmin -M valmax -r rvalmin -R rvalmax]"<<endl
49 <<" [-w sphinw.fits] sphin.fits sphred.fits sphout.fits"<<endl
50 <<" -w sphinw.fits : input sphere weight, if sphinw_value<=0. (def=NULL)"<<endl
51 <<" if sphinw_value<=0. pixel has not to be filled"<<endl
52 <<" -m minval : min value to identify EMPTY pixel of sphin (def=no_test)"<<endl
53 <<" -M maxval : max value to identify EMPTY pixel of sphin (def=no_test)"<<endl
54 <<" condition for EMPTY pixel is (minval<=val<=maxval)"<<endl
55 <<" -n : negate the previous condition, condition for EMPTY pixel"<<endl
56 <<" becomes: (val<minval || maxval<val)"<<endl
57 <<" -r rminval : min value to identify GOOD pixel of sphred (def=no_test)"<<endl
58 <<" -R rmaxval : max value to identify GOOD pixel of sphred (def=no_test)"<<endl
59 <<" condition for GOOD pixel is (minval<=val<=maxval)"<<endl
60 <<" -n : negate the previous condition, condition for GOOD pixel"<<endl
61 <<" becomes: (val<minval || maxval<val)"<<endl
62 <<" sphin.fits : input sphere"<<endl
63 <<" sphred.fits : input reducted sphere"<<endl
64 <<" sphout.fits : output sphere"<<endl;
65}
66
67int main(int narg, char* arg[])
68{
69bool tstmin=false, tstmax=false, neg=false;
70bool rtstmin=false, rtstmax=false, rneg=false;
71double valmin=0., valmax=0., rvalmin=0., rvalmax=0.;
72char * fsphinw = NULL;
73string dum;
74int c;
75while((c = getopt(narg,arg,"hnNm:M:r:R:w:")) != -1) {
76 switch (c) {
77 case 'n' :
78 neg = true;
79 break;
80 case 'N' :
81 rneg = true;
82 break;
83 case 'm' :
84 sscanf(optarg,"%lf",&valmin);
85 tstmin=true;
86 break;
87 case 'M' :
88 sscanf(optarg,"%lf",&valmax);
89 tstmax=true;
90 break;
91 case 'r' :
92 sscanf(optarg,"%lf",&rvalmin);
93 rtstmin=true;
94 break;
95 case 'R' :
96 sscanf(optarg,"%lf",&rvalmax);
97 rtstmax=true;
98 break;
99 case 'w' :
100 fsphinw = optarg;
101 break;
102 case 'h' :
103 default:
104 usage(); exit(1);
105 }
106}
107
108if(optind+2>=narg) {usage(); exit(1);}
109char * fsphin = arg[optind];
110char * fsphred = arg[optind+1];
111char * fsphout = arg[optind+2];
112
113cout<<"Input Sphere : "<<fsphin<<endl
114 <<"Input Weight Sphere : "<<fsphinw<<endl
115 <<"Input Reducted Sphere : "<<fsphred<<endl
116 <<"Output Sphere : "<<fsphout<<endl;
117if(neg) dum = ".NOT."; else dum="";
118cout<<"- Sphere - test min("<<tstmin<<") : "<<valmin<<endl
119 <<" test max("<<tstmax<<") : "<<valmax<<endl
120 <<" negate("<<neg<<")"<<endl
121 <<" - Condition for EMPTY pixel in Sphere is :"<<endl
122 <<" "<<dum<<"( "<<valmin<<" <= V <= "<<valmax<<" )"<<endl;
123if(rneg) dum = ".NOT."; else dum="";
124cout<<"- Reducted Sphere - test min("<<rtstmin<<") : "<<rvalmin<<endl
125 <<" test max("<<rtstmax<<") : "<<rvalmax<<endl
126 <<" negate("<<rneg<<")"<<endl
127 <<" - Condition for GOOD pixel in Reducted Sphere is :"<<endl
128 <<" "<<dum<<"( "<<rvalmin<<" <= V <= "<<rvalmax<<" )"<<endl;
129
130// Lecture des spheres
131SphereHEALPix<r_8> sphin;
132{FitsInFile sfits(fsphin); sfits >> sphin;}
133int nlat = sphin.SizeIndex();
134cout<<"Opening Input Sphere :"<<endl
135 <<" Type of map : "<<sphin.TypeOfMap()<<endl
136 <<" Number of pixels : "<<sphin.NbPixels()<<endl
137 <<" Nlat : "<<sphin.SizeIndex()<<endl;
138
139SphereHEALPix<r_8> sphinw;
140if(fsphinw) {
141 FitsInFile sfits(fsphinw);
142 sfits >> sphinw;
143 cout<<"Opening Input Weight Sphere :"<<endl
144 <<" Type of map : "<<sphinw.TypeOfMap()<<endl
145 <<" Number of pixels : "<<sphinw.NbPixels()<<endl
146 <<" Nlat : "<<sphinw.SizeIndex()<<endl;
147 if(sphinw.SizeIndex()!=nlat) {
148 cout<<"Incompatible sphin sphinw"<<endl;
149 exit(2);
150 }
151}
152
153SphereHEALPix<r_8> sphred;
154{FitsInFile sfits(fsphred); sfits >> sphred;}
155cout<<"Opening Input Reducted Sphere :"<<endl
156 <<" Type of map : "<<sphred.TypeOfMap()<<endl
157 <<" Number of pixels : "<<sphred.NbPixels()<<endl
158 <<" Nlat : "<<sphred.SizeIndex()<<endl;
159
160// Filling hole for Output Sphere
161cout<<"...Filling hole for Output Sphere"<<endl;
162uint_4 n=0, n0=0;
163for(int_4 i=0;i<sphin.NbPixels();i++) {
164 bool skp;
165 if(fsphinw) if(sphinw(i)<=0.) continue; // Pixel out of acceptance!
166
167 // Test if pixel of Sphere has to be extrapolated
168 skp = (tstmin || tstmax) ? neg : false;
169 if((tstmin && sphin(i)<valmin) || (tstmax && sphin(i)>valmax)) skp = !neg;
170 if(skp) continue; // Do nothing
171
172 double theta,phi;
173 sphin.PixThetaPhi(i,theta,phi);
174 int_4 ir = sphred.PixIndexSph(theta,phi);
175
176 // Test if pixel of Reducted Sphere is good
177 skp = (rtstmin || rtstmax) ? rneg : false;
178 if((rtstmin && sphred(i)<rvalmin) || (rtstmax && sphred(i)>rvalmax)) skp = !rneg;
179 if(skp) continue; // Do nothing
180
181 sphin(i) = sphred(ir);
182 n++; if(sphred(ir)!=0.) n0++;
183}
184cout<<" Number of pixels filled "
185 <<n<<" (not null values "<<n0<<")"<<endl;
186
187// Ecriture de la sphere
188{
189dum = "rm -f "; dum += fsphout; system(dum.c_str());
190FitsOutFile sfits(fsphout, FitsFile::clear);
191cout<<"Writing Output Sphere Fits file"<<endl;
192sfits<<sphin;
193}
194
195exit(0);
196}
Note: See TracBrowser for help on using the repository browser.