Changeset 34800 for trunk/psModules
- Timestamp:
- Dec 11, 2012, 2:04:31 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
. (modified) (1 prop)
-
psModules (modified) (1 prop)
-
psModules/src/camera/pmFPABin.c (modified) (4 diffs)
-
psModules/src/camera/pmFPAfileIO.c (modified) (1 diff)
-
psModules/src/detrend/pmDark.c (modified) (3 diffs)
-
psModules/src/imcombine/pmStack.c (modified) (1 diff)
-
psModules/src/imcombine/pmStack.h (modified) (1 diff)
-
psModules/src/objects/Makefile.am (modified) (1 diff)
-
psModules/src/objects/pmFootprintCullPeaks.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
trunk/psModules
- Property svn:mergeinfo changed
/branches/czw_branch/20120906/psModules (added) merged: 34442,34516,34623,34625-34626,34667,34772
- Property svn:mergeinfo changed
-
trunk/psModules/src/camera/pmFPABin.c
r24906 r34800 43 43 } 44 44 45 int Nbits = (int) (ceil(log(maskVal)/log(2)) + 1); 46 int *bitcounter = malloc(sizeof(int) * Nbits); 47 int pxlcount; 48 45 49 int xLast = numColsIn - 1, yLast = numRowsIn - 1; // Last index 46 50 int yStart = psImageBinningGetFineY(binning, 0); // Starting input y for binning … … 55 59 float sum = 0.0; // Sum of pixels 56 60 int numPix = 0; // Number of pixels 61 62 for (int j = 0; j < Nbits; j++) { // Reset bit counter 63 bitcounter[j] = 0; 64 } 65 pxlcount = 0; 66 57 67 for (int y = yStart; y < yStop; y++) { 58 68 for (int x = xStart; x < xStop; x++) { 69 if (inMask && (inMask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] != 0)) { 70 for (int j = 0; j < Nbits; j++) { 71 psImageMaskType M = (psImageMaskType) pow(2,j); 72 if (inMask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & M) { 73 bitcounter[j]++; 74 } 75 } 76 } 77 59 78 if (inMask && (inMask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] & maskVal)) { 60 79 continue; … … 65 84 sum += inImage->data.F32[y][x]; 66 85 numPix++; 86 87 67 88 } 68 89 } 69 90 91 70 92 // Values to set 71 93 float imageValue; … … 79 101 } 80 102 outImage->data.F32[yOut][xOut] = imageValue; 81 outMask->data.PS_TYPE_IMAGE_MASK_DATA[yOut][xOut] = maskValue; 103 // outMask->data.PS_TYPE_IMAGE_MASK_DATA[yOut][xOut] = maskValue; 104 outMask->data.PS_TYPE_IMAGE_MASK_DATA[yOut][xOut] = 0; 105 for (int j = 0; j < Nbits; j++) { 106 if (bitcounter[j] > 0.5 * pxlcount) { 107 outMask->data.PS_TYPE_IMAGE_MASK_DATA[yOut][xOut] |= (int) pow(2,j); 108 } 109 } 82 110 xStart = xStop; 83 111 } -
trunk/psModules/src/camera/pmFPAfileIO.c
r34403 r34800 76 76 while ((item = psMetadataGetAndIncrement (iter)) != NULL) { 77 77 pmFPAfile *file = item->data.V; 78 79 78 switch (place) { 80 79 case PM_FPA_BEFORE: -
trunk/psModules/src/detrend/pmDark.c
r33089 r34800 353 353 354 354 // retrieve the required parameter vectors 355 psArray * values = psMetadataLookupPtr(&mdok, output->analysis, "DARK.VALUES");356 psAssert( values, "values not supplied");355 psArray *in_values = psMetadataLookupPtr(&mdok, output->analysis, "DARK.VALUES"); 356 psAssert(in_values, "values not supplied"); 357 357 psVector *roMask = psMetadataLookupPtr(&mdok, output->analysis, "DARK.RO.MASK"); 358 358 psAssert(roMask, "roMask not supplied"); 359 psVector *orders = psMetadataLookupPtr(&mdok, output->analysis, "DARK.ORDERS"); 360 psAssert(orders, "orders not supplied"); 361 362 psPolynomialMD *poly = psPolynomialMDAlloc(orders); // Polynomial for fitting 359 psVector *max_orders = psMetadataLookupPtr(&mdok, output->analysis, "DARK.ORDERS"); 360 psAssert(max_orders, "orders not supplied"); 361 362 psArray *values_set = psArrayAlloc(max_orders->n); 363 psArray *poly_set = psArrayAlloc(max_orders->n); 364 psVector *logL = psVectorAlloc(max_orders->n,PS_TYPE_F64); 365 366 for (int i = 0; i < max_orders->n; i++) { 367 psVector *orders = psVectorAlloc(i+1,PS_TYPE_U8); 368 for (int j = 0; j < orders->n; j++) { 369 orders->data.U8[j] = max_orders->data.U8[j]; 370 } 371 poly_set->data[i] = psPolynomialMDAlloc(orders); // Polynomial for fitting 372 373 psArray *values = psArrayAlloc(in_values->n); 374 375 for (int j = 0; j < values->n; j++) { 376 psVector *these_values = psVectorAlloc(i+1,PS_TYPE_F32); 377 psVector *input_values = in_values->data[j]; 378 379 for (int k = 0; k < orders->n; k++) { 380 these_values->data.F32[k] = input_values->data.F32[k]; 381 } 382 values->data[j] = these_values; 383 } 384 values_set->data[i] = values; 385 } 363 386 364 387 // retrieve the norm vector, if supplied … … 383 406 } 384 407 385 pmDarkVisualInit(values );408 pmDarkVisualInit(values_set->data[max_orders->n - 1]); 386 409 387 410 pmReadout *outReadout = output->readouts->data[0]; … … 423 446 } 424 447 425 if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, 0xff, values, iter, rej)) { 448 int k_best = 0; 449 for (int k = 0; k < max_orders->n; k++) { 450 psPolynomialMD *poly = poly_set->data[k]; 451 psArray *values = values_set->data[k]; 452 453 if (!psPolynomialMDClipFit(poly, pixels, NULL, mask, 0xff, values, iter, rej)) { 426 454 psErrorClear(); // Nothing we can do about it 427 455 psVectorInit(poly->coeff, NAN); 428 } 429 430 pmDarkVisualPixelFit(pixels, mask); 431 pmDarkVisualPixelModel(poly, values); 432 433 for (int k = 0; k < poly->coeff->n; k++) { 456 } 457 458 pmDarkVisualPixelFit(pixels, mask); 459 pmDarkVisualPixelModel(poly, values); 460 461 // Insert math here to choose optimum model. 462 logL->data.F64[k] = 0.0; 463 psPolynomialMD *polySig = poly_set->data[0]; 464 for (int m = 0; m < poly->deviations->n; m++) { 465 logL->data.F64[k] += pow(poly->deviations->data.F32[m] / polySig->stdevFit,2); 466 /* if ((xOut == 20) && (yOut == 256)) { */ 467 /* psTrace("psModules.detrend",3,"pmDarkCombine DEV: %d %d: input %d models: Norders: %d logL: %g value: %g\n", */ 468 /* xOut,yOut,m,k,logL->data.F64[k],poly->deviations->data.F32[m]); */ 469 /* } */ 470 } 471 if (k > 0) { 472 if ( ( logL->data.F64[k - 1] - logL->data.F64[k] ) > 1) { // Hard coded criterion for a ~5% limit with one degree of freedom 473 k_best = k; 474 } 475 } 476 if ((xOut <= 600) && (yOut <= 600)) { 477 psTrace("psModules.detrend",3,"pmDarkCombine: %d %d: models: Norders: %d logL: %g BestOrders: %d\n", 478 xOut,yOut,k,logL->data.F64[k],k_best); 479 } 480 } 481 if (k_best > 1) { 482 k_best = 1; 483 } 484 /* k_best = 1; */ 485 // Select the polynomial that seems best. 486 psPolynomialMD *poly = poly_set->data[k_best]; 487 488 // for (int k = 0; k < poly->coeff->n; k++) { 489 for (int k = 0; k < max_orders->n + 1; k++) { // There is one more coefficient than is stored here. 434 490 pmReadout *ro = output->readouts->data[k]; // Readout of interest 435 ro->image->data.F32[yOut][xOut] = poly->coeff->data.F64[k]; 491 if (k < poly->coeff->n) { 492 ro->image->data.F32[yOut][xOut] = poly->coeff->data.F64[k]; 493 } 494 else { 495 ro->image->data.F32[yOut][xOut] = 0.0; 496 } 436 497 } 437 498 counts->data.U16[yOut][xOut] = poly->numFit; -
trunk/psModules/src/imcombine/pmStack.c
r34150 r34800 1358 1358 } 1359 1359 1360 bool pmStackSimpleMedianCombine( 1361 pmReadout *combined, 1362 psArray *input) { 1363 int num = input->n; 1364 // int numCols, numRows; 1365 int minInputCols, maxInputCols, minInputRows, maxInputRows; // Smallest and largest values to combine 1366 int xSize, ySize; // Size of the output image 1367 1368 psArray *stack = psArrayAlloc(num); // Stack of readouts 1369 for (int i = 0; i < num; i++) { 1370 // pmStackData *data = input->data[i]; // Stack data for this input 1371 pmReadout *ro = input->data[i]; // data->readout; // Readout of interest 1372 if (!ro) { 1373 continue; 1374 } 1375 stack->data[i] = psMemIncrRefCounter(ro); 1376 } 1377 1378 if (!pmReadoutStackValidate(&minInputCols, &maxInputCols, &minInputRows, &maxInputRows, &xSize, &ySize, 1379 stack)) { 1380 psError(psErrorCodeLast(), false, "Input stack is not valid."); 1381 psFree(stack); 1382 return false; 1383 } 1384 1385 psVector *pixelData = psVectorAlloc(input->n,PS_TYPE_F32); 1386 psStats *stats = psStatsAlloc(PS_STAT_ROBUST_MEDIAN); 1387 1388 for (int y = minInputRows; y < maxInputRows; y++) { 1389 for (int x = minInputCols; x < maxInputCols; x++) { 1390 for (int i = 0; i < input->n; i++) { 1391 pmReadout *ro = stack->data[i]; 1392 psImage *image = ro->image; 1393 pixelData->data.F32[i] = image->data.F32[y][x]; 1394 } 1395 if (!psVectorStats(stats,pixelData,NULL,NULL,0)) { 1396 psError(PS_ERR_UNKNOWN, false, "Unable to calculate median"); 1397 psFree(stats); 1398 psFree(pixelData); 1399 psFree(stack); 1400 return(false); 1401 } 1402 combined->image->data.F32[y][x] = stats->robustMedian; 1403 combined->mask->data.PS_TYPE_IMAGE_MASK_DATA[y][x] = 0; 1404 } 1405 } 1406 1407 psFree(stats); 1408 psFree(pixelData); 1409 psFree(stack); 1410 return (true); 1411 } 1412 1360 1413 /// Stack input images 1361 1414 bool pmStackCombine( -
trunk/psModules/src/imcombine/pmStack.h
r27427 r34800 41 41 float addVariance ///< Additional variance when rejecting 42 42 ); 43 /// Stack input images simply 44 bool pmStackSimpleMedianCombine(pmReadout *combined, ///< Combined readout (output) 45 psArray *input ///< Input array of pmStackData 46 ); 43 47 44 48 /// Stack input images -
trunk/psModules/src/objects/Makefile.am
r34403 r34800 111 111 pmSourceOutputs.h \ 112 112 pmSourceIO.h \ 113 pmSourceSatstar.h \ 113 114 pmSourcePlots.h \ 114 115 pmSourceVisual.h \ -
trunk/psModules/src/objects/pmFootprintCullPeaks.c
r34198 r34800 91 91 92 92 // max flux is above threshold for brightest peak 93 pmPeak *maxPeak = fp->peaks->data[0]; 93 pmPeak *maxPeak = NULL; 94 for (int i = 0; i < fp->peaks->n; i++) { 95 pmPeak *testPeak = fp->peaks->data[i]; 96 float this_peak = useSmoothedImage ? testPeak->smoothFlux : testPeak->rawFlux; 97 98 if (isfinite(this_peak)) { 99 maxPeak = fp->peaks->data[i]; 100 break; 101 } 102 } 103 psAssert(maxPeak,"maxPeak was not set in these peaks"); 104 // = fp->peaks->data[0]; 94 105 float maxFlux = useSmoothedImage ? maxPeak->smoothFlux : maxPeak->rawFlux; 95 106
Note:
See TracChangeset
for help on using the changeset viewer.
