IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 37675


Ignore:
Timestamp:
Nov 26, 2014, 6:23:50 AM (12 years ago)
Author:
eugene
Message:

add outlier clipping to Ylm fit; l = 5 (still hard-wired); Ylm used to fit dR*cos(dec), not dR

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20140904/Ohana/src/relastro/src/FrameCorrection.c

    r37660 r37675  
    117117    double Ro = 330.0;
    118118    double Do =   0.0;
     119    double scale = 2.0; // degrees per patch
     120    int Nx = 10;
     121    int Ny = 10;
    119122    if (USE_ICRF_POLE) {
    120123       Ro =  0.0;
    121124       Do = 90.0;
    122     }
    123 
    124     double scale = 2.0; // degrees per patch
    125     int Nx = 10;
    126     int Ny = 10;
     125       scale = 5.0; // degrees per patch
     126       Nx = 4;
     127       Ny = 4;
     128    }
     129
    127130   
    128131    Coords *coords = NULL;
     
    147150  if (USE_ICRF_SHFIT) {
    148151    // Lmax in recipe
    149     int Lmax = 20;
     152    int Lmax = 5;
    150153
    151154    // dR and dD will carry the fit coefficients in RA and DEC
     
    191194  memset (mask, 0, icrfobj->Nicrfobj*sizeof(int));
    192195
    193   SHfitWithMask (icrfobj->Rave, icrfobj->Dave, icrfobj->dRoff, mask, icrfobj->Nicrfobj, dRc);
    194   SHfitWithMask (icrfobj->Rave, icrfobj->Dave, icrfobj->dDoff, mask, icrfobj->Nicrfobj, dDc);
    195 
    196   // the bit below is for testing
    197 
    198   // allocate an SHterms structure to hold the Ylm values
    199   SHterms *Ylm = SHtermsInit (dRc->lmax);
    200 
    201   static int version = 0;
    202   char filename[1024];
    203   snprintf (filename, 1024, "%s/sh.%02d.dat", CATDIR, version);
    204   FILE *f = fopen (filename, "w");
    205   myAssert (f, "oops");
    206   version ++;
    207 
    208   for (i = 0; i < icrfobj->Nicrfobj; i++) {
     196  double *dPosObs, *dPosSrt = NULL;
     197  ALLOCATE (dPosObs, double, icrfobj->Nicrfobj);
     198  ALLOCATE (dPosSrt, double, icrfobj->Nicrfobj);
     199
     200  int Niter;
     201  for (Niter = 0; Niter < 3; Niter ++) {
     202
     203    SHfitWithMask (icrfobj->Rave, icrfobj->Dave, icrfobj->dRoff, mask, icrfobj->Nicrfobj, dRc);
     204    SHfitWithMask (icrfobj->Rave, icrfobj->Dave, icrfobj->dDoff, mask, icrfobj->Nicrfobj, dDc);
     205
     206    // the bit below is for testing
     207
     208    // allocate an SHterms structure to hold the Ylm values
     209    SHterms *Ylm = SHtermsInit (dRc->lmax);
     210
     211    static int version = 0;
     212    char filename[1024];
     213    snprintf (filename, 1024, "%s/sh.%02d.dat", CATDIR, version);
     214    FILE *f = fopen (filename, "w");
     215    myAssert (f, "oops");
     216    version ++;
     217
     218    int Nkeep = 0;
     219    for (i = 0; i < icrfobj->Nicrfobj; i++) {
    209220   
    210     SHtermsForRD (Ylm, icrfobj->Rave[i], icrfobj->Dave[i]);
     221      SHtermsForRD (Ylm, icrfobj->Rave[i], icrfobj->Dave[i]);
    211222     
    212     double dRfit = 0.0;
    213     double dDfit = 0.0;
    214 
    215     int j;
    216     for (j = 0; j < Ylm->Nterms; j++) {
    217       dRfit += dRc->Fr[j]*Ylm->Fr[j] + dRc->Fi[j]*Ylm->Fi[j];
    218       dDfit += dDc->Fr[j]*Ylm->Fr[j] + dDc->Fi[j]*Ylm->Fi[j];
    219     }
    220     fprintf (f, "%12.8f %12.8f %7.3f %7.3f : %7.3f %7.3f\n",
    221              icrfobj->Rave[i], icrfobj->Dave[i], icrfobj->dRoff[i], icrfobj->dDoff[i], dRfit, dDfit);
    222   }
    223   fclose (f);
     223      double dRfit = 0.0;
     224      double dDfit = 0.0;
     225
     226      int j;
     227      for (j = 0; j < Ylm->Nterms; j++) {
     228        dRfit += dRc->Fr[j]*Ylm->Fr[j] + dRc->Fi[j]*Ylm->Fi[j];
     229        dDfit += dDc->Fr[j]*Ylm->Fr[j] + dDc->Fi[j]*Ylm->Fi[j];
     230       
     231      }
     232      fprintf (f, "%12.8f %12.8f %7.3f %7.3f : %7.3f %7.3f : %d\n",
     233               icrfobj->Rave[i], icrfobj->Dave[i], icrfobj->dRoff[i], icrfobj->dDoff[i], dRfit, dDfit, mask[i]);
     234      dPosObs[i] = hypot(icrfobj->dRoff[i] - dRfit, icrfobj->dDoff[i] - dDfit);
     235      if (mask[i]) continue;
     236      if (isnan(dPosObs[i])) continue;
     237      dPosSrt[Nkeep] = dPosObs[i];
     238      Nkeep ++;
     239    }
     240    fclose (f);
     241   
     242    dsort (dPosSrt, Nkeep);
     243    double dPmax = 1.5*dPosSrt[(int)(0.95*Nkeep)];
     244
     245    Nkeep = 0;
     246    for (i = 0; i < icrfobj->Nicrfobj; i++) {
     247      if (dPosObs[i] > dPmax) mask[i] = 1;
     248      if (isnan(dPosObs[i])) mask[i] = 1;
     249      if (!mask[i]) Nkeep++;
     250    }
     251    fprintf (stderr, "keeping %d of %d points\n", Nkeep, icrfobj->Nicrfobj);
     252  }
    224253
    225254  free (mask);
     255  free (dPosObs);
     256  free (dPosSrt);
    226257
    227258  return TRUE;
     
    406437    if (Yave > map->Ny) continue;
    407438
    408     double Rm = icrfobj->Rave[i] - icrfobj->dRoff[i] / 3600.0;
     439    double Rm = icrfobj->Rave[i] - icrfobj->dRoff[i] / 3600.0 / cos(icrfobj->Rave[i]*RAD_DEG);
    409440    double Dm = icrfobj->Dave[i] - icrfobj->dDoff[i] / 3600.0;
    410441    RD_to_XY (&Xmeas, &Ymeas, Rm, Dm, coords);
     
    572603        }
    573604
    574         average->R -= dR / 3600.0;
     605        average->R -= dR / 3600.0 / cos(average->R*RAD_DEG);
    575606        average->D -= dD / 3600.0;
    576607      }
Note: See TracChangeset for help on using the changeset viewer.