IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 17211


Ignore:
Timestamp:
Mar 28, 2008, 3:41:56 PM (18 years ago)
Author:
eugene
Message:

init uR, uD, PA; clip by photcode, photflags

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/relastro/src/UpdateObjects.c

    r17152 r17211  
    4040int UpdateObjects (Catalog *catalog, int Ncatalog) {
    4141
    42   int i, j, k, m, N;
     42  int i, j, k, m, N, Nsecfilt, found, kp;
    4343  StatType statsR, statsD;
    4444  Coords coords;
     
    4949  float errorScale;
    5050  float mag;
     51  int mask;
     52  PhotCode *code;
    5153
    5254  initObjectData (catalog, Ncatalog);
     
    6769  Nave = Npar = Npm = 0;
    6870
     71  // XXX in the future, use catalog[0].Nsecfilt only?  allow catalogs to have variable Nsecfilt?
     72  Nsecfilt = GetPhotcodeNsecfilt ();
     73  assert (catalog[0].Nsecfilt == Nsecfilt);
     74
    6975  for (i = 0; i < Ncatalog; i++) {
    7076
     
    7379    Nskip = 0;
    7480    for (j = 0; j < catalog[i].Naverage; j++) {
    75 
    7681      /* calculate the average value of R,D for a single star */
     82
     83      // skip objects which are known to be problematic
     84      // XXX include this code or not?
     85      # if (0)
    7786      if (catalog[i].average[j].code & STAR_BAD) {
    7887        Nskip ++;
    7988        continue; 
    8089      }
     90      # endif
    8191
    8292      N = 0;
     
    8898      for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) {
    8999
    90         /* exclude measurements by previous outlier detection */
    91         if (catalog[i].measure[m].dbFlags & MEAS_BAD) continue;
     100        // exclude measurements by previous outlier detection
     101        // XXX include this code or not?
     102        # if (0)
     103        if (catalog[i].measure[m].dbFlags & MEAS_BAD) {
     104          catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM;
     105          continue;
     106        }
     107        # endif
    92108
    93109        /* exclude measurements by quality */
    94         if (PhotFlagSelect && (catalog[i].measure[m].photFlags & PhotFlagValue)) continue;
     110        if (PhotFlagSelect) {
     111          if (PhotFlagBad) {
     112            mask = PhotFlagBad;
     113          } else {
     114            code = GetPhotcodebyCode (catalog[i].measure[m].photcode);
     115            mask = code[0].astromBadMask;
     116          }
     117          if (mask & catalog[i].measure[m].photFlags) {
     118            catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM;
     119            continue;
     120          }
     121        }
    95122       
    96123        /* exclude measurements by mag limit */
    97124        if (ImagSelect) {
    98125          mag = PhotInst (&catalog[i].measure[m]);
    99           if (mag < ImagMin) continue;
    100           if (mag > ImagMax) continue;
    101         }
    102 
    103         R[N] = getMeanR (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*PhotNsec]);
    104         D[N] = getMeanD (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*PhotNsec]);
     126          if (mag < ImagMin) {
     127            catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM;
     128            continue;
     129          }
     130          if (mag > ImagMax) {
     131            catalog[i].measure[m].dbFlags |= ID_MEAS_SKIP_ASTROM;
     132            continue;
     133          }
     134        }
     135
     136        /* select or exclude measurements by photcode, or equiv photcode, if specified */
     137        if (NphotcodesKeep > 0) {
     138          found = FALSE;
     139          for (kp = 0; (kp < NphotcodesKeep) && !found; kp++) {
     140            if (photcodesKeep[kp][0].code == catalog[i].measure[m].photcode) found = TRUE;
     141            if (photcodesKeep[kp][0].code == GetPhotcodeEquivCodebyCode(catalog[i].measure[m].photcode)) found = TRUE;
     142          }
     143          if (!found) continue;
     144        }
     145        if (NphotcodesSkip > 0) {
     146          found = FALSE;
     147          for (kp = 0; (kp < NphotcodesSkip) && !found; kp++) {
     148            if (photcodesSkip[kp][0].code == catalog[i].measure[m].photcode) found = TRUE;
     149            if (photcodesSkip[kp][0].code == GetPhotcodeEquivCodebyCode(catalog[i].measure[m].photcode)) found = TRUE;
     150          }
     151          if (found) continue;
     152        }
     153
     154        R[N] = getMeanR (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]);
     155        D[N] = getMeanD (&catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]);
    105156        T[N] = (catalog[i].measure[m].t - To) / (86400*365.25) ; // time relative to J2000 in years
    106157
     
    119170      // position, consider including the lower-quality detections
    120171
     172      catalog[i].average[j].code &= ~ID_STAR_FEW;
     173
    121174      // XXX add the parallax factor range as a criterion as well
    122175      if ((Tmax - Tmin) < PM_DT_MIN) mode = FIT_AVERAGE;
    123176      if ((mode == FIT_PM_ONLY) && (N < PM_TOOFEW)) mode = FIT_AVERAGE;
    124177
    125       // XXX This criterion needs to be better considered: adjust to match Ndof
    126       if (N < POS_TOOFEW) { /* too few measurements */
    127         catalog[i].average[j].code |= ID_STAR_FEW;
     178      // too few measurements for average position (require 2 values)
     179      if (N < 2) {
     180        // XXX need to define PHOTOM and ASTROM object flags
     181        // catalog[i].average[j].code |= ID_STAR_FEW;
    128182        continue;
    129       } else {
    130         catalog[i].average[j].code &= ~ID_STAR_FEW;
    131       }
     183      }
    132184
    133185      /* we need to do the fit in a locally linear space; choose a ref coordinate */
     
    157209          fit.chisq = 0.5*(statsR.chisq + statsD.chisq);
    158210          fit.Nfit = N;
     211
     212          fit.uR = fit.duR = 0.0;
     213          fit.uD = fit.duD = 0.0;
     214          fit.p  = fit.dp  = 0.0;
     215
    159216          Nave ++;
    160217          break;
     
    167224          // fprintf (stderr, "project: %f %f : %f %f : %f\n", fit.Ro, fit.Do, fit.uR, fit.uD, fit.p);
    168225          // continue;
     226
     227          fit.p  = fit.dp  = 0.0;
     228
    169229          Npm ++;
    170230          break;
    171231
    172232        case FIT_PAR_ONLY:
     233          fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__);
     234          exit (2);
     235
    173236          for (k = 0; k < N; k++) {
    174237            ParFactor (&pX[k], &pY[k], R[k], D[k], T[k]);
     
    178241          // project Ro, Do back to RA,DEC
    179242          XY_to_RD (&fit.Ro, &fit.Do, fit.Ro, fit.Do, &coords);
     243
     244          fit.uR = fit.duR = 0.0;
     245          fit.uD = fit.duD = 0.0;
     246
    180247          Npar ++;
    181248          break;
    182249
    183250        case FIT_PM_AND_PAR:
     251          fprintf (stderr, "programming error at %s, %d", __FILE__, __LINE__);
     252          exit (2);
     253
    184254          for (k = 0; k < N; k++) {
    185255            ParFactor (&pX[k], &pY[k], R[k], D[k], T[k]);
     
    207277      m = catalog[i].average[j].measureOffset;
    208278      for (k = 0; k < catalog[i].average[j].Nmeasure; k++, m++) {
    209         if (catalog[i].measure[m].dbFlags & MEAS_BAD) continue;
    210         setMeanR (fit.Ro, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*PhotNsec]);
    211         setMeanD (fit.Do, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*PhotNsec]);
     279        // XXX why was this here?? if (catalog[i].measure[m].dbFlags & MEAS_BAD) continue;
     280        setMeanR (fit.Ro, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]);
     281        setMeanD (fit.Do, &catalog[i].measure[m], &catalog[i].average[j], &catalog[i].secfilt[j*Nsecfilt]);
    212282      }     
    213283
Note: See TracChangeset for help on using the changeset viewer.