IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 15591


Ignore:
Timestamp:
Nov 12, 2007, 11:58:17 AM (18 years ago)
Author:
Paul Price
Message:

Adding assertions to protect from SEGV. Many more required!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/astrom/pmAstrometryDistortion.c

    r15254 r15591  
    77*  @author EAM, IfA
    88*
    9 *  @version $Revision: 1.20 $ $Name: not supported by cvs2svn $
    10 *  @date $Date: 2007-10-09 19:27:04 $
     9*  @version $Revision: 1.21 $ $Name: not supported by cvs2svn $
     10*  @date $Date: 2007-11-12 21:58:17 $
    1111*
    1212*  Copyright 2006 Institute for Astronomy, University of Hawaii
     
    112112                Npts++;
    113113            }
    114            
     114
    115115            psTrace ("psModules.astrom", 4, "Npts: %d (%d,%d) : (%d - %d),(%d - %d)\n", Npts, nx, ny, Xmin, Xmax, Ymin, Ymax);
    116116
     
    171171bool pmAstromFitDistortion(pmFPA *fpa, psArray *gradients, double pixelScale)
    172172{
     173    PS_ASSERT_PTR_NON_NULL(fpa, false);
     174    PS_ASSERT_ARRAY_NON_NULL(gradients, false);
    173175
    174176    psPolynomial2D *localX = NULL;
     
    211213    for (int i = 0; i <= fpa->toTPA->x->nX; i++) {
    212214        for (int j = 0; j <= fpa->toTPA->x->nY; j++) {
    213             if ((i > 0) && (i <= fpa->toTPA->x->nX)) {
    214                 localX->coeffMask[i-1][j] = fpa->toTPA->x->coeffMask[i][j];
    215             }
    216             if ((j > 0) && (j <= fpa->toTPA->x->nY)) {
    217                 localY->coeffMask[i][j-1] = fpa->toTPA->x->coeffMask[i][j];
    218             }
     215            if ((i > 0) && (i <= fpa->toTPA->x->nX)) {
     216                localX->coeffMask[i-1][j] = fpa->toTPA->x->coeffMask[i][j];
     217            }
     218            if ((j > 0) && (j <= fpa->toTPA->x->nY)) {
     219                localY->coeffMask[i][j-1] = fpa->toTPA->x->coeffMask[i][j];
     220            }
    219221        }
    220222    }
     
    223225    if (!psVectorClipFitPolynomial2D (localX, stats, mask, 0xff, dPdL, NULL, L, M)) {
    224226        psLogMsg ("psastro", 3, "failed to fit x-dir gradient\n");
    225         psFree (localX);
    226         psFree (localY);
     227        psFree (localX);
     228        psFree (localY);
    227229        goto escape;
    228230    }
     
    230232    if (!psVectorClipFitPolynomial2D (localY, stats, mask, 0xff, dPdM, NULL, L, M)) {
    231233        psLogMsg ("psastro", 3, "failed to fit y-dir gradient\n");
    232         psFree (localX);
    233         psFree (localY);
     234        psFree (localX);
     235        psFree (localY);
    234236        goto escape;
    235237    }
     
    239241    for (int i = 1; i <= fpa->toTPA->x->nX; i++) {
    240242        if (fpa->toTPA->x->coeffMask[i][0] & PS_POLY_MASK_SET) {
    241             continue;
    242         }
    243         fpa->toTPA->x->coeff[i][0] = localX->coeff[i-1][0] / i;
     243            continue;
     244        }
     245        fpa->toTPA->x->coeff[i][0] = localX->coeff[i-1][0] / i;
    244246    }
    245247    for (int j = 1; j <= fpa->toTPA->x->nY; j++) {
    246248        if (fpa->toTPA->x->coeffMask[0][j] & PS_POLY_MASK_SET) {
    247             continue;
    248         }
    249         fpa->toTPA->x->coeff[0][j] = localY->coeff[0][j-1] / j;
     249            continue;
     250        }
     251        fpa->toTPA->x->coeff[0][j] = localY->coeff[0][j-1] / j;
    250252    }
    251253    for (int i = 1; i <= fpa->toTPA->x->nX; i++) {
    252254        for (int j = 1; j <= fpa->toTPA->x->nY; j++) {
    253255            if (fpa->toTPA->x->coeffMask[i][j] & PS_POLY_MASK_SET) {
    254                 continue;
    255             }
    256             fpa->toTPA->x->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j);
     256                continue;
     257            }
     258            fpa->toTPA->x->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j);
    257259        }
    258260    }
     
    269271    for (int i = 0; i < fpa->toTPA->y->nX; i++) {
    270272        for (int j = 0; j < fpa->toTPA->y->nY; j++) {
    271             if ((i > 0) && (i <= fpa->toTPA->y->nX)) {
    272                 localX->coeffMask[i-1][j] = fpa->toTPA->y->coeffMask[i][j];
    273             }
    274             if ((j > 0) && (j <= fpa->toTPA->y->nY)) {
    275                 localY->coeffMask[i][j-1] = fpa->toTPA->y->coeffMask[i][j];
    276             }
     273            if ((i > 0) && (i <= fpa->toTPA->y->nX)) {
     274                localX->coeffMask[i-1][j] = fpa->toTPA->y->coeffMask[i][j];
     275            }
     276            if ((j > 0) && (j <= fpa->toTPA->y->nY)) {
     277                localY->coeffMask[i][j-1] = fpa->toTPA->y->coeffMask[i][j];
     278            }
    277279        }
    278280    }
     
    286288    for (int i = 1; i <= fpa->toTPA->y->nX; i++) {
    287289        if (fpa->toTPA->y->coeffMask[i][0] & PS_POLY_MASK_SET) {
    288             continue;
    289         }
    290         fpa->toTPA->y->coeff[i][0] = localX->coeff[i-1][0] / i;
     290            continue;
     291        }
     292        fpa->toTPA->y->coeff[i][0] = localX->coeff[i-1][0] / i;
    291293    }
    292294    for (int j = 1; j <= fpa->toTPA->y->nY; j++) {
    293295        if (fpa->toTPA->y->coeffMask[0][j] & PS_POLY_MASK_SET) {
    294             continue;
    295         }
    296         fpa->toTPA->y->coeff[0][j] = localY->coeff[0][j-1] / j;
     296            continue;
     297        }
     298        fpa->toTPA->y->coeff[0][j] = localY->coeff[0][j-1] / j;
    297299    }
    298300    for (int i = 1; i <= fpa->toTPA->y->nX; i++) {
    299301        for (int j = 1; j <= fpa->toTPA->y->nY; j++) {
    300302            if (fpa->toTPA->y->coeffMask[i][j] & PS_POLY_MASK_SET) {
    301                 continue;
    302             }
    303             fpa->toTPA->y->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j);
     303                continue;
     304            }
     305            fpa->toTPA->y->coeff[i][j] = 0.5*(localX->coeff[i-1][j] / i + localY->coeff[i][j-1] / j);
    304306        }
    305307    }
     
    328330    if (fpa->fromTPA == NULL) {
    329331        psError (PS_ERR_UNKNOWN, false, "failed to invert fpa->toTPA\n");
    330         return false;
     332        return false;
    331333    }
    332334
Note: See TracChangeset for help on using the changeset viewer.