IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 37552 for trunk/psastro/src


Ignore:
Timestamp:
Nov 3, 2014, 10:48:56 PM (12 years ago)
Author:
mhuber
Message:

adding min/max mag cuts (general or by photcode) to refcat sources for zero point in camera and skycal stage. MD PV3 recipe configs

Location:
trunk/psastro/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/psastro/src/psastro.h

    r36837 r37552  
    154154
    155155bool              psastroZeroPoint (pmConfig *config);
    156 psVector         *psastroZeroPointReadoutAccum(psVector *dMag, pmReadout *readout, float exptime);
     156psVector         *psastroZeroPointReadoutAccum(psVector *dMag, pmReadout *readout, float exptime, float refminMag, float refmaxMag);
    157157bool              psastroZeroPointAnalysis (psMetadata *header, psVector *dMag, float zeropt, psMetadata *recipe);
    158158bool              psastroZeroPointFromRecipe (float *zeropt, float *exptime, float *ghostMaxMag, pmFPA *fpa, psMetadata *recipe);
     159bool              psastroZeroPointRefMagLimitFromRecipe (float *refminMag, float *refmaxMag, pmFPA *fpa, psMetadata *recipe);
    159160
    160161psStats          *psastroStatsPercentile (psVector *myVector, psMetadata *recipe);
  • trunk/psastro/src/psastroChooseRefstars.c

    r37420 r37552  
    6666    psF32 clampMagMin = psMetadataLookupF32 (&status, recipe, "REFSTAR_CLAMP_MAG_MIN");
    6767    if (!status) clampMagMin = -5.0;
    68     //MEH test
     68    //MEH adding max option as well -- really should not be hardcoded..
    6969    psF32 clampMagMax = psMetadataLookupF32 (&status, recipe, "REFSTAR_CLAMP_MAG_MAX");
    7070    if (!status) clampMagMax = 30.0;
     
    117117                        goto skip;
    118118                    }
    119                     //MEH test
     119                    //MEH option for max mag clamp also
    120120                    if (ref->Mag > clampMagMax) {
    121121                        psWarning("Skipping by clamp refstar with faint magnitude %f ra: %f dec: %f\n",
  • trunk/psastro/src/psastroZeroPoint.c

    r33643 r37552  
    2020    pmCell *cell = NULL;
    2121    pmReadout *readout = NULL;
     22    float refminMag,refmaxMag;
    2223
    2324    // select the current recipe
     
    5960    }
    6061
     62    // MEH -- RefMagLimit for ZP with photcode option (merr probably better but not an option)
     63    // -- defualt is to use general config value (no hardcode..)
     64    if (!psastroZeroPointRefMagLimitFromRecipe (&refminMag, &refmaxMag, fpa, recipe)) {
     65        psLogMsg ("psastro", PS_LOG_INFO, "failed to load ref min,maxMag data from recipe");
     66        return false;
     67    }
     68
    6169    // if we measure the zero point by exposure, accumulate the dMag values here:
    6270    psVector *dMag = NULL;
     71    // MEH -- also the number of refcat sources used
     72    int zpt_nref = 0;
    6373
    6474    float fpaZP = 0.0;                  // Average zero point
     
    8191
    8292                // calculate dMag for the matched stars
    83                 dMag = psastroZeroPointReadoutAccum (dMag, readout, exptime);
    84 
     93                //dMag = psastroZeroPointReadoutAccum (dMag, readout, exptime);
     94                // MEH -- additional limits should be available for ZP if just robust mean and w/ stack skycal
     95                dMag = psastroZeroPointReadoutAccum (dMag, readout, exptime, refminMag, refmaxMag);
    8596                if (!byExposure) {
    8697                    // calculate dMag for the matched stars just for this readout (well, chip)
    8798                    psMetadata *header = psMetadataLookupMetadata (&status, readout->analysis, "PSASTRO.HEADER");
    8899                    psastroZeroPointAnalysis (header, dMag, zeropt, recipe);
     100                    // MEH -- per readout N refcat, min/max mag  -- added here, not part of median/edge process
     101                    zpt_nref += dMag->n;
     102                    psMetadataAddS32 (header, PS_LIST_TAIL, "ZPT_NREF", PS_META_REPLACE, "N refcat sources for zero point", dMag->n);
     103                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_MIN", PS_META_REPLACE, "min refcat mag for zero point", refminMag);
     104                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_MAX", PS_META_REPLACE, "max refcat mag for zero point", refmaxMag);
    89105                    psFree (dMag);
    90106                    dMag = NULL;
     
    95111                        numZP++;
    96112                    }
     113
    97114
    98115
     
    110127        }
    111128        psastroZeroPointAnalysis (header, dMag, zeropt, recipe);
     129        //MEH -- all N refcat sources here
     130        zpt_nref = dMag->n;
    112131        psFree (dMag);
    113132        dMag = NULL;
     
    141160                    // calculate dMag for the matched stars just for this readout (well, chip)
    142161                    psMetadata *header = psMetadataLookupMetadata (&status, readout->analysis, "PSASTRO.HEADER");
    143 
    144162                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_OBS", PS_META_REPLACE, "measured zero point",  zptObs);
    145163                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_REF", PS_META_REPLACE, "reference zero point", zptRef);
    146164                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_ERR", PS_META_REPLACE, "error on zero point",  zptErr);
    147165                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_OFF", PS_META_REPLACE, "zero point offset",    zptOff);
     166                    //MEH -- per readout  N refcat, MIN/MAX for consistency
     167                    psMetadataAddS32 (header, PS_LIST_TAIL, "ZPT_NREF", PS_META_REPLACE, "N refcat sources for zero point", zpt_nref);
     168                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_MIN", PS_META_REPLACE, "min refcat mag for zero point", refminMag);
     169                    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_MAX", PS_META_REPLACE, "max refcat mag for zero point", refmaxMag);
    148170                }
    149171            }
     
    151173    }
    152174
     175    // MEH add N refcat, min/max mag to primary header
     176    psMetadata *header = psMetadataLookupMetadata (&status, fpa->analysis, "PSASTRO.HEADER");
     177    if (!header) {
     178        header = psMetadataAlloc ();
     179        psMetadataAddMetadata (fpa->analysis, PS_LIST_TAIL, "PSASTRO.HEADER",  PS_META_REPLACE, "psastro header stats", header);
     180        psFree (header);
     181    }
     182    psMetadataAddS32 (header, PS_LIST_TAIL, "ZPT_NREF", PS_META_REPLACE, "Total N refcat sources for zero point", zpt_nref);
     183    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_MIN", PS_META_REPLACE, "min refcat mag for zero point", refminMag);
     184    psMetadataAddF32 (header, PS_LIST_TAIL, "ZPT_MAX", PS_META_REPLACE, "max refcat mag for zero point", refmaxMag);
    153185
    154186    psMetadataItem *item = psMetadataLookup(fpa->concepts, "FPA.ZP");
     
    162194 * accumulate the dMag values from this readout
    163195 */
    164 psVector *psastroZeroPointReadoutAccum(psVector *dMag, pmReadout *readout, float exptime) {
     196psVector *psastroZeroPointReadoutAccum(psVector *dMag, pmReadout *readout, float exptime, float refminMag, float refmaxMag) {
    165197
    166198    bool status;
     
    191223      // XXX I should be applying the airmass term here or in psastroLoadRefstars
    192224      // (ie, ref->Mag would be a prediction for a given star.
    193       float value = ref->Mag - raw->Mag - 2.5*log10(exptime);
    194       psVectorAppend (dMag, value);
     225      // MEH -- only append if in allowed ref mag range -- may want merr but not available..
     226      if ( ref->Mag >= refminMag && ref->Mag <= refmaxMag ){
     227        float value = ref->Mag - raw->Mag - 2.5*log10(exptime);
     228        psVectorAppend (dMag, value);
     229      }
    195230    }
    196231    return dMag;
     
    490525                continue;
    491526            }
    492         }
     527            //MEH null is a pain.. so only log if set
     528            psLogMsg ("psastro", PS_LOG_INFO, "found GHOST_MAX_MAG %f",*ghostMaxMag);
     529        }
     530        //MEH what zpt is set to
     531        psLogMsg ("psastro", PS_LOG_INFO, "found ZEROPT  %f",*zeropt);
    493532        psFree (iter);
    494533        return true;
     
    497536    return false;
    498537}
     538
     539
     540
     541bool psastroZeroPointRefMagLimitFromRecipe (float *refminMag, float *refmaxMag, pmFPA *fpa, psMetadata *recipe) {
     542
     543    bool status;
     544    float tmpmin,tmpmax;
     545
     546    // MEH -- duplicate psastroZeroPointFromRecipe for ZeroPoint adding RefMag limits with photcode option for extra restrictions
     547    // must have non-photcode dependent setting -- use as default rather than a hardcoded value
     548    *refminMag = psMetadataLookupF32 (&status, recipe, "REFSTAR.ZP.MIN.MAG");
     549    //if (!status) *refminMag = -5.0;
     550    if (!status) {
     551        psLogMsg ("psastro", PS_LOG_INFO, "RefMagLimit is missing REFSTAR.ZP.MIN.MAG");
     552        return false;
     553    }
     554    *refmaxMag = psMetadataLookupF32 (&status, recipe, "REFSTAR.ZP.MAX.MAG");
     555    //if (!status) *refmaxMag = 30.0;
     556    if (!status) {
     557        psLogMsg ("psastro", PS_LOG_INFO, "RefMagLimit is missing REFSTAR.ZP.MAX.MAG");
     558        return false;
     559    }
     560
     561    // select the filter; default to any photcode and mag limit otherwise
     562    char *filter = psMetadataLookupStr (&status, fpa->concepts, "FPA.FILTERID");
     563    if (!status) ESCAPE ("RefMagLimit missing FPA.FILTER in concepts");
     564
     565    // need to select the PHOTCODE.DATA folder that matches our filter
     566    psMetadataItem *item = psMetadataLookup (recipe, "PHOTCODE.DATA");
     567    if (!item) ESCAPE ("RefMagLimit PHOTCODE.DATA folders missing");
     568    if (item->type != PS_DATA_METADATA_MULTI) ESCAPE ("RefMagLimit PHOTCODE.DATA not a multi");
     569
     570    // PHOTCODE.DATA is a multi of metadata items
     571    psListIterator *iter = psListIteratorAlloc(item->data.list, PS_LIST_HEAD, false);
     572
     573    psMetadataItem *refItem = NULL;
     574    while ((refItem = psListGetAndIncrement (iter))) {
     575        if (refItem->type != PS_DATA_METADATA) ESCAPE ("RefMagLimit PHOTCODE.DATA entry is not a metadata folder");
     576
     577        char *refFilter = psMetadataLookupStr (&status, refItem->data.md, "FILTER");
     578        if (!status) {
     579            // always seems to happen once, commented out in ZeroPoint above as well
     580            //psLogMsg ("psastro", PS_LOG_INFO, "RefMagLimit PHOTCODE.DATA recipe folder is missing FILTER");
     581            continue;
     582        }
     583
     584        // does this entry match the current filter?
     585        if (strcmp (refFilter, filter)) continue;
     586
     587        psLogMsg ("psastro", PS_LOG_DETAIL, "RefMagLimit PHOTCODE.DATA found for filter %s", filter);
     588
     589        // -- may set one or other or both -- no reason to log if found or often not
     590        tmpmin = psMetadataLookupF32 (&status, refItem->data.md, "REFSTAR.ZP.MIN.MAG");
     591        if (status) {
     592            *refminMag = tmpmin;
     593        }
     594        tmpmax = psMetadataLookupF32 (&status, refItem->data.md, "REFSTAR.ZP.MAX.MAG");
     595        if (status) {
     596            *refmaxMag = tmpmax;
     597        }
     598        // once finds filter, should free and return true but multiple groups cause issue so just go through all groups now
     599        //psFree (iter);
     600        //return true;
     601    }
     602
     603    // log out set values
     604    psLogMsg ("psastro", PS_LOG_INFO, "using REFSTAR.ZP.MIN.MAG %f",*refminMag);
     605    psLogMsg ("psastro", PS_LOG_INFO, "using REFSTAR.ZP.MAX.MAG %f",*refmaxMag);
     606
     607    psFree (iter);
     608    return true;
     609}
     610
Note: See TracChangeset for help on using the changeset viewer.