IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 36834


Ignore:
Timestamp:
Jun 7, 2014, 6:37:32 AM (12 years ago)
Author:
eugene
Message:

add Koppenhoefer correction; move pmConceptsChipNumberFromName & pmConceptsChipFromName to pmConcepts; clean up some visuals; change pmSourceIO_MatchedRefs to use PSASTRO.RAWSTARS.SUBSET, PSASTRO.REFSTARS.SUBSET instead of PSASTRO.RAWSTARS, PSASTRO.REFSTARS; modify the output fields in MATCHED_REFS; clip e0 outliers from psf model construction

Location:
trunk/psModules/src
Files:
21 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/astrom/Makefile.am

    r20801 r36834  
    1111        pmAstrometryRefstars.c \
    1212        pmAstrometryWCS.c \
    13         pmAstrometryVisual.c
     13        pmAstrometryVisual.c \
     14        pmKHcorrect.c
    1415
    1516pkginclude_HEADERS = \
     
    2122        pmAstrometryRefstars.h \
    2223        pmAstrometryWCS.h \
    23         pmAstrometryVisual.h
     24        pmAstrometryVisual.h \
     25        pmKHcorrect.h
    2426
    2527CLEANFILES = *~
  • trunk/psModules/src/astrom/pmAstrometryModel.c

    r26260 r36834  
    3939#include "pmFPAExtent.h"
    4040#include "pmFPAfileFitsIO.h"
     41#include "pmConcepts.h"
    4142#include "pmAstrometryWCS.h"
    4243#include "pmAstrometryUtils.h"
     
    452453}
    453454
    454 int pmConceptsChipNumberFromName (pmFPA *fpa, char *name) {
    455 
    456     for (int i = 0; i < fpa->chips->n; i++) {
    457         pmChip *chip = fpa->chips->data[i];
    458         if (!chip) continue;
    459         char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
    460         if (!thisone) continue;
    461         if (!strcmp (name, thisone)) return (i);
    462     }
    463     return -1;
    464 }
    465 
    466 pmChip *pmConceptsChipFromName (pmFPA *fpa, char *name) {
    467 
    468     for (int i = 0; i < fpa->chips->n; i++) {
    469         pmChip *chip = fpa->chips->data[i];
    470         if (!chip) continue;
    471         char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
    472         if (!thisone) continue;
    473         if (!strcmp (name, thisone)) return (chip);
    474     }
    475     return NULL;
    476 }
    477 
    478455// first layer converts Chip to Focal Plane
    479456bool pmAstromModelReadChips (pmFPAfile *file) {
  • trunk/psModules/src/astrom/pmAstrometryModel.h

    r18601 r36834  
    2727bool pmAstromModelWriteChips (pmFPAfile *file);
    2828
    29 int pmConceptsChipNumberFromName (pmFPA *fpa, char *name);
    30 pmChip *pmConceptsChipFromName (pmFPA *fpa, char *name);
    31 
    3229bool pmAstromModelReadForView (const pmFPAview *view, pmFPAfile *file, const pmConfig *config);
    3330bool pmAstromModelReadFPA (pmFPAfile *file);
  • trunk/psModules/src/astrom/pmAstrometryObjects.c

    r31671 r36834  
    571571    psMemSetDeallocator (stats, (psFreeFunc)pmAstromStatsFree);
    572572
    573     //    stats->center = {0, 0, 0, 0};
    574     //    stats->offset = {0, 0, 0, 0};
    575     stats->angle     = 0.0;
    576     stats->scale     = 1.0;
    577     stats->minMetric = 0.0;
    578     stats->minVar    = 0.0;
    579     stats->nMatch    = 0;
    580     stats->nTest     = 0;
    581     stats->nSigma    = 0;
     573    stats->center.x    = 0;
     574    stats->center.y    = 0;
     575    stats->center.xErr = 0;
     576    stats->center.yErr = 0;
     577
     578    stats->offset.x    = 0;
     579    stats->offset.y    = 0;
     580    stats->offset.xErr = 0;
     581    stats->offset.yErr = 0;
     582
     583    stats->angle       = 0.0;
     584    stats->scale       = 1.0;
     585    stats->minMetric   = 0.0;
     586    stats->minVar      = 0.0;
     587    stats->nMatch      = 0;
     588    stats->nTest       = 0;
     589    stats->nSigma      = 0;
    582590
    583591    return (stats);
     
    914922    // fprintf (stderr, "sigma: nMatch: %d, nTest: %d, nTen: %d\n", stats->nMatch, stats->nTest, sort->data.U32[sort->n - 10]);
    915923
    916 
    917   psFree (sort);
     924    psFree (sort);
    918925    psFree (listNP);
    919926    psFree (gridNP);
  • trunk/psModules/src/astrom/pmAstrometryObjects.h

    r26260 r36834  
    4242    float Color;                        ///< object color
    4343    float dMag;                         ///< error on object magnitude
     44    float SBinst;                       ///< surface brightness, used for Koppenhoefer correction
    4445}
    4546pmAstromObj;
  • trunk/psModules/src/astrom/pmAstrometryVisual.c

    r35768 r36834  
    946946    KapaSendLabel (kapa2, "X (FP)", KAPA_LABEL_XM);
    947947    KapaSendLabel (kapa2, "Y (FP)", KAPA_LABEL_YM);
    948     KapaSendLabel (kapa2, "pmAstromGridAngle residuals. Box: Correlation Peak.", KAPA_LABEL_XP);
     948    KapaSendLabel (kapa2, "pmAstromGridAngle red: raw, black: ref.", KAPA_LABEL_XP);
    949949
    950950    // plot the REF data.  (also calculate the plot ranges, accumulate the plot vectors)
     
    966966    KapaSetLimits(kapa2, &graphdata);
    967967
    968     psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEDIAN);
     968    psStats *stats = psStatsAlloc(PS_STAT_SAMPLE_MEDIAN | PS_STAT_MIN  | PS_STAT_MAX );
    969969    psVectorStats (stats, zPlot, NULL, NULL, 0);
    970     float zero = stats->sampleMedian + 3.0;
    971     float range = 6.0;
    972 
     970    float range = stats->max - stats->min;
     971    range = PS_MAX (0.5, PS_MIN (6.0, range));
     972    float zero = stats->sampleMedian + 0.25*range;
     973
     974    float maxZ = zPlot->data.F32[0], minZ = zPlot->data.F32[0];
    973975    for (int i = 0; i < zPlot->n; i++) {
     976        maxZ = PS_MAX (maxZ, zPlot->data.F32[i]);
     977        minZ = PS_MIN (minZ, zPlot->data.F32[i]);
    974978        float value = (zero - zPlot->data.F32[i]) / range;
    975979        zPlot->data.F32[i] = PS_MAX(0.0, PS_MIN(1.0, value));
    976980    }
     981    fprintf (stderr, "ref mags: %f to %f (%f median)\n", minZ, maxZ, stats->sampleMedian);
    977982
    978983    // the point size will be scaled from the z vector
     
    9981003    psStatsInit(stats);
    9991004    psVectorStats (stats, zPlot, NULL, NULL, 0);
    1000     zero = stats->sampleMedian + 3.0;
    1001     range = 6.0;
    1002 
     1005    range = stats->max - stats->min;
     1006    range = PS_MAX (0.5, PS_MIN (6.0, range));
     1007    zero = stats->sampleMedian + 0.25*range;
     1008    // zero = stats->sampleMedian + 1.0;
     1009    // range = 6.0;
     1010
     1011    maxZ = zPlot->data.F32[0], minZ = zPlot->data.F32[0];
    10031012    for (int i = 0; i < zPlot->n; i++) {
     1013        maxZ = PS_MAX (maxZ, zPlot->data.F32[i]);
     1014        minZ = PS_MIN (minZ, zPlot->data.F32[i]);
    10041015        float value = (zero - zPlot->data.F32[i]) / range;
    10051016        zPlot->data.F32[i] = PS_MAX(0.0, PS_MIN(1.0, value));
    10061017    }
     1018    fprintf (stderr, "raw mags: %f to %f (%f median)\n", minZ, maxZ, stats->sampleMedian);
    10071019
    10081020    // the point size will be scaled from the z vector
  • trunk/psModules/src/camera/pmFPAfile.c

    r36441 r36834  
    531531      return PM_FPA_FILE_LINEARITY;
    532532    }
    533     // deprecate this?
    534533    if (!strcasecmp(type, "ASTROM"))     {
    535         return PM_FPA_FILE_ASTROM_MODEL;
     534      return PM_FPA_FILE_ASTROM_MODEL;
    536535    }
    537536    if (!strcasecmp(type, "ASTROM.MODEL"))     {
     
    540539    if (!strcasecmp(type, "ASTROM.REFSTARS"))     {
    541540        return PM_FPA_FILE_ASTROM_REFSTARS;
     541    }
     542    if (!strcasecmp(type, "KH.CORRECT"))     {
     543        return PM_FPA_FILE_KH_CORRECT;
    542544    }
    543545    if (!strcasecmp(type, "SUBKERNEL"))     {
     
    593595      case PM_FPA_FILE_ASTROM_REFSTARS:
    594596        return ("ASTROM.REFSTARS");
     597      case PM_FPA_FILE_KH_CORRECT:
     598        return ("KH.CORRECT");
    595599      case PM_FPA_FILE_SUBKERNEL:
    596600        return ("SUBKERNEL");
  • trunk/psModules/src/camera/pmFPAfile.h

    r36375 r36834  
    4848    PM_FPA_FILE_ASTROM_MODEL,
    4949    PM_FPA_FILE_ASTROM_REFSTARS,
     50    PM_FPA_FILE_KH_CORRECT,
    5051    PM_FPA_FILE_SUBKERNEL,
    5152    PM_FPA_FILE_SRCTEXT,
  • trunk/psModules/src/camera/pmFPAfileFitsIO.c

    r29833 r36834  
    150150      case PM_FPA_FILE_PSF:
    151151      case PM_FPA_FILE_ASTROM_MODEL:
    152       case PM_FPA_FILE_ASTROM_REFSTARS: {
     152      case PM_FPA_FILE_ASTROM_REFSTARS:
     153      case PM_FPA_FILE_KH_CORRECT:
     154        {
    153155          pmHDU *hdu = pmFPAviewThisHDU(view, fpa);
    154156          if (hdu) {
  • trunk/psModules/src/camera/pmFPAfileIO.c

    r36623 r36834  
    4848#include "pmPSF_IO.h"
    4949
     50#include "pmKHcorrect.h"
    5051#include "pmAstrometryModel.h"
    5152#include "pmAstrometryRefstars.h"
     
    234235        status = pmAstromModelReadForView (view, file, config);
    235236        break;
     237      case PM_FPA_FILE_KH_CORRECT:
     238        status = pmKHcorrectReadForView (view, file, config);
     239        break;
    236240      case PM_FPA_FILE_EXPNUM:
    237241        status = pmExpNumRead(view, file, config);
     
    324328      case PM_FPA_FILE_ASTROM_MODEL:
    325329      case PM_FPA_FILE_ASTROM_REFSTARS:
     330      case PM_FPA_FILE_KH_CORRECT:
    326331      case PM_FPA_FILE_JPEG:
    327332      case PM_FPA_FILE_KAPA:
     
    408413      }
    409414    }
     415    if (file->type == PM_FPA_FILE_KH_CORRECT) {
     416      psTrace("psModules.camera", 6, "skip write for %s, no write function defined", file->name);
     417      return true;
     418    }
    410419
    411420    // open the file if not yet opened
     
    500509      case PM_FPA_FILE_ASTROM_REFSTARS:
    501510        status = pmAstromRefstarsWriteForView (view, file, config);
     511        break;
     512
     513      case PM_FPA_FILE_KH_CORRECT:
     514        psError(PS_ERR_IO, true, "cannot write type KH.CORRECT (%s)", file->name);
    502515        break;
    503516
     
    576589      case PM_FPA_FILE_ASTROM_MODEL:
    577590      case PM_FPA_FILE_ASTROM_REFSTARS:
     591      case PM_FPA_FILE_KH_CORRECT:
    578592      case PM_FPA_FILE_LINEARITY:
    579593      case PM_FPA_FILE_EXPNUM:
     
    653667      case PM_FPA_FILE_ASTROM_MODEL:
    654668      case PM_FPA_FILE_ASTROM_REFSTARS:
     669      case PM_FPA_FILE_KH_CORRECT:
    655670      case PM_FPA_FILE_EXPNUM:
    656671        psTrace ("psModules.camera", 6, "NOT freeing %s (%s) : save for further analysis\n", file->filename, file->name);
     
    815830      case PM_FPA_FILE_ASTROM_MODEL:
    816831      case PM_FPA_FILE_ASTROM_REFSTARS:
     832      case PM_FPA_FILE_KH_CORRECT:
    817833      case PM_FPA_FILE_LINEARITY:
    818834      case PM_FPA_FILE_EXPNUM:
     
    10181034      case PM_FPA_FILE_EXPNUM:
    10191035      case PM_FPA_FILE_ASTROM_MODEL:
     1036      case PM_FPA_FILE_KH_CORRECT:
    10201037      case PM_FPA_FILE_SX:
    10211038      case PM_FPA_FILE_RAW:
  • trunk/psModules/src/concepts/pmConcepts.c

    r30049 r36834  
    578578}
    579579
     580int pmConceptsChipNumberFromName (pmFPA *fpa, char *name) {
     581
     582    for (int i = 0; i < fpa->chips->n; i++) {
     583        pmChip *chip = fpa->chips->data[i];
     584        if (!chip) continue;
     585        char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
     586        if (!thisone) continue;
     587        if (!strcmp (name, thisone)) return (i);
     588    }
     589    return -1;
     590}
     591
     592pmChip *pmConceptsChipFromName (pmFPA *fpa, char *name) {
     593
     594    for (int i = 0; i < fpa->chips->n; i++) {
     595        pmChip *chip = fpa->chips->data[i];
     596        if (!chip) continue;
     597        char *thisone = psMetadataLookupStr (NULL, chip->concepts, "CHIP.NAME");
     598        if (!thisone) continue;
     599        if (!strcmp (name, thisone)) return (chip);
     600    }
     601    return NULL;
     602}
     603
  • trunk/psModules/src/concepts/pmConcepts.h

    r22699 r36834  
    161161    );
    162162
     163// some utility functions:
     164int pmConceptsChipNumberFromName (pmFPA *fpa, char *name);
     165pmChip *pmConceptsChipFromName (pmFPA *fpa, char *name);
     166
    163167/// @}
    164168#endif
  • trunk/psModules/src/detrend/pmDetrendDB.c

    r35531 r36834  
    111111        DETREND_STRING_CASE(LINEARITY);
    112112        DETREND_STRING_CASE(AUXMASK);
     113        DETREND_STRING_CASE(KH_CORRECT);
    113114    default:
    114115        return NULL;
  • trunk/psModules/src/detrend/pmDetrendDB.h

    r35531 r36834  
    4040    PM_DETREND_TYPE_LINEARITY,
    4141    PM_DETREND_TYPE_AUXMASK,
     42    PM_DETREND_TYPE_KH_CORRECT,
    4243} pmDetrendType;
    4344
  • trunk/psModules/src/extras/pmVisual.c

    r36623 r36834  
    162162
    163163
     164// ask the user to continue or not.  give up after 2 seconds.
     165bool pmVisualAskUserOrDump(bool *plotFlag, bool *dumpData)
     166{
     167    struct timeval timeout;
     168    fd_set fdSet;
     169    int status;
     170
     171    if (dumpData) *dumpData = false;
     172
     173    char key[10];
     174    if (plotFlag && dumpData) {
     175        fprintf (stderr, "[p]ause? [c]ontinue? [s]kip the rest of these plots? [d]ump the data? [a]bort all visual plots? (c) ");
     176    }
     177    if (plotFlag && !dumpData) {
     178        fprintf (stderr, "[p]ause? [c]ontinue? [s]kip the rest of these plots? [a]bort all visual plots? (c) ");
     179    }
     180    if (!plotFlag && dumpData) {
     181        fprintf (stderr, "[p]ause? [c]ontinue? [d]ump the data? [a]bort all visual plots? (c) ");
     182    }
     183    if (!plotFlag && !dumpData) {
     184        fprintf (stderr, "[p]ause? [c]ontinue? [a]bort all visual plots? (c) ");
     185    }
     186
     187    /* Wait up to 1.0 second for a response, then continue */
     188    timeout.tv_sec = 10;
     189    timeout.tv_usec = 0;
     190
     191    FD_ZERO (&fdSet);
     192    FD_SET (STDIN_FILENO, &fdSet);
     193
     194    status = select (1, &fdSet, NULL, NULL, &timeout);
     195    if (status <= 0) {
     196        fprintf (stderr, "\n");
     197        return true; // if no data, give up
     198    }
     199
     200    while (true) {
     201        if (!fgets(key, 8, stdin)) {
     202            psWarning("Unable to read option");
     203        }
     204        switch (key[0]) {
     205          case 's':
     206            if (plotFlag) *plotFlag = false;
     207            return true;
     208          case 'd':
     209            if (dumpData) *dumpData = true;
     210            return true;
     211          case 'a':
     212            isVisual = false;
     213            return true;
     214          case 'c':
     215          case '\n':
     216            return true;
     217          default:
     218            break;
     219        }
     220       
     221        if (plotFlag && dumpData) {
     222          fprintf (stderr, "[p]ause? [c]ontinue? [s]kip the rest of these plots? [d]ump the data? [a]bort all visual plots? (c) ");
     223        }
     224        if (plotFlag && !dumpData) {
     225          fprintf (stderr, "[p]ause? [c]ontinue? [s]kip the rest of these plots? [a]bort all visual plots? (c) ");
     226        }
     227        if (!plotFlag && dumpData) {
     228          fprintf (stderr, "[p]ause? [c]ontinue? [d]ump the data? [a]bort all visual plots? (c) ");
     229        }
     230        if (!plotFlag && !dumpData) {
     231          fprintf (stderr, "[p]ause? [c]ontinue? [a]bort all visual plots? (c) ");
     232        }
     233    }
     234    return true;
     235}
     236
    164237bool pmVisualImStats(psImage *image, double *mean, double *stdev, double *min, double *max) {
    165238
  • trunk/psModules/src/extras/pmVisual.h

    r30623 r36834  
    5252 */
    5353bool pmVisualAskUser(bool *plotFlag);
     54
     55
     56/** Ask the user how to proceed.
     57 * At the user's request, this will disable diagnostic plotting.
     58 * @param plotFlag, set to false if this plot should be disabled in the future
     59 * @param dumpData, set to true if user requests a data dump
     60 */
     61bool pmVisualAskUserOrDump(bool *plotFlag, bool *dumpData);
    5462
    5563
     
    138146bool pmVisualInitGraph (int kapa, void *section, void *graphdata);
    139147bool pmVisualAskUser(bool *plotFlag);
     148bool pmVisualAskUserOrDump(bool *plotFlag, bool *dumpData);
    140149bool pmVisualScaleImage(int kapaFD, psImage *inImage,
    141150                        const char *name, int channel, bool clip);
  • trunk/psModules/src/objects/pmModel.c

    r36375 r36834  
    3939{
    4040    psTrace("psModules.objects", 10, "---- %s() begin ----\n", __func__);
     41    if (!tmp) return;
     42
    4143    psFree(tmp->params);
    4244    psFree(tmp->dparams);
  • trunk/psModules/src/objects/pmPSFtryMakePSF.c

    r36623 r36834  
    220220    }
    221221
     222    // weed out extreme e0 outliers here: find the median and exclude points not in the
     223    // range MEDIAN / 5 < e0 < 5 * MEDIAN
     224    {
     225      psStats *e0stats = psStatsAlloc (PS_STAT_SAMPLE_MEDIAN);
     226      if (psVectorStats (e0stats, e0, NULL, srcMask, 0xff)) {
     227        float e0med = e0stats->sampleMedian;
     228   
     229        for (int i = 0; i < sources->n; i++) {
     230          // skip any masked sources (failed to fit one of the model steps or get a magnitude)
     231          if (srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i]) continue;
     232
     233          if (e0->data.F32[i] < 0.2*e0med) {
     234            srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_OUTLIER;
     235          }
     236          if (e0->data.F32[i] > 5.0*e0med) {
     237            srcMask->data.PS_TYPE_VECTOR_MASK_DATA[i] = PSFTRY_MASK_OUTLIER;
     238          }
     239        }
     240      }
     241      psFree (e0stats);
     242    }
     243
    222244    // we run 'clipIter' cycles clipping in each of x and y, with only one iteration each.
    223245    // This way, the parameters masked by one of the fits will be applied to the others
  • trunk/psModules/src/objects/pmSourceIO_MatchedRefs.c

    r36623 r36834  
    9999
    100100                    // select the raw objects for this readout
    101                     psArray *rawstars = psMetadataLookupPtr (NULL, readout->analysis, "PSASTRO.RAWSTARS");
     101                    psArray *rawstars = psMetadataLookupPtr (NULL, readout->analysis, "PSASTRO.RAWSTARS.SUBSET");
    102102                    if (rawstars == NULL) continue;
    103103
    104104                    // select the raw objects for this readout
    105                     psArray *refstars = psMetadataLookupPtr (NULL, readout->analysis, "PSASTRO.REFSTARS");
     105                    psArray *refstars = psMetadataLookupPtr (NULL, readout->analysis, "PSASTRO.REFSTARS.SUBSET");
    106106                    if (refstars == NULL) continue;
    107107                    psTrace ("psastro", 4, "Trying %ld refstars\n", refstars->n);
    108 
    109 # if (0)
    110                     // XXX test
    111                     FILE *outfile = fopen ("refstars.dat", "w");
    112                     assert (outfile);
    113                     for (int nn = 0; nn < refstars->n; nn++) {
    114                         pmAstromObj *ref = refstars->data[nn];
    115                         fprintf (outfile, "%lf %lf\n", ref->sky->r*PS_DEG_RAD, ref->sky->d*PS_DEG_RAD);
    116                     }
    117                     fclose (outfile);
    118 # endif
    119108
    120109                    psArray *matches = psMetadataLookupPtr (NULL, readout->analysis, "PSASTRO.MATCH");
     
    128117
    129118                        psMetadata *row = psMetadataAlloc ();
    130                         psMetadataAdd (row, PS_LIST_TAIL, "RA",       PS_DATA_F64, "right ascension (deg, J2000)", PM_DEG_RAD*ref->sky->r);
    131                         psMetadataAdd (row, PS_LIST_TAIL, "DEC",      PS_DATA_F64, "declination (deg, J2000)",     PM_DEG_RAD*ref->sky->d);
    132                         psMetadataAdd (row, PS_LIST_TAIL, "X_CHIP",   PS_DATA_F32, "x coord on chip",              raw->chip->x);
    133                         psMetadataAdd (row, PS_LIST_TAIL, "Y_CHIP",   PS_DATA_F32, "y coord on chip",              raw->chip->y);
    134                         psMetadataAdd (row, PS_LIST_TAIL, "X_CHIP_FIT",PS_DATA_F32, "x fitted coord on chip",      ref->chip->x);
    135                         psMetadataAdd (row, PS_LIST_TAIL, "Y_CHIP_FIT",PS_DATA_F32, "y fitted coord on chip",      ref->chip->y);
    136                         psMetadataAdd (row, PS_LIST_TAIL, "X_FPA",    PS_DATA_F32, "x coord on focal plane",       raw->FP->x);
    137                         psMetadataAdd (row, PS_LIST_TAIL, "Y_FPA",    PS_DATA_F32, "y coord on focal plane",       raw->FP->y);
    138                         psMetadataAdd (row, PS_LIST_TAIL, "MAG_INST", PS_DATA_F32, "instrumental magnitude",       raw->Mag);
    139                         psMetadataAdd (row, PS_LIST_TAIL, "MAG_REF",  PS_DATA_F32, "reference star magnitude",     ref->Mag);
    140                         psMetadataAdd (row, PS_LIST_TAIL, "COLOR_REF",PS_DATA_F32, "reference star color",         ref->Color);
    141                         psMetadataAdd (row, PS_LIST_TAIL, "CHIP_ID",  PS_DATA_STRING, "chip identifier",           chipName);
     119                        psMetadataAdd (row, PS_LIST_TAIL, "RA_REF",     PS_DATA_F64, "right ascension (deg, J2000)", PM_DEG_RAD*ref->sky->r);
     120                        psMetadataAdd (row, PS_LIST_TAIL, "DEC_REF",    PS_DATA_F64, "declination (deg, J2000)",     PM_DEG_RAD*ref->sky->d);
     121                        psMetadataAdd (row, PS_LIST_TAIL, "X_CHIP_REF", PS_DATA_F32, "x fitted coord on chip",       ref->chip->x);
     122                        psMetadataAdd (row, PS_LIST_TAIL, "Y_CHIP_REF", PS_DATA_F32, "y fitted coord on chip",       ref->chip->y);
     123                        psMetadataAdd (row, PS_LIST_TAIL, "X_CHIP_RAW", PS_DATA_F32, "x coord on chip",              raw->chip->x);
     124                        psMetadataAdd (row, PS_LIST_TAIL, "Y_CHIP_RAW", PS_DATA_F32, "y coord on chip",              raw->chip->y);
     125                        psMetadataAdd (row, PS_LIST_TAIL, "X_FPA_RAW",  PS_DATA_F32, "x coord on focal plane",       raw->FP->x);
     126                        psMetadataAdd (row, PS_LIST_TAIL, "Y_FPA_RAW",  PS_DATA_F32, "y coord on focal plane",       raw->FP->y);
     127                        psMetadataAdd (row, PS_LIST_TAIL, "X_TPA_RAW",  PS_DATA_F32, "x coord on focal plane",       raw->TP->x);
     128                        psMetadataAdd (row, PS_LIST_TAIL, "Y_TPA_RAW",  PS_DATA_F32, "y coord on focal plane",       raw->TP->y);
     129                        psMetadataAdd (row, PS_LIST_TAIL, "MAG_INST",   PS_DATA_F32, "instrumental magnitude",       raw->Mag);
     130                        psMetadataAdd (row, PS_LIST_TAIL, "MAG_REF",    PS_DATA_F32, "reference star magnitude",     ref->Mag);
     131                        psMetadataAdd (row, PS_LIST_TAIL, "COLOR_REF",  PS_DATA_F32, "reference star color",         ref->Color);
     132                        psMetadataAdd (row, PS_LIST_TAIL, "CHIP_ID",    PS_DATA_STRING, "chip identifier",           chipName);
    142133                        // XXX need to add the reference color, but this needs getstar / dvo.photcodes for the reference to be refined.
    143134
  • trunk/psModules/src/objects/pmSourceVisual.c

    r36623 r36834  
    545545    psFree (model);
    546546
     547    bool dumpData = false;
     548
    547549    // pause and wait for user input:
    548550    // continue, save (provide name), ??
    549     pmVisualAskUser(&plotPSF);
     551retry:
     552    pmVisualAskUserOrDump(&plotPSF, &dumpData);
     553    if (dumpData) {
     554      char name[128];
     555      fprintf (stderr, "filename: ");
     556      int status = fscanf (stdin, "%127s", name);
     557      if (status != 1) {
     558        fprintf (stderr, "odd response\n");
     559        goto retry;
     560      }
     561
     562      FILE *f = fopen (name, "w");
     563      if (!f) {
     564        fprintf (stderr, "cannot open %s for output\n", name);
     565        goto retry;
     566      }
     567      for (int i = 0; i < x->n; i++) {
     568        float vModel = pmTrend2DEval (trend, x->data.F32[i], y->data.F32[i]);
     569        fprintf (f, "%f %f %f %f %d\n", x->data.F32[i], y->data.F32[i], param->data.F32[i], vModel, mask->data.PS_TYPE_VECTOR_MASK_DATA[i]);
     570      }
     571      fclose (f);
     572      goto retry;
     573    }
    550574
    551575    return true;
  • trunk/psModules/src/psmodules.h

    r36623 r36834  
    9595#include <pmAstrometryDistortion.h>
    9696#include <pmAstrometryVisual.h>
     97#include <pmKHcorrect.h>
    9798
    9899// the following headers are from psModule:imcombine
Note: See TracChangeset for help on using the changeset viewer.