Changeset 20963 for trunk/psModules/src/objects/pmSourceMatch.c
- Timestamp:
- Dec 11, 2008, 3:54:17 PM (17 years ago)
- File:
-
- 1 edited
-
trunk/psModules/src/objects/pmSourceMatch.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psModules/src/objects/pmSourceMatch.c
r20953 r20963 290 290 const psArray *matches, // Array of matches 291 291 const psVector *zp, // Zero points for each image (including airmass term) 292 const psVector *photo // Photometric image? 292 const psVector *photo, // Photometric image? 293 float sysErr2 // Systematic error, squared 293 294 ) 294 295 { … … 321 322 int index = match->image->data.U32[j]; // Image index 322 323 float mag = match->mag->data.F32[j]; // Measured magnitude 323 double magErr = match->magErr->data.F32[j]; // Error in measured magnitude324 double invErr2 = 1.0 / PS_SQR(magErr); // Inverse square error324 double magErr2 = PS_SQR(match->magErr->data.F32[j]) + sysErr2; // Error in measured magnitude 325 double invErr2 = 1.0 / magErr2; // Inverse square error 325 326 float cal = zp->data.F32[index]; // Calibration to apply to image 326 327 if (!photo || !photo->data.U8[index]) { … … 351 352 int index = match->image->data.U32[j]; // Image index 352 353 float mag = match->mag->data.F32[j]; // Measured magnitude 353 double magErr = match->magErr->data.F32[j]; // Error in measured magnitude354 double invErr2 = 1.0 / PS_SQR(magErr); // Inverse square error354 double magErr2 = PS_SQR(match->magErr->data.F32[j]) + sysErr2; // Error in measured magnitude 355 double invErr2 = 1.0 / magErr2; // Inverse square error 355 356 float cal = zp->data.F32[index]; // Calibration to apply to image 356 357 accum->data.F64[index] += (mag + cal - stars->data.F32[i]) * invErr2; … … 377 378 int index = match->image->data.U32[j]; // Image index 378 379 float mag = match->mag->data.F32[j]; // Measured magnitude 379 float magErr = match->magErr->data.F32[j]; // Error in measured magnitude380 float magErr2 = PS_SQR(match->magErr->data.F32[j]) + sysErr2; // Error in measured magnitude 380 381 float cal = zp->data.F32[index]; // Calibration to apply to image 381 382 if (!photo || !photo->data.U8[index]) { 382 383 cal -= trans->data.F32[index]; 383 384 } 384 float dev = (mag + cal - stars->data.F32[index]) / magErr; // Deviation from fit385 if (isfinite(dev )) {386 chi2 += PS_SQR(dev );385 float dev2 = mag + cal - stars->data.F32[index]; // Deviation from fit 386 if (isfinite(dev2)) { 387 chi2 += PS_SQR(dev2) / magErr2; 387 388 dof++; 388 389 } … … 449 450 const psVector *photo, // Photometric image? 450 451 float starClip, // Clipping for stars 451 float sysErr // Systematic error452 float sysErr2 // Systematic error squared 452 453 ) 453 454 { … … 467 468 468 469 starClip = PS_SQR(starClip); 469 sysErr = PS_SQR(sysErr);470 470 471 471 int numRejected = 0; // Number rejected … … 486 486 } 487 487 float dev = mag + cal - stars->data.F32[i]; // Deviation 488 if (PS_SQR(dev) > starClip * (PS_SQR(magErr) + sysErr )) {488 if (PS_SQR(dev) > starClip * (PS_SQR(magErr) + sysErr2)) { 489 489 numRejected++; 490 490 match->mask->data.PS_TYPE_MASK_DATA[j] = 0xFF; … … 514 514 PS_ASSERT_FLOAT_LARGER_THAN(transClip, 0.0, NULL); 515 515 516 sysErr *= sysErr; 517 516 518 int numImages = zp->n; // Number of images 517 519 int numStars = matches->n; // Number of stars … … 522 524 psVector *stars = psVectorAlloc(numStars, PS_TYPE_F32); // Magnitudes for each star 523 525 524 float chi2 = sourceMatchRelphotIterate(trans, stars, matches, zp, photo ); // chi^2 for solution526 float chi2 = sourceMatchRelphotIterate(trans, stars, matches, zp, photo, sysErr); // chi^2 for solution 525 527 psTrace("psModules.objects", 1, "Initial: chi^2 = %f\n", chi2); 526 528 float lastChi2 = INFINITY; // chi^2 on last iteration … … 544 546 psTrace("psModules.objects", 3, "%f%% of measurements rejected", fracRej * 100); 545 547 546 chi2 = sourceMatchRelphotIterate(trans, stars, matches, zp, photo ); // chi^2 for solution548 chi2 = sourceMatchRelphotIterate(trans, stars, matches, zp, photo, sysErr); // chi^2 for solution 547 549 psTrace("psModules.objects", 1, "iter = %d: chi^2 = %f rejected = %f\n", i, chi2, fracRej); 548 550 }
Note:
See TracChangeset
for help on using the changeset viewer.
