IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 33394


Ignore:
Timestamp:
Mar 2, 2012, 12:20:43 PM (14 years ago)
Author:
eugene
Message:

fix ubercal distance; make mosaic work for ubercal; add M_20, M_80

Location:
branches/eam_branches/ipp-20111122/Ohana/src/relphot
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20111122/Ohana/src/relphot/include/relphot.h

    r33374 r33394  
    2525  short Xm;
    2626  float secz;
    27   char flags;
     27  float ubercalDist;
     28  unsigned int flags;
    2829  Coords coords;
    2930} Mosaic;
     
    3738  double min;
    3839  double max;
     40  double Upper80;
     41  double Lower20;
    3942  double total;
    4043  int    Nmeas;
  • branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/ImageOps.c

    r33391 r33394  
    370370void setMcal (Catalog *catalog, int PoorImages, FlatCorrectionTable *flatcorr) {
    371371
    372   off_t i, j, m, c, n, N, Nmax, mark, bad;
    373   int Nfew, Nbad, Nmos, Ngrid, Nrel, Nsys, Nbright;
    374   float Msys, Mrel, Mmos, Mgrid, Mflat, McalBright, McalBright2;
    375   double *list, *dlist;
     372  off_t i, j, m, c, n, N, Nmax;
     373  int mark, bad, Nfew, Nbad, Nmos, Nrel, Ngrid, Nsys, Nbright;
     374  float Msys, Mrel, Mmos, Mgrid, Mflat;
     375  double *list, *dlist, *Mlist, *dMlist;
    376376  StatType stats;
    377377
     
    383383
    384384  if (PoorImages) {
    385     IMAGE_BAD = STAR_BAD = MEAS_BAD = 0;
     385    // XXX use bad stars and measurements for PoorImages? or not?
     386    // IMAGE_BAD = STAR_BAD = MEAS_BAD = 0;
     387    IMAGE_BAD = 0;
    386388  }
    387389
     
    392394  ALLOCATE (list, double, Nmax);
    393395  ALLOCATE (dlist, double, Nmax);
     396  ALLOCATE (Mlist, double, Nmax);
     397  ALLOCATE (dMlist, double, Nmax);
    394398
    395399  Nfew = Nbad = Nmos = Ngrid = Nrel = Nsys = 0;
    396400
    397   // counters to measure the bright-end scatter
    398   McalBright = McalBright2 = 0.0;
    399   Nbright = 0;
    400 
    401401  for (i = 0; i < Nimage; i++) {
    402402   
     403    // XXXX TEST
     404    Nfew = Nbad = Nmos = Ngrid = Nrel = Nsys = 0;
     405
    403406    /* on PoorImages run, skip good images */
    404407    if (PoorImages) {
     
    415418
    416419    int minUbercalDist = 1000;
     420
     421    // number of stars to measure the bright-end scatter
     422    Nbright = 0;
    417423
    418424    N = 0;
     
    469475      dlist[N] = MAX (catalog[c].measureT[m].dM, MIN_ERROR);
    470476      if (catalog[c].measureT[m].dM < IMFIT_SYS_SIGMA_LIM) {
    471         McalBright += list[N];
    472         McalBright2 += SQ(list[N]);
     477        Mlist[Nbright] = list[N];
     478        dMlist[Nbright] = dlist[N];
    473479        Nbright ++;
    474480      }
     
    476482    }
    477483    /* N_onImage[i] is all measurements, N is good measurements */
     484
     485    // XXX TEST
     486    fprintf (stderr, "meas skipped: (Nbad: %d, Nmos: %d, Ngrid: %d, Nrel: %d, Nsys: %d)\n", Nbad, Nmos, Ngrid, Nrel, Nsys);
    478487
    479488    /* too few good measurements or too many bad measurements */
     
    487496      }     
    488497    }
    489    
     498
    490499    liststats (list, dlist, N, &stats);
    491 
    492500    image[i].Mcal  = stats.mean;
    493501    image[i].dMcal = stats.error;
    494     image[i].dMagSys = stats.sigma;
    495502    image[i].nFitPhotom = N;
    496503    image[i].Xm    = 100.0*log10(stats.chisq);
     
    498505    plot_setMcal (list, N, &stats, CLOUD_TOLERANCE);
    499506
     507    // bright end scatter
     508    liststats (Mlist, dMlist, Nbright, &stats);
     509    image[i].dMagSys = stats.sigma;
     510
    500511    if (image[i].Mcal < -CLOUD_TOLERANCE) {
    501512      image[i].Mcal = 0.0;
    502513    }
    503514
    504     image[i].dummy3 = minUbercalDist;
    505     fprintf (stderr, "%s : %d\n", image[i].name, image[i].dummy3);
     515    // minUbercalDist calculated here is the min value for any star owned by this image
     516    // since this particular image is tied to that star, bump its distance by 1
     517    image[i].dummy3 = minUbercalDist + 1;
    506518  }
    507519  free (list);
    508520  free (dlist);
     521  free (Mlist);
     522  free (dMlist);
    509523
    510524  fprintf (stderr, "%d images marked having too few measurements (Nbad: %d, Nmos: %d, Ngrid: %d, Nrel: %d, Nsys: %d)\n", Nfew, Nbad, Nmos, Ngrid, Nrel, Nsys);
  • branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/MosaicOps.c

    r33157 r33394  
    11# include "relphot.h"
     2void plot_setMcal (double *list, int Npts, StatType *stats, float clouds);
    23
    34// array of mosaic definition structures
     
    391392int setMmos (Catalog *catalog, int PoorImages, FlatCorrectionTable *flatcorr) {
    392393
    393   off_t i, j, m, c, N, Nmax;
    394   int n, mark, bad, Nfew, Nbad, Ncal, Nrel, Ngrid, Nsys, Nsecfilt;
     394  off_t i, j, m, c, n, N, Nmax;
     395  int mark, bad, Nfew, Nbad, Ncal, Nrel, Ngrid, Nsys, Nbright;
    395396  float Msys, Mrel, Mcal, Mgrid, Mflat;
    396397  double *list, *dlist, *Mlist, *dMlist;
     
    403404  image = getimages (&N, NULL);
    404405
    405   Nsecfilt = GetPhotcodeNsecfilt ();
     406  fprintf (stderr, "limiting negative clouds to %f\n", CLOUD_TOLERANCE);
     407
     408  int Nsecfilt = GetPhotcodeNsecfilt ();
    406409
    407410  if (PoorImages) {
     411    // XXX use bad stars and measurements for PoorImages? or not?
     412    // IMAGE_BAD = STAR_BAD = MEAS_BAD = 0;
    408413    IMAGE_BAD = 0;
    409414  }
     
    428433    }     
    429434
    430     /* we optionally do not recalibrate images with UBERCAL zero points */
    431     if (KEEP_UBERCAL && (mosaic[i].flags & ID_IMAGE_PHOTOM_UBERCAL)) continue;
     435    // UBERCAL image: if this is an ubercal image, set minUbercalDist to 0:
     436    // we optionally do not recalibrate images with UBERCAL zero points
     437    if (mosaic[i].flags & ID_IMAGE_PHOTOM_UBERCAL) {
     438      mosaic[i].ubercalDist = 0;
     439      // propagate ubercalDist to the images
     440      for (j = 0; j < MosaicN_Image[i]; j++) {
     441        off_t im = MosaicToImage[i][j];
     442        image[im].dummy3 = mosaic[i].ubercalDist;
     443        fprintf (stderr, "%d %d %d\n", (int) i, (int) im, image[im].dummy3);
     444      }
     445      if (KEEP_UBERCAL) continue;
     446    }
     447
     448    int minUbercalDist = 1000;
     449
     450    // number of stars to measure the bright-end scatter
     451    Nbright = 0;
    432452
    433453    N = 0;
     
    470490        continue;
    471491      }
     492
     493      PhotCode *code = GetPhotcodebyCode (catalog[c].measureT[m].photcode);
     494      if (!code) goto skip;
     495      if (code->equiv < 1) goto skip;
     496      int Nsec = GetPhotcodeNsec (code->equiv);
     497      if (Nsec == -1) goto skip;
     498      minUbercalDist = MIN (catalog[c].secfilt[n*Nsecfilt + Nsec].M_80, minUbercalDist); // M_80 == ubercalDist
     499
     500    skip:
    472501      list[N]  = Msys - Mrel - Mcal - Mgrid + Mflat;
    473502      dlist[N] = MAX (catalog[c].measureT[m].dM, MIN_ERROR);
    474       Mlist[N] = Msys;
    475       dMlist[N] = list[N];
     503      if (catalog[c].measureT[m].dM < IMFIT_SYS_SIGMA_LIM) {
     504        Mlist[Nbright] = list[N];
     505        dMlist[Nbright] = dlist[N];
     506        Nbright ++;
     507      }
    476508      N++;
    477509    }
     
    479511
    480512    /* too few good measurements or too many bad measurements (skip in PoorImages run) */
    481 
    482513    if (!PoorImages) {
    483514      mark = (N < IMAGE_TOOFEW) || (N < IMAGE_GOOD_FRACTION*N_onMosaic[i]);
     
    493524    if (PoorImages) fprintf (stderr, "Mmos: %f %f %d "OFF_T_FMT"\n", stats.mean, stats.sigma, stats.Nmeas,  N);
    494525
    495     float CLOUD_TOLERANCE = 0.01;
    496526    mosaic[i].Mcal  = stats.mean;
    497527    mosaic[i].dMcal = stats.error;
    498     mosaic[i].dMsys = stats.sigma;
    499528    mosaic[i].nFitPhotom = N;
    500529    mosaic[i].Xm    = 100.0*log10(stats.chisq);
    501530
     531    plot_setMcal (list, N, &stats, CLOUD_TOLERANCE);
     532
     533    // bright end scatter
     534    liststats (Mlist, dMlist, Nbright, &stats);
     535    mosaic[i].dMsys = stats.sigma;
     536
    502537    if (mosaic[i].Mcal < -CLOUD_TOLERANCE) {
    503538      mosaic[i].Mcal = 0.0;
     539    }
     540
     541    // minUbercalDist calculated here is the min value for any star owned by this image
     542    // since this particular image is tied to that star, bump its distance by 1
     543    mosaic[i].ubercalDist = minUbercalDist + 1;
     544
     545    // propagate ubercalDist to the images
     546    for (j = 0; j < MosaicN_Image[i]; j++) {
     547      off_t im = MosaicToImage[i][j];
     548      image[im].dummy3 = mosaic[i].ubercalDist;
     549      fprintf (stderr, "%d %d %d\n", (int) i, (int) im, image[im].dummy3);
    504550    }
    505551  }
     
    875921  Nmark = Nscatter = Noffset = 0;
    876922  for (i = 0; i < Nmosaic; i++) {
     923    // if we are keeping ubercal sacrosanct, then we should not be allowed to break them...
     924    if (KEEP_UBERCAL && (mosaic[i].flags & ID_IMAGE_PHOTOM_UBERCAL)) continue;
     925
    877926    mark = FALSE;
    878927    if (mosaic[i].dMcal > MaxScatter) {
  • branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/StarOps.c

    r33391 r33394  
    6161  for (i = 0; i < Ncatalog; i++) {
    6262    for (j = 0; j < catalog[i].Naverage; j++) {
    63 
    6463      // XXX accumulate all secfilt values in a single pass?
    6564
     
    10099
    101100          Msys = PhotSysTiny (&catalog[i].measureT[m], &catalog[i].averageT[j], &catalog[i].secfilt[j*Nsecfilt]);
    102           if (isnan(Msys)) {
    103             Nsys++;
    104             continue;
    105           }
     101          if (isnan(Msys)) { Nsys++; continue; }
    106102          list[N] = Msys - Mcal - Mmos - Mgrid;
    107103
     
    194190    for (j = 0; j < catalog[i].Naverage; j++) {
    195191
     192      int minUbercalDist = 1000;
     193
    196194      int Ns;
    197195      for (Ns = 0; Ns < Nphotcodes; Ns++) {
     
    229227
    230228          Msys = PhotSysTiny (&catalog[i].measureT[m], &catalog[i].averageT[j], &catalog[i].secfilt[j*Nsecfilt]);
     229          if (isnan(Msys)) { continue; }
    231230          list[N] = Msys - Mcal - Mmos - Mgrid;
     231
     232          int myUbercalDist = getUbercalDist(m,i);
     233          minUbercalDist = MIN(minUbercalDist, myUbercalDist);
    232234
    233235          // dlist gives the error, which is used as the weight in WT_MEAN.
     
    258260        if (N < 1) continue;
    259261
    260         // force WT_MEAN or MEAN here?
    261 
     262        // XXX force WT_MEAN or MEAN here?
    262263        liststats (list, dlist, N, &stats);
    263264        catalog[i].found[Nsecfilt*j+Nsec] = TRUE;
     
    286287        catalog[i].secfilt[Nsecfilt*j+Nsec].Ncode = Ncode;
    287288        catalog[i].secfilt[Nsecfilt*j+Nsec].Nused = stats.Nmeas;
     289
     290        catalog[i].secfilt[Nsecfilt*j+Nsec].M_80 = stats.Upper80; // M_80 == ubercalDist
     291        catalog[i].secfilt[Nsecfilt*j+Nsec].M_20 = stats.Lower20; // M_80 == ubercalDist
     292        catalog[i].secfilt[Nsecfilt*j+Nsec].M_80 = minUbercalDist; // M_80 == ubercalDist
    288293      }
    289294    }
     
    465470void clean_stars (Catalog *catalog, int Ncatalog) {
    466471
    467   int i, j, Ndel, Nave, Ntot, mark, Ns;
     472  int i, j, Ndel, Nave, Ntot, mark, Ns, Nscat, Nchi, Nnan;
    468473  float dM, Xm;
    469474  double Chisq, MaxScatter, MaxChisq;
     
    482487
    483488  int Nsecfilt = GetPhotcodeNsecfilt ();
     489
     490  // XX int oldPLOTSTUFF = PLOTSTUFF;
     491  // XX PLOTSTUFF = TRUE;
     492  // XX plot_chisq (catalog, Ncatalog);
     493  // XX PLOTSTUFF = oldPLOTSTUFF;
    484494
    485495  // eliminate bad stars using the stats for a single secfilt at a time
     
    510520    fprintf (stderr, "Max Scatter: %f, Max Chisq: %f\n", MaxScatter, MaxChisq);
    511521
    512     Ndel = Nave = 0;
     522    Ndel = Nave = Nscat = Nnan = Nchi = 0;
    513523    for (i = 0; i < Ncatalog; i++) {
    514524      for (j = 0; j < catalog[i].Naverage; j++) {
     
    520530          catalog[i].secfilt[Nsecfilt*j+Nsec].flags |= ID_STAR_POOR;
    521531          Ndel ++;
     532          if (dM > MaxScatter) { Nscat ++; }
     533          if (Xm == NAN_S_SHORT) { Nnan ++; }
     534          if (Chisq > MaxChisq) { Nchi ++; }
    522535        } else {
    523536          catalog[i].secfilt[Nsecfilt*j+Nsec].flags &= ~ID_STAR_POOR;
     
    526539      }
    527540    }
    528     fprintf (stderr, "%d stars marked variable, %d total\n", Ndel, Nave);
     541    fprintf (stderr, "%d stars marked variable (%d scat, %d nan, %d chi), %d total\n", Ndel, Nscat, Nnan, Nchi, Nave);
    529542    initstats (STATMODE);
    530543  }
     
    564577  TOOFEW = MAX (5, STAR_TOOFEW);
    565578
    566   FILE *f = fopen ("poor.dat", "w");
     579  FILE *f = final ? fopen ("poor.dat", "a") : fopen ("poor.dat", "w");
    567580
    568581  Ndel = Nave = 0;
  • branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/liststats.c

    r33391 r33394  
    4141  stats[0].min    = value[0];
    4242  stats[0].max    = value[N-1];
     43  int N80 = MIN (N-1, 0.8*N);
     44  int N20 = MAX (0, 0.2*N);
     45  stats[0].Upper80 = value[N80];
     46  stats[0].Lower20 = value[N20];
    4347
    4448  switch (statmode) {
  • branches/eam_branches/ipp-20111122/Ohana/src/relphot/src/relphot.c

    r33364 r33394  
    237237  freeGridBins (Ncatalog);
    238238
     239  // XXX
     240  FILE *f = fopen ("poor.dat", "w");
     241  fclose (f);
     242
    239243  /* load catalog data from region files, update Mrel include all data */
    240244  reload_catalogs (skylist, flatcorr, 0, NULL);
Note: See TracChangeset for help on using the changeset viewer.