Index: trunk/tools/eam/teleff/diffmask.pro
===================================================================
--- trunk/tools/eam/teleff/diffmask.pro	(revision 41712)
+++ trunk/tools/eam/teleff/diffmask.pro	(revision 41717)
@@ -10,4 +10,8 @@
 
 if (not($?MATCH_RADIUS)) set MATCH_RADIUS = 2.0
+
+$SMF_FIELDS_DIF = X_PSF Y_PSF RA_PSF DEC_PSF CAL_PSF_MAG PSF_QF PSF_QF_PERFECT
+$REF_FIELDS_DIF = Rref Dref Mref 
+$XTR_FIELDS_DIF = Xref Yref Nref Q1ref
 
 macro get.diff.eff
@@ -44,5 +48,5 @@
   # load the reference source table
   # how to choose the name of the filter?
-  data $refsrcs; read -fits DATA Rref Dref Mref
+  data $refsrcs; read -fits DATA $REF_FIELDS_DIF
   set Nref = ramp(Rref)
   if ($VERBOSE) echo "loaded Rref[] sources from reference $refsrcs"
@@ -58,12 +62,26 @@
     if ("$diffMask:$i" == "") 
       echo "no mask file found for $i, skipping maskstats" 
-      set Q1refSS = zero(XrefSS) + NAN
+      set Q1ref_onchp = zero(Xref_onchp) + NAN
     else
       get.diff.mask.stats $diffMask:$i
     end
 
-    sprintf output "%s/%s.%s.%s.diff.stf" $OUTDIR $expname $skycell:$i $OUTVERSION
-    write -fits DATA $output RrefSS DrefSS MrefSS XrefSS YrefSS Q1refSS X_PSF_found Y_PSF_found M_PSF_found Q1_PSF_found Q2_PSF_found
-  end
+   foreach field SMF_FIELDS_DIF
+     concat $field\_found $field\_out
+     delete $field\_found
+   end
+   foreach field REF_FIELDS_DIF $XTR_FIELDS_DIF
+     concat $field\_onchp $field\_out
+     delete $field\_onchp
+   end
+  end
+
+  $OUT_FIELDS = 
+  foreach field $SMP_FIELDS_DIF $REF_FIELDS_DIF $XTR_FIELDS_DIF
+    $OUT_FIELDS = $OUT_FIELDS $field\_out
+  end
+
+  sprintf output "%s/%s.%s.diff.stf" $OUTDIR $expname $OUTVERSION
+  write -fits DATA $output $OUT_FIELDS
 end
 
@@ -78,5 +96,5 @@
   end
 
-  local filename
+  local filename NAXIS1 NAXIS2
   $filename = $1
   if ("$filename" == "") 
@@ -100,39 +118,28 @@
   # do we need to grow the range at all?
   set keep = (Rref >= $minR) && (Rref <= $maxR) && (Dref >= $minD) && (Dref <= $maxD) 
-  subset RrefS = Rref if keep
-  subset DrefS = Dref if keep
-  subset MrefS = Mref if keep
+  foreach field $REF_FIELDS_DIF Nref
+    subset $field\_tmp = $field if keep
+  end
 
   # convert the subset coordinates to pixels
-  set XrefS = RrefS
-  set YrefS = DrefS
-  coords -q hdr -c XrefS YrefS
+  set Xref_tmp = Rref_tmp
+  set Yref_tmp = Dref_tmp
+  coords -q hdr -c Xref_tmp Yref_tmp
 
   # generate a subset of sources which are within the boundaries of the skycell
   set keep = (XrefS >= 0) && (XrefS <= $NAXIS1) && (YrefS >= 0) && (YrefS <= $NAXIS2)
-  subset XrefSS = XrefS if keep
-  subset YrefSS = YrefS if keep
-  subset RrefSS = RrefS if keep
-  subset DrefSS = DrefS if keep
-  subset MrefSS = MrefS if keep
+  foreach field $REF_FIELDS_DIF Nref Xref Yref
+    subset $field\_onchp = $field\_tmp if keep
+    delete $field\_tmp
+  end
 
   # now read the smf detections
   data $filename
