- Timestamp:
- Apr 3, 2014, 6:11:18 PM (12 years ago)
- Location:
- trunk/ppBackground/src
- Files:
-
- 4 edited
-
ppBackgroundStack.h (modified) (1 diff)
-
ppBackgroundStackData.c (modified) (1 diff)
-
ppBackgroundStackLoop.c (modified) (6 diffs)
-
ppBackgroundStackMath.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ppBackground/src/ppBackgroundStack.h
r36635 r36649 23 23 24 24 psImageMap *modelMap; 25 psS32 model_iteration; 25 26 // These are the full extent of the input data 26 27 psF32 ra_min; -
trunk/ppBackground/src/ppBackgroundStackData.c
r36615 r36649 50 50 51 51 data->modelMap = NULL; 52 data->model_iteration = 0; 52 53 data->ra_min = 1e9; 53 54 data->ra_max = -1e9; -
trunk/ppBackground/src/ppBackgroundStackLoop.c
r36642 r36649 9 9 10 10 #include "ppBackgroundStack.h" 11 12 #define WCS_TOLERANCE 0.001 // Tolerance for WCS 13 11 14 12 15 bool ppBackgroundStackLoop(ppBackgroundStackData *data // Run-time data … … 120 123 if (tp->y > data->y_max) { data->y_max = tp->y; } 121 124 122 /* data->x_min -= data->ra_min; */123 /* data->x_max -= data->ra_min; */124 /* data->y_min -= data->dec_min; */125 /* data->y_max -= data->dec_min; */126 127 128 125 psStats *stats = psStatsAlloc(PS_STAT_ROBUST_MEDIAN | PS_STAT_ROBUST_STDEV); 129 126 psImageBinning *binning = psImageBinningAlloc(); 130 127 binning->nXruff = 13; // Number of samples 131 128 binning->nYruff = 13; 132 // binning->nXfine = ceil(data->ra_max - data->ra_min) + 1; // This is the range we're looking at133 // binning->nYfine = ceil(data->dec_max - data->dec_min) + 1;134 129 binning->nXfine = ceil(data->x_max - data->x_min) + 1; 135 130 binning->nYfine = ceil(data->y_max - data->y_min) + 1; … … 146 141 P_PSIMAGE_SET_ROW0(sizeImage, data->y_min); 147 142 data->modelMap = psImageMapAlloc(sizeImage,binning,stats); 148 /* psFree(sizeImage); */149 /* data->modelMap = psImageMapNoImageAlloc( binning,stats); */150 /* P_PSIMAGE_SET_COL0(data->modelMap->map, (data->x_min - binning->nXskip) / binning->nXbin); */151 /* P_PSIMAGE_SET_ROW0(data->modelMap->map, (data->y_min - binning->nYskip) / binning->nYbin); */152 153 // force col0/row0154 /* data->modelMap->map->col0 = data->modelMap->binning->nXskip; */155 /* data->modelMap->map->row0 = data->modelMap->binning->nYskip; */156 143 157 144 // PART 2: … … 173 160 174 161 // This is where an iterative solution loop would likely start. 175 for (int iterator = 0; iterator < 2; iterator++) {162 for (int iterator = 0; iterator < 4; iterator++) { 176 163 // Construct the offset information 177 164 printf("Model fit!\n"); … … 310 297 psFree(fp); 311 298 psFree(tp); 299 300 // Copy WCS (from ppStackUpdateHeader) 301 pmHDU *inHDU = pmHDUFromCell(readout->parent); 302 model->parent->hdu = pmHDUAlloc(NULL); 303 corr->parent->hdu = pmHDUAlloc(NULL); 304 pmHDU *modHDU= pmHDUFromCell(model->parent); 305 pmHDU *corHDU= pmHDUFromCell(corr->parent); 306 307 if (!modHDU || !inHDU) { 308 psWarning("Unable to find HDU at FPA level to copy wcs!"); 309 } 310 else { 311 if (!pmAstromReadWCS(stack_model->fpa,model_cell->parent,inHDU->header,1.0)) { 312 psErrorClear(); 313 psWarning("Unable to read WCS astrometry from input FPA!"); 314 } 315 else { 316 if (!modHDU->header) { 317 modHDU->header = psMetadataAlloc(); 318 } 319 if (!pmAstromWriteWCS(modHDU->header, stack_model->fpa,model_cell->parent, WCS_TOLERANCE)) { 320 psErrorClear(); 321 psWarning("Unable to read WCS astrometry from input FPA!"); 322 } 323 } 324 if (!pmAstromReadWCS(stack_corr->fpa,corr_cell->parent,inHDU->header,1.0)) { 325 psErrorClear(); 326 psWarning("Unable to read WCS astrometry from input FPA!"); 327 } 328 else { 329 if (!corHDU->header) { 330 corHDU->header = psMetadataAlloc(); 331 } 332 if (!pmAstromWriteWCS(corHDU->header, stack_corr->fpa,corr_cell->parent, WCS_TOLERANCE)) { 333 psErrorClear(); 334 psWarning("Unable to read WCS astrometry from input FPA!"); 335 } 336 } 337 } // End WCS saving. 338 339 312 340 } // Close readout 313 341 printf(" I'm done with that readout\n"); … … 339 367 psFree(view); 340 368 psFree(data->modelMap); 369 psFree(sizeImage); 341 370 } 342 371 -
trunk/ppBackground/src/ppBackgroundStackMath.c
r36642 r36649 55 55 } 56 56 psMetadata *chipData = psMetadataLookupPtr(NULL, expItem->data.md, workingChip); 57 if (!chipData) { continue; } 57 58 psImage *image = psMetadataLookupPtr(NULL, chipData, "bkg image"); 59 if (!image) { continue; } 58 60 psVectorAppend(tmp,image->data.F32[v][u]); 59 61 } // End loop over exposures … … 63 65 64 66 psFree(expIter); 67 psFree(tmp); 65 68 } // End u 66 69 } // End v 70 // Remove the median value from this data. We just want the tilts, not the offsets 71 psStatsInit(stats); 72 psImageStats(stats,solution,NULL,0); 73 for (v = 0; v < solution->numRows; v++) { 74 for (u = 0; u < solution->numCols; u++) { 75 solution->data.F32[v][u] -= stats->robustMedian; 76 } 77 } 78 79 67 80 } // End working chip scan 68 81 … … 90 103 psMetadataItem *chipItem; 91 104 while ((chipItem = psMetadataGetAndIncrement(chipIter))) { 105 // const char *chipName = chipItem->name; 106 92 107 psImage *image = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg image"); 93 108 psImage *ra = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg ra"); 94 109 psImage *dec = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg dec"); 95 110 // psImage *camera= psMetadataLookupPtr(NULL, data->OTA_solutions, chipName); 96 111 psVector *obs = psVectorAllocEmpty(image->numRows, PS_TYPE_F32); 97 112 psVector *model= psVectorAllocEmpty(image->numRows, PS_TYPE_F32); 98 113 114 int j = 0; 115 int used = 0; 99 116 for (v = 0; v < image->numRows; v++) { 100 117 for (u = 0; u < image->numCols; u++) { 101 118 if ((ra->data.F32[v][u] < data->x_min)||(ra->data.F32[v][u] > data->x_max)|| 102 (dec->data.F32[v][u] < data->y_min)||(dec->data.F32[v][u] > data->y_max)) { continue; }103 psVectorAppend(obs,image->data.F32[v][u]); 119 (dec->data.F32[v][u] < data->y_min)||(dec->data.F32[v][u] > data->y_max)) { j++; continue; } 120 psVectorAppend(obs,image->data.F32[v][u]);// - camera->data.F32[v][u]); 104 121 psVectorAppend(model, psImageMapEval(data->modelMap,ra->data.F32[v][u],dec->data.F32[v][u])); 105 } 106 } 107 108 psPolynomial1D *poly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD,1); 109 int status = psVectorFitPolynomial1D(poly,NULL,0,model,NULL,obs); 110 if (!status) { 111 psMetadataAddF32(chipItem->data.md,PS_LIST_TAIL,"bkg offset", PS_META_REPLACE, "background offset for this exposure/ota pair", poly->coeff[0]); 112 psMetadataAddF32(chipItem->data.md,PS_LIST_TAIL,"bkg scale", PS_META_REPLACE, "background scale for this exposure/ota pair", poly->coeff[1]); 113 } 114 psFree(poly); 122 j++; 123 used++; 124 } 125 } 126 127 if (used > 0) { 128 129 psPolynomial1D *poly = psPolynomial1DAlloc(PS_POLYNOMIAL_ORD,1); 130 int status = psVectorFitPolynomial1D(poly,NULL,0,model,NULL,obs); 131 printf("in model fit loop: %d %d %d %f %f\n",status,j,used,poly->coeff[0],poly->coeff[1]); 132 if (status && (poly->coeff[1] != 0.0)) { 133 psMetadataAddF32(chipItem->data.md,PS_LIST_TAIL,"bkg offset", PS_META_REPLACE, "background offset for this exposure/ota pair", poly->coeff[0]); 134 psMetadataAddF32(chipItem->data.md,PS_LIST_TAIL,"bkg scale", PS_META_REPLACE, "background scale for this exposure/ota pair", poly->coeff[1]); 135 } 136 psFree(poly); 137 } 115 138 } // End OTA loop 116 139 psFree(chipIter); … … 153 176 (dec->data.F32[v][u] < data->y_min)||(dec->data.F32[v][u] > data->y_max)) { continue; } 154 177 155 model->data.F32[v][u] = scale * image->data.F32[v][u] -offset - camera->data.F32[v][u];178 model->data.F32[v][u] = scale * image->data.F32[v][u] + offset - camera->data.F32[v][u]; 156 179 } 157 180 } … … 168 191 // This "averaging" is done using the psImageMapClipFit. 169 192 bool ppBackgroundStackModelFit(ppBackgroundStackData *data) { 170 long j ;171 int u,v; 172 173 long used ;193 long j = 0; 194 int u,v; 195 196 long used = 0; 174 197 psS16 N = psMetadataLookupS16(NULL, data->models, "N"); 175 198 psVector *X = psVectorAllocEmpty(N * 13 * 13,PS_TYPE_F32); … … 195 218 psImage *ra = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg ra"); 196 219 psImage *dec = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg dec"); 197 // psImage *model = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg image"); 220 #define DUMP_DATA 0 221 #if DUMP_DATA 222 psImage *model = psMetadataLookupPtr(NULL, chipItem->data.md, "bkg image"); 223 224 psF32 offset = psMetadataLookupF32(NULL,chipItem->data.md,"bkg offset"); 225 psF32 scale = psMetadataLookupF32(NULL,chipItem->data.md,"bkg scale"); 226 227 #endif 198 228 for (v = 0; v < calib->numRows; v++) { 199 229 for (u = 0; u < calib->numCols; u++) { … … 214 244 used++; 215 245 j++; 216 217 /* printf("DATA %ld %ld %f %f %f %f\n", */ 218 /* j,used, */ 219 /* ra->data.F32[v][u], */ 220 /* dec->data.F32[v][u], */ 221 /* calib->data.F32[v][u], */ 222 /* model->data.F32[v][u]); */ 223 246 #if DUMP_DATA 247 printf("DATA %d %ld %ld %f %f %f %f %f %f\n", 248 data->model_iteration,j,used, 249 offset,scale, 250 ra->data.F32[v][u], 251 dec->data.F32[v][u], 252 calib->data.F32[v][u], 253 model->data.F32[v][u]); 254 #endif 224 255 } 225 256 } … … 230 261 bool fitStatus; 231 262 bool status = psImageMapClipFit(&fitStatus,data->modelMap,stats, mask, 1, X, Y, Z, E); 232 263 data->model_iteration++; 233 264 psFree(expIter); 234 265 psFree(X);
Note:
See TracChangeset
for help on using the changeset viewer.
