Index: trunk/Ohana/src/relastro/include/relastro.h
===================================================================
--- trunk/Ohana/src/relastro/include/relastro.h	(revision 37261)
+++ trunk/Ohana/src/relastro/include/relastro.h	(revision 37807)
@@ -34,9 +34,17 @@
 
 typedef struct {
-  float R;
-  float D;
+  double R;
+  double D;
   unsigned int objID;
   unsigned int catID;
 } MeanPos;
+
+typedef struct {
+  double R;
+  double D;
+  unsigned int objID;
+  unsigned int catID;
+  unsigned int imageID;
+} MeasPos;
 
 typedef struct {
@@ -47,4 +55,6 @@
   int nFitAstrom;
   int flags;
+  float refColorBlue;
+  float refColorRed;
 } ImagePos;
 
@@ -142,4 +152,28 @@
 } FitStats;
 
+typedef struct {
+  double scale;
+  double **Roff;
+  double **Doff;
+  double  *dR;
+  int *Nra;
+  int Ndec;
+} FrameCorrectionType;
+
+typedef struct {
+  // AstromOffsetMap *map;
+  Coords *coords; // carries a pointer to the AstromOffsetMap
+  FrameCorrectionType *frame;
+} FrameCorrectionSet;
+
+
+typedef struct {
+  double *Rave;
+  double *Dave;
+  double *dRoff;
+  double *dDoff;
+  int Nicrfobj;
+} ICRFobj;
+
 /* global variables set in parameter file */
 # define DVO_MAX_PATH 1024
@@ -172,4 +206,5 @@
 double MIN_ERROR;
 
+int    IMFIT_TOO_FEW; // need more than this number of stars to fit an image
 int    IMFIT_CLIP_NITER; // number of clipping iterations to perform in FitChip
 double IMFIT_CLIP_NSIGMA; // number of sigma to clip in FitChip
@@ -188,6 +223,13 @@
 
 int    USE_FIXED_PIXCOORDS;
+int    USE_GALAXY_MODEL;
+int    USE_ICRF_CORRECT;
+
+int    USE_ICRF_LOCAL;
+int    USE_ICRF_SHFIT;
+int    USE_ICRF_POLE;
 
 int    RESET;
+int    RESET_IMAGES;
 int    RESET_BAD_IMAGES;
 int    NLOOP;
@@ -204,4 +246,5 @@
 int    PLOTDELAY;
 int    CHIPORDER;
+int    CHIPMAP;
 
 int MaxDensityUse;
@@ -242,4 +285,5 @@
 int    CLIP_THRESH;
 int USE_BASIC_CHECK;
+int APPLY_OFFSETS; // in parallel-regions mode, do not launch UpdateObjectOffsets unless -apply-offsets is called
 
 int ExcludeBogus;
@@ -397,5 +441,5 @@
 void FitSimple (StarData *raw, StarData *ref, int Nmatch, Coords *coords);
 void initObjectData (Catalog *catalog, int Ncatalog);
-int UpdateObjects (Catalog *catalog, int Ncatalog);
+int UpdateObjects (Catalog *catalog, int Ncatalog, int Nloop);
 int UpdateSimple (Catalog *catalog, int Ncatalog);
 int UpdateChips (Catalog *catalog, int Ncatalog);
@@ -417,5 +461,7 @@
 StarData *getImageRef (Catalog *catalog, int Ncatalog, off_t im, off_t *Nstars, CoordMode mode);
 StarData *getImageRaw (Catalog *catalog, int Ncatalog, off_t im, off_t *Nstars, CoordMode mode);
+int setImageRaw (Catalog *catalog, int Ncatalog, off_t im, StarData *raw, off_t Nraw, CoordMode mode);
 off_t getImageByID (off_t ID);
+int updateImageRaw (Catalog *catalog, int Ncatalog, off_t im);
 
 Mosaic *getmosaics (off_t *N);
@@ -447,15 +493,8 @@
 int relastroGetVisual(void);
 
-int FixProblemImages (SkyList *skylist);
 int *getCatlist (int *N, off_t im);
 
-void initCoords (void);
-void getOffsets (double *dPos, off_t *nPos, off_t N);
-void saveOffsets (double dPos, off_t nPos, off_t N);
-void setBadCoords (off_t N);
-int badCoords (off_t N);
-Coords *getCoords (off_t N);
-int saveCoords (Coords *coords, off_t N);
-void resetImageRaw (Catalog *catalog, int Ncatalog, off_t im);
+void SaveCoords (Coords *tgt, Coords *src);
+void RestoreCoords (Coords *tgt, Coords *src, Image *image);
 
 int high_speed_catalogs (SkyTable *sky, SkyList *skylist, int hostID, char *hostpath);
@@ -468,4 +507,5 @@
 int checkStarMap(int N);
 int createStarMap (Catalog *catalog, int Ncatalog);
+int printStarMap(int N, char *filename);
 
 int GetScatterRawRef(float *dLsig, float *dMsig, float *dRsig, int *nKeep, StarData *raw, StarData *ref, int Nstars, float SigmaLimit);
