Changeset 3830 in Sophya for trunk/Cosmo/RadioBeam/fgndsub.cc
- Timestamp:
- Aug 4, 2010, 1:59:10 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Cosmo/RadioBeam/fgndsub.cc
r3789 r3830 9 9 #include "cubedef.h" 10 10 #include "matharr.h" 11 #include "poly.h" 11 12 12 13 #include "ctimer.h" … … 90 91 91 92 /* --Methode-- */ 92 TArray< TF > ForegroundCleaner::extractLSSCube (TArray< TF >& synctemp, TArray< TF >& specidx)93 { 94 Timer tm("ForegroundCleaner::extractLSSCube ");93 TArray< TF > ForegroundCleaner::extractLSSCubeP1(TArray< TF >& synctemp, TArray< TF >& specidx) 94 { 95 Timer tm("ForegroundCleaner::extractLSSCubeP1"); 95 96 // Inputs : maplss, mapsyc, freq0, dfreq 96 97 // Outputs : synctemp, specidx (reconstructed foreground temperature and spectral index … … 130 131 bool fgnan = false; 131 132 if (!isfinite(alpha)||(!isfinite(beta))) { 132 cout << "extractLSSCube [" << i << "," << j << "]/ Not finite alpha, beta - (mapsync="133 cout << "extractLSSCubeP1[" << i << "," << j << "]/ Not finite alpha, beta - (mapsync=" 133 134 << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; 134 135 alpha=beta=-999.; … … 140 141 141 142 if ((axp1<-70.)||(axp1>70.)||(axp2<-70.)||(axp2>70.)) { 142 cout << "extractLSSCube [" << i << "," << j << "] BAD alpha=" << alpha143 cout << "extractLSSCubeP1[" << i << "," << j << "] BAD alpha=" << alpha 143 144 << " beta=" << beta << " T0=" << T0 << " - (mapsync=" 144 145 << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; … … 147 148 } 148 149 if ((i%imodprt==0)&&(j%jmodprt==0)) 149 cout << "extractLSSCube [" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha150 cout << "extractLSSCubeP1[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha 150 151 << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; 151 152 synctemp(i,j) = T0; … … 161 162 } 162 163 } 163 cout << " ForegroundCleaner::extractLSSCube () - NbNan alpha/beta=" << nbinfini << " NbBAD =" << nbbad << endl;164 cout << " ForegroundCleaner::extractLSSCubeP1() - NbNan alpha/beta=" << nbinfini << " NbBAD =" << nbbad << endl; 164 165 return omap; 165 166 } 166 167 168 /* 169 static inline val_polyn2(double alpha, double beta, double gamma, double x) 170 { 171 return (beta+alpha*x+gamma*x*x); 172 } 173 */ 174 175 /* --Methode-- */ 176 TArray< TF > ForegroundCleaner::extractLSSCubeP2(TArray< TF >& synctemp, TArray< TF >& specidx) 177 { 178 Timer tm("ForegroundCleaner::extractLSSCubeP2"); 179 // Inputs : maplss, mapsyc, freq0, dfreq 180 // Outputs : synctemp, specidx (reconstructed foreground temperature and spectral index 181 // Return_Array : foreground subtracted LSS signal 182 sa_size_t sz[5]; sz[0]=skycube_.SizeX(); sz[1]=skycube_.SizeY(); 183 synctemp.SetSize(2, sz); 184 specidx.SetSize(2, sz); 185 TArray<r_4> omap; 186 omap.SetSize(skycube_, true); 187 Vector vlnf(skycube_.SizeZ()); 188 Vector vlnT(skycube_.SizeZ()); 189 int nprt = 0; 190 // double freq0 : Frequence premier index en k (MHz) 191 // double dfreq : // largeur en frequence de chaque plan (Mhz) 192 for(sa_size_t k=0; k<skycube_.SizeZ(); k++) 193 vlnf(k)=log((double)k*dfreq_+freq0_); 194 vlnf -= vlnf(0); 195 // cout << " DBG*extractLSSCubeP2 vlnf(0)=" << vlnf(0) << " vlnf(1)=" << vlnf(1) 196 // << "vlnf(last)=" << vlnf(vlnf.Size()-1) << endl; 197 sa_size_t nbinfini=0; 198 sa_size_t nbbad=0; 199 sa_size_t imodprt=skycube_.SizeX()/6; 200 sa_size_t jmodprt=skycube_.SizeY()/6; 201 for(sa_size_t i=0; i<skycube_.SizeX(); i++) 202 for(sa_size_t j=0; j<skycube_.SizeY(); j++) { 203 vlnT = -12.; 204 Poly polyn; 205 for(sa_size_t k=0; k<skycube_.SizeZ(); k++) { 206 double lnf = vlnf(k); 207 double ttot=(r_8)(skycube_(i,j,k)); 208 if (ttot < 1.e-5) continue; 209 vlnT(k)=log(ttot); 210 } 211 polyn.Fit(vlnf,vlnT,2); 212 double beta = polyn[0]; 213 double alpha = polyn[1]; 214 double gamma = polyn[2]; 215 double T0 = exp(polyn(vlnf(0))); // exp( val_polyn2(alpha, beta, gamma, vlnf(0)) ); 216 217 bool fgnan = false; 218 if (!isfinite(alpha)||(!isfinite(beta))||(!isfinite(gamma))) { 219 cout << "extractLSSCubeP2[" << i << "," << j << "]/ Not finite alpha, beta - (mapsync=" 220 << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; 221 alpha=beta=gamma=-999.; 222 fgnan = true; nbinfini++; 223 } 224 else { 225 double axp1 = polyn(vlnf(0)); 226 double axp2 = polyn(vlnf(vlnf.Size()-1)); 227 228 if ((axp1<-70.)||(axp1>70.)||(axp2<-70.)||(axp2>70.)) { 229 cout << "extractLSSCubeP2[" << i << "," << j << "] BAD alpha=" << alpha 230 // << " beta=" << beta << " gamma=" << gamma << " T0=" << T0 << " axp1=" << axp1 << " axp2=" << axp2 231 << " beta=" << beta << " gamma=" << gamma << " T0=" << T0 << " - (mapsync=" << skycube_(i,j,0) 232 << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; 233 fgnan = true; nbbad++; 234 } 235 } 236 if ((i%imodprt==0)&&(j%jmodprt==0)) 237 cout << "extractLSSCubeP2[" << i << "," << j << "]: T0=" << T0 << " alpha=" << alpha << " gamma=" << gamma 238 << " (mapsync=" << skycube_(i,j,0) << " ... " << skycube_(i,j,skycube_.SizeZ()-1) << ")" << endl; 239 synctemp(i,j) = T0; 240 specidx(i,j) = alpha; 241 if (fgnan) { 242 for(sa_size_t k=0; k<skycube_.SizeZ(); k++) omap(i,j,k) = 0.; 243 } 244 else { 245 for(sa_size_t k=0; k<skycube_.SizeZ(); k++) { 246 r_4 fittedtemp = (r_4)( exp(polyn(vlnf(k))) ); 247 omap(i,j,k) = skycube_(i,j,k)-fittedtemp; 248 } 249 } 250 } 251 cout << " ForegroundCleaner::extractLSSCubeP2() - NbNan alpha/beta=" << nbinfini << " NbBAD =" << nbbad << endl; 252 return omap; 253 } 254
Note:
See TracChangeset
for help on using the changeset viewer.