IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 41877


Ignore:
Timestamp:
Nov 3, 2021, 11:52:26 AM (5 years ago)
Author:
eugene
Message:

improved comments; add CERSTD to output stats and header; add good/bad tests based on PSASTRO.MAX.STDEV, PSASTRO.MOSAIC.MAX.STDEV.Nn; add NASTUSED field to track actual number of stars used for astrometry in bad cases (when NASTRO is forced to 0)

Location:
branches/eam_branches
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-dev-20210817/ippconfig/gpc1/psastro.config

    r41750 r41877  
    8282PSASTRO.MOSAIC.UNIQ.ITER      S32      3  # for iterations >= N, require a single match per reference
    8383
    84 PSASTRO.MOSAIC.MAX.ERROR.N0 F32    0.00 # max allow error for valid solution (arcsec)
    85 PSASTRO.MOSAIC.MAX.ERROR.N1 F32    0.00 # max allow error for valid solution (arcsec)
    86 PSASTRO.MOSAIC.MAX.ERROR.N2 F32    0.00 # max allow error for valid solution (arcsec)
    87 PSASTRO.MOSAIC.MAX.ERROR.N3 F32    0.00 # max allow error for valid solution (arcsec)
    88 PSASTRO.MOSAIC.MAX.ERROR.N4 F32    0.00 # max allow error for valid solution (arcsec)
    89 PSASTRO.MOSAIC.MAX.ERROR.N5 F32    0.30 # max allow error for valid solution (arcsec)
     84PSASTRO.MOSAIC.MAX.ERROR.N0 F32    0.00 # max allowed error for valid solution (arcsec)
     85PSASTRO.MOSAIC.MAX.ERROR.N1 F32    0.00 # max allowed error for valid solution (arcsec)
     86PSASTRO.MOSAIC.MAX.ERROR.N2 F32    0.00 # max allowed error for valid solution (arcsec)
     87PSASTRO.MOSAIC.MAX.ERROR.N3 F32    0.00 # max allowed error for valid solution (arcsec)
     88PSASTRO.MOSAIC.MAX.ERROR.N4 F32    0.00 # max allowed error for valid solution (arcsec)
     89PSASTRO.MOSAIC.MAX.ERROR.N5 F32    0.30 # max allowed error for valid solution (arcsec)
     90
     91PSASTRO.MOSAIC.MAX.STDEV.N0 F32    0.00 # max allowed stdev for valid solution (arcsec)
     92PSASTRO.MOSAIC.MAX.STDEV.N1 F32    0.00 # max allowed stdev for valid solution (arcsec)
     93PSASTRO.MOSAIC.MAX.STDEV.N2 F32    0.00 # max allowed stdev for valid solution (arcsec)
     94PSASTRO.MOSAIC.MAX.STDEV.N3 F32    0.00 # max allowed stdev for valid solution (arcsec)
     95PSASTRO.MOSAIC.MAX.STDEV.N4 F32    0.00 # max allowed stdev for valid solution (arcsec)
     96PSASTRO.MOSAIC.MAX.STDEV.N5 F32    0.00 # max allowed stdev for valid solution (arcsec)
    9097
    9198# mosaic radius match in pixels (do these make sense?)
  • branches/eam_branches/ipp-dev-20210817/ippconfig/recipes/psastro.config

    r41554 r41877  
    9191PSASTRO.CHIP.NSIGMA    F32      3  # fit clipping sigmas
    9292
    93 PSASTRO.MAX.ERROR      F32      1.5 # max allow error for valid solution (UNITS?)
     93PSASTRO.MAX.ERROR      F32      1.5 # max allowed error for valid solution (arcsec)
     94PSASTRO.MAX.STDEV      F32      1.0 # max allowed stdev for valid solution (arcsec)
    9495PSASTRO.MIN.NSTAR      S32      3   # min fitted stars in solution
    9596PSASTRO.MAX.NSTAR      S32      300   # max fitted stars in solution
     
    135136PSASTRO.MOSAIC.CHIP.NSIGMA    F32      3  # fit clipping sigmas
    136137
    137 PSASTRO.MOSAIC.MAX.ERROR.N0   F32      1.5 # max allow error for valid solution (UNITS?)
    138 PSASTRO.MOSAIC.MAX.ERROR.N1   F32      1.5 # max allow error for valid solution (UNITS?)
    139 PSASTRO.MOSAIC.MAX.ERROR.N2   F32      1.5 # max allow error for valid solution (UNITS?)
    140 PSASTRO.MOSAIC.MAX.ERROR.N3   F32      1.5 # max allow error for valid solution (UNITS?)
    141 PSASTRO.MOSAIC.MAX.ERROR.N4   F32      1.5 # max allow error for valid solution (UNITS?)
    142 PSASTRO.MOSAIC.MAX.ERROR.N5   F32      1.5 # max allow error for valid solution (UNITS?)
     138PSASTRO.MOSAIC.MAX.ERROR.N0   F32      1.5 # max allowed error for valid solution (arcsec)
     139PSASTRO.MOSAIC.MAX.ERROR.N1   F32      1.5 # max allowed error for valid solution (arcsec)
     140PSASTRO.MOSAIC.MAX.ERROR.N2   F32      1.5 # max allowed error for valid solution (arcsec)
     141PSASTRO.MOSAIC.MAX.ERROR.N3   F32      1.5 # max allowed error for valid solution (arcsec)
     142PSASTRO.MOSAIC.MAX.ERROR.N4   F32      1.5 # max allowed error for valid solution (arcsec)
     143PSASTRO.MOSAIC.MAX.ERROR.N5   F32      1.5 # max allowed error for valid solution (arcsec)
     144
     145PSASTRO.MOSAIC.MAX.STDEV.N0   F32      1.5 # max allowed stdev for valid solution (arcsec)
     146PSASTRO.MOSAIC.MAX.STDEV.N1   F32      1.5 # max allowed stdev for valid solution (arcsec)
     147PSASTRO.MOSAIC.MAX.STDEV.N2   F32      1.5 # max allowed stdev for valid solution (arcsec)
     148PSASTRO.MOSAIC.MAX.STDEV.N3   F32      1.5 # max allowed stdev for valid solution (arcsec)
     149PSASTRO.MOSAIC.MAX.STDEV.N4   F32      1.5 # max allowed stdev for valid solution (arcsec)
     150PSASTRO.MOSAIC.MAX.STDEV.N5   F32      1.5 # max allowed stdev for valid solution (arcsec)
    143151
    144152# need at least this fraction of chips to pass for exposure to be considered acceptable
  • branches/eam_branches/ipp-dev-20210817/ippconfig/recipes/pswarp.config

    r41656 r41877  
    1414APPLY.PIXELNAN          BOOL    FALSE           # Apply NAN'ing of pixels underneath masks
    1515
    16 MAX.CERROR              F32     0.1             # Maximum allowed CERROR value (astrometric error in arcsec)
     16MAX.CERROR              F32     0.30            # Maximum allowed CERROR value (astrometric error in arcsec)
     17MAX.CERSTD              F32     0.15            # Maximum allowed CERSTD value (astrometric error in arcsec)
    1718
    1819NO.COMPRESS             BOOL    FALSE           # turn off image compression (if enabled)
  • branches/eam_branches/ipp-dev-20210817/ppViz/src/ppCoord/ppCoordLoop.c

    r41827 r41877  
    228228            psWarning("More than one cell present for chip %d", view->chip);
    229229        }
     230
     231        fprintf (stderr, "chip: %s\n", chipName);
    230232
    231233        // read WCS data from the corresponding header
     
    368370                src.sky.d = dec->data.F64[i];
    369371                coordSky2Chip(&src, data->radians, astromFile->fpa, chip);
     372                fprintf (stderr, "x,y: %.2f %.2f\n", src.pix.x, src.pix.y);
    370373                if ((src.pix.x < 0 || src.pix.x > numCols || src.pix.y < 0 || src.pix.y > numRows)) {
    371374                    // Not on this chip
  • branches/eam_branches/ipp-dev-20210817/psastro/src/psastroAstromGuess.c

    r41833 r41877  
    342342        if (!updates) goto skip_chip;
    343343
     344        // in psastroOneChipFit & psastroMosaicOneCihp, astrometry failures are marked with NASTRO = 0
     345        // these should be ignored when checking the overall solution
    344346        int nAstro = psMetadataLookupS32 (&status, updates, "NASTRO");
    345347        if (!nAstro) goto skip_chip;
    346348
     349        // it is not clear when astError = 0.0
    347350        float astError = psMetadataLookupF32 (&status, updates, "CERROR");
    348351        if (fabs(astError) < 1e-6) goto skip_chip;
  • branches/eam_branches/ipp-dev-20210817/psastro/src/psastroMetadataStats.c

    r41071 r41877  
    3737        psMetadataItemSupplement(&status, stats, header, "ZPT_ERR");
    3838        psMetadataItemSupplement(&status, stats, header, "CERROR");
     39        psMetadataItemSupplement(&status, stats, header, "CERSTD");
    3940        psMetadataItemSupplement(&status, stats, header, "NASTRO");
    4041        psMetadataItemSupplement(&status, stats, header, "AST_R0");
  • branches/eam_branches/ipp-dev-20210817/psastro/src/psastroMosaicOneChip.c

    r41833 r41877  
    4444
    4545    // allowed limits for valid solutions
     46    // CERROR is currently tested during the iterations, but not CERSTD
    4647    snprintf (errorWord, 64, "PSASTRO.MOSAIC.MAX.ERROR.N%d", iteration);
    47     REQUIRED_RECIPE_VALUE (float maxError, errorWord, F32, "failed to find single-chip max allowed error\n");
    48     REQUIRED_RECIPE_VALUE (int minNstar, "PSASTRO.MOSAIC.MIN.NSTAR", S32, "failed to find single-chip min allowed stars\n");
     48    snprintf (stdevWord, 64, "PSASTRO.MOSAIC.MAX.STDEV.N%d", iteration);
     49    REQUIRED_RECIPE_VALUE (float maxError,                  errorWord, F32, "failed to find single-chip max allowed error\n");
     50    REQUIRED_RECIPE_VALUE (float maxStdev,                  stdevWord, F32, "failed to find single-chip max allowed stdev\n");
     51    REQUIRED_RECIPE_VALUE (int   minNstar, "PSASTRO.MOSAIC.MIN.NSTAR", S32, "failed to find single-chip min allowed stars\n");
    4952
    5053    // set the order of the per-chip fit (higher order only if iteration > 0)
     
    146149    bool validSolution = true;
    147150
    148     // XXX should these result in errors or be handled another way?
    149     // psLogMsg ("psastro", PS_LOG_INFO, "astrometry solution: error: %f arcsec, Nstars: %d", astError, astNstar);
     151    // We have options to exclude chips on the basis of NASTRO, CERROR, CERSTD
    150152    psLogMsg ("psastro", PS_LOG_INFO, "astrometry solution: error: %f arcsec, Nstars: %d, stdev: %f arcsec", astError, astNstar, astStdev);
    151153    if ((maxError > 0) && (astError > maxError)) {
    152154        psLogMsg("psastro", PS_LOG_INFO, "residual error is too large, failed to find a solution: %f > %f", astError, maxError);
     155        validSolution = false;
     156    }
     157    if ((maxStdev > 0) && (astStdev > maxStdev)) {
     158        psLogMsg("psastro", PS_LOG_INFO, "residual stdev is too large, failed to find a solution: %f > %f", astStdev, maxStdev);
    153159        validSolution = false;
    154160    }
     
    158164    }
    159165
    160     // DVO expects NASTRO = 0 if we fail to find a solution
     166    // DVO expects NASTRO = 0 if we fail to find a solution, NASTUSED is the true number
    161167    psMetadataAddF32 (updates, PS_LIST_TAIL, "PERROR",   PS_META_REPLACE, "astrometry error (pixels)", pixError);
    162168    psMetadataAddF32 (updates, PS_LIST_TAIL, "CERROR",   PS_META_REPLACE, "astrometry error (arcsec)", astError);
     
    165171        psMetadataAddF32 (updates, PS_LIST_TAIL, "CPRECISE", PS_META_REPLACE, "astrometry precision (arcsec)", astError/sqrt(astNstar));
    166172        psMetadataAddS32 (updates, PS_LIST_TAIL, "NASTRO",   PS_META_REPLACE, "number of astrometry stars", astNstar);
     173        psMetadataAddS32 (updates, PS_LIST_TAIL, "NASTUSED", PS_META_REPLACE, "number of astrometry stars", astNstar);
    167174    } else {
    168175        psMetadataAddF32 (updates, PS_LIST_TAIL, "CPRECISE", PS_META_REPLACE, "astrometry precision (arcsec)", 0.0);
    169176        psMetadataAddS32 (updates, PS_LIST_TAIL, "NASTRO",   PS_META_REPLACE, "number of astrometry stars", 0);
     177        psMetadataAddS32 (updates, PS_LIST_TAIL, "NASTUSED", PS_META_REPLACE, "number of astrometry stars", astNstar);
    170178    }
    171179    psMetadataAddF32 (updates, PS_LIST_TAIL, "EQUINOX",  PS_META_REPLACE, "", 2000.0); // XXX this is bogus: should be defined based on equinox of refstars
  • branches/eam_branches/ipp-dev-20210817/psastro/src/psastroOneChipFit.c

    r41833 r41877  
    4040    // allowed limits for valid solutions
    4141    REQUIRED_RECIPE_VALUE (float maxError, "PSASTRO.MAX.ERROR", F32);
    42     REQUIRED_RECIPE_VALUE (int minNstar, "PSASTRO.MIN.NSTAR", S32);
     42    REQUIRED_RECIPE_VALUE (float maxStdev, "PSASTRO.MAX.STDEV", F32);
     43    REQUIRED_RECIPE_VALUE (int   minNstar, "PSASTRO.MIN.NSTAR", S32);
    4344
    4445    psArray *match = NULL;
     
    208209        validSolution = false;
    209210    }
     211    if (astStdev > maxStdev) {
     212        psLogMsg("psastro", PS_LOG_INFO, "residual stdev is too large, failed to find a solution: %f > %f", astStdev, maxStdev);
     213        validSolution = false;
     214    }
    210215    if (astNstar < minNstar) {
    211216        psLogMsg("psastro", PS_LOG_INFO, "solution uses too few stars: %d < %d", astNstar, minNstar);
     
    220225        psMetadataAddF32 (updates, PS_LIST_TAIL, "CPRECISE", PS_META_REPLACE, "astrometry precision (arcsec)", astError/sqrt(astNstar));
    221226        psMetadataAddS32 (updates, PS_LIST_TAIL, "NASTRO",   PS_META_REPLACE, "number of astrometry stars", astNstar);
     227        psMetadataAddS32 (updates, PS_LIST_TAIL, "NASTUSED", PS_META_REPLACE, "number of astrometry stars", astNstar);
    222228    } else {
    223229        psastroChipFailureHeader (updates);
     230        psMetadataAddS32 (updates, PS_LIST_TAIL, "NASTUSED", PS_META_REPLACE, "number of astrometry stars", astNstar);
    224231    }
    225232    psMetadataAddF32 (updates, PS_LIST_TAIL, "EQUINOX",  PS_META_REPLACE, "equinox of ref catalog", 2000.0); // XXX this is bogus: should be defined based on equinox of refstars
  • branches/eam_branches/ipp-dev-20210817/pswarp/src/pswarpLoadAstrometry.c

    r41526 r41877  
    9494        }
    9595    }
     96
    9697    // apply the bilevel astrometry elements to the target
    9798    if (bilevelAstrometry) {
    98       int additional_orders = 4;
    99       bool status = false;
    100       int config_additional_orders = psMetadataLookupS32(&status,config->arguments,"ADDITIONAL_WCS_ORDERS");
    101       if (status) {
    102         additional_orders = config_additional_orders;
    103       }
    104       psMetadataAddS32(astrom->fpa->analysis,PS_LIST_TAIL, "ADDITIONAL_WCS_ORDERS", PS_META_REPLACE,
    105                        "Additional orders for bilevel fit.", additional_orders);
    106      
    107        
    10899        if (!pmAstromReadBilevelMosaic(astrom->fpa, phu->header)) {
    109100            psError(psErrorCodeLast(), false, "Unable to read bilevel mosaic astrometry for skycell.");
  • branches/eam_branches/ipp-dev-20210817/pswarp/src/pswarpOptions.c

    r41526 r41877  
    104104      config_additional_orders = 0;
    105105    }
    106    
    107 
     106    pmAstrometryGetExtraOrders(config_additional_orders);
     107    // This is the number of orders that should be added to all non-linear inverse transformations
    108108   
    109109    // Set recipe values in the recipe (since we've possibly altered some)
  • branches/eam_branches/psModules.20211028/src/astrom/pmAstrometryWCS.c

    r41832 r41877  
    705705    psFree (fpa->fromTPA);
    706706    int additional_orders = pmAstrometryGetExtraOrders();  // This is the number of orders that should be added.
    707     bool status = false;
    708     int config_additional_orders = psMetadataLookupS32(&status,fpa->analysis, "ADDITIONAL_WCS_ORDERS");
    709     if (status) { // If this keyword is found, then use that number of orders instead
    710       additional_orders = config_additional_orders;
    711     }
    712707    fpa->fromTPA = psPlaneTransformInvert(NULL, fpa->toTPA, region, 50, additional_orders);
    713708    return true;
Note: See TracChangeset for help on using the changeset viewer.