IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 11, 2012, 10:26:52 AM (14 years ago)
Author:
eugene
Message:

merge changes from eam_branches/ipp-20120905 (fixes some mean values and flags in DVO)

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk

  • trunk/Ohana/src/relphot/src/StarOps.c

    r34267 r34429  
    1111  int Nmos;
    1212  int Ngrid;
    13   double *list;
    14   double *dlist;
    15   double *wlist;
    16   double *aplist;
    17   double *kronlist;
    18   double *dkronlist;
     13
     14  // NOTE: the following arrays are (possibly) pre-allocated and carried down to each
     15  // thread.  The first 3 (list, dlist, wlist) are used in all relphot analyses; the
     16  // others are only used on the final output steps.
     17
     18  double *list;               // list of measure.mag values for a given star
     19  double *dlist;              // mag errors for a star
     20  double *wlist;              // weights to use for mean mags
     21  double *aplist;             // ap mags for a star
     22  double *kronlist;           // kron mags for a star
     23  double *dkronlist;          // kron mag errors
     24
     25  double *psfqf_list;         // psfqf for all filters
     26  double *psfqfperf_list;     // psfqfperf for all filters
     27  double *stargal_list;       // stargal for all filters
    1928} SetMrelInfo;
    2029
     
    168177  ALLOCATE (results.dkronlist, double, Nmax);
    169178
     179  ALLOCATE (results.psfqf_list, double, Nmax);
     180  ALLOCATE (results.psfqfperf_list, double, Nmax);
     181  ALLOCATE (results.stargal_list, double, Nmax);
     182
    170183  for (i = 0; i < Ncatalog; i++) {
    171184    setMrel_catalog  (catalog, i, pass, flatcorr, &results, Nsecfilt); // XXX add arguments as needed for options
     
    178191  free (results.kronlist);
    179192  free (results.dkronlist);
     193
     194  free (results.psfqf_list);
     195  free (results.psfqfperf_list);
     196  free (results.stargal_list);
    180197  return (TRUE);
    181198}
     
    315332  liststats_setmode (&kronstats, STATMODE);
    316333
     334  // StatType psfstats;
     335  // liststats_setmode (&psfstats, "MEAN");
     336
    317337  double *list      = results->list;
    318338  double *dlist     = results->dlist;
     
    322342  double *dkronlist = results->dkronlist;
    323343
     344  double *psfqf_list     = results->psfqf_list;
     345  double *psfqfperf_list = results->psfqfperf_list;
     346  double *stargal_list   = results->stargal_list;
     347
    324348  SetMrelInfoInit (results, FALSE); // do not allocate list,dlist,wlist arrays
    325349
     
    327351
    328352  char *primaryCell = NULL;
    329   ALLOCATE (primaryCell, char, DVO_MAX_PATH);
     353  if (isSetMrelFinal) {
     354    ALLOCATE (primaryCell, char, DVO_MAX_PATH);
     355  }
    330356
    331357  for (j = 0; j < catalog[Nc].Naverage; j++) {
     
    338364    }
    339365
    340     BoundaryTreePrimaryCell(primaryCell, catalog[Nc].average[j].R, catalog[Nc].average[j].D);
     366    if (isSetMrelFinal) {
     367      BoundaryTreePrimaryCell(primaryCell, catalog[Nc].average[j].R, catalog[Nc].average[j].D);
     368    }
    341369
    342370    int GoodPS1 = FALSE;
     
    346374    int NextPS1 = 0;
    347375    int NpsfPS1 = 0;
     376
     377    int Nmeas = 0; // number of meas used for psfqf, psfqfperf, and stargal
    348378
    349379    int Ns;
     
    365395      int haveSynth = FALSE;
    366396      int haveStack = FALSE;
     397      int havePS1   = FALSE;
    367398
    368399      // need to find the measurement closest to the center of its skycell, as well as the
     
    420451
    421452        if (isSetMrelFinal) {
     453          // Map (aplist) and Mkron (kronlist,dkronlist) are used to calculate mean mags per filter
    422454          float Map = PhotAper (&catalog[Nc].measure[m]);
    423455          aplist[N] = Map - Mcal - Mmos - Mgrid;
     
    426458          kronlist[N] = Mkron - Mcal - Mmos - Mgrid;
    427459          dkronlist[N] = catalog[Nc].measure[m].dMkron;
     460
     461          // mean psfQF, psfQFperf, and stargal values are calculated per object (all filters)
     462          psfqf_list[Nmeas]     = catalog[Nc].measure[m].psfQF;
     463          psfqfperf_list[Nmeas] = catalog[Nc].measure[m].psfQF;
     464          stargal_list[Nmeas]   = catalog[Nc].measure[m].extNsigma;
    428465
    429466          // special options for PS1 data
     
    431468            // count the extended detections
    432469            if (!isnan(catalog[Nc].measure[m].Map)) {
    433               if (catalog[Nc].measure[m].M - catalog[Nc].measure[m].Map > 0.5) {
     470              float dMagAp = catalog[Nc].measure[m].M - catalog[Nc].measure[m].Map;
     471              float SigmaAp = hypot(0.1, 2.5*catalog[Nc].measure[m].dM);
     472              // XXX this is still quite ad hoc, but at least it:
     473              // (a) converges to 0.1 mag offset at the bright end
     474              // (b) converges to 0.5 mag offset at the faint end (dM = 0.2)
     475              if (dMagAp > SigmaAp) {
    434476                Next ++;
    435477                NextPS1 ++;
     
    438480              }
    439481            }
     482            havePS1 = TRUE;
    440483          }
    441484          // gpc1 stack data
     
    543586        }
    544587        N++;
     588        Nmeas++;
    545589      }
    546590
     
    658702          case 0:
    659703            catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_PHOTOM_PASS_0;
    660             GoodPS1 = TRUE;
     704            if (havePS1) GoodPS1 = TRUE;
    661705            break;
    662706          case 1:
    663707            catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_PHOTOM_PASS_1;
    664             GoodPS1 = TRUE;
     708            if (havePS1) GoodPS1 = TRUE;
    665709            break;
    666710          case 2:
    667711            catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_PHOTOM_PASS_2;
    668             GoodPS1 = TRUE;
     712            if (havePS1) GoodPS1 = TRUE;
    669713            break;
    670714          case 3:
     
    678722          catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_USE_SYNTH;
    679723        }       
     724        if (haveStack) {
     725          catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_HAS_STACK;
     726        }       
     727        if (havePS1) {
     728          catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_HAS_PS1;
     729        }       
    680730        if (haveUbercal) {
    681731          catalog[Nc].secfilt[Nsecfilt*j+Nsec].flags |= ID_SECF_USE_UBERCAL;
     
    685735
    686736    if (isSetMrelFinal) {
    687       DVOAverageFlags flagBits = ID_OBJ_EXT | ID_OBJ_EXT_ALT | ID_OBJ_GOOD | ID_OBJ_GOOD_ALT;
    688 
    689       // we attempt to set a few flags here; reset those bits before trying:
    690       catalog[Nc].average[j].flags &= ~flagBits;
     737      if (pass == 0) {
     738        DVOAverageFlags flagBits = ID_OBJ_EXT | ID_OBJ_EXT_ALT | ID_OBJ_GOOD | ID_OBJ_GOOD_ALT;
     739        // we attempt to set a few flags here; reset those bits before trying:
     740        catalog[Nc].average[j].flags &= ~flagBits;
     741      }
    691742
    692743      if (NextPS1 && (NextPS1 > NpsfPS1)) {
     
    701752      if (Good2MASS) {
    702753        catalog[Nc].average[j].flags |= ID_OBJ_GOOD_ALT;
     754      }
     755
     756      // use NAN values for catalog[Nc].average[j].psfQF as signal
     757      if (!isfinite(catalog[Nc].average[j].psfQF)) {
     758        // do something here
     759        float psfQFmax     = 0.0;
     760        float psfQFperfmax = 0.0;
     761        float stargalmax   = 0.0;
     762        int seq;
     763        for (seq = 0; seq < Nmeas; seq++) {
     764          if (isfinite(psfqf_list[seq])) {
     765            psfQFmax     = MAX (psfqf_list[seq], psfQFmax);
     766          }
     767          if (isfinite(psfqfperf_list[seq])) {
     768            psfQFperfmax = MAX (psfqfperf_list[seq], psfQFperfmax);
     769          }
     770          if (isfinite(stargal_list[seq])) {
     771            stargalmax   = MAX (stargal_list[seq], stargalmax);
     772          }
     773        }
     774
     775        catalog[Nc].average[j].psfQF     = psfQFmax;
     776        catalog[Nc].average[j].psfQFperf = psfQFperfmax;
     777        catalog[Nc].average[j].stargal   = stargalmax;
    703778      }
    704779    }
  • trunk/Ohana/src/relphot/src/initialize.c

    r33963 r34429  
    7777  args_client (argc, argv);
    7878
    79   if (MODE == MODE_UPDATE_OBJECTS) return;
     79  if (MODE == MODE_UPDATE_OBJECTS) {
     80    char tmpline1[256];
     81    int Ns;
     82    Nphotcodes = GetPhotcodeNsecfilt ();
     83    ALLOCATE (photcodes, PhotCode *, Nphotcodes);
     84    ALLOCATE (PhotcodeList, char, 256);
     85    for (Ns = 0; Ns < Nphotcodes; Ns++) {
     86      photcodes[Ns] = GetPhotcodebyNsec (Ns);
     87      if (Ns > 0) {
     88        snprintf (tmpline1, 256, "%s,%s", PhotcodeList, photcodes[Ns][0].name);
     89      } else {
     90        snprintf (tmpline1, 256, "%s", photcodes[Ns][0].name);
     91      }
     92      strcpy (PhotcodeList, tmpline1);
     93    }
     94    return;
     95  }
    8096
    8197  // load the list of photcodes into the globals (photcodes, Nphotcodes)
  • trunk/Ohana/src/relphot/src/liststats.c

    r33963 r34429  
    3838    dsortthree (value, dvalue, weight, N);
    3939  } else {
    40     dsortpair (value, dvalue, N);
     40    if (dvalue) {
     41      dsortpair (value, dvalue, N);
     42    } else {
     43      dsort (value, N);
     44    }
    4145  }
    4246
  • trunk/Ohana/src/relphot/src/relphot_objects.c

    r34405 r34429  
    6161      Nsecfilt = catalog.Nsecfilt;
    6262      DVOSecfiltFlags secfiltBits =
    63         ID_SECF_STAR_FEW |
    64         ID_SECF_STAR_POOR |
    65         ID_PHOTOM_PASS_0 |
    66         ID_PHOTOM_PASS_1 |
    67         ID_PHOTOM_PASS_2 |
    68         ID_PHOTOM_PASS_3 |
    69         ID_PHOTOM_PASS_4 |
    70         ID_SECF_USE_SYNTH |
     63        ID_SECF_STAR_FEW    |
     64        ID_SECF_STAR_POOR   |
     65        ID_PHOTOM_PASS_0    |
     66        ID_PHOTOM_PASS_1    |
     67        ID_PHOTOM_PASS_2    |
     68        ID_PHOTOM_PASS_3    |
     69        ID_PHOTOM_PASS_4    |
     70        ID_SECF_USE_SYNTH   |
    7171        ID_SECF_USE_UBERCAL |
    72         ID_SECF_OBJ_EXT;
     72        ID_SECF_HAS_STACK   |
     73        ID_SECF_HAS_PS1     |
     74        ID_SECF_OBJ_EXT     ;
     75     
     76      DVOAverageFlags astromBits =
     77        ID_STAR_FIT_AVE   |
     78        ID_STAR_FIT_PM    |
     79        ID_STAR_FIT_PAR   |
     80        ID_STAR_USE_AVE   |
     81        ID_STAR_USE_PM    |
     82        ID_STAR_USE_PAR   |
     83        ID_STAR_NO_ASTROM ;
    7384     
    7485      for (j = 0; j < catalog.Naverage; j++) {
    75         catalog.average[j].flags = 0;
     86        catalog.average[j].flags &= astromBits; // reset all except astrometry bits
     87        catalog.average[j].psfQF     = NAN;     // reset (will be re-calculated here)
     88        catalog.average[j].psfQFperf = NAN;     // reset (will be re-calculated here)
     89        catalog.average[j].stargal   = NAN;     // reset (will be re-calculated here)
    7690        for (k = 0; k < Nsecfilt; k++) {
    77           catalog.secfilt[j*Nsecfilt + k].M      = NAN;
    78           catalog.secfilt[j*Nsecfilt + k].Map    = NAN;
    79           catalog.secfilt[j*Nsecfilt + k].dM     = NAN;
    80           catalog.secfilt[j*Nsecfilt + k].Mstdev = NAN_S_SHORT;
    81           catalog.secfilt[j*Nsecfilt + k].Xm     = NAN;
    82           catalog.secfilt[j*Nsecfilt + k].M_20   = NAN_S_SHORT;
    83           catalog.secfilt[j*Nsecfilt + k].M_80   = NAN_S_SHORT;
    84           catalog.secfilt[j*Nsecfilt + k].Ncode  = 0;
    85           catalog.secfilt[j*Nsecfilt + k].Nused  = 0;
    86           catalog.secfilt[j*Nsecfilt + k].flags &= ~secfiltBits;
    87           catalog.secfilt[j*Nsecfilt + k].ubercalDist = 1000;
     91          dvo_secfilt_init (&catalog.secfilt[j*Nsecfilt + k]);
     92          catalog.secfilt[j*Nsecfilt + k].flags &= ~secfiltBits; // XXX: only reset photom bits:
    8893        }
    8994      }
  • trunk/Ohana/src/relphot/src/setMrelFinal.c

    r34405 r34429  
    9494  }
    9595
     96  for (i = 0; i < catalog[0].Naverage; i++) {
     97    catalog[0].average[i].psfQF     = NAN;      // force recalculation below
     98    catalog[0].average[i].psfQFperf = NAN;      // force recalculation below
     99    catalog[0].average[i].stargal   = NAN;      // force recalculation below
     100  }
     101
    96102  // XXX make this optional? (do not clean for -averages?)
    97103  if (!simpleAverage) clean_measures (catalog, 1, TRUE, flatcorr);    /* mark outliers ID_MEAS_POOR_PHOTOM */
Note: See TracChangeset for help on using the changeset viewer.