Changeset 36649 for trunk/ppBackground/src/ppBackgroundStackMath.c
- Timestamp:
- Apr 3, 2014, 6:11:18 PM (12 years ago)
- File:
-
- 1 edited
-
trunk/ppBackground/src/ppBackgroundStackMath.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
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.
