Changeset 28043 for trunk/psastro/src/psastroMaskUpdates.c
- Timestamp:
- May 19, 2010, 5:13:52 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
psastro/src/psastroMaskUpdates.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
- Property svn:mergeinfo changed
/branches/czw_branch/20100427 (added) merged: 27784,28017-28018,28028-28033,28042
- Property svn:mergeinfo changed
-
trunk/psastro/src/psastroMaskUpdates.c
r26897 r28043 19 19 } 20 20 21 22 int colStart(psU16 corner_list,int i,int x_0,int y_0,int R,int max) { 23 if ((corner_list == 0x04)||(corner_list == 0x05)) { 24 return(0); 25 } 26 else { 27 return((int) fabs(x_0 - sqrt(pow(R,2) - pow(y_0 - i,2)))); 28 } 29 } 30 int colEnd(psU16 corner_list,int i,int x_0,int y_0,int R,int max) { 31 if ((corner_list == 0x04)||(corner_list == 0x05)) { 32 return((int) fabs(x_0 - sqrt(pow(R,2) - pow(y_0 - i,2)))); 33 } 34 else { 35 return(max); 36 } 37 38 } 39 int rowStart(psU16 corner_list,int j,int x_0,int y_0,int R,int max) { 40 if ((corner_list == 0x01)||(corner_list == 0x02)|| 41 (corner_list == 0x03)||(corner_list == 0x0b)|| 42 (corner_list == 0x07)||(corner_list == 0x0f)) { 43 return(0); 44 } 45 else { 46 return((int) fabs(y_0 - sqrt(pow(R,2) - pow(x_0 - j,2)))); 47 } 48 } 49 int rowEnd(psU16 corner_list,int j,int x_0,int y_0,int R, int max) { 50 if (corner_list == 0x0f) { 51 return(max); 52 } 53 else if ((corner_list == 0x01)||(corner_list == 0x02)|| 54 (corner_list == 0x03)||(corner_list == 0x0b)|| 55 (corner_list == 0x07)) { 56 return((int) fabs(y_0 - sqrt(pow(R,2) - pow(x_0 - j,2)))); 57 } 58 else { 59 return(max); 60 } 61 62 } 63 21 64 /** 22 65 * create a mask or mask regions based on the collection of reference stars that * are in the vicinity of each chip 23 66 */ 24 bool psastroMaskUpdates (pmConfig *config ) {67 bool psastroMaskUpdates (pmConfig *config, psMetadata *stats) { 25 68 26 69 bool status; … … 88 131 double REFSTAR_MASK_CROSSTALK_MAG_SLOPE= psMetadataLookupF32 (&status, recipe, "REFSTAR_MASK_CROSSTALK_MAG_SLOPE"); 89 132 133 // Mask stats variables 134 psU16 staticMaskVal = psMetadataLookupU32(&status, recipe, "MASKSTAT.STATIC"); 135 psU16 magicMaskVal = psMetadataLookupU32(&status, recipe, "MASKSTAT.MAGIC"); 136 psU16 dynamicMaskVal = psMetadataLookupU32(&status, recipe, "MASKSTAT.DYNAMIC"); 137 psU16 advisoryMaskVal = psMetadataLookupU32(&status, recipe, "MASKSTAT.ADVISORY"); 138 139 psS32 Npix_valid = 0; 140 psS32 Npix_static = 0; 141 psS32 Npix_magic = 0; 142 psS32 Npix_dynamic = 0; 143 psS32 Npix_advisory = 0; 144 145 psU16 corner_list = 0x00; 146 90 147 // select the input data sources 91 148 pmFPAfile *input = psMetadataLookupPtr (NULL, config->files, "PSASTRO.INPUT"); … … 119 176 pmFPA *fpaMask = outMask->fpa; 120 177 178 // Get camera specific mask stat options 179 psF32 FOV = psMetadataLookupF32(&status, fpaMask->camera, "FOV"); // Almost certainly doesn't exist. Placeholder for now. 180 psS32 CONSTANT_BLANK = psMetadataLookupS32(&status, fpaMask->camera, "NPIX_INTERCHIP"); // Need to add this as well. 181 182 Npix_valid += CONSTANT_BLANK; 183 Npix_static += CONSTANT_BLANK; 184 185 121 186 // select the reference mask fpa :: we use this to determine cell boundaries 122 187 pmFPAfile *refMask = psMetadataLookupPtr (NULL, config->files, "PSASTRO.REFMASK"); … … 363 428 } 364 429 } 365 } 366 430 } 431 432 // Do the mask stats bit from cell down. 433 if (psMetadataLookupBool(&status,recipe,"MASK.STATS")) { 434 if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) ESCAPE; 435 while ((cell = pmFPAviewNextCell(view, fpa, 1)) != NULL) { 436 if (!pmFPAfileIOChecks (config, view, PM_FPA_BEFORE)) ESCAPE; 437 psWarning("In CELL: FOV: %f CONSTANT: %d Mask bits: %d %d %d %d\n", 438 FOV,CONSTANT_BLANK,staticMaskVal,magicMaskVal,dynamicMaskVal,advisoryMaskVal); 439 440 if (!cell->process || !cell->file_exists) {continue; } 441 while ((readout = pmFPAviewNextReadout(view, fpa, 1)) != NULL) { 442 pmReadout *readoutMask = pmFPAviewThisReadout (view, outMask->fpa); 443 if (!pmFPAfileIOChecks (config, viewMask, PM_FPA_BEFORE)) ESCAPE; 444 psWarning("In READOUT: FOV: %f CONSTANT: %d Mask bits: %d %d %d %d\n", 445 FOV,CONSTANT_BLANK,staticMaskVal,magicMaskVal,dynamicMaskVal,advisoryMaskVal); 446 447 if (!readoutMask->data_exists) {continue; } 448 psPlane coordFPA; 449 psPlane coordCell; 450 451 psImage *mask = readoutMask->mask; 452 if (!mask) {continue;} 453 psImageMaskType **maskData = mask->data.PS_TYPE_IMAGE_MASK_DATA; 454 // Dance coordinates around 455 // Calculate which corners fall within the field of view. 456 // 0x04 0x08 457 // 0x01 0x02 458 459 coordFPA.x = 0.0; 460 coordFPA.y = 0.0; 461 psPlaneTransformApply(&coordCell,chip->fromFPA,&coordFPA); 462 if (pow(coordFPA.x,2) + pow(coordFPA.y,2) <= pow(FOV,2)) { 463 corner_list = corner_list | 0x01; 464 } 465 466 coordCell.x = mask->numCols - 1; 467 psPlaneTransformApply(&coordCell,chip->fromFPA,&coordFPA); 468 if (pow(coordFPA.x,2) + pow(coordFPA.y,2) <= pow(FOV,2)) { 469 corner_list = corner_list | 0x02; 470 } 471 472 coordCell.y = mask->numRows - 1; 473 psPlaneTransformApply(&coordCell,chip->fromFPA,&coordFPA); 474 if (pow(coordFPA.x,2) + pow(coordFPA.y,2) <= pow(FOV,2)) { 475 corner_list = corner_list | 0x08; 476 } 477 478 coordCell.x = 0; 479 psPlaneTransformApply(&coordCell,chip->fromFPA,&coordFPA); 480 if (pow(coordFPA.x,2) + pow(coordFPA.y,2) <= pow(FOV,2)) { 481 corner_list = corner_list | 0x04; 482 } 483 484 int x_0 = coordFPA.x; 485 int y_0 = coordFPA.y; 486 487 488 // Scan over the valid regions of the image and count masked pixels 489 if ((corner_list == 0x04)||(corner_list == 0x08)|| 490 (corner_list == 0x05)||(corner_list == 0x0a)) { 491 for (int i = 0; i < mask->numRows - 1; i++) { 492 for (int j = colStart(corner_list,i,x_0,y_0,FOV,mask->numCols - 1); 493 j < colEnd(corner_list,i,x_0,y_0,FOV,mask->numCols - 1); j++) { 494 Npix_valid++; 495 if (maskData[i][j] & staticMaskVal) { 496 Npix_static++; 497 continue; 498 } 499 if (maskData[i][j] & dynamicMaskVal) { 500 Npix_dynamic++; 501 continue; 502 } 503 if (maskData[i][j] & magicMaskVal) { 504 Npix_magic++; 505 continue; 506 } 507 if (maskData[i][j] & advisoryMaskVal) { 508 Npix_advisory++; 509 continue; 510 } 511 } 512 } 513 } 514 else { 515 for (int j = 0; j < mask->numCols - 1; j++) { 516 for (int i = rowStart(corner_list,j,x_0,y_0,FOV,mask->numRows - 1); 517 i < rowEnd(corner_list,j,x_0,y_0,FOV,mask->numRows - 1); i++) { 518 Npix_valid++; 519 if (maskData[i][j] & staticMaskVal) { 520 Npix_static++; 521 continue; 522 } 523 if (maskData[i][j] & dynamicMaskVal) { 524 Npix_dynamic++; 525 continue; 526 } 527 if (maskData[i][j] & magicMaskVal) { 528 Npix_magic++; 529 continue; 530 } 531 if (maskData[i][j] & advisoryMaskVal) { 532 Npix_advisory++; 533 continue; 534 } 535 } 536 } 537 } 538 } 539 } 540 } 367 541 // output sequence for mask corresponding to this chip (XXX this may not be needed...) 368 542 *viewMask = *view; … … 392 566 } 393 567 568 psMetadataAddS32(stats,PS_LIST_TAIL, "MASKFRAC_NPIX", 0, 569 "Number of valid pixels", Npix_valid); 570 psMetadataAddF32(stats,PS_LIST_TAIL, "MASKFRAC_STATIC", 0, 571 "Fraction of pixels statically masked", (float) Npix_static / Npix_valid); 572 psMetadataAddF32(stats,PS_LIST_TAIL, "MASKFRAC_DYNAMIC", 0, 573 "Fraction of pixels dynamically masked", (float) Npix_dynamic / Npix_valid); 574 psMetadataAddF32(stats,PS_LIST_TAIL, "MASKFRAC_MAGIC", 0, 575 "Fraction of pixels magically masked", (float) Npix_magic / Npix_valid); 576 psMetadataAddF32(stats,PS_LIST_TAIL, "MASKFRAC_ADVISORY", 0, 577 "Fraction of pixels masked as an advisory", (float) Npix_advisory / Npix_valid); 578 394 579 // deactivate all files 395 580 pmFPAfileActivate (config->files, false, NULL);
Note:
See TracChangeset
for help on using the changeset viewer.
