IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 16841


Ignore:
Timestamp:
Mar 6, 2008, 10:47:50 AM (18 years ago)
Author:
Paul Price
Message:

Adding multi-darks --- fitting dark current with multi-dimensional polynomial. This allows the dark current to be a function of temperature, or time since PON. To do this, added new file type, DARK. A DARK file is just like an IMAGE, except that it has a table per FITS file that contains the parameters to use in applying the dark. It's kinda like a FRINGE, but there's only one table per file, instead of one table per extension.

Location:
trunk/psModules/src
Files:
1 added
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/psModules/src/camera/pmFPAfile.c

    r16711 r16841  
    435435  if (!strcasecmp (type, "FRINGE")) {
    436436    return PM_FPA_FILE_FRINGE;
     437  }
     438  if (!strcasecmp (type, "DARK"))     {
     439    return PM_FPA_FILE_DARK;
    437440  }
    438441  if (!strcasecmp (type, "HEADER"))     {
     
    473476    case PM_FPA_FILE_FRINGE:
    474477      return ("FRINGE");
     478    case PM_FPA_FILE_DARK:
     479      return("DARK");
    475480    case PM_FPA_FILE_HEADER:
    476481      return ("HEADER");
  • trunk/psModules/src/camera/pmFPAfile.h

    r16355 r16841  
    44 * @author EAM, IfA
    55 *
    6  * @version $Revision: 1.28 $ $Name: not supported by cvs2svn $
    7  * @date $Date: 2008-02-07 23:45:56 $
     6 * @version $Revision: 1.29 $ $Name: not supported by cvs2svn $
     7 * @date $Date: 2008-03-06 20:47:50 $
    88 * Copyright 2004-2005 Institute for Astronomy, University of Hawaii
    99 */
     
    2828    PM_FPA_FILE_RAW,
    2929    PM_FPA_FILE_IMAGE,
     30    PM_FPA_FILE_MASK,
     31    PM_FPA_FILE_WEIGHT,
     32    PM_FPA_FILE_FRINGE,
     33    PM_FPA_FILE_DARK,
    3034    PM_FPA_FILE_PSF,
    3135    PM_FPA_FILE_JPEG,
    3236    PM_FPA_FILE_KAPA,
    33     PM_FPA_FILE_MASK,
    34     PM_FPA_FILE_WEIGHT,
    35     PM_FPA_FILE_FRINGE,
    3637    PM_FPA_FILE_HEADER,
    3738    PM_FPA_FILE_ASTROM,
  • trunk/psModules/src/camera/pmFPAfileFitsIO.c

    r15180 r16841  
    2020#include "pmFPACopy.h"
    2121#include "pmFPAConstruct.h"
     22#include "pmDark.h"
    2223
    2324pmFPA *pmFPAfileSuitableFPA(const pmFPAfile *file, const pmFPAview *view, const pmConfig *config)
     
    243244}
    244245
     246bool pmFPAviewReadFitsDark(const pmFPAview *view, pmFPAfile *file)
     247{
     248    PS_ASSERT_PTR_NON_NULL(view, false);
     249    PS_ASSERT_PTR_NON_NULL(file, false);
     250    return fpaViewReadFitsImage(view, file, pmFPAReadDark, pmChipReadDark, pmCellReadDark);
     251}
     252
    245253bool pmFPAviewReadFitsHeaderSet(const pmFPAview *view, pmFPAfile *file)
    246254{
     
    337345    PS_ASSERT_PTR_NON_NULL(file, false);
    338346    return fpaViewWriteFitsImage(view, file, config, pmFPAWriteWeight, pmChipWriteWeight, pmCellWriteWeight);
     347}
     348
     349bool pmFPAviewWriteFitsDark(const pmFPAview *view, pmFPAfile *file, const pmConfig *config)
     350{
     351    PS_ASSERT_PTR_NON_NULL(view, false);
     352    PS_ASSERT_PTR_NON_NULL(file, false);
     353    return fpaViewWriteFitsImage(view, file, config, pmFPAWriteDark, pmChipWriteDark, pmCellWriteDark);
    339354}
    340355
  • trunk/psModules/src/camera/pmFPAfileFitsIO.h

    r14205 r16841  
    55 * @author PAP, IfA
    66 *
    7  * @version $Revision: 1.9 $ $Name: not supported by cvs2svn $
    8  * @date $Date: 2007-07-14 03:19:01 $
     7 * @version $Revision: 1.10 $ $Name: not supported by cvs2svn $
     8 * @date $Date: 2008-03-06 20:47:50 $
    99 * Copyright 2004-2005 Institute for Astronomy, University of Hawaii
    1010 */
     
    3030                            );
    3131
     32/// Read a dark into the current view
     33bool pmFPAviewReadFitsDark(const pmFPAview *view,  ///< View specifying level of interest
     34                           pmFPAfile *file ///< FPA file into which to read
     35    );
     36
    3237/// Read an image header into the current view
    3338bool pmFPAviewReadFitsHeaderSet(const pmFPAview *view,  ///< View specifying level of interest
     
    5257                              const pmConfig *config ///< Configuration
    5358                             );
     59
     60/// Write the dark for the specified view
     61bool pmFPAviewWriteFitsDark(const pmFPAview *view, ///< View specifying level of interest
     62                            pmFPAfile *file, ///< FPA file to write
     63                            const pmConfig *config ///< Configuration
     64    );
    5465
    5566/// Write a PHU for a fits image if needed
  • trunk/psModules/src/camera/pmFPAfileIO.c

    r16818 r16841  
    174174        status = pmFPAviewReadFitsHeaderSet(view, file);
    175175        break;
     176      case PM_FPA_FILE_DARK:
     177        status = pmFPAviewReadFitsDark(view, file);
     178        break;
    176179      case PM_FPA_FILE_FRINGE:
    177         status = pmFPAviewReadFitsImage (view, file);
     180        status = pmFPAviewReadFitsImage(view, file);
    178181        if (status) {
    179182            if (!pmFPAviewReadFitsTable(view, file, "FRINGE")) {
     
    247250
    248251    switch (file->type) {
    249     case PM_FPA_FILE_IMAGE:
    250     case PM_FPA_FILE_MASK:
    251     case PM_FPA_FILE_WEIGHT:
    252     case PM_FPA_FILE_FRINGE: {
     252      case PM_FPA_FILE_IMAGE:
     253      case PM_FPA_FILE_MASK:
     254      case PM_FPA_FILE_WEIGHT:
     255      case PM_FPA_FILE_FRINGE:
     256      case PM_FPA_FILE_DARK: {
    253257            // create FPA structure component based on view
    254258            psMetadata *format = file->format; // Camera format configuration
     
    397401    fitsType |= (file->type == PM_FPA_FILE_HEADER);
    398402    fitsType |= (file->type == PM_FPA_FILE_FRINGE);
     403    fitsType |= (file->type == PM_FPA_FILE_DARK);
    399404    fitsType |= (file->type == PM_FPA_FILE_CMP);
    400405    fitsType |= (file->type == PM_FPA_FILE_CMF);
     
    451456      case PM_FPA_FILE_HEADER:
    452457        psAbort ("no HEADER write functions defined");
     458        break;
     459      case PM_FPA_FILE_DARK:
     460        status = pmFPAviewWriteFitsDark(view, file, config);
    453461        break;
    454462      case PM_FPA_FILE_FRINGE:
     
    532540      case PM_FPA_FILE_HEADER:
    533541      case PM_FPA_FILE_FRINGE:
     542      case PM_FPA_FILE_DARK:
    534543      case PM_FPA_FILE_CMF:
    535544      case PM_FPA_FILE_PSF:
     
    593602      case PM_FPA_FILE_HEADER:
    594603      case PM_FPA_FILE_FRINGE:
     604      case PM_FPA_FILE_DARK:
    595605        status = pmFPAviewFreeData(view, file);
    596606        break;
     
    736746      case PM_FPA_FILE_HEADER:
    737747      case PM_FPA_FILE_FRINGE:
     748      case PM_FPA_FILE_DARK:
    738749      case PM_FPA_FILE_CMF:
    739750      case PM_FPA_FILE_PSF:
     
    882893      case PM_FPA_FILE_MASK:
    883894      case PM_FPA_FILE_WEIGHT:
     895      case PM_FPA_FILE_DARK:
    884896      case PM_FPA_FILE_FRINGE:
    885897        status = pmFPAviewFitsWritePHU (view, file, config);
  • trunk/psModules/src/detrend/Makefile.am

    r14505 r16841  
    1313        pmDetrendDB.c \
    1414        pmShutterCorrection.c \
    15         pmShifts.c
     15        pmShifts.c \
     16        pmDark.c
    1617
    1718#       pmSkySubtract.c
     
    2728        pmDetrendDB.h \
    2829        pmShutterCorrection.h \
    29         pmShifts.h
     30        pmShifts.h \
     31        pmDark.h
    3032
    3133#       pmSkySubtract.h
  • trunk/psModules/src/detrend/pmBias.c

    r15162 r16841  
    113113    }
    114114    if (dark) {
     115        psWarning("Dark processing is now available using pmDark --- perhaps you should use that instead?");
    115116        PS_ASSERT_PTR_NON_NULL(view, false);
    116117        PS_ASSERT_IMAGE_NON_NULL(dark->image, false);
     
    121122
    122123    if (!pmOverscanSubtract (in, overscanOpts)) {
    123         return false;
     124        return false;
    124125    }
    125126
     
    148149        }
    149150
    150         float darkNorm = 1.0;
     151        float darkNorm = 1.0;
    151152        float inNorm = pmFPADarkNorm(in->parent->parent->parent, view, inTime);
    152153
    153         // if we have a normalized dark exposure, we simply multiply the master by inNorm.  if
    154         // we do not have a normalized exposure, we have to scale the master as well.  XXX do
    155         // we need to explicitly identify the master as normalized?
     154        // if we have a normalized dark exposure, we simply multiply the master by inNorm.  if
     155        // we do not have a normalized exposure, we have to scale the master as well.  XXX do
     156        // we need to explicitly identify the master as normalized?
    156157
    157         if (darkTime != 1.0) {
    158             darkNorm = pmFPADarkNorm(dark->parent->parent->parent, view, darkTime);
    159         }
     158        if (darkTime != 1.0) {
     159            darkNorm = pmFPADarkNorm(dark->parent->parent->parent, view, darkTime);
     160        }
    160161
    161         if (isnan(inNorm) || isnan(darkNorm)) {
     162        if (isnan(inNorm) || isnan(darkNorm)) {
    162163            psError(PS_ERR_UNKNOWN, false, "Unable to determine dark normalisations.");
    163164            return false;
  • trunk/psModules/src/detrend/pmDark.c

    r16824 r16841  
    2525static bool ordinateLookup(float *value, // Value of ordinate, to return
    2626                           const char *name, // Name of ordinate (concept name)
     27                           bool scale,  // Scale the value?
     28                           float min, float max, // Minimum and maximum values for scaling
    2729                           const pmReadout *ro // Readout of interest
    2830                           )
     
    6062        psWarning("Non-finite value (%f) of concept %s in readout", *value, name);
    6163        return false;
     64    }
     65    if (scale) {
     66        if (*value < min || *value > max) {
     67            psWarning("Value of concept %s (%f) outside range (%f:%f)", name, *value, min, max);
     68            return false;
     69        }
     70        *value = 2.0 * (*value - min) / (max - min) - 1.0;
    6271    }
    6372
     
    130139
    131140            float value = NAN;          // Value of ordinate
    132             if (!ordinateLookup(&value, ord->name, ro)) {
     141            if (!ordinateLookup(&value, ord->name, ord->scale, ord->min, ord->max, ro)) {
    133142                roMask->data.U8[j] = 0xff;
    134143                val->data.F32[i] = NAN;
    135144                numBadInputs++;
    136145                continue;
    137             }
    138             if (ord->scale) {
    139                 value = 2.0 * (value - ord->min) / (ord->max - ord->min) - 1.0;
    140146            }
    141147            val->data.F32[i] = value;
     
    280286        return false;
    281287    }
    282     PS_ASSERT_ARRAYS_SIZE_EQUAL(dark->readouts, ordinates, false);
    283288
    284289    int numOrdinates = ordinates->n;    // Number of ordinates
     
    287292        pmDarkOrdinate *ord = ordinates->data[i]; // Ordinate of interest
    288293        float value = NAN;              // Value for ordinate
    289         if (!ordinateLookup(&value, ord->name, readout)) {
     294        if (!ordinateLookup(&value, ord->name, ord->scale, ord->min, ord->max, readout)) {
    290295            psError(PS_ERR_UNKNOWN, true, "Unable to find value for %s", ord->name);
    291296            psFree(values);
     
    317322            }
    318323            float value = psPolynomialMDEval(poly, values); // Value of dark current
    319             readout->image->data.F32[y][x] = value;
     324            readout->image->data.F32[y][x] -= value;
    320325            if (readout->mask && !isfinite(value)) {
    321326                readout->mask->data.PS_TYPE_MASK_DATA[y][x] = bad;
  • trunk/psModules/src/psmodules.h

    r15898 r16841  
    6868#include <pmShutterCorrection.h>
    6969// #include <pmSkySubtract.h>
     70#include <pmDark.h>
    7071
    7172// the following headers are from psModule:astrom
Note: See TracChangeset for help on using the changeset viewer.