IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 23463


Ignore:
Timestamp:
Mar 20, 2009, 5:56:03 PM (17 years ago)
Author:
eugene
Message:

add ability to handle CTEMASK mode (combine like a flat; mask pixels below a minimum value; output a mask image)

Location:
trunk/ppMerge/src
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/ppMerge/src/ppMerge.c

    r23195 r23463  
    5555      case PPMERGE_TYPE_FLAT:
    5656      case PPMERGE_TYPE_FRINGE:
     57      case PPMERGE_TYPE_CTEMASK:
    5758        if (!ppMergeScaleZero(config)) {
    5859            psErrorStackPrint(stderr, "Error getting scale and zero-points.");
  • trunk/ppMerge/src/ppMerge.h

    r23195 r23463  
    4040    PPMERGE_TYPE_DARK,                  ///< (Multi-)Dark frame
    4141    PPMERGE_TYPE_MASK,                  ///< Mask frame
     42    PPMERGE_TYPE_CTEMASK,               ///< CTE Mask based on flat variance
    4243    PPMERGE_TYPE_SHUTTER,               ///< Shutter frame
    4344    PPMERGE_TYPE_FLAT,                  ///< Flat-field frame (dome or sky)
  • trunk/ppMerge/src/ppMergeArguments.c

    r21365 r23463  
    170170    psMetadataAddS32(arguments, PS_LIST_TAIL, "-fringe-ysmooth", 0, "Number of smoothing regions in y", 0);
    171171
     172    /** CTEMASK construction parameters */
     173    psMetadataAddF32(arguments, PS_LIST_TAIL, "-cte-min", 0, "min allowed value for good CTE", NAN);
     174
    172175    /** Shutter construction parameters */
    173176    psMetadataAddS32(arguments, PS_LIST_TAIL, "-shutter-size", 0, "Size for shutter measurement regions", 0);
     
    268271      goto VALID;
    269272    }
     273    if (strcasecmp(typeStr, "CTEMASK") == 0) {
     274      type = PPMERGE_TYPE_CTEMASK;
     275      goto VALID;
     276    }
    270277    if (strcasecmp(typeStr, "MASK") == 0 ||
    271278        strcasecmp(typeStr, "DARKMASK") == 0 ||
     
    314321    VALUE_ARG_RECIPE_INT("-fringe-xsmooth", "FRINGE.XSMOOTH", S32, 0);
    315322    VALUE_ARG_RECIPE_INT("-fringe-ysmooth", "FRINGE.YSMOOTH", S32, 0);
     323
     324    /** CTEMASK construction parameters */
     325    VALUE_ARG_RECIPE_FLOAT("-cte-min",      "CTE.MIN",        F32);
    316326
    317327    /** Shutter construction parameters */
  • trunk/ppMerge/src/ppMergeCamera.c

    r21365 r23463  
    326326        fileType = PM_FPA_FILE_MASK;
    327327        break;
     328      case PPMERGE_TYPE_CTEMASK:
     329        fileType = PM_FPA_FILE_MASK;
     330        break;
    328331      case PPMERGE_TYPE_SHUTTER:
    329332        fileType = PM_FPA_FILE_IMAGE;
  • trunk/ppMerge/src/ppMergeFiles.c

    r21365 r23463  
    209209        outSuffix = "MASK";
    210210        break;
     211      case PPMERGE_TYPE_CTEMASK:
     212        outSuffix = "MASK";
     213        break;
    211214      case PPMERGE_TYPE_SHUTTER:
    212215        outSuffix = "SHUTTER";
  • trunk/ppMerge/src/ppMergeLoop.c

    r23410 r23463  
    118118      case PPMERGE_TYPE_BIAS:
    119119      case PPMERGE_TYPE_DARK:
     120      case PPMERGE_TYPE_CTEMASK:
    120121        break;
    121122      default:
     
    208209            // call the init functions
    209210            switch (type) {
     211              case PPMERGE_TYPE_CTEMASK:
    210212              case PPMERGE_TYPE_BIAS:
    211213              case PPMERGE_TYPE_FLAT:
     
    252254                // Start a job
    253255                switch (type) {
     256                  case PPMERGE_TYPE_CTEMASK:
    254257                  case PPMERGE_TYPE_BIAS:
    255258                  case PPMERGE_TYPE_FLAT:
     
    408411            }
    409412
     413            // calculate CTEMASK after stats so stats reflect median image
     414            if (type == PPMERGE_TYPE_CTEMASK && outRO) {
     415                // need to apply range cuts on the output image
     416                psAssert (outRO->mask, "mask is not defined");
     417                psAssert (outRO->mask->numCols == outRO->image->numCols, "mismatch between image and mask");
     418                psAssert (outRO->mask->numRows == outRO->image->numRows, "mismatch between image and mask");
     419
     420                // CTEMASK parameters
     421                float cteMin = psMetadataLookupF32(NULL, arguments, "CTE.MIN"); // Number of fringe points
     422
     423                char *cteMaskName = psMetadataLookupStr (&mdok, config->arguments, "MASK.SET.VALUE");
     424                psImageMaskType cteMaskValue = pmConfigMaskGet(cteMaskName, config);
     425
     426                psF32 **outputImage = outRO->image->data.F32;
     427                psImageMaskType **outputMask = outRO->mask->data.PS_TYPE_IMAGE_MASK_DATA;
     428                for (int iy = 0; iy < outRO->image->numRows; iy++) {
     429                    for (int ix = 0; ix < outRO->image->numCols; ix++) {
     430                        if (outputImage[iy][ix] < cteMin) {
     431                            outputMask[iy][ix] |= cteMaskValue;
     432                        }
     433                    }
     434                }
     435            }
     436
    410437            psFree(outRO);
    411438            cellNum++;
  • trunk/ppMerge/src/ppMergeScaleZero.c

    r23259 r23463  
    3535      case PPMERGE_TYPE_BIAS:
    3636      case PPMERGE_TYPE_DARK:
     37      case PPMERGE_TYPE_CTEMASK:
    3738        // Nothing to measure
    3839        return true;
Note: See TracChangeset for help on using the changeset viewer.