IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 17, 2007, 10:17:21 AM (19 years ago)
Author:
magnier
Message:

added errors to psImageMap, NaN for unconstrained pixels in output map

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branch_20070830/psLib/src/imageops/psImageMapFit.c

    r14862 r14864  
    77 *  @author Eugene Magnier, IfA
    88 *
    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 $
    1111 *
    1212 *  Copyright 2007 Institute for Astronomy, University of Hawaii
     
    2222
    2323// XXX for testing
    24 // #include "psFits.h"
    25 // #include "psFitsImage.h"
     24#include "psFits.h"
     25#include "psFitsImage.h"
    2626
    2727#include "psAssert.h"
     
    238238    // fprintf (stderr, "Total: %f\n", Total);
    239239
    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);
    260268
    261269    if (!psMatrixGJSolveF32(A, B)) {
     
    267275    }
    268276   
     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
    269285    for (int n = 0; n < Nx; n++) {
    270286        for (int m = 0; m < Ny; m++) {
    271287            I = n + Nx * m;
    272288            map->map->data.F32[m][n] = B->data.F32[I];
     289            map->error->data.F32[m][n] = sqrt(A->data.F32[I][I]);
    273290        }
    274291    }
     
    276293    psFree (A);
    277294    psFree (B);
     295    psFree (Empty);
    278296
    279297    return true;
Note: See TracChangeset for help on using the changeset viewer.