IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 19, 2010, 5:13:52 PM (16 years ago)
Author:
watersc1
Message:

Merging czw_branch (maskstats and software versions) back into the trunk

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/psastro/src/psastroMaskUpdates.c

    r26897 r28043  
    1919}
    2020
     21
     22int 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}
     30int 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}
     39int 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}
     49int 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
    2164/**
    2265 * create a mask or mask regions based on the collection of reference stars that * are in the vicinity of each chip
    2366 */
    24 bool psastroMaskUpdates (pmConfig *config) {
     67bool psastroMaskUpdates (pmConfig *config, psMetadata *stats) {
    2568
    2669    bool status;
     
    88131    double REFSTAR_MASK_CROSSTALK_MAG_SLOPE= psMetadataLookupF32 (&status, recipe, "REFSTAR_MASK_CROSSTALK_MAG_SLOPE");
    89132
     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   
    90147    // select the input data sources
    91148    pmFPAfile *input = psMetadataLookupPtr (NULL, config->files, "PSASTRO.INPUT");
     
    119176    pmFPA *fpaMask = outMask->fpa;
    120177
     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   
    121186    // select the reference mask fpa :: we use this to determine cell boundaries
    122187    pmFPAfile *refMask = psMetadataLookupPtr (NULL, config->files, "PSASTRO.REFMASK");
     
    363428                }
    364429            }
    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        }
    367541        // output sequence for mask corresponding to this chip (XXX this may not be needed...)
    368542        *viewMask = *view;
     
    392566    }
    393567
     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   
    394579    // deactivate all files
    395580    pmFPAfileActivate (config->files, false, NULL);
Note: See TracChangeset for help on using the changeset viewer.