Changeset 13489
- Timestamp:
- May 23, 2007, 12:41:52 PM (19 years ago)
- Location:
- trunk/ppStack/src
- Files:
-
- 4 edited
-
ppStackArguments.c (modified) (3 diffs)
-
ppStackCamera.c (modified) (2 diffs)
-
ppStackLoop.c (modified) (5 diffs)
-
ppStackReadout.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppStack/src/ppStackArguments.c
r13466 r13489 80 80 psMetadataAddStr(arguments, PS_LIST_TAIL, "-stat", 0, "Statistics file", NULL); 81 81 psMetadataAddS32(arguments, PS_LIST_TAIL, "-iter", 0, "Number of rejection iterations", 0); 82 psMetadataAddF32(arguments, PS_LIST_TAIL, "-rej", 0, "Rejection thresold (sigma)", NAN); 82 psMetadataAddF32(arguments, PS_LIST_TAIL, "-combine-rej", 0, "Combination rejection thresold (sigma)", NAN); 83 psMetadataAddF32(arguments, PS_LIST_TAIL, "-convolve-rej", 0, "Convolution rejection thresold (sigma)", NAN); 83 84 psMetadataAddF32(arguments, PS_LIST_TAIL, "-extent", 0, "Extent of convolution (sigma)", NAN); 84 85 psMetadataAddU8(arguments, PS_LIST_TAIL, "-mask-bad", 0, "Mask value for bad pixels", 0); … … 89 90 } 90 91 91 psMetadataAddStr(config->arguments, PS_LIST_TAIL, "IMAGE .LIST", 0,92 psMetadataAddStr(config->arguments, PS_LIST_TAIL, "IMAGES.LIST", 0, 92 93 "Name of the input image list", argv[1]); 93 94 psMetadataAddStr(config->arguments, PS_LIST_TAIL, "MASKS.LIST", 0, … … 104 105 } 105 106 106 VALUE_ARG_RECIPE_INT("-iter", "ITER", S32, 0); 107 VALUE_ARG_RECIPE_FLOAT("-rej", "REJ", F32); 108 VALUE_ARG_RECIPE_FLOAT("-extent", "EXTENT", F32); 109 VALUE_ARG_RECIPE_INT("-mask-bad", "MASK.BAD", U8, 0); 110 VALUE_ARG_RECIPE_INT("-mask-blank", "MASK.BLANK", U8, 0); 107 VALUE_ARG_RECIPE_INT("-iter", "ITER", S32, 0); 108 VALUE_ARG_RECIPE_FLOAT("-combine-rej", "COMBINE.REJ", F32); 109 VALUE_ARG_RECIPE_FLOAT("-convolve-rej", "CONVOLVE.REJ", F32); 110 VALUE_ARG_RECIPE_FLOAT("-extent", "EXTENT", F32); 111 VALUE_ARG_RECIPE_INT("-mask-bad", "MASK.BAD", U8, 0); 112 VALUE_ARG_RECIPE_INT("-mask-blank", "MASK.BLANK", U8, 0); 111 113 112 114 psTrace("ppStack", 1, "Done reading command-line arguments\n"); -
trunk/ppStack/src/ppStackCamera.c
r13464 r13489 104 104 105 105 // Output image 106 pmFPAfile *output = pmFPAfileDefineOutput(config, NULL, "PPSTACK.OUTPUT"); 106 pmFPA *fpa = pmFPAConstruct(config->camera); // FPA to contain the output 107 if (!fpa) { 108 psError(PS_ERR_UNEXPECTED_NULL, false, "Unable to construct an FPA from camera configuration."); 109 return false; 110 } 111 pmFPAfile *output = pmFPAfileDefineOutput(config, fpa, "PPSTACK.OUTPUT"); 112 psFree(fpa); // Drop reference 107 113 if (!output) { 108 114 psError(PS_ERR_IO, false, _("Unable to generate output file from PPSTACK.OUTPUT")); … … 113 119 return false; 114 120 } 121 122 // Generate the correct structure 123 pmFPALevel phuLevel = pmFPAPHULevel(output->format); // Level at which PHU goes 124 pmFPAview *view = pmFPAviewAlloc(0);// View for current level 125 if (phuLevel == PM_FPA_LEVEL_FPA) { 126 if (!pmFPAAddSourceFromView(fpa, "Stack", view, output->format)) { 127 psError(PS_ERR_UNKNOWN, false, "Unable to add PHU to FPA."); 128 psFree(fpa); 129 psFree(view); 130 return NULL; 131 } 132 } else { 133 pmChip *chip; // Chip from FPA 134 while ((chip = pmFPAviewNextChip(view, fpa, 1))) { 135 if (phuLevel == PM_FPA_LEVEL_CHIP) { 136 if (!pmFPAAddSourceFromView(fpa, "Stack", view, output->format)) { 137 psError(PS_ERR_UNKNOWN, false, "Unable to add PHU to FPA."); 138 psFree(fpa); 139 psFree(view); 140 return NULL; 141 } 142 } else { 143 pmCell *cell; // Cell from chip 144 while ((cell = pmFPAviewNextCell(view, fpa, 1))) { 145 if (phuLevel == PM_FPA_LEVEL_CELL) { 146 if (!pmFPAAddSourceFromView(fpa, "Stack", view, output->format)) { 147 psError(PS_ERR_UNKNOWN, false, "Unable to add PHU to FPA."); 148 psFree(fpa); 149 psFree(view); 150 return NULL; 151 } 152 } 153 } 154 } 155 } 156 } 157 psFree(view); 115 158 116 159 // Output mask -
trunk/ppStack/src/ppStackLoop.c
r13464 r13489 30 30 } 31 31 32 pmFPAfile * output = psMetadataLookupPtr(NULL, config->files, "PPSTACK.OUTPUT"); // Output file33 if (! output) {34 psError(PS_ERR_UNEXPECTED_NULL, false, "Can't find output data!\n");32 pmFPAfile *input = psMetadataLookupPtr(NULL, config->files, "PPSTACK.INPUT"); // Token input file 33 if (!input) { 34 psError(PS_ERR_UNEXPECTED_NULL, false, "Can't find input data!\n"); 35 35 return false; 36 36 } … … 45 45 46 46 pmChip *chip; // Chip of interest 47 while ((chip = pmFPAviewNextChip(view, output->fpa, 1)) != NULL) {47 while ((chip = pmFPAviewNextChip(view, input->fpa, 1)) != NULL) { 48 48 if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) { 49 49 return false; … … 51 51 52 52 pmCell *cell; // Cell of interest 53 while ((cell = pmFPAviewNextCell(view, output->fpa, 1)) != NULL) {53 while ((cell = pmFPAviewNextCell(view, input->fpa, 1)) != NULL) { 54 54 if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) { 55 55 return false; … … 67 67 68 68 pmReadout *readout; // Readout of interest 69 while ((readout = pmFPAviewNextReadout(view, output->fpa, 1))) {69 while ((readout = pmFPAviewNextReadout(view, input->fpa, 1))) { 70 70 if (!pmFPAfileIOChecks(config, view, PM_FPA_BEFORE)) { 71 71 return false; … … 85 85 // Perform statistics on the cell 86 86 if (stats) { 87 ppStats(stats, output->fpa, view, config);87 ppStats(stats, input->fpa, view, config); 88 88 } 89 89 -
trunk/ppStack/src/ppStackReadout.c
r13464 r13489 17 17 bool ppStackReadout(pmConfig *config, const pmFPAview *view) 18 18 { 19 // XXX Somehow need to add an HDU in to the output so that we can actually write it out! 19 // Get the recipe values 20 int iter = psMetadataLookupS32(NULL, config->arguments, "ITER"); // Rejection iterations 21 float combineRej = psMetadataLookupF32(NULL, config->arguments, "COMBINE.REJ"); // Combination threshold 22 float convolveRej = psMetadataLookupF32(NULL, config->arguments, "CONVOLVE.REJ"); // Convolution threshold 23 float extent = psMetadataLookupF32(NULL, config->arguments, "EXTENT"); // Extent of convolution 24 psMaskType maskBad = psMetadataLookupU8(NULL, config->arguments, "MASK.BAD"); // Value to mask 25 psMaskType maskBlank = psMetadataLookupU8(NULL, config->arguments, "MASK.BLANK"); // Mask for blank reg. 20 26 21 27 // Get the output target … … 31 37 "^PPSTACK.INPUT$"); // Iterator over input files 32 38 psMetadataItem *item; // Item from iteration 39 psStats *stats = psStatsAlloc(PS_STAT_ROBUST_MEDIAN); // Statistics 40 psRandom *rng = psRandomAlloc(0, PS_RANDOM_TAUS); // Random number generator 33 41 while ((item = psMetadataGetAndIncrement(inputIter))) { 34 42 assert(item->type == PS_DATA_UNKNOWN); 35 43 pmFPAfile *inputFile = item->data.V; // An input file 36 44 pmReadout *ro = pmFPAviewThisReadout(view, inputFile->fpa); // Corresponding readout 45 46 // Brain-dead background subtraction 47 if (!psImageBackground(stats, ro->image, ro->mask, maskBad, rng)) { 48 psError(PS_ERR_UNKNOWN, false, "Unable to get image background on image %ld", stack->n); 49 psFree(stats); 50 psFree(rng); 51 psFree(inputIter); 52 psFree(stack); 53 psFree(outRO); 54 return false; 55 } 56 (void)psBinaryOp(ro->image, ro->image, "-", psScalarAlloc(stats->robustMedian, PS_TYPE_F32)); 57 58 // Normalise each input by the exposure time 59 float exposure = psMetadataLookupF32(NULL, ro->parent->concepts, "CELL.EXPOSURE"); // Exposure time 60 if (!isfinite(exposure)) { 61 psError(PS_ERR_BAD_PARAMETER_VALUE, true, 62 "CELL.EXPOSURE is not set for input file %ld", stack->n); 63 psFree(stats); 64 psFree(rng); 65 psFree(inputIter); 66 psFree(outRO); 67 psFree(stack); 68 return false; 69 } 70 (void)psBinaryOp(ro->image, ro->image, "/", psScalarAlloc(exposure, PS_TYPE_F32)); 37 71 pmStackData *data = pmStackDataAlloc(ro, SEEING, WEIGHT); // Data to stack 38 72 psArrayAdd(stack, ARRAY_BUFFER, data); 39 73 } 40 74 psFree(inputIter); 75 psFree(stats); 76 psFree(rng); 41 77 42 // Get the recipe values 43 int iter = psMetadataLookupS32(NULL, config->arguments, "ITER"); // Rejection iterations 44 float rej = psMetadataLookupF32(NULL, config->arguments, "REJ"); // Rejection threshold 45 float extent = psMetadataLookupF32(NULL, config->arguments, "EXTENT"); // Extent of convolution 46 psMaskType maskBad = psMetadataLookupU8(NULL, config->arguments, "MASK.BAD"); // Value to mask 47 psMaskType maskBlank = psMetadataLookupU8(NULL, config->arguments, "MASK.BLANK"); // Mask for blank reg. 48 49 if (!pmStackCombine(outRO, stack, maskBad, maskBlank, iter, rej)) { 78 if (!pmStackCombine(outRO, stack, maskBad, maskBlank, iter, combineRej)) { 50 79 psError(PS_ERR_UNKNOWN, false, "Unable to combine input readouts with rejection."); 51 80 psFree(stack); … … 54 83 } 55 84 56 if (!pmStackReject(stack, maskBad, extent, rej)) { 85 #if 1 86 { 87 psFits *fits = psFitsOpen("combined.fits", "w"); 88 psFitsWriteImage(fits, NULL, outRO->image, 0, NULL); 89 psFitsClose(fits); 90 } 91 92 for (int i = 0; i < num; i++) { 93 pmStackData *data = stack->data[i]; // Data for this image 94 psImage *inspected = psPixelsToMask(NULL, data->pixels, 95 psRegionSet(0, data->sky->image->numCols, 96 0, data->sky->image->numRows), 97 maskBlank); 98 psString name = NULL; // Name of image 99 psStringAppend(&name, "inspect%03d.fits", i); 100 psFits *fits = psFitsOpen(name, "w"); 101 psFree(name); 102 psFitsWriteImage(fits, NULL, inspected, 0, NULL); 103 psFitsClose(fits); 104 } 105 #endif 106 107 if (!pmStackReject(stack, maskBad, extent, convolveRej)) { 57 108 psError(PS_ERR_UNKNOWN, false, "Unable to reject input pixels."); 58 109 psFree(stack); … … 61 112 } 62 113 63 if (!pmStackCombine(outRO, stack, maskBad, maskBlank, 0, 0.0)) { 114 #if 1 115 for (int i = 0; i < num; i++) { 116 pmStackData *data = stack->data[i]; // Data for this image 117 psImage *rejected = psPixelsToMask(NULL, data->pixels, 118 psRegionSet(0, data->sky->image->numCols, 119 0, data->sky->image->numRows), 120 maskBlank); 121 psString name = NULL; // Name of image 122 psStringAppend(&name, "reject%03d.fits", i); 123 psFits *fits = psFitsOpen(name, "w"); 124 psFree(name); 125 psFitsWriteImage(fits, NULL, rejected, 0, NULL); 126 psFitsClose(fits); 127 } 128 #endif 129 130 if (!pmStackCombine(outRO, stack, maskBad, maskBlank, 0, combineRej)) { 64 131 psError(PS_ERR_UNKNOWN, false, "Unable to combine input readouts."); 65 132 psFree(stack); … … 68 135 } 69 136 137 outRO->data_exists = true; 138 outRO->parent->data_exists = true; 139 outRO->parent->parent->data_exists = true; 140 70 141 psFree(stack); 71 142 psFree(outRO); // Drop reference
Note:
See TracChangeset
for help on using the changeset viewer.
