Index: trunk/Ohana/src/addstar/src/loadwise_star_full.c
===================================================================
--- trunk/Ohana/src/addstar/src/loadwise_star_full.c	(revision 37814)
+++ trunk/Ohana/src/addstar/src/loadwise_star_full.c	(revision 37818)
@@ -10,4 +10,140 @@
 int setWISE_sat_flag (Stars *star, char *ptr);
 int setWISE_blend_flag (Stars **star, char *ptr);
+
+// fill in the data for a WISE quad star.  takes a pointer to the start of the line the
+// RA and DEC have already been set
+int loadwise_star_allwise (Stars **star, char *line, int Nmax) {
+
+  int i;
+  char *ptr;
+
+  if (line == NULL) Shutdown ("format error in WISE");
+
+  ptr = line;
+
+  // I can assign dRA and dDEC to dX and dY if I can consistently set posangle and pltscale
+  star[0][0].measure.posangle = 0.0;
+  star[0][0].measure.pltscale = 1.0;
+
+  ptr = skipNbounds (ptr, '|', 3, Nmax); // skip: desig, ra, dec,
+  star[0][0].measure.dXccd = ToShortPixels(strtod (ptr, NULL)); // sig_ra
+  ptr = nextWISEfield (ptr);
+  star[0][0].measure.dYccd = ToShortPixels(strtod (ptr, NULL)); // sig_dec
+  ptr = nextWISEfield (ptr);
+
+  // we only know a single set of values for all 4 bands 
+  for (i = 1; i < 4; i++) {
+      star[i][0].measure.dXccd    = star[0][0].measure.dXccd;
+      star[i][0].measure.dYccd    = star[0][0].measure.dYccd;
+      star[i][0].measure.posangle = star[0][0].measure.posangle;
+      star[i][0].measure.pltscale = star[0][0].measure.pltscale;
+  }
+  ptr = skipNbounds (ptr, '|', 5, Nmax); // skip: sig_radec, glon, glat, elon, elat
+
+  star[0][0].measure.Xccd = strtod (ptr, NULL); // wx
+  ptr = nextWISEfield (ptr); // skip wx
+  star[0][0].measure.Yccd = strtod (ptr, NULL); // wy
+  ptr = nextWISEfield (ptr); // skip wy
+
+  for (i = 1; i < 4; i++) {
+      star[i][0].measure.Xccd    = star[0][0].measure.Xccd;
+      star[i][0].measure.Yccd    = star[0][0].measure.Yccd;
+  }
+  ptr = skipNbounds (ptr, '|', 4, Nmax); // skip: cntr, source_id, coadd_id, src
+
+  // W1
+  for (i = 0; i < 4; i++) {
+    char *endpoint;
+      star[i][0].measure.M  = strtod (ptr, &endpoint); // w?mpro
+      if (endpoint == ptr) {
+	star[i][0].measure.M  = NAN;
+      }
+      ptr = nextWISEfield (ptr);
+      star[i][0].measure.dM = strtod (ptr, &endpoint); // w?sigmpro
+      if (endpoint == ptr) {
+	star[i][0].measure.dM  = NAN;
+      }
+      ptr = skipNbounds (ptr, '|', 2, Nmax); // skip: w?sigmpro, w?snr
+      star[i][0].measure.psfChisq = strtod (ptr, NULL); // w?rchi2
+      ptr = nextWISEfield (ptr); // skip : w1rchi2
+
+      // init the photFlags field
+      star[i][0].measure.photFlags = 0;
+  }
+
+  ptr = nextWISEfield (ptr); // skip: rchi2
+
+  // set blend flags for all 4 measures
+  setWISE_blend_flag (star, ptr); // nb & na both used here
+  ptr = skipNbounds (ptr, '|', 2, Nmax); // skip: nb, na
+
+  for (i = 0; i < 4; i++) {
+      setWISE_sat_flag (star[i], ptr); // w1sat
+      ptr = nextWISEfield (ptr); 
+  }
+  ptr = nextWISEfield (ptr); // skip satnum
+
+  ptr = skipNbounds (ptr, '|', 15, Nmax); // skip pm info
+
+  for (i = 0; i < 4; i++) {
+      setWISE_cc_flag (star[i], ptr[i]); // cc_flags
+  }
+  ptr = nextWISEfield (ptr); // skip cc_flags
+  ptr = nextWISEfield (ptr); // skip rel
+
+  // set ext flags for all 4 measures
+  setWISE_ext_flag_allsky (star, ptr[0]); // ext_flg
+  ptr = nextWISEfield (ptr); // skip ext_flags
+
+  for (i = 0; i < 4; i++) {
+      setWISE_var_flag_allsky (star[i], ptr[i]); // var_flg
+  }
+  ptr = nextWISEfield (ptr); // skip var_flags
+
+  for (i = 0; i < 4; i++) {
+      setWISE_ph_qual (star[i], ptr[i]); // ph_qual
+  }
+
+  ptr = skipNbounds (ptr, '|', 158, Nmax); // skip: det_bit, moon_lev, w?nm, w?m, w?cov, etc, etc.
+  // w?frtr dropped, (-4), use_src, best_use_cntr, ngrp added (+3), w?dmag dropped, w?k added, 
+
+  for (i = 0; i < 4; i++) {
+    ptr = skipNbounds (ptr, '|', 8, Nmax); // skip: w?magp, w?sigp1,2, w?dmag, w?ndf, w?m1q, w?mjdmin, w?mjdmax
+
+    // double mjdmin = strtod (ptr, NULL); // mjd min
+    // ptr = nextWISEfield (ptr); // skip
+    // double mjdmax = strtod (ptr, NULL); // mjd max
+    // ptr = nextWISEfield (ptr); // skip mjd max
+    double mjdmean = strtod (ptr, NULL); // mjd mean
+    ptr = nextWISEfield (ptr); // skip mjd mean
+
+    // fprintf (stderr, "w%d mjd: %f\n", i, mjdmean);
+
+    // the release is based on data taken in the period 14 January 2010 to 29 April 2010
+    if (mjdmean == 0.0) {
+      star[i][0].measure.t = 0;
+    } else {
+      star[i][0].measure.t = ohana_mjd_to_sec (mjdmean);
+    }
+  }
+
+  star[0][0].measure.photcode  = WISE_W1;
+  star[0][0].measure.detID   = 0;
+  star[0][0].measure.imageID = 0;
+
+  star[1][0].measure.photcode  = WISE_W2;
+  star[1][0].measure.detID   = 0;
+  star[1][0].measure.imageID = 0;
+
+  star[2][0].measure.photcode  = WISE_W3;
+  star[2][0].measure.detID   = 0;
+  star[2][0].measure.imageID = 0;
+
+  star[3][0].measure.photcode  = WISE_W4;
+  star[3][0].measure.detID   = 0;
+  star[3][0].measure.imageID = 0;
+
+  return TRUE;
+}
 
 // there are slight format differences between the prelim data dump and the allsky data dump:
