IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 36169


Ignore:
Timestamp:
Oct 1, 2013, 10:25:29 AM (13 years ago)
Author:
bills
Message:

Rework of auxiliary masking. The initial implementation did not use the pmFPA system
because the files provided by MPG were not recognized as GPC1 and were not in a mask
format. This was the wrong thing to do.

  1. Resolve auxiliary mask using pmFPA system
  2. Use DETREND.CONSTRAINTS to select different set of masks for M31 and STS.
  3. Convert the auxiliary video mask to type PS_TYPE_IMAGE_MASK
  4. Change recipes for STS to use CHIP_AUXMASK recipe which uses det_type AUXMASK_STS
  5. Change M31 recipes to use det_type AUXMASK_HEAVY
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippconfig/gpc1/ppImage.config

    r36111 r36169  
    3434# aditional auxiliary mask applied to corners of all chips in video cells.
    3535# Is only applied if MASK.AUXMASK and USE.VIDEO.MASK are both true
    36 AUX.VIDEO.MASK  STR     neb://any/gpc1/auxmask/mpg.20130506/mask_video_cell_corners.fits
     36AUX.VIDEO.MASK  STR     neb://any/gpc1/auxmask/mpg.20130930/mask_video_cell_corners.fits
    3737
    3838
     
    12921292  CROSSTALK.MEASURE  BOOL    FALSE           # Subtract model background?
    12931293  NO.COMPRESS        BOOL    TRUE            # turn off image compression
     1294    DETREND.CONSTRAINTS  METADATA
     1295      BIAS METADATA
     1296      END
     1297      DARK METADATA
     1298        EXPTIME STR FPA.EXPOSURE
     1299      END
     1300      FLAT METADATA
     1301        FILTER  STR FPA.FILTERID
     1302      END
     1303      FLATCORR METADATA
     1304        FILTER   STR FPA.FILTERID
     1305      END
     1306      FRINGE METADATA
     1307        FILTER   STR FPA.FILTERID
     1308      END
     1309      SHUTTER METADATA
     1310      END
     1311      MASK METADATA
     1312      END       
     1313      AUXMASK METADATA
     1314        DETTYPE STR AUXMASK_STS
     1315      END
     1316      ASTROM METADATA
     1317      END       
     1318      NOISEMAP METADATA
     1319      END       
     1320      LINEARITY METADATA
     1321      END
     1322    END
     1323END
     1324
     1325# Standard chip processing + auxiliary mask with heavy masking
     1326CHIP_AUXMASK_HEAVY METADATA
     1327  BASE.FITS          BOOL    FALSE           # Save base detrended image?
     1328  BASE.MASK.FITS     BOOL    FALSE           # Save base detrended image?
     1329  BASE.VARIANCE.FITS BOOL    FALSE           # Save base detrended image?
     1330  CHIP.FITS          BOOL    TRUE            # Save chip-mosaic-ed image?
     1331  CHIP.MASK.FITS     BOOL    TRUE            # Save chip-mosaic-ed image?
     1332  CHIP.VARIANCE.FITS BOOL    TRUE            # Save chip-mosaic-ed image?
     1333  OVERSCAN           BOOL    TRUE            # Overscan subtraction
     1334  NONLIN             BOOL    TRUE            # apply non-linearity correction
     1335  BIAS               BOOL    FALSE           # Bias subtraction
     1336  DARK               BOOL    TRUE            # Dark subtraction
     1337  NOISEMAP           BOOL    TRUE           
     1338  REMNANCE           BOOL    FALSE           # Remnance masking
     1339  SHUTTER            BOOL    FALSE           # Shutter correction
     1340  FLAT               BOOL    TRUE            # Flat-field normalisation
     1341  MASK               BOOL    TRUE            # Mask bad pixels
     1342  MASK.BUILD         BOOL    TRUE            # Build internal mask?
     1343  MASK.BURNTOOL      BOOL    TRUE            # Mask potential burntool trails
     1344  MASK.AUXMASK       BOOL    TRUE            # augment mask with more restrictive auxiliary mask
     1345  PATTERN.ROW        BOOL    TRUE            # Row pattern correction
     1346  PATTERN.CELL       BOOL    FALSE           # Cell pattern correction
     1347  PATTERN.CONTINUITY BOOL    TRUE            # Cell pattern correction using edge continuity
     1348  FRINGE             BOOL    TRUE            # Fringe subtraction
     1349  BIN1.FITS          BOOL    TRUE            # Save 1st binned chip image?
     1350  BIN2.FITS          BOOL    TRUE            # Save 2nd binned chip image?
     1351  PHOTOM             BOOL    TRUE            # Source identification and photometry
     1352  ASTROM.CHIP        BOOL    FALSE           # Astrometry per chip?
     1353  ASTROM.MOSAIC      BOOL    FALSE           # Astrometry for mosaic?
     1354  BACKGROUND         BOOL    TRUE            # Subtract background?
     1355  CROSSTALK.MEASURE  BOOL    FALSE           # Subtract model background?
     1356  NO.COMPRESS        BOOL    TRUE            # turn off image compression
     1357    DETREND.CONSTRAINTS  METADATA
     1358      BIAS METADATA
     1359      END
     1360      DARK METADATA
     1361        EXPTIME STR FPA.EXPOSURE
     1362      END
     1363      FLAT METADATA
     1364        FILTER  STR FPA.FILTERID
     1365      END
     1366      FLATCORR METADATA
     1367        FILTER   STR FPA.FILTERID
     1368      END
     1369      FRINGE METADATA
     1370        FILTER   STR FPA.FILTERID
     1371      END
     1372      SHUTTER METADATA
     1373      END
     1374      MASK METADATA
     1375      END       
     1376      AUXMASK METADATA
     1377        DETTYPE STR AUXMASK_HEAVY
     1378      END
     1379      ASTROM METADATA
     1380      END       
     1381      NOISEMAP METADATA
     1382      END       
     1383      LINEARITY METADATA
     1384      END
     1385    END
    12941386END
    12951387
     
    13921484  CROSSTALK.MEASURE  BOOL    FALSE           # Subtract model background?
    13931485  NO.COMPRESS        BOOL    TRUE            # turn off image compression
     1486    DETREND.CONSTRAINTS  METADATA
     1487      BIAS METADATA
     1488      END
     1489      DARK METADATA
     1490        EXPTIME STR FPA.EXPOSURE
     1491      END
     1492      FLAT METADATA
     1493        FILTER  STR FPA.FILTERID
     1494      END
     1495      FLATCORR METADATA
     1496        FILTER   STR FPA.FILTERID
     1497      END
     1498      FRINGE METADATA
     1499        FILTER   STR FPA.FILTERID
     1500      END
     1501      SHUTTER METADATA
     1502      END
     1503      MASK METADATA
     1504      END       
     1505      AUXMASK METADATA
     1506        DETTYPE STR AUXMASK_HEAVY
     1507      END
     1508      ASTROM METADATA
     1509      END       
     1510      NOISEMAP METADATA
     1511      END       
     1512      LINEARITY METADATA
     1513      END
     1514    END
    13941515END
    13951516
  • trunk/ippconfig/recipes/filerules-split.mdc

    r36087 r36169  
    3838PPIMAGE.INPUT.MASK        INPUT    @FILES        CHIP       MASK
    3939PPIMAGE.VIDEOMASK         INPUT    @DETDB        CHIP       MASK
     40PPIMAGE.AUXMASK           INPUT    @DETDB        CHIP       MASK
    4041PPIMAGE.INPUT.VARIANCE    INPUT    @FILES        CHIP       VARIANCE
    4142PPIMAGE.INPUT.PSF         INPUT    @FILES        CHIP       PSF
  • trunk/ippconfig/recipes/ppImage.config

    r36111 r36169  
    220220END
    221221
    222 # Standard chip processing
     222# Standard chip processing with auxillary masking
    223223CHIP_AUXMASK    METADATA
     224  BASE.FITS          BOOL    FALSE           # Save base detrended image?
     225  BASE.MASK.FITS     BOOL    FALSE           # Save base detrended image?
     226  BASE.VARIANCE.FITS BOOL    FALSE           # Save base detrended image?
     227  CHIP.FITS          BOOL    TRUE            # Save chip-mosaic-ed image?
     228  CHIP.MASK.FITS     BOOL    TRUE            # Save chip-mosaic-ed image?
     229  CHIP.VARIANCE.FITS BOOL    TRUE            # Save chip-mosaic-ed image?
     230  OVERSCAN           BOOL    TRUE            # Overscan subtraction
     231  NONLIN             BOOL    FALSE           # Non-linearity correction; not implemented
     232  BIAS               BOOL    TRUE            # Bias subtraction
     233  DARK               BOOL    TRUE            # Dark subtraction
     234  SHUTTER            BOOL    FALSE           # Shutter correction
     235  FLAT               BOOL    TRUE            # Flat-field normalisation
     236  MASK               BOOL    TRUE            # Mask bad pixels
     237  FRINGE             BOOL    TRUE            # Fringe subtraction
     238  BIN1.FITS          BOOL    TRUE            # Save 1st binned chip image?
     239  BIN2.FITS          BOOL    TRUE            # Save 2nd binned chip image?
     240  PHOTOM             BOOL    TRUE            # Source identification and photometry
     241  ASTROM.CHIP        BOOL    FALSE           # Astrometry per chip?
     242  ASTROM.MOSAIC      BOOL    FALSE           # Astrometry for mosaic?
     243  BACKGROUND         BOOL    TRUE            # Subtract background?
     244  MASK.STATS         BOOL    TRUE            # Calculate Mask statistics.
     245END
     246
     247# Standard chip processing with heavy auxillary masking (same as CHIP_AUXMASK here, but different in gpc1)
     248CHIP_AUXMASK_HEAVY      METADATA
    224249  BASE.FITS          BOOL    FALSE           # Save base detrended image?
    225250  BASE.MASK.FITS     BOOL    FALSE           # Save base detrended image?
  • trunk/ippconfig/recipes/reductionClasses.mdc

    r36111 r36169  
    11261126
    11271127STS_DATASET METADATA
    1128    # CHIP_PPIMAGE STR CHIP_AUXMASK
    1129    # MPG wants auxiliary masking off for now
    1130    CHIP_PPIMAGE STR CHIP
     1128   CHIP_PPIMAGE STR CHIP_AUXMASK
    11311129   CHIP_PSPHOT STR CHIP
    11321130   WARP_PSWARP STR WARP
    1133    STACK_PPSTACK   STR STACK
     1131   STACK_PPSTACK STR STACK
    11341132   STACK_PPSUB STR STACK
    1135    STACK_PSPHOT    STR STACK
     1133   STACK_PSPHOT STR STACK
    11361134   DIFF_PPSUB  STR DIFF
    11371135   DIFF_PSPHOT STR DIFF
     
    11401138   FAKEPHOT    STR FAKEPHOT
    11411139   ADDSTAR     STR ADDSTAR
    1142    PSASTRO    STR STS_DATASET
    1143    STACKPHOT       STR    STACKPHOT
     1140   PSASTRO     STR STS_DATASET
     1141   STACKPHOT   STR STACKPHOT
    11441142END
    11451143
  • trunk/ppImage/src/ppImageAuxiliaryMask.c

    r35722 r36169  
    3535        return NULL;
    3636    }
     37    if (image->type.type != PS_TYPE_IMAGE_MASK) {
     38        psWarning("auxiliary mask image %s has unexpected type %d\n", realName, image->type.type);
     39        return false;
     40    }
    3741    psFree(realName);
    3842
     
    7276    }
    7377
    74     // Find a suitable detRun with type AUXMASK
    75 
    76     psTime *time = psMetadataLookupPtr(NULL, input->fpa->concepts, "FPA.TIME");
    77     if (time->sec == 0 && time->nsec == 0) {
    78         psLogMsg ("psModules.camera", PS_LOG_WARN, "FPA.TIME has not been set.\n");
    79     }
    80 
    81     char *cameraName = psMetadataLookupStr(NULL, input->fpa->concepts, "FPA.CAMERA");
    82     pmDetrendSelectOptions *detrendOptions = pmDetrendSelectOptionsAlloc(cameraName, *time, PM_DETREND_TYPE_AUXMASK);
    83 
    84     pmDetrendSelectResults *results = pmDetrendSelect(detrendOptions, config);
    85     psFree(detrendOptions);
    86     if (!results) {
    87         psError (psErrorCodeLast(), false, "no matching auxiliary mask found");
    88         return false;
    89     }
    90 
    91     pmFPALevel fileLevel = pmFPALevelFromName(results->level);
    92     if (fileLevel != PM_FPA_LEVEL_CHIP) {
    93          psError (PM_ERR_CONFIG, false, "invalid file level %d for selected auxiliary mask", fileLevel);
    94          return false;
    95     }
    96    
     78    pmFPAfile *auxmask = psMetadataLookupPtr(&status, config->files, "PPIMAGE.AUXMASK");
     79    if (!status) {
     80        psError(PS_ERR_UNEXPECTED_NULL, true, "PPIMAGE.CHIP file is not defined");
     81        return false;
     82    }
     83
    9784    // Go find the readout
    9885    // code to find the readouts was adapted from ppImageSubtractBackground
     
    129116        return true;
    130117    }
    131     // not needed psImage *image = ro->image;
     118
    132119    psImage *mask = ro->mask;
    133120
    134     // now read the auxiliary mask file
    135     psString class_id = psMetadataLookupStr(NULL, chip->concepts, "CHIP.NAME");
    136 
    137     char *auxMaskFileName = pmDetrendFile(results->detID, class_id, config);
    138     if (!auxMaskFileName) {
    139          psError (PM_ERR_CONFIG, false, "unable to find auxiliary mask file name for %s %s", results->detID, class_id);
    140          return false;
    141     }
    142     psLogMsg ("ppImage", PS_LOG_INFO, "Auxiliary mask file: %s", auxMaskFileName);
    143 
    144     psFree(results);
    145     // record that we read this file in the config dump file.
    146     // Note: this value isn't used during updates though.
    147     pmConfigRunFilenameAddRead(config, "PPIMAGE.AUXMASK", auxMaskFileName);
    148     recordFileInHeader(chip, "DETREND.AUXMASK", "auxiliary mask", auxMaskFileName);
    149 
    150     psImage *auxMask = readAuxiliaryMask(config, auxMaskFileName);
    151     psFree(auxMaskFileName);
    152     if (!auxMask) {
    153         psError(PS_ERR_UNKNOWN, false, "failed to read auxiliary mask file");
    154         return false;
    155     }
    156 
    157     // if the cell has video and the recipe value
     121    if (mask->type.type != PS_TYPE_IMAGE_MASK) {
     122        psWarning("mask image has unexpected type %d\n", mask->type.type);
     123        return false;
     124    }
     125
     126    pmChip *auxMaskChip = pmFPAviewThisChip(view, auxmask->fpa);
     127    if (!auxMaskChip) {
     128        psWarning("failed to find pmChip for auxiliary mask");
     129        return false;
     130    }
     131    pmCell *auxMaskCell = auxMaskChip->cells->data[0];
     132    if (!auxMaskCell) {
     133        psWarning("failed to find pmCell for auxiliary mask");
     134        return false;
     135    }
     136    pmReadout *auxMaskReadout = auxMaskCell->readouts->data[0];
     137    if (!auxMaskReadout) {
     138        psWarning("failed to find pmReadout for auxiliary mask");
     139        return false;
     140    }
     141    psImage *auxMaskImage = auxMaskReadout->mask;
     142    if (!auxMaskImage) {
     143        psWarning("failed to find psImage for auxiliary mask");
     144        return false;
     145    }
     146    if (auxMaskImage->type.type != PS_TYPE_IMAGE_MASK) {
     147        psWarning("auxiliary mask image has unexpected type %d\n", auxMaskImage->type.type);
     148        return false;
     149    }
     150
     151    // if the cell has video and the recipe value is set or in the video mask
    158152    if (options->hasVideo && options->auxVideoMask && strcmp(options->auxVideoMask, "NULL")) {
    159153        psImage *videoMask = readAuxiliaryMask(config, options->auxVideoMask);
     
    166160        recordFileInHeader(chip, "DETREND.AUXVIDEOMASK", "auxiliary video mask", options->auxVideoMask);
    167161
    168         // compute auxMask *= videoMask
    169         if (!psBinaryOp(auxMask, auxMask, "*", videoMask)) {
    170             psError(PS_ERR_UNKNOWN, false, "mulitplication of auxiliary mask and auxiliary video mask failed");
     162        // compute auxMask |= videoMask
     163        if (!psBinaryOp(auxMaskImage, auxMaskImage, "|", videoMask)) {
     164            psError(PS_ERR_UNKNOWN, false, "combination of auxiliary mask and auxiliary video mask failed");
    171165            return false;
    172166        }
     
    174168    }
    175169
    176     if ((mask->numRows != auxMask->numRows) || (mask->numCols != auxMask->numCols) ||
    177         (mask->row0 != auxMask->row0) || (mask->col0 != auxMask->col0)) {
     170    if ((mask->numRows != auxMaskImage->numRows) || (mask->numCols != auxMaskImage->numCols) ||
     171        (mask->row0 != auxMaskImage->row0) || (mask->col0 != auxMaskImage->col0)) {
    178172        psError(PS_ERR_IO, false, "structure of auxiliary mask does not match this chip");
    179173        return false;
     
    187181    psAssert(staticMaskVal, "Need staticMaskVal!");
    188182
     183    // XXX: now that we are using an auxilary mask that matches the format of ps masks, we could just
     184    // do psBinaryOp(mask, mask, "|", auxMaskImage) but run an explicit loop so that we can measure
     185    // and log the number of additional pixels masked
    189186    int numCols = mask->numCols, numRows = mask->numRows; // Size of image
    190187    unsigned long numMasked = 0;
    191188    for (int y = 0; y < numRows; y++) {
    192189        for (int x = 0; x < numCols; x++) {
    193             // auxMask is floating point type image with pixel value 0 meaning mask it
    194             // XXX: support other types and get the mask value from the header
    195             if (auxMask->data.F32[y][x] == 0) {
     190            if (auxMaskImage->data.U16[y][x] != 0) {
    196191                if ((mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & staticMaskVal) == 0) {
    197192                    // pixel was not previously included in the static mask so mask it
     
    200195                }
    201196                // I don't need to do this.
     197                // image->data.F32[y][x] = 0.0;
    202198                // The background subtraction code runs after us and will do it there
    203                 // image->data.F32[y][x] = 0.0;
    204199            }
    205200        }
     
    213208    }
    214209
    215     psFree(auxMask);
    216 
    217210    return true;
    218211}
  • trunk/ppImage/src/ppImageParseCamera.c

    r35685 r36169  
    7272                               PM_FPA_FILE_MASK, PM_DETREND_TYPE_VIDEOMASK)) {
    7373            psError(PS_ERR_IO, false, "Can't find a mask image source");
     74            psFree(options);
     75            return NULL;
     76        }
     77      }
     78      if (options->doAuxMask) {
     79        if (!ppImageDefineFile(config, input->fpa, "PPIMAGE.AUXMASK", "MASK",
     80                               PM_FPA_FILE_MASK, PM_DETREND_TYPE_AUXMASK)) {
     81            psError(PS_ERR_IO, false, "Can't find a auxillary mask image source");
    7482            psFree(options);
    7583            return NULL;
Note: See TracChangeset for help on using the changeset viewer.