IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 31333


Ignore:
Timestamp:
Apr 21, 2011, 10:59:14 AM (15 years ago)
Author:
bills
Message:

optionally use a separate list of stars with different magnitude range for grid search. This is used to
work around the bright star astrometry problem that fouls up the STS astrometry.

Location:
trunk/psastro/src
Files:
4 edited

Legend:

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

    r23989 r31333  
    161161                    psastroPlotRawstars (rawstars, fpa, chip, recipe);
    162162                }
     163
     164                // Next if we are using a different set of stars for grid search fill out their pmAstromObjs
     165                psArray *grid_rawstars = psMetadataLookupPtr (NULL, readout->analysis, "PSASTRO.GRID.RAWSTARS");
     166                if (grid_rawstars == NULL || grid_rawstars == rawstars) { continue; }
     167
     168                for (int i = 0; i < grid_rawstars->n; i++) {
     169                    pmAstromObj *raw = grid_rawstars->data[i];
     170
     171                    psPlaneTransformApply (raw->FP, chip->toFPA, raw->chip);
     172                    psPlaneTransformApply (raw->TP, fpa->toTPA, raw->FP);
     173                    psDeproject (raw->sky, raw->TP, fpa->toSky);
     174
     175                    // rationalize ra to sky range centered on boresite
     176                    while (raw->sky->r < RAminSky) raw->sky->r += 2.0*M_PI;
     177                    while (raw->sky->r > RAmaxSky) raw->sky->r -= 2.0*M_PI;
     178
     179                    RAmin = PS_MIN (raw->sky->r, RAmin);
     180                    RAmax = PS_MAX (raw->sky->r, RAmax);
     181
     182                    DECmin = PS_MIN (raw->sky->d, DECmin);
     183                    DECmax = PS_MAX (raw->sky->d, DECmax);
     184                }
     185                // XXX: should we plot grid_rawstars?
    163186            }
    164187        }
  • trunk/psastro/src/psastroChipAstrom.c

    r27639 r31333  
    6060
    6161                // select the raw objects for this readout
     62                psArray *gridrawstars = psMetadataLookupPtr (&status, readout->analysis, "PSASTRO.GRID.RAWSTARS.SUBSET");
     63                if (gridrawstars == NULL) {
     64                    gridrawstars = rawstars;
     65                } else {
     66                    // the absolute minimum number of stars is 4 (for order = 1)
     67                    if (gridrawstars->n < 4) {
     68                        readout->data_exists = false;
     69                        psLogMsg ("psastro", 3, "insufficient gird rawstars (%ld)", gridrawstars->n);
     70                        continue;
     71                    }
     72                }
     73
    6274                psArray *refstars = psMetadataLookupPtr (&status, readout->analysis, "PSASTRO.REFSTARS.SUBSET");
    6375                if (refstars == NULL) { continue; }
     
    8092
    8193                // XXX update the header with info to reflect the failure
    82                 if (!psastroOneChipGrid (fpa, chip, refstars, rawstars, recipe, updates)) {
     94                if (!psastroOneChipGrid (fpa, chip, refstars, gridrawstars, recipe, updates)) {
    8395                    readout->data_exists = false;
    8496                    psLogMsg ("psastro", 3, "failed to find a solution\n");
  • trunk/psastro/src/psastroConvert.c

    r31161 r31333  
    1414// leak free 2006.04.27
    1515
     16static psArray * chooseStars(psArray *inStars, char *listName, psArray *sources, psVector *index, int nMax, float iMagMin, float iMagMax, pmSourceMode skip);
     17
    1618bool psastroConvertFPA (pmFPA *fpa, psMetadata *recipe) {
    1719
     
    8789    }
    8890
     91    psArray *rawStars = chooseStars(inStars, "", sources, index, PS_MIN(nMax, inStars->n), iMagMin, iMagMax, skip);
     92    psMetadataAdd (readout->analysis, PS_LIST_TAIL, "PSASTRO.RAWSTARS", PS_DATA_ARRAY, "astrometry objects", rawStars);
     93
     94    bool gridSearch = psMetadataLookupBool (&status, recipe, "PSASTRO.GRID.SEARCH");
     95    if (gridSearch) {
     96        // See if different magnitude limits have been specified for grid search. If so, create a separate list of stars to use.
     97        float iGridMagMax = psMetadataLookupF32 (&status, recipe, "PSASTRO.GRID.MAX.INST.MAG.RAW");
     98        float iGridMagMin = psMetadataLookupF32 (&status, recipe, "PSASTRO.GRID.MIN.INST.MAG.RAW");
     99        int   nMaxGrid = psMetadataLookupS32 (&status, recipe, "PSASTRO.GRID.NRAW.MAX");
     100   
     101        // XXX Should we check PSASTRO.GRID.NRAW.MAX != PSASTRO.MAX.NRAW as well? It usually is smaller so that would cause
     102        // us to always create a separate list. So I won't check.
     103
     104        if ((iGridMagMax != iMagMax) || (iGridMagMin != iMagMin)) {
     105            psArray *gridStars = chooseStars(inStars, "grid search ", sources, index, PS_MIN(nMaxGrid, inStars->n), iGridMagMin, iGridMagMax, skip);
     106            psMetadataAdd (readout->analysis, PS_LIST_TAIL, "PSASTRO.GRID.RAWSTARS", PS_DATA_ARRAY, "astrometry objects for grid search", gridStars);
     107            psFree(gridStars);
     108        }
     109    }
     110
     111    psFree (index);
     112    psFree (inStars);
     113    psFree (rawStars);
     114
     115    return true;
     116}
     117
     118
     119psArray * chooseStars(psArray *inStars, char *listName, psArray *sources, psVector *index, int nMax, float iMagMin, float iMagMax, pmSourceMode skip) {
    89120    // choose the first nMax sources
    90121    int j = 0;
    91     psArray *rawStars = psArrayAlloc (PS_MIN (nMax, inStars->n));
     122    psArray *rawStars = psArrayAlloc(nMax);
    92123
    93124    float mMin = +100.0;
     
    128159    rawStars->n = j;
    129160
    130     psMetadataAdd (readout->analysis, PS_LIST_TAIL, "PSASTRO.RAWSTARS", PS_DATA_ARRAY, "astrometry objects", rawStars);
    131 
    132     psLogMsg ("psastro", 4, "loaded %ld sources, using %ld of %ld good sources (inst mag: %f to %f)\n", sources->n, rawStars->n, inStars->n, mMin, mMax);
     161    psLogMsg ("psastro", 4, "loaded %ld %ssources, using %ld of %ld good sources (inst mag: %f to %f)\n", sources->n, listName, rawStars->n, inStars->n, mMin, mMax);
    133162    psLogMsg ("psastro", 4, "skip reasons: mode: %d, faint: %d, bright: %d, inf: %d\n", nModeSkip, nFaintSkip, nBrightSkip, nInfSkip);
    134163
    135     psFree (index);
    136     psFree (inStars);
    137     psFree (rawStars);
    138 
    139     return true;
     164    return rawStars;
    140165}
    141166
  • trunk/psastro/src/psastroRemoveClumps.c

    r26275 r31333  
    6161                psMetadataAdd (readout->analysis, PS_LIST_TAIL, "PSASTRO.RAWSTARS.SUBSET", PS_DATA_ARRAY, "astrometry objects", subset);
    6262                psFree (subset);
     63
     64                psArray *gridstars = psMetadataLookupPtr(&status, readout->analysis, "PSASTRO.GRID.RAWSTARS");
     65                if ((gridstars == rawstars) || (gridstars == NULL)) { continue; }
     66
     67                psArray *gridstars_subset = psastroRemoveClumpsIterate(gridstars, 150, 3);
     68                psMetadataAdd (readout->analysis, PS_LIST_TAIL, "PSASTRO.GRID.RAWSTARS.SUBSET", PS_DATA_ARRAY, "astrometry objects", gridstars_subset);
     69                psFree (gridstars_subset);
    6370            }
    6471        }
Note: See TracChangeset for help on using the changeset viewer.