Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.gcs.txt
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.gcs.txt	(revision 42189)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.gcs.txt	(revision 42189)
@@ -0,0 +1,77 @@
+
+  | UKIRT field name          : DVO measure field
+  1 sourceID                  : extID
+  3 frameSetID		      : imageID (assumes we do not try to go backwards for these photcodes)
+  4 ra			      : R
+  5 dec	  		      : D
+  8 epoch 		      : t 
+ 23 priOrSec		      : primary bit in dbFlags
+ 41 mergedClass		      : photFlags2
+ 42 pStar		      : psfChisq
+ 43 pGalaxy		      : extNsigma
+
+ 46 zHallMag		      : M
+ 47 zHallMagErr		      : dM
+ 50 zAperMag3		      : Map
+ 51 zAperMag3Err	      : dMap
+ 52 zAperMag4		      : Mkron
+ 53 zAperMag4Err	      : dMron
+ 58 zPA			      : posangle
+ 61 zClass		      : psfQF
+ 63 zppErrBits		      : photFlags
+ 64 zSeqNum                   : detID
+
+ 68 yHallMag		      : M
+ 69 yHallMagErr		      : dM
+ 72 yAperMag3		      : Map
+ 73 yAperMag3Err	      : dMap
+ 74 yAperMag4		      : Mkron
+ 75 yAperMag4Err	      : dMron
+ 80 yPA			      : posangle
+ 83 yClass		      : psfQF
+ 85 yppErrBits		      : photFlags
+ 86 ySeqNum                   : detID
+
+ 90 jHallMag		      : M
+ 91 jHallMagErr		      : dM
+ 94 jAperMag3		      : Map
+ 95 jAperMag3Err	      : dMap
+ 96 jAperMag4		      : Mkron
+ 97 jAperMag4Err	      : dMron
+102 jPA			      : posangle
+105 jClass		      : psfQF
+107 jppErrBits		      : photFlags
+108 jSeqNum                   : detID
+
+112 hHallMag		      : M
+113 hHallMagErr		      : dM
+116 hAperMag3		      : Map
+117 hAperMag3Err	      : dMap
+118 hAperMag4		      : Mkron
+119 hAperMag4Err	      : dMron
+124 hPA			      : posangle
+127 hClass		      : psfQF
+129 hppErrBits		      : photFlags
+130 hSeqNum                   : detID
+
+134 k_1HallMag		      : M
+135 k_1HallMagErr	      : dM
+138 k_1AperMag3		      : Map
+139 k_1AperMag3Err	      : dMap
+140 k_1AperMag4		      : Mkron
+141 k_1AperMag4Err	      : dMron
+146 k_1PA		      : posangle
+149 k_1Class		      : psfQF
+151 k_1ppErrBits	      : photFlags
+152 k_1SeqNum                 : detID
+
+156 k_2HallMag		      : M
+157 k_2HallMagErr	      : dM
+160 k_2AperMag3		      : Map
+161 k_2AperMag3Err	      : dMap
+162 k_2AperMag4		      : Mkron
+163 k_2AperMag4Err	      : dMron
+168 k_2PA		      : posangle
+171 k_2Class		      : psfQF
+173 k_2ppErrBits	      : photFlags
+174 k_2SeqNum                 : detID
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.gps.txt
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.gps.txt	(revision 42189)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.gps.txt	(revision 42189)
@@ -0,0 +1,67 @@
+
+  | UKIRT field name          : DVO measure field
+  1 sourceID                  : extID
+  3 frameSetID		      : imageID (assumes we do not try to go backwards for these photcodes)
+  4 ra			      : R
+  5 dec	  		      : D
+  8 epoch 		      : t
+ 23 priOrSec		      : primary bit in dbFlags
+
+ 31 mergedClass		      : psfQFperf or photFlags2
+ 32 pStar		      : psfChisq
+ 33 pGalaxy		      : extNsigma
+
+ 36 jAperMag1		      : M
+ 37 jAperMag1Err	      : dM
+ 38 jAperMag3		      : Map
+ 39 jAperMag3Err	      : dMap
+ 40 jAperMag4		      : Mkron
+ 41 jAperMag4Err	      : dMron
+ 44 jPA			      : posangle
+ 47 jClass		      : psfQF
+ 49 jppErrBits		      : photFlags
+ 50 jSeqNum                   : detID
+
+ 54 hAperMag1		      : M
+ 55 hAperMag1Err	      : dM
+ 56 hAperMag3		      : Map
+ 57 hAperMag3Err	      : dMap
+ 58 hAperMag4		      : Mkron
+ 59 hAperMag4Err	      : dMron
+ 62 hPA			      : posangle
+ 65 hClass		      : psfQF
+ 67 hppErrBits		      : photFlags
+ 68 hSeqNum                   : detID
+
+ 72 k_1AperMag1		      : M
+ 73 k_1AperMag1Err	      : dM
+ 74 k_1AperMag3		      : Map
+ 75 k_1AperMag3Err	      : dMap
+ 76 k_1AperMag4		      : Mkron
+ 77 k_1AperMag4Err	      : dMron
+ 80 k_1PA		      : posangle
+ 83 k_1Class		      : psfQF
+ 85 k_1ppErrBits	      : photFlags
+ 86 k_1SeqNum                 : detID
+
+ 90 k_2AperMag1		      : M
+ 91 k_2AperMag1Err	      : dM
+ 92 k_2AperMag3		      : Map
+ 93 k_2AperMag3Err	      : dMap
+ 94 k_2AperMag4		      : Mkron
+ 95 k_2AperMag4Err	      : dMron
+ 98 k_2PA		      : posangle
+101 k_2Class		      : psfQF
+103 k_2ppErrBits	      : photFlags
+104 k_2SeqNum                 : detID
+
+108 h_2AperMag1		      : M
+109 h_2AperMag1Err	      : dM
+110 h_2AperMag3		      : Map
+111 h_2AperMag3Err	      : dMap
+112 h_2AperMag4		      : Mkron
+113 h_2AperMag4Err	      : dMron
+116 h_2PA		      : posangle
+119 h_2Class		      : psfQF
+121 h_2ppErrBits	      : photFlags
+122 h_2SeqNum                 : detID
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.las.txt
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.las.txt	(revision 42189)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.las.txt	(revision 42189)
@@ -0,0 +1,67 @@
+
+  | UKIRT field name          : DVO measure field
+
+  1 sourceID                  : extID
+  2 frameSetID		      : imageID (assumes we do not try to go backwards for these photcodes)
+  3 ra			      : R
+  4 dec	  		      : D
+  7 epoch 		      : t
+ 22 priOrSec		      : primary bit in dbFlags
+ 36 mergedClass		      : photFlags2
+ 37 pStar		      : psfChisq
+ 38 pGalaxy		      : extNsigma
+
+ 46 yHallMag		      : M
+ 47 yHallMagErr		      : dM
+ 50 yAperMag3		      : Map
+ 51 yAperMag3Err	      : dMap
+ 52 yAperMag4		      : Mkron
+ 53 yAperMag4Err	      : dMron
+ 58 yPA			      : posangle
+ 61 yClass		      : psfQF
+ 63 yppErrBits		      : photFlags
+ 64 ySeqNum                   : detID
+
+ 68 j_1HallMag		      : M
+ 69 j_1HallMagErr	      : dM
+ 72 j_1AperMag3		      : Map
+ 73 j_1AperMag3Err	      : dMap
+ 74 j_1AperMag4		      : Mkron
+ 75 j_1AperMag4Err	      : dMron
+ 80 j_1PA		      : posangle
+ 83 j_1Class		      : psfQF
+ 85 j_1ppErrBits	      : photFlags
+ 86 j_1SeqNum                 : detID
+
+ 90 j_2HallMag		      : M
+ 91 j_2HallMagErr	      : dM
+ 94 j_2AperMag3		      : Map
+ 95 j_2AperMag3Err	      : dMap
+ 96 j_2AperMag4		      : Mkron
+ 97 j_2AperMag4Err	      : dMron
+102 j_2PA		      : posangle
+105 j_2Class		      : psfQF
+107 j_2ppErrBits	      : photFlags
+108 j_2SeqNum                 : detID
+
+112 hHallMag		      : M
+113 hHallMagErr		      : dM
+116 hAperMag3		      : Map
+117 hAperMag3Err	      : dMap
+118 hAperMag4		      : Mkron
+119 hAperMag4Err	      : dMron
+124 hPA			      : posangle
+127 hClass		      : psfQF
+129 hppErrBits		      : photFlags
+130 hSeqNum                   : detID
+
+134 kHallMag		      : M
+135 kHallMagErr	              : dM
+138 kAperMag3		      : Map
+139 kAperMag3Err	      : dMap
+140 kAperMag4		      : Mkron
+141 kAperMag4Err	      : dMron
+146 kPA		              : posangle
+149 kClass		      : psfQF
+151 kppErrBits	              : photFlags
+152 kSeqNum                   : detID
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.uhs.txt
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.uhs.txt	(revision 42189)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/doc/ukirt.uhs.txt	(revision 42189)
@@ -0,0 +1,22 @@
+
+  N -- field (column) number in CSV file (1 counting)
+  | UKIRT field name          : DVO measure field
+  1 sourceID                  : extID
+  3 frameSetID		      : imageID (assumes we do not try to go backwards for these photcodes)
+  4 ra			      : R
+  5 dec			      : D
+ 14 priOrSec		      : primary bit in dbFlags
+ 16 mergedClass		      : photFlags2
+ 17 pStar		      : psfChisq
+ 18 pGalaxy		      : extNsigma
+
+ 23 jHallMag		      : M
+ 24 jHallMagErr		      : dM
+ 27 jAperMag3		      : Map
+ 28 jAperMag3Err	      : dMap
+ 29 jAperMag4		      : Mkron
+ 30 jAperMag4Err	      : dMron
+ 35 jPA			      : posangle
+ 38 jClass		      : psfQF
+ 40 jppErrBits		      : photFlags
+ 41 jSeqNum                   : detID
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/include/WISE.h
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/include/WISE.h	(revision 42188)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/include/WISE.h	(revision 42189)
@@ -38,5 +38,5 @@
 int loadwise_star_allsky  (Measure *measure, char *line, int Nmax);
 int loadwise_star_allwise (Measure *measure, char *line, int Nmax);