@@ -519,4 +559,12 @@
 MeanPos *MeanPosLoad(char *filename, off_t *nmeanpos);
 
+int share_meas_pos (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop);
+int slurp_meas_pos (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop);
+int set_meas_pos (MeasPos *measpos, Average *average, MeasureTiny *measure);
+MeasPos *merge_meas_pos (MeasPos *target, int *ntarget, MeasPos *source, int Nsource);
+
+int MeasPosSave(char *filename, MeasPos *measpos, off_t Nmeaspos);
+MeasPos *MeasPosLoad(char *filename, off_t *nmeaspos);
+
 int indexCatalogs (Catalog *catalog, int Ncatalog);
 int catID_and_objID_to_seq (int catID, int objID, int *catSeq, off_t *objSeq);
@@ -528,5 +576,5 @@
 
 int share_image_pos (RegionHostTable *regionHosts, int nloop);
-int slurp_image_pos (RegionHostTable *regionHosts, int nloop);
+int slurp_image_pos (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop);
 ImagePos *merge_image_pos (ImagePos *target, int *ntarget, ImagePos *source, int Nsource);
 int set_image_pos (ImagePos *image_pos, Image *image);
@@ -547,2 +595,66 @@
 int isGPC1stack (int photcode);
 int isGPC1warp (int photcode);
+
+int save_astrom_table ();
+AstromOffsetTable *get_astrom_table ();
+void put_astrom_table (AstromOffsetTable *myTable);
+
+int fit_map (AstromOffsetMap *map, StarData *raw, StarData *ref, int Npts);
+
+// ICRF QSOs : these must be marked in the database (flag on average, flag on measure)
+
+void ICRFinit ();
+int ICRFsave (int cat, int ave, int meas);
+int ICRFdata (int n, int *cat, int *ave, int *meas);
+int ICRFmax ();
+int select_catalog_ICRF (Catalog *catalog, int Ncatalog);
+
+void ICRFobjFree (ICRFobj *icrfobj);
+ICRFobj *get_ICRF_data (Catalog *catalog, int Ncatalog);
+ICRFobj *merge_icrf_obj (ICRFobj *target, ICRFobj *source);
+ICRFobj *slurp_icrf_obj (RegionHostTable *regionHosts, int nloop);
+int share_icrf_obj (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop);
+
+int ICRFobjSave(char *filename, ICRFobj *icrfobj);
+ICRFobj *ICRFobjLoad(char *filename);
+
+int SHfitWithMask (double *R, double *D, double *value, int *mask, int Npts, SHterms *fit);
+
+FrameCorrectionType *FrameCorrectionInit (double scale);
+void FrameCorrectionFree (FrameCorrectionType *frame);
+
+int FrameCorrectionParallelMaster (RegionHostTable *regionHosts);
+int FrameCorrectionParallelSlave (Catalog *catalog, int Ncatalog, RegionHostTable *regionHosts, int nloop);
+int FrameCorrectionSerial (Catalog *catalog, int Ncatalog);
+
+FrameCorrectionSet *FrameCorrectionMeasure (ICRFobj *icrfobj);
+
+int FrameCorrectionFromSH (FrameCorrectionType *frame, SHterms *dR, SHterms *dD);
+
+Coords *FrameCorrectionImageToMap (Header *header, Matrix *matrix, Coords *coords, int raDirection);
+int FrameCorrectionMapToImage (Header *header, Matrix *matrix, Coords *coords, int raDirection);
+int FrameCorrectionSHtoImage (Header *header, Matrix *matrix, FrameCorrectionType *frame, int raDirection);
+FrameCorrectionType *FrameCorrectionImageToSH (Header *header, Matrix *matrix, FrameCorrectionType *frame, int raDirection);
+int FrameCorrectionFromSH (FrameCorrectionType *frame, SHterms *dR, SHterms *dD);
+void FrameCorrectionFree (FrameCorrectionType *frame);
+FrameCorrectionType *FrameCorrectionInit (double scale);
+void FrameCorrectionSetFree (FrameCorrectionSet *set);
+FrameCorrectionSet *FrameCorrectionSetInit ();
+
+int FrameCorrectionSetSave(char *filename, FrameCorrectionSet *set);
+FrameCorrectionSet *FrameCorrectionSetLoad(char *filename);
+
+int FrameCorrectionFitSH (ICRFobj *icrfobj, SHterms *dRc, SHterms *dDc);
+int FrameCorrectionFitLocal (ICRFobj *icrfobj, Coords *coords);
+int FrameCorrectionApply (Catalog *catalog, int Ncatalog, FrameCorrectionType *frame, Coords *coords);
+
+int dump_stardata_pts (StarData *raw, int Npts, char *filename);
+void printNcatTotal ();
+
+int HarvestRegionHosts (RegionHostTable *regionHosts);
+
+void lockUpdateChips ();
+void unlockUpdateChips ();
+
+int client_logger_init (char *dirname);
+int client_logger_message (char *format,...);
