- Timestamp:
- Sep 17, 2007, 10:17:21 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branch_20070830/psLib/src/imageops/psImageMapFit.c
r14862 r14864 7 7 * @author Eugene Magnier, IfA 8 8 * 9 * @version $Revision: 1.1.2. 2$ $Name: not supported by cvs2svn $10 * @date $Date: 2007-09-17 01:14:52$9 * @version $Revision: 1.1.2.3 $ $Name: not supported by cvs2svn $ 10 * @date $Date: 2007-09-17 20:17:21 $ 11 11 * 12 12 * Copyright 2007 Institute for Astronomy, University of Hawaii … … 22 22 23 23 // XXX for testing 24 //#include "psFits.h"25 //#include "psFitsImage.h"24 #include "psFits.h" 25 #include "psFitsImage.h" 26 26 27 27 #include "psAssert.h" … … 238 238 // fprintf (stderr, "Total: %f\n", Total); 239 239 240 // write 1s in unused diagonal elements 241 // XXX for test only 242 # if (0) 243 for (int n = 0; n < Nx; n+=Nx-1) { 244 for (int m = 0; m < Ny; m++) { 245 I = n + Nx * m; 246 A->data.F32[I][I] = 1.0; 247 } 248 } 249 for (int n = 0; n < Nx; n++) { 250 for (int m = 0; m < Ny; m+=Ny-1) { 251 I = n + Nx * m; 252 A->data.F32[I][I] = 1.0; 253 } 254 } 255 # endif 256 257 // psFits *fits = psFitsOpen ("Agj.fits", "w"); 258 // psFitsWriteImage (fits, NULL, A, 0, NULL); 259 // psFitsClose (fits); 240 // test for empty diagonal elements (unconstained cells), mark, and set pivots to 1.0 241 psVector *Empty = psVectorAlloc (Nx*Ny, PS_TYPE_S8); 242 psVectorInit (Empty, 0); 243 for (int i = 0; i < Nx*Ny; i++) { 244 if (A->data.F32[i][i] == 0.0) { 245 Empty->data.S8[i] = 1; 246 for (int j = 0; j < Nx*Ny; j++) { 247 A->data.F32[i][j] = 0.0; 248 A->data.F32[j][i] = 0.0; 249 } 250 A->data.F32[i][i] = 1.0; 251 B->data.F32[i] = 0.0; 252 } 253 } 254 255 psFits *fits = psFitsOpen ("Agj.fits", "w"); 256 psFitsWriteImage (fits, NULL, A, 0, NULL); 257 psFitsClose (fits); 258 259 psImage *vector = psImageAlloc (1, B->n, PS_TYPE_F32); 260 for (int n = 0; n < B->n; n++) { 261 vector->data.F32[0][n] = B->data.F32[n]; 262 } 263 264 fits = psFitsOpen ("Bgj.fits", "w"); 265 psFitsWriteImage (fits, NULL, vector, 0, NULL); 266 psFitsClose (fits); 267 psFree (vector); 260 268 261 269 if (!psMatrixGJSolveF32(A, B)) { … … 267 275 } 268 276 277 // set bad values to NaN 278 for (int i = 0; i < Nx*Ny; i++) { 279 if (Empty->data.S8[i]) { 280 B->data.F32[i] = NAN; 281 } 282 } 283 284 269 285 for (int n = 0; n < Nx; n++) { 270 286 for (int m = 0; m < Ny; m++) { 271 287 I = n + Nx * m; 272 288 map->map->data.F32[m][n] = B->data.F32[I]; 289 map->error->data.F32[m][n] = sqrt(A->data.F32[I][I]); 273 290 } 274 291 } … … 276 293 psFree (A); 277 294 psFree (B); 295 psFree (Empty); 278 296 279 297 return true;
Note:
See TracChangeset
for help on using the changeset viewer.
