Index: trunk/Ohana/src/relastro/include/relastro.h
===================================================================
--- trunk/Ohana/src/relastro/include/relastro.h	(revision 38441)
+++ trunk/Ohana/src/relastro/include/relastro.h	(revision 38986)
@@ -28,4 +28,12 @@
 
 typedef enum {TARGET_NONE, TARGET_SIMPLE, TARGET_CHIPS, TARGET_MOSAICS} FitTarget;
+
+typedef enum {
+  FIT_RESULT_RA,
+  FIT_RESULT_DEC,
+  FIT_RESULT_uR,
+  FIT_RESULT_uD,
+  FIT_RESULT_PLX,
+} FitAstromResultMode;
 
 typedef enum {
@@ -115,13 +123,55 @@
   double Ro, dRo;
   double Do, dDo;
-
   double uR, duR;
   double uD, duD;
-
-  double p, dp;
+  double  p, dp;
 
   double chisq;
   int Nfit;
-} PMFit;
+} FitAstromResult;
+
+typedef struct {
+  double **A;
+  double **B;
+  int Nterms;
+} FitAstromData;
+
+typedef struct {
+  double X, dX;
+  double Y, dY;
+  double R, dR;
+  double D, dD;
+  double T, dT;
+  double pR;
+  double pD;
+  double C_blue;
+  double C_red;
+  int measure;
+} FitAstromPoint;
+
+typedef struct {
+  off_t Nave;
+  off_t Npm;
+  off_t Npar;
+  off_t Nskip;
+  off_t Noffset;
+
+  double *values;
+  FitAstromResult *fit; // use bootstrap resampling to generate Nfit fits to measure the stats
+  int Nfit;
+  int NfitAlloc;
+
+  FitAstromPoint *points;
+  FitAstromPoint *sample;
+  int Npoints;
+  int NpointsAlloc;
+
+  FitAstromData *fitdataPos;
+  FitAstromData *fitdataPM;
+  FitAstromData *fitdataPar;
+
+  Coords coords;
+  time_t T2000;
+} FitStats;
 
 typedef struct {
@@ -150,12 +200,4 @@
 
 typedef struct {
-  off_t Nave;
-  off_t Npm;
-  off_t Npar;
-  off_t Nskip;
-  off_t Noffset;
-} FitStats;
-
-typedef struct {
   double scale;
   double **Roff;
@@ -180,4 +222,6 @@
   int Nicrfobj;
 } ICRFobj;
+
+# define ID_MEAS_OBJECT_HAS_2MASS ID_MEAS_POOR_PHOTOM
 
 /* global variables set in parameter file */
@@ -224,4 +268,6 @@
 int    PARALLEL_OUTPUT;
 
+int    VERBOSE_IMAGE;
+
 int    VERBOSE;
 int    VERBOSE2;
@@ -234,4 +280,6 @@
 int    USE_ICRF_SHFIT;
 int    USE_ICRF_POLE;
+
+int    USE_ALL_IMAGES;
 
 int    RESET;
@@ -252,4 +300,6 @@
 int    CHIPORDER;
 int    CHIPMAP;
+
+int    N_BOOTSTRAP_SAMPLES;
 
 int MaxDensityUse;
@@ -369,5 +419,5 @@
 int           liststats_pos       PROTO((double *value, double *dvalue, int N, StatType *stats, int XVERB));
 Catalog      *load_catalogs       PROTO((SkyList *skylist, int *Ncatalog, int subselect, int hostID, char *hostpath, char *syncfile));
-int           load_images         PROTO((FITS_DB *db, SkyList *skylist, int UseFullOverlap));
+int           load_images         PROTO((FITS_DB *db, SkyList *skylist, int UseFullOverlap, int UseAllImages));
 Image        *select_images       PROTO((SkyList *skylist, Image *timage, off_t Ntimage, off_t **LineNumber, off_t *Nimage, int UseFullOverlap));
 
@@ -448,5 +498,5 @@
 int UpdateObjects (Catalog *catalog, int Ncatalog, int Nloop);
 int UpdateSimple (Catalog *catalog, int Ncatalog);
-int UpdateChips (Catalog *catalog, int Ncatalog);
+int UpdateChips (Catalog *catalog, int Ncatalog, int Nloop);
 int UpdateMosaic (Catalog *catalog, int Ncatalog);
 int UpdateMeasures (Catalog *catalog, int Ncatalog);
@@ -457,8 +507,8 @@
 
 int sun_ecliptic (double jd, double *lambda, double *beta, double *epsilon, double *Radius);
-int ParFactor (double *pR, double *pD, double RA, double Dec, double Time, double Tmean);
-int FitPM (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, int Npts, int XVERB);
-int FitPar (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *pR, double *pD, int Npts);
-int FitPMandPar (PMFit *fit, double *X, double *dX, double *Y, double *dY, double *T, double *pR, double *pD, int Npts, int XVERB);
+int ParFactor (double *pR, double *pD, double RA, double Dec, double Time);
+int FitPM (FitAstromResult *fit, FitAstromData *data, FitAstromPoint *points, int Npoints);
+int FitPMandPar (FitAstromResult *fit, FitAstromData *data, FitAstromPoint *points, int Npoints);
+int FitPosPMfixed (FitAstromResult *fit, FitAstromData *data, FitAstromPoint *points, int Npoints);
 
 Mosaic *getMosaicForImage (off_t N);
@@ -661,2 +711,23 @@
 int client_logger_init (char *dirname);
 int client_logger_message (char *format,...);
+
+int FitAstromSetChisq (FitAstromResult *fit, FitAstromPoint *points, int Npoints, FitMode mode);
+double VectorFractionInterpolate (double *values, float fraction, int Npts);
+int BootstrapRobustStats (FitAstromResult *result, FitAstromResult *fit, int Nfit, int mode);
+int BootstrapResample (FitAstromPoint *sample, FitAstromPoint *points, int Npoints);
+int CatalogMaxNmeasure (Catalog *catalog, int Ncatalog);
+int FitAstromPoints_Project (FitStats *fitStats, double *Tmean, double *Trange, double *parRange);
+int UpdateObjects_SelectMeasures (FitStats *fit, Average *average, SecFilt *secfilt, MeasureTiny *measure, Measure *measureBig, int isStack);
+int UpdateObjects_Stack (Average *average, SecFilt *secfilt, MeasureTiny *measure, Measure *measureBig, int Nsecfilt, FitStats *fitStats);
+int UpdateObjects_Chips (Average *average, SecFilt *secfilt, MeasureTiny *measure, Measure *measureBig, int Nsecfilt, FitStats *fitStats, int cat, off_t measOff);
+
+void FitAstromResultInit (FitAstromResult *fit);
+void FitAstromPointInit (FitAstromPoint *object);
+void FitAstromDataFree (FitAstromData *fit);
+FitAstromData *FitAstromDataInit (int Nterms);
+void FitStatsFree (FitStats *fitStats);
+void FitStatsSum (FitStats *src, FitStats *tgt);
+void FitStatsReset (FitStats *tgt);
+FitStats *FitStatsInit (int Nmax, int Nboot);
+int FitAstromResultSetPM (FitAstromResult *fit, int Nfit, Average *average);
+void AstromErrorSetLoop (int Nloop, int isImageMode);