-int loadwise_star_catwise (Measure *measure, char *line, int Nmax, double Rs, double Ds);
+int loadwise_star_catwise (Average *average, Measure *measure, char *line, int Nmax, WISE_Stars *tstars);
 
 char *nextWISEfield (char *line);
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/args_loadwise.c
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/args_loadwise.c	(revision 42188)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/args_loadwise.c	(revision 42189)
@@ -50,4 +50,11 @@
   if ((N = get_argument (*argc, argv, "-v"))) {
     VERBOSE = TRUE;
+    remove_argument (N, argc, argv);
+  }
+
+  /* accept proper-motion data from reference */
+  ACCEPT_MOTION = FALSE;
+  if ((N = get_argument (*argc, argv, "-accept-motion"))) {
+    ACCEPT_MOTION = TRUE;
     remove_argument (N, argc, argv);
   }
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_ops.c
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_ops.c	(revision 42188)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_ops.c	(revision 42189)
@@ -19,5 +19,5 @@
   if (MODE == MODE_CATWISE) {
       // copy the string ranges and then use strtod (not necessary?)
-      *R = strtod (&ptr[47], NULL); // safe to use the strtod on the line because it is white-space separated
+      *R = strtod (&ptr[47], NULL); // safe to use strtod on the line because it is white-space separated
       *D = strtod (&ptr[59], NULL);
   } else {
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_rawdata.c
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_rawdata.c	(revision 42188)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_rawdata.c	(revision 42189)
@@ -71,8 +71,5 @@
 	if (*p == '\\') goto skip_header;
 	if (*p == '|') goto skip_header;
-      }
-      if (skipHeader && (MODE == MODE_CATWISE)) {
-	// once we get past the header, do not skip any more
-	skipHeader = FALSE;
+	skipHeader = FALSE; // once we get past the header, do not skip any more
       }
 
@@ -94,5 +91,5 @@
 
       /* start of the next line */
-      p = q + 1;
+      p = q + 1; // q is always RETURN char on this line
       offset = p - buffer; // offset within this scan
       if (offset == Nbyte) {
@@ -104,5 +101,5 @@
       q = memchr (p, '\n', Nbyte - offset);
       if (q == NULL) {
-	// last, incomplete line in buffer
+	// we are on the last, incomplete line in buffer
 	Nextra = Nbyte - offset;
 	break;
@@ -183,5 +180,5 @@
 	    break;
 	  case MODE_CATWISE:
-	    loadwise_star_catwise (&newcat->measure[Nmeas], &buffer[offset], Nbyte - offset, tstars[j].R, tstars[j].D);
+	    loadwise_star_catwise (&newcat->average[Nave], &newcat->measure[Nmeas], &buffer[offset], Nbyte - offset, &tstars[j]);
 	    break;
 	  default:
Index: /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_star_full.c
===================================================================
--- /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_star_full.c	(revision 42188)
+++ /branches/eam_branches/ipp-20220316/Ohana/src/addstar/src/loadwise_star_full.c	(revision 42189)
@@ -8,7 +8,9 @@
 int setWISE_blend_flag (Measure *measure, char *ptr);
 
+int setCatWISE_ab_flag (Measure *measure, char qual);
+
 // fill in the data for a CatWISE double star.  takes a pointer to the start of the line the
 // RA and DEC have already been set
-int loadwise_star_catwise (Measure *measure, char *line, int Nmax, double Rs, double Ds) {
+int loadwise_star_catwise (Average *average, Measure *measure, char *line, int Nmax, WISE_Stars *tstars) {
 
   if (line == NULL) Shutdown ("format error in WISE");
@@ -22,12 +24,18 @@
   // already been extracted.
 
-  measure[0].R    = Rs;
-  measure[0].D    = Ds;
-  measure[1].R    = Rs;
-  measure[1].D    = Ds;
+  measure[0].R    = tstars->R;
+  measure[0].D    = tstars->D;
+  measure[1].R    = tstars->R;
+  measure[1].D    = tstars->D;
+
+  // P.M. values go on average:
+  average[0].uR  = getDoubleNAN (line, 1194, 1203); // PMRA
+  average[0].uD  = getDoubleNAN (line, 1204, 1213); // PMDec
+  average[0].duR = getDoubleNAN (line, 1214, 1222); // sigPMRA 
+  average[0].duD = getDoubleNAN (line, 1223, 1231); // sigPMDec
 
   // I can assign dRA and dDEC to dX and dY if I can consistently set posangle and pltscale
-  measure[0].dXccd = ToShortPixels(getDoubleRAW (line, 71, 79) + 0.005); // sig_ra -- add 5/1000 to avoid truncation
-  measure[0].dYccd = ToShortPixels(getDoubleRAW (line, 80, 88) + 0.005); // sig_dec
+  measure[0].dXccd = ToShortPixels(getDoubleNAN (line, 71, 79) + 0.005); // sig_ra -- add 5/1000 to avoid truncation
+  measure[0].dYccd = ToShortPixels(getDoubleNAN (line, 80, 88) + 0.005); // sig_dec
   measure[0].posangle = 0.0;
   measure[0].pltscale = 1.0;
@@ -39,6 +47,6 @@
   measure[1].pltscale = measure[0].pltscale;
 
-  measure[0].Xccd = getDoubleRAW (line,  98, 106); // wx
-  measure[0].Yccd = getDoubleRAW (line, 107, 115); // wy
+  measure[0].Xccd = getDoubleNAN (line,  98, 106); // wx
+  measure[0].Yccd = getDoubleNAN (line, 107, 115); // wy
   measure[1].Xccd = measure[0].Xccd;
   measure[1].Yccd = measure[0].Yccd;
@@ -47,31 +55,52 @@
   measure[0].M         = getDoubleNAN (line, 248, 254); // w1mpro
   measure[0].dM        = getDoubleNAN (line, 255, 264); // w1sigmpro
-  measure[0].psfChisq  = getDoubleRAW (line, 265, 275); // w1rchi2
-  measure[0].psfQF     = measure[0].psfChisq;
+  measure[0].psfChisq  = getDoubleNAN (line, 265, 275); // w1rchi2
   measure[0].photFlags = 0;
+
+  measure[0].Mkron     = getDoubleNAN (line, 563, 572); // w1mag_4
+  measure[0].dMkron    = getDoubleNAN (line, 573, 582); // w1sigm_4
+  measure[0].Map       = getDoubleNAN (line, 339, 345); // w1mag
+  measure[0].dMap      = getDoubleNAN (line, 346, 352); // w1sigm
+
+  measure[0].Xfix      = getDoubleNAN (line, 880, 891); // w1k
+  measure[0].Yfix      = getDoubleNAN (line, 989, 903); // w1mLQ
 
   // W2
   measure[1].M         = getDoubleNAN (line, 276, 282); // w2mpro
   measure[1].dM        = getDoubleNAN (line, 283, 292); // w2sigmpro
-  measure[1].psfChisq  = getDoubleRAW (line, 293, 303); // w2rchi2
-  measure[1].psfQF     = measure[1].psfChisq;
+  measure[1].psfChisq  = getDoubleNAN (line, 293, 303); // w2rchi2
   measure[1].photFlags = 0;
 
-  setCatWISE_blend_flag (measure, line); // w1sat
+  measure[1].Mkron     = getDoubleNAN (line, 591, 600); // w2mag_4 
+  measure[1].dMkron    = getDoubleNAN (line, 601, 610); // w2sigm_4
+  measure[1].Map       = getDoubleNAN (line, 367, 373); // w2mag
+  measure[1].dMap      = getDoubleNAN (line, 374, 380); // w2sigm
+
+  measure[1].Xfix      = getDoubleNAN (line, 995,  1006); // w2k
+  measure[1].Yfix      = getDoubleNAN (line, 1013, 1018); // w2mLQ
+
+  measure[0].psfQF     = getDoubleNAN (line, 304, 314); // rchi2
+  measure[1].psfQF     = measure[0].psfQF;
+
+  setCatWISE_blend_flag (measure, line); // na & nb
 
   setCatWISE_sat_flag (&measure[0], line, 323, 330); // w1sat
   setCatWISE_sat_flag (&measure[1], line, 331, 338); // w2sat
 
-  // cc_flags? 1642 - 1657
-  // setWISE_cc_flag (&measure[0], ptr[i]); // cc_flags
-
-  // set ext flags for all 4 measures
-  // setCatWISE_ext_flag_allsky (measure, ptr[0]); // ext_flg
-
-  // setWISE_var_flag_allsky (&measure[0], ptr[i]); // var_flg
-
-  // setWISE_ph_qual (&measure[i], ptr[i]); // ph_qual
-
-  double mjdmean = getDoubleRAW (line, 1126, 1138); // MeanObsMJD
+  // cc_flags is a field which takes 15 chars, but only 4 are used
+  // bytes 1653 - 1656 are the allWise cc_flag entries for W1, W2, W3, W4
+  // skip lines for which the 4 chars have the value 'null'
+  if (strncmp(&line[1653], "null", 4)) {
+      setWISE_cc_flag (&measure[0], line[1653]); // W1 cc_flag
+      setWISE_cc_flag (&measure[1], line[1654]); // W2 cc_flag
+  }
+
+  // cc_flags is a field which takes 8 chars, but only 2 are used
+  // bytes 1735 & 1736 are the ab_flag entries for W1 & W2
+  // they use the same values as cc_flags
+  setCatWISE_ab_flag (&measure[0], line[1735]); // W1 ab_flag
+  setCatWISE_ab_flag (&measure[1], line[1736]); // W2 ab_flag
+
+  double mjdmean = getDoubleNAN (line, 1126, 1138); // MeanObsMJD
   
   // the release is based on data taken in the period 14 January 2010 to 29 April 2010
@@ -575,4 +604,19 @@
   }
   return TRUE;
+}
+
+int setCatWISE_ab_flag (Measure *measure, char qual) {
+
+  switch (qual) {
+    case 'P': measure[0].photFlags2 |= FLAG_CC_PERSIST | FLAG_CC_SPURIOUS; break;
+    case 'H': measure[0].photFlags2 |= FLAG_CC_HALO    | FLAG_CC_SPURIOUS; break;
+    case 'D': measure[0].photFlags2 |= FLAG_CC_SPIKE   | FLAG_CC_SPURIOUS; break;
+    case 'O': measure[0].photFlags2 |= FLAG_CC_GHOST   | FLAG_CC_SPURIOUS; break;
+
+    case '0': break;
+    default: 
+      fprintf (stderr, "error in ab_flag: %c\n", qual);
+  }      
+  return (TRUE);
 }
 
