Changeset 18132 for trunk/psModules/src/detrend/pmDark.c
- Timestamp:
- Jun 13, 2008, 3:25:30 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/detrend/pmDark.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/detrend/pmDark.c
r17228 r18132 25 25 // Look up the value of an ordinate in a readout 26 26 static bool ordinateLookup(float *value, // Value of ordinate, to return 27 bool *inRange, // is value within min : max range? 27 28 const char *name, // Name of ordinate (concept name) 28 29 bool scale, // Scale the value? … … 35 36 assert(ro); 36 37 38 *inRange = true; 39 37 40 pmCell *cell = ro->parent; // Parent cell 38 41 if (!cell) { … … 67 70 if (*value < min || *value > max) { 68 71 psWarning("Value of concept %s (%f) outside range (%f:%f)", name, *value, min, max); 69 returnfalse;72 *inRange = false; 70 73 } 71 74 *value = 2.0 * (*value - min) / (max - min) - 1.0; … … 104 107 PS_ASSERT_INT_NONNEGATIVE(iter, false); 105 108 PS_ASSERT_FLOAT_LARGER_THAN(rej, 0.0, false); 109 110 bool inRange = true; 106 111 107 112 // Extract fitting orders … … 118 123 pmReadout *ro = inputs->data[i]; // Readout of interest 119 124 float normValue; // Normalisation value 120 if (!ordinateLookup(&normValue, normConcept, false, NAN, NAN, ro)) {125 if (!ordinateLookup(&normValue, &inRange, normConcept, false, NAN, NAN, ro)) { 121 126 psWarning("Unable to find value of %s for readout %d", normConcept, i); 122 127 roMask->data.U8[i] = 0xff; … … 164 169 pmReadout *ro = inputs->data[j]; // Readout of interest 165 170 float value = NAN; // Value of ordinate 166 if (!ordinateLookup(&value, ord->name, ord->scale, ord->min, ord->max, ro)) { 171 if (!ordinateLookup(&value, &inRange, ord->name, ord->scale, ord->min, ord->max, ro)) { 172 roMask->data.U8[j] = 0xff; 173 val->data.F32[i] = NAN; 174 numBadInputs++; 175 continue; 176 } 177 if (!inRange) { 167 178 roMask->data.U8[j] = 0xff; 168 179 val->data.F32[i] = NAN; … … 271 282 mask->data.PS_TYPE_MASK_DATA[r] = readout->mask->data.PS_TYPE_MASK_DATA[yIn][xIn]; 272 283 } 273 } 284 285 } 286 287 // XXX test 288 if (0 && (i == 377) && (j == 80)) { 289 FILE *f = fopen ("test.dat", "w"); 290 for (int r = 0; r < inputs->n; r++) { 291 fprintf (f, "%d %d %d ", i, j, mask->data.U8[r]); 292 psVector *value = values->data[r]; 293 for (int tmpj = 0; tmpj < value->n; tmpj++) { 294 fprintf (f, "%f ", value->data.F32[tmpj]); 295 } 296 fprintf (f, "%f\n", pixels->data.F32[r]); 297 } 298 fclose (f); 299 } 274 300 275 301 if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, maskVal, values, iter, rej)) { … … 337 363 bool mdok; // Status of MD lookup 338 364 psString normConcept = psMetadataLookupStr(&mdok, dark->analysis, PM_DARK_ANALYSIS_NORM); // Normalisation 365 bool inRange = false; 339 366 340 367 int numOrdinates = ordinates->n; // Number of ordinates … … 343 370 pmDarkOrdinate *ord = ordinates->data[i]; // Ordinate of interest 344 371 float value = NAN; // Value for ordinate 345 if (!ordinateLookup(&value, ord->name, ord->scale, ord->min, ord->max, readout)) {372 if (!ordinateLookup(&value, &inRange, ord->name, ord->scale, ord->min, ord->max, readout)) { 346 373 psError(PS_ERR_UNKNOWN, true, "Unable to find value for %s", ord->name); 347 374 psFree(values); … … 353 380 bool doNorm = false; // Do normalisation? 354 381 if (normConcept && strlen(normConcept) > 0) { 355 if (!ordinateLookup(&norm, normConcept, false, NAN, NAN, readout)) {382 if (!ordinateLookup(&norm, &inRange, normConcept, false, NAN, NAN, readout)) { 356 383 psError(PS_ERR_UNKNOWN, true, "Unable to find value for %s", normConcept); 357 384 psFree(values);
Note:
See TracChangeset
for help on using the changeset viewer.