-  read -fits SkyChip.psf X_PSF Y_PSF RA_PSF DEC_PSF CAL_PSF_MAG PSF_QF PSF_QF_PERFECT
-
-  match2d XrefSS YrefSS X_PSF Y_PSF $MATCH_RADIUS -closest
-
-  reindex X_PSF_found = X_PSF using index1 -keep-unmatched
-  reindex Y_PSF_found = Y_PSF using index1 -keep-unmatched
-  reindex M_PSF_found = CAL_PSF_MAG using index1 -keep-unmatched
-  reindex Q1_PSF_found = PSF_QF using index1 -keep-unmatched
-  reindex Q2_PSF_found = PSF_QF_PERFECT using index1 -keep-unmatched
-
-  set dX = XrefSS - X_PSF_found; subset dXs = dX where (MrefSS < 18); vstat -q dXs
-  set dY = YrefSS - Y_PSF_found; subset dYs = dY where (MrefSS < 18); vstat -q dYs
-  set dM = MrefSS - M_PSF_found; subset dMs = dM where (MrefSS < 18); vstat -q dMs
-
-  # measure some stats, eg:
-  # * fraction detected vs mag, filter by PSF_QF, PSF_QF_PERFECT
+  read -fits SkyChip.psf $SMF_FIELDS_DIF
+
+  match2d Xref_onchp Yref_onchp X_PSF Y_PSF $MATCH_RADIUS -closest
+  foreach field $SMF_FIELDS_DIF
+    reindex $field\_found = $field using index1 -keep-unmatched
+  end
 end
 
@@ -160,52 +167,11 @@
   # I want to set an image based on the bit values but I fear
   # the mask has been converted to a float when read
-  forcedphot mkPerfect XrefSS YrefSS -output Q1refSS
-
-  subset tmp = Q1refSS where (Q1refSS > 0.85)
-
-  if ($VERBOSE) echo tmp[] of Q1refSS[] are unmasked
-end
-
-macro get.diff.detect.coords
-  if ($0 != 2) 
-   echo "USAGE: get.diff.detect.coords (buffer)"
-   echo "  assumes existence of vectors (Rref, Dref, Mref) and buffer (PHU)"
-   echo "  matches known sources to detections in the smf file extensions for each chip"
-   echo "  calculates detection fraction as a function of magnitude"
-   echo "  also astrometric and photometric scatter vs magnitude for good detections"
-   break
-  end
-
-  local buffname
-  $buffname = $1
-
-  keyword $buffname NAXIS1 NAXIS1
-  keyword $buffname NAXIS2 NAXIS2
-
-  coords -q $buffname -p       0       0; init.radec.range
-  coords -q $buffname -p $NAXIS1       0; set.radec.range
-  coords -q $buffname -p $NAXIS1 $NAXIS2; set.radec.range
-  coords -q $buffname -p       0 $NAXIS2; set.radec.range
-
-  # generate a subset which could be on this chip
-  # do we need to grow the range at all?
-  set keep = (Rref >= $minR) && (Rref <= $maxR) && (Dref >= $minD) && (Dref <= $maxD) 
-  subset RrefS = Rref if keep
-  subset DrefS = Dref if keep
-  subset MrefS = Mref if keep
-
-  # convert the subset coordinates to pixels
-  set XrefS = RrefS
-  set YrefS = DrefS
-  coords -q $buffname -c XrefS YrefS
-
-  # generate a subset of sources which are within the boundaries of the chip
-  set keep = (XrefS >= 0) && (XrefS <= $NAXIS1) && (YrefS >= 0) && (YrefS <= $NAXIS2)
-  subset XrefSS = XrefS if keep
-  subset YrefSS = YrefS if keep
-  subset RrefSS = RrefS if keep
-  subset DrefSS = DrefS if keep
-  subset MrefSS = MrefS if keep
-end
+  forcedphot mkPerfect Xref_onchp Yref_onchp -output Q1ref_onchp
+
+  subset tmp = Q1ref_onchp where (Q1ref_onchp > 0.85)
+  if ($VERBOSE) echo tmp[] of Q1ref_onchp[] are unmasked
+end
+
+## utilities
 
 macro init.radec.range
