IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 42289 for trunk/psastro


Ignore:
Timestamp:
Sep 23, 2022, 5:57:17 AM (4 years ago)
Author:
eugene
Message:

psastroUpdateChiptoFPA can fail on the inversion leaving behind a NULL chip->fromFPA. I have added a warning message to the log in psastroUpdateChiptoFPA. In psastroOneChipFit and in psastroMosaicOneChip, I add this condition ( fromFPA is NULL ) to the failure conditions and set bad chip quality. In psastroAstromGuessCheck, the NULL was making the loop skip the entry in the list of corner vectors making this comparison invalid ( mismatch between corners ) . The code now warns on NULL fromFPA and the failed chip is handled like other failed chips. Comments added to psastroOneChipGrid.c

Location:
trunk/psastro/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/psastro/src/psastroAstromGuess.c

    r41895 r42289  
    320320        if (!chip->process || !chip->file_exists || !chip->data_exists) { continue; }
    321321
    322         if (!chip->toFPA || !chip->fromFPA) {
     322        // if a chip fails during the calibration, the associated readout->data_exists
     323        // gets set to false.  This may be the wrong solution, but it does not break this
     324        // analysis here.  Note this is not the chip->data_exists field tested above.
     325        // chip->data_exists is only false if the chip data is missing.
     326
     327        // chip->fromFPA can be NULL if the inversion fails, but I'm not sure
     328        // chip->toFPA can be NULL unless it was not in the original model
     329        if (!chip->toFPA) {
    323330          char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
    324331          fprintf (stderr, "no astrom model for %s, skipping\n", name);
    325332          continue;
    326333        }
    327 
    328         // XXX we are currently inconsistent with marking the good vs the bad data
    329         // psastroChipAstrom sets data_exists to false if the fit is bad.  this is
    330         // probably wrong since it implies there is no data!
     334        if (!chip->fromFPA) {
     335          char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
     336          fprintf (stderr, "inversion faiulre for %s (%d), will be skipped\n", name, view->chip);
     337        }
    331338
    332339        // skip chips for which the astrometry failed (NASTRO == 0)
     
    350357        float astError = psMetadataLookupF32 (&status, updates, "CERROR");
    351358        if (fabs(astError) < 1e-6) goto skip_chip;
     359
     360        // XXX EAM 2022.09.22 : a more robust analysis would put the corner points
     361        // on the chip metadata so we can be certain the old and new corner values
     362        // are correctly matched.
    352363
    353364        psPlane ptCH, ptFP, ptTP;
  • trunk/psastro/src/psastroMosaicOneChip.c

    r41895 r42289  
    148148    if (order == 1) { minNstar = PS_MAX ( 8, minNstar); }
    149149
     150    // determine fromFPA transformation and apply new transformation to raw & ref stars
     151    psastroUpdateChipToFPA (fpa, chip);
     152
    150153    bool validSolution = true;
    151154
     
    162165    if (astNstar < minNstar) {
    163166        psLogMsg("psastro", PS_LOG_INFO, "solution uses too few stars: %d < %d", astNstar, minNstar);
     167        validSolution = false;
     168    }
     169    if (!chip->fromFPA) {
     170        psLogMsg("psastro", PS_LOG_INFO, "toFPA/fromFPA inversion failure");
    164171        validSolution = false;
    165172    }
     
    189196    psMetadataAddF32 (updates, PS_LIST_TAIL, "AST_MRY",   PS_META_REPLACE, "mosaic astrometry Y 10-90 percentile (arcsec)", results->dYrange * plateScale);
    190197
    191     // determine fromFPA transformation and apply new transformation to raw & ref stars
    192     psastroUpdateChipToFPA (fpa, chip);
    193 
    194     //plot results
     198    // plot results
    195199    pmAstromVisualPlotMosaicOneChip(rawstars, refstars, match, recipe);
    196200
  • trunk/psastro/src/psastroOneChipFit.c

    r41895 r42289  
    217217        validSolution = false;
    218218    }
     219    if (!chip->fromFPA) {
     220        psLogMsg("psastro", PS_LOG_INFO, "toFPA/fromFPA inversion failure");
     221        validSolution = false;
     222    }
    219223
    220224    // DVO expects NASTRO = 0 if we fail to find a solution
  • trunk/psastro/src/psastroOneChipGrid.c

    r42257 r42289  
    8484    // adjust the chip.toFPA terms only
    8585    pmAstromGridApply (chip->toFPA, stats);
    86     psastroUpdateChipToFPA (fpa, chip); // updates PSASTRO.RAWSTARS and PSASTRO.REFSTARS
     86    psastroUpdateChipToFPA (fpa, chip); // updates PSASTRO.RAWSTARS and PSASTRO.REFSTARS (see note below)
    8787    psFree (gridStats);
    8888    psFree (rawGridStars);
     
    9292    return true;
    9393}
     94
     95/* if psastroUpdateChiptoFPA fails to invert the toFPA transformation,
     96   the ref->chip coordinates will not be set.  This is not a problem
     97   at this stage since they are not used in the calculation.  Later
     98   passes can still yield a valid solution.
     99*/
  • trunk/psastro/src/psastroUtils.c

    r41895 r42289  
    109109
    110110    psRegion *region = pmChipPixels (chip);
    111 
    112111    psFree (chip->fromFPA);
    113112    chip->fromFPA = psPlaneTransformInvert (NULL, chip->toFPA, *region, 50, 4);
    114113    psFree (region);
     114
     115    // XXX EAM 2022.09.22 : for a specific case, psPlaneTransformInvert fails.
     116    // This probably means the solution was poor in any case. 
     117    // Some options:
     118    // 1) skip the chip in psastroAstromGuessCheck (supply bad corners)
     119    // 2) mark this chip as bad (return an error here and trap in psastroMosaicOneChip)
     120    // 3) warn of the failure:
     121    if (!chip->fromFPA) {
     122        char *name = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
     123        psLogMsg ("psastro", PS_LOG_INFO, "WARNING: failure to invert toFPA for %s", name);
     124    }
    115125
    116126    // loop over cells in this chip
     
    150160                    pmAstromObj *ref = refstars->data[i];
    151161                    psPlaneTransformApply (ref->chip, chip->fromFPA, ref->FP);
     162                    // if chip->fromFPA is NULL (non-invertable), the action is skipped
    152163                }
    153164            }
Note: See TracChangeset for help on using the changeset viewer.