IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 14, 2023, 12:48:54 PM (3 years ago)
Author:
tdeboer
Message:

new version of the burntool programme

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/extsrc/gpcsw/gpcsrc/fits/burntool/burnfix.c

    r26766 r42392  
    2323/* Find all the burned patches and bright stars */
    2424   err = star_detect(nx, ny, NX, NY, imbuf, mbuf, msbuf, cell, cellnum);
     25
    2526   err = burn_check(nx, ny, NX, NY, imbuf, mbuf, cell);
    2627
     
    3435//   fprintf(stderr, "Got through grow mask for burns\n");
    3536   err = grow_mask(nx, ny, NX, mbuf, BMASK_GROW, RMASK_GROW,
    36                    MASK_STAR_HALO, cell->nstar, cell->star);
     37         MASK_STAR_HALO, cell->nstar, cell->star);
    3738//   fprintf(stderr, "Got through grow mask for stars\n");
    3839
     
    7071   printf("  #    cx  cy  max     sx  sy    ex  ey  midy  diff  S/B/E  slope     zero\n");
    7172   for(k=0; k<cell->nburn; k++) {
    72       ymid = (cell->burn[k].y0m + cell->burn[k].y1m +
    73               cell->burn[k].y0p + cell->burn[k].y1p + 2) / 4;
     73      /*ymid = (cell->burn[k].y0m + cell->burn[k].y1m +
     74              cell->burn[k].y0p + cell->burn[k].y1p + 2) / 4;*/
     75      ymid = (cell->burn[k].sy + cell->burn[k].ey + 1) / 2;
    7476      i = cell->burn[k].nfit / 2;
    7577      printf("%3d %5d %3d %5d %5d %3d %5d %3d %5d %5d %2d %1d %1d %6.3f %8d\n",
     
    8890   printf("  #    cx  cy  max     sx  sy    ex  ey  midy  S/P\n");
    8991   for(k=0; k<cell->nstar; k++) {
    90       ymid = (cell->star[k].y0m + cell->star[k].y1m +
    91               cell->star[k].y0p + cell->star[k].y1p + 2) / 4;
     92      /*ymid = (cell->star[k].y0m + cell->star[k].y1m +
     93              cell->star[k].y0p + cell->star[k].y1p + 2) / 4;*/
     94      ymid = (cell->star[k].sy + cell->star[k].ey + 1) / 2;
    9295
    9396      printf("%3d %5d %3d %5d %5d %3d %5d %3d %5d %2d %1d\n",
     
    142145                       MTYPE *mask, CELL *cell)
    143146{
    144    int err, k;
     147   int err,k;
    145148
    146149/* Given these big stars, identify which ones really have a burn */
     
    160163             k, cell->burn[k].sx, cell->burn[k].sy,
    161164             cell->burn[k].ex, cell->burn[k].ey,
    162              cell->burn[k].y0m, cell->burn[k].y1m, cell->burn[k].y0p, cell->burn[k].y0p,
     165             cell->burn[k].y0m, cell->burn[k].y1m, cell->burn[k].y0p, cell->burn[k].y1p,
    163166             cell->burn[k].diff, cell->burn[k].burned);
    164167   }
     
    242245   int y0, y1, ymid, xburn, xref, dx=0, dy=0;
    243246
     247   /*introduce a maximum to the burn contrast check, to avoid a very large number in crowded regions*/
     248   int burn_contrast = MIN(0.3*rms,5);
     249   /*introduce a maximum size for the burn contrast check box, instead of a random large 100 pixels */
     250   /*for small stars you will lose signal after 10 pixels, so use the fitted box size as a good guide*/
     251   int test_box = MAX(box->ey-box->sy,10);
     252
     253   if(VERBOSE & VERB_BOXGROW) {
     254        printf("burn contrast test using box of max size: %8d\n", test_box);
     255   }
     256
    244257/* FIXME: needs a test for flat-toppedness as well as trail... */
    245258/* FIXME: needs a test for pure, massive saturation */
    246259
    247260/* Center line */
    248    ymid = (box->y0m + box->y0p + box->y1m + box->y1p + 2) / 4;
     261   //ymid = (box->y0m + box->y0p + box->y1m + box->y1p + 2) / 4;
     262   ymid = (box->sy+box->ey)/2;
    249263
    250264/* Irrelevant, too near the top to detect a burn anyway */
     
    283297      y0 = ymid + dy;
    284298      y1 = y0 + MIN(ny-1-y0, 2*ymid-y0-1);
    285       if(y1-y0 > 100) y1 = y0 + 100;
     299      if(y1-y0 > test_box) y1 = y0 + test_box;
    286300   }
    287301
     
    292306      nburn = nref = 0;
    293307      for(i=box->sx; i<=box->ex; i++) {
    294          if(mask[i+j*NX] == MASK_NONE) {
    295             xburn += data[i+j*NX];
    296             nburn++;
    297          }
    298          if(dx != 0) {  /* Side to side */
    299             if(mask[i+dx+j*NX] == MASK_NONE) {
    300                xref += data[i+dx+j*NX];
    301                nref++;
    302             }
    303          } else {       /* top-bottom */
    304             if(mask[i+(2*ymid-j)*NX] == MASK_NONE) {
    305                xref += data[i+(2*ymid-j)*NX];
    306                nref++;
    307             }
    308          }
     308             if(mask[i+j*NX] == MASK_NONE) {
     309               xburn += data[i+j*NX];
     310               nburn++;
     311             }
     312             if(dx != 0) {      /* Side to side */
     313               if(mask[i+dx+j*NX] == MASK_NONE) {
     314                xref += data[i+dx+j*NX];
     315                nref++;
     316               }
     317             } else {   /* top-bottom */
     318               if(mask[i+(2*ymid-j)*NX] == MASK_NONE) {
     319                xref += data[i+(2*ymid-j)*NX];
     320                nref++;
     321               }
     322             }
    309323      }
    310324      if(nburn > 0) xburn /= nburn;
    311325      if(nref > 0) xref /= nref;
    312326      if(nref > 0 && nburn > 0) median_buf[nmed++] = xburn - xref;
     327      if(VERBOSE & VERB_BOXGROW) {
     328        printf("contrast: %8d %8d %8d %8d %8d\n", j, xburn, (2*ymid-j), xref, xburn - xref);
     329      }
     330
    313331   }
    314332   box->diff = int_median(nmed, median_buf);
    315    box->burned = (box->diff > 0.3*rms);
     333   box->burned = (box->diff > burn_contrast);
    316334   return(0);
    317335}
     
    335353
    336354/* Center line */
    337    ymid = (box->y0m + box->y0p + box->y1m + box->y1p + 2) / 4;
     355   //ymid = (box->y0m + box->y0p + box->y1m + box->y1p + 2) / 4;
     356   ymid = (box->sy + box->ey + 1) / 2;
    338357
    339358/* Starting point offset */
Note: See TracChangeset for help on using the changeset viewer.