Index: /branches/eam_branches/ipp-20150419/Ohana/src/addstar/test/relphot.flatcorr.dvo
===================================================================
--- /branches/eam_branches/ipp-20150419/Ohana/src/addstar/test/relphot.flatcorr.dvo	(revision 38303)
+++ /branches/eam_branches/ipp-20150419/Ohana/src/addstar/test/relphot.flatcorr.dvo	(revision 38304)
@@ -14,11 +14,56 @@
 # * no other mechanism to tell DVO about a flat-field correction
 
+$TAP_BREAK = 1
+$TAP_VERBOSE = 1
 input tap.dvo
 
 # set globals
-if (not($?PLOT)) set PLOT = 0 
+if (not($?PLOT)) set PLOT = 0
+
+$USE_CELL_OFFSETS = 1
+$SET_UC_RESID = 1
 
 # set various global variables
 macro init
+  # generate a fake ptolemy.rc (to make this a contained test)
+  exec rm -f ptolemy.rc
+  output ptolemy.rc
+    echo "\#"
+    echo PHOTCODE_FILE dvo.photcodes
+    echo GSCFILE GSCregions.tbl
+    echo ZERO_PT 25.0
+    echo ADDSTAR_RADIUS 1.0
+    echo CATMODE                 SPLIT
+    echo CATFORMAT               PS1_V2
+    echo SKY_DEPTH               4
+    echo CAMERA                  gpc1
+    echo CAMERA_CONFIG           dvo.layout
+    echo "input dvo.config"
+  output stdout
+
+  # we need to define a photcode table consistent with the fake construction
+  $zpt_nominal:g = 24.0
+  $zpt_nominal:r = 24.5
+
+  # klam is negative, so klam*(airmass - 1) increases the zero point
+  $klam_nominal:g = -0.15
+  $klam_nominal:r = -0.10
+
+  # generate a fake dvo.photcode
+  exec rm -f dvo.photcodes
+  output dvo.photcodes
+    echo "\# code  name                type    zero  slope offset c1    c2   slope   zero  equiv  sys scale   scale  sys     poor   bad     poor   bad"
+    echo "1     g                    sec   0.000  0.000 0.000     1     3 0.0000     0  1051   0.000 0.000 0.000  0.000   0x0000 0x0000  0x0000 0x0000"
+    echo "2     r                    sec   0.000  0.000 0.000     2     3 0.0000     0  1052   0.000 0.000 0.000  0.000   0x0000 0x0000  0x0000 0x0000"
+    echo "10000 GPC1.g.XY00          dep  $zpt_nominal:g $klam_nominal:g 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+    echo "10001 GPC1.g.XY01          dep  $zpt_nominal:g $klam_nominal:g 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+    echo "10010 GPC1.g.XY10          dep  $zpt_nominal:g $klam_nominal:g 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+    echo "10011 GPC1.g.XY11          dep  $zpt_nominal:g $klam_nominal:g 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+    echo "10100 GPC1.r.XY00          dep  $zpt_nominal:r $klam_nominal:r 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+    echo "10101 GPC1.r.XY01          dep  $zpt_nominal:r $klam_nominal:r 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+    echo "10110 GPC1.r.XY10          dep  $zpt_nominal:r $klam_nominal:r 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+    echo "10111 GPC1.r.XY11          dep  $zpt_nominal:r $klam_nominal:r 0.000     -     - 0.0000     0     1   0.015 0.000 1.000  0.000   0x0000 0x0000  0xe0440130 0x1003bc88"
+  output stdout      
+
   $RA_CENTER = 10.0
   $DEC_CENTER = 20.0
@@ -33,94 +78,52 @@
   $CHIP_DY = 1000
 
-  # images are loaded into dvo with GPC1 photcodes, so we need to get the nominal zps for those filters
-  $zpt_nominal:g = 24.00
-  $zpt_nominal:r = 24.80
-  $zpt_nominal:i = 24.74
-  $zpt_nominal:z = 24.26
-  $zpt_nominal:y = 23.41
-
-  # klam is negative, so klam*(airmass - 1) increase the zero point
-  $klam_nominal:g =  0.00
-  $klam_nominal:r = -0.10
-  $klam_nominal:i = -0.04
-  $klam_nominal:z = -0.03
-  $klam_nominal:y = -0.03
-
   # we have two sets of images: ubercaled and not-ubercaled
 
-  # sequence to count images (only used in this function)
-  create tmpseq 0 1
-
-  $filt_uc:n = 1
-  $filt_uc:0 = g
-  $filt_uc:1 = g
-  $filt_uc:2 = g
-  $filt_uc:3 = r
-  $filt_uc:4 = r
-  $filt_uc:5 = r
-  $filt_uc:6 = i
-  $filt_uc:7 = i
-  $filt_uc:8 = i
-
-  # airmass slopes for these sequnece
+  # the number of exposures is defined by filt_uc:n
+  list filt_uc -split g g g g r r r r
+  $filt_uc:n = 2
+
+  # tmpseq is used to generate vectors in this function
+  create tmpseq 0 $filt_uc:n
+
+  # exptime and airmasses for uc images
+  set exptime_uc = 10.0 + zero(tmpseq)
+  set airmass_uc =  1.3 + zero(tmpseq)
   set klam_uc = zero(tmpseq)
-  for i 0 tmpseq[]
-    klam_uc[$i] = $klam_nominal:$filt_uc:$i
-  end    
-
-  # mjd and zpt values for ubercal'ed imaged
-  set exptime_uc = 10.0 + zero(tmpseq)
-  set airmass_uc = 1.3 + zero(tmpseq)
+  set zpt_uc = zero(tmpseq)
 
   # ubercal zero points are defined as ZP_nominal + 2.5log(exptime) + K*(airmass - 1.0)
   # note that K is defined as a negative value (is this sensible?)
-  set zpt_uc = 24.0 + 2.5*log(exptime_uc) + klam_uc*(airmass_uc - 1.0) + tmpseq*0.0050 - 0.0025
-
-  set mjd_uc = zero(zpt_uc)
-  mjd_uc[0] = 55000.01
-  # mjd_uc[1] = 55000.02
-  # mjd_uc[2] = 55000.03
-  # mjd_uc[3] = 55015.01
-  # mjd_uc[4] = 55015.02
-  # mjd_uc[5] = 55015.03
-  # mjd_uc[6] = 55025.01
-  # mjd_uc[7] = 55025.02
-  # mjd_uc[8] = 55025.03
+
+  # zero points and airmass slopes for these sequnece
+  for i 0 $filt_uc:n
+    klam_uc[$i] = $klam_nominal:$filt_uc:$i 
+    zpt_uc[$i]  = $zpt_nominal:$filt_uc:$i + 2.5*log(exptime_uc[$i]) + klam_uc[$i]*(airmass_uc[$i] - 1.0) + 0.04*rnd(klam_uc[$i]) - 0.02
+  # zpt_uc[$i]  = $zpt_nominal:$filt_uc:$i + 2.5*log(exptime_uc[$i]) + klam_uc[$i]*(airmass_uc[$i] - 1.0)
+  end    
+  set mjd_uc = 55000.00 + 0.01*(tmpseq % 3) + 10.0*int(tmpseq / 3)
 
   # mjd and zpt values for not-ubercal'ed images
-  $filt_nc:n = 1
-  $filt_nc:0 = g
-  $filt_nc:1 = g
-  $filt_nc:2 = g
-  $filt_nc:3 = r
-  $filt_nc:4 = r
-  $filt_nc:5 = r
-  $filt_nc:6 = i
-  $filt_nc:7 = i
-  $filt_nc:8 = i
+  list filt_nc -split g g g g r r r r
+  $filt_nc:n = 2
+
+  # tmpseq is used to generate vectors in this function
+  create tmpseq 0 $filt_nc:n
+
+  # place this within a valid season (55000.0 - 55010.0 - 55020.0 - 55030.0)
+  set exptime_nc = 10.0 + zero(tmpseq)
+  set airmass_nc =  1.6 + zero(tmpseq)
+  set klam_nc = zero(tmpseq)
+  set zpt_nc = zero(tmpseq)
 
   # airmass slopes for these sequnece
-  set klam_nc = zero(tmpseq)
-  for i 0 tmpseq[]
-    klam_nc[$i] = $klam_nominal:$filt_nc:$i
+  for i 0 $filt_nc:n
+    klam_nc[$i] = $klam_nominal:$filt_nc:$i 
+    zpt_nc[$i]  = $zpt_nominal:$filt_nc:$i + 2.5*log(exptime_nc[$i]) + klam_nc[$i]*(airmass_nc[$i] - 1.0) + 0.08*rnd(klam_nc[$i]) - 0.04
+  # zpt_nc[$i]  = $zpt_nominal:$filt_nc:$i + 2.5*log(exptime_nc[$i]) + klam_nc[$i]*(airmass_nc[$i] - 1.0)
   end    
-
-  # place this within a valid season (55000.0 - 55010.0 - 55020.0 - 55030.0)
-  set exptime_nc = 15.0 + zero(tmpseq)
-  set airmass_nc = 1.6 + zero(tmpseq)
-
-  # ubercal zero points are defined as ZP_nominal + 2.5log(exptime) + K*(airmass - 1.0)
-  set zpt_nc = 25.0 + 2.5*log(exptime_nc) + klam_nc*(airmass_nc - 1.0) - tmpseq*0.0050 + 0.0025
-
-  set mjd_nc = zero(zpt_nc)
-  mjd_nc[0] = 55000.11
-  # mjd_nc[1] = 55000.12
-  # mjd_nc[2] = 55000.13
-  # mjd_nc[3] = 55015.11
-  # mjd_nc[4] = 55015.12
-  # mjd_nc[5] = 55015.13
-  # mjd_nc[6] = 55025.11
-  # mjd_nc[7] = 55025.12
-  # mjd_nc[8] = 55025.13
+  set mjd_nc = 55000.10 + 0.01*(tmpseq % 3) + 10.0*int(tmpseq / 3)
+
+  delete tmpseq
 end
 
@@ -139,5 +142,8 @@
   mkdir $rootdir
 
+  break -auto off
   exec rm -rf $catdir
+  exec rm -rf $fileroot*
+  break -auto on
 
   init
@@ -149,28 +155,26 @@
   # generate the basic images and check they were correctly ingested by dvo
   mksequence $fileroot $catdir
-  for i 0 mjd_uc[] 3
-    echo ckexposure $catdir mjd_uc[$i] zpt_uc[$i] exptime_uc[$i] airmass_uc[$i] $filt_uc:$i raw
+  for i 0 mjd_uc[]
     ckexposure $catdir mjd_uc[$i] zpt_uc[$i] exptime_uc[$i] airmass_uc[$i] $filt_uc:$i raw
-    break
-  end
-  for i 0 mjd_nc[] 3
+  end
+  for i 0 mjd_nc[]
     ckexposure $catdir mjd_nc[$i] zpt_nc[$i] exptime_nc[$i] airmass_nc[$i] $filt_nc:$i raw
   end
 
   # run setphot on the db and check that the images now match the expected values
-  exec setphot -update -ubercal testzpt.fits -D CATDIR $catdir
-  for i 0 mjd_uc[] 3
+  tapEXEC setphot -update -ubercal testzpt.fits -D CATDIR $catdir
+  for i 0 mjd_uc[]
     ckexposure $catdir mjd_uc[$i] zpt_uc[$i] exptime_uc[$i] airmass_uc[$i] $filt_uc:$i setphot_uc
   end
-  for i 0 mjd_nc[] 3
+  for i 0 mjd_nc[]
     ckexposure $catdir mjd_nc[$i] zpt_nc[$i] exptime_nc[$i] airmass_nc[$i] $filt_nc:$i setphot_nc
   end
 
   # run relphot on the db and check that the images now match the expected values
-  exec relphot g,r,i -v -region 9.5 10.5 19.5 20.5 -D CATDIR $catdir -D STAR_TOOFEW 1 -D SIGMA_LIM 0.07 -statmode WT_MEAN -cloud-limit 0.5 -keep-ubercal -D IMAGE_OFFSET 0.5 -update >& tmp.log
-  for i 0 mjd_uc[] 3
+  tapEXEC relphot -images g,r -v -region 9.5 10.5 19.5 20.5 -D CATDIR $catdir -D STAR_TOOFEW 1 -D SIGMA_LIM 0.07 -statmode WT_MEAN -cloud-limit 0.5 -D IMAGE_OFFSET 0.5 -update
+  for i 0 mjd_uc[]
     ckexposure $catdir mjd_uc[$i] zpt_uc[$i] exptime_uc[$i] airmass_uc[$i] $filt_uc:$i relphot
   end
-  for i 0 mjd_nc[] 3
+  for i 0 mjd_nc[]
     ckexposure $catdir mjd_nc[$i] zpt_nc[$i] exptime_nc[$i] airmass_nc[$i] $filt_nc:$i relphot
   end
@@ -253,6 +257,7 @@
   end
 
-  set cell_xbin = int(xccd / ($CHIP_DX / $NCELL_X))
-  set cell_ybin = int(yccd / ($CHIP_DY / $NCELL_Y))
+  # reproduce eddie's esoteric padding
+  set cell_xbin = max(0 , min(1 , int((xccd +  8) / ($CHIP_DX / $NCELL_X))))
+  set cell_ybin = max(0 , min(1 , int((yccd + 10) / ($CHIP_DY / $NCELL_Y))))
   subset dm00 = dm if (cell_xbin == 0) && (cell_ybin == 0)
   subset dm01 = dm if (cell_xbin == 0) && (cell_ybin == 1)
@@ -282,8 +287,9 @@
   
         set dm_adjust = dm$ix\$iy - $ZPT_NOMINAL + $ZPT_REAL_NORM + cell_off[$ix][$iy]
-        echo set dm_adjust = dm$ix\$iy - $ZPT_NOMINAL + $ZPT_REAL_NORM + cell_off[$ix][$iy]
-
-        vstat dm_adjust
-        tapOK {abs($MEAN) < 0.005} "addstar raw ZP $MJD_IMAGE $FILTER"
+        # echo set dm_adjust = dm$ix\$iy - $ZPT_NOMINAL + $ZPT_REAL_NORM + cell_off[$ix][$iy]
+
+        vstat -q dm_adjust
+        sprintf line "addstar raw ZP %8.2f $FILTER %6.3f %6.3f %6.3f: %7.4f %7.4f : cell%d%d %6.3f : %3d" $MJD_IMAGE $ZPT_REAL $ZPT_REAL_NORM $ZPT_NOMINAL $MEAN $SIGMA $ix $iy cell_off[$ix][$iy] dm_adjust[]
+        tapOK {abs($MEAN) < 0.005} "$line"
       end
     end
@@ -293,5 +299,6 @@
   if ("$MODE" == "setphot_uc") 
     vstat -q dm
-    tapOK {abs($MEAN) < 0.005} "setphot_uc  ZP $MJD_IMAGE $FILTER"
+    sprintf line "setphot_uc  ZP %8.2f $FILTER %6.3f %6.3f %6.3f: %7.4f %7.4f : %3d" $MJD_IMAGE $ZPT_REAL $ZPT_REAL_NORM $ZPT_NOMINAL $MEAN $SIGMA dm[]
+    tapOK {abs($MEAN) < 0.005} "$line"
     return
   end
@@ -299,5 +306,6 @@
   if ("$MODE" == "setphot_nc") 
     vstat -q dm
-    tapOK {abs($MEAN - $ZPT_NOMINAL + $ZPT_REAL_NORM) < 0.005} "setphot_nc  ZP $MJD_IMAGE $FILTER"
+    sprintf line "setphot_nc  ZP %8.2f $FILTER %6.3f %6.3f %6.3f: %7.4f %7.4f : %3d" $MJD_IMAGE $ZPT_REAL $ZPT_REAL_NORM $ZPT_NOMINAL $MEAN $SIGMA dm[]
+    tapOK {abs($MEAN - $ZPT_NOMINAL + $ZPT_REAL_NORM) < 0.005} "$line"
     return
   end
@@ -305,5 +313,6 @@
   if ("$MODE" == "relphot") 
     vstat -q dm
-    tapOK {abs($MEAN) < 0.005} "relphot    ZP $MJD_IMAGE $FILTER"
+    sprintf line "relphot     ZP %8.2f $FILTER %6.3f %6.3f %6.3f: %7.4f %7.4f : %3d" $MJD_IMAGE $ZPT_REAL $ZPT_REAL_NORM $ZPT_NOMINAL $MEAN $SIGMA dm[]
+    tapOK {abs($MEAN) < 0.005} "$line"
     return
   end
@@ -320,13 +329,10 @@
 
   # we have defined a set of mjd and zero point values for ubercal'ed images
-  # for i 0 mjd_uc[]
-  for i 0 mjd_uc[] 1
+  for i 0 mjd_uc[]
     mkexposure $1.uc.$i $RA_CENTER $DEC_CENTER zpt_uc[$i] exptime_uc[$i] airmass_uc[$i] mjd_uc[$i] $filt_uc:$i $2
   end
-  return
 
   # we have a second set of mjd and zero point values for non-ubercal'ed images
-  # for i 0 mjd_nc[]
-  for i 0 mjd_nc[] 1
+  for i 0 mjd_nc[]
     mkexposure $1.nc.$i $RA_CENTER $DEC_CENTER zpt_nc[$i] exptime_nc[$i] airmass_nc[$i] mjd_nc[$i] $filt_nc:$i $2
   end
@@ -339,5 +345,5 @@
  end
 
- local ix iy date time datetime ra dec ROOT RAo DECo ZPT MJD FILTER EXPTIME AIRMASS CATDIR
+ local ix iy date time datetime ra dec ROOT RAo DECo ZPT MJD FILTER EXPTIME AIRMASS CATDIR cmd
 
  $ROOT    = $1
@@ -379,12 +385,10 @@
     $options = $options -airmass $AIRMASS
     $options = $options -exptime $EXPTIME
-    exec mkcmf test.in.txt $ROOT.$ix.$iy.cmf $options
-    echo mkcmf test.in.txt $ROOT.$ix.$iy.cmf $options 
-    
+
+    tapEXEC mkcmf test.in.txt $ROOT.$ix.$iy.cmf $options
+
     # the fake images have inconsistent ra,dec and airmass,sidtime values
-    echo addstar $ROOT.$ix.$iy.cmf -D CATDIR $CATDIR -D CAMERA gpc1 -quick-airmass
-    exec addstar $ROOT.$ix.$iy.cmf -D CATDIR $CATDIR -D CAMERA gpc1 -quick-airmass
-  end
-  return
+    tapEXEC addstar $ROOT.$ix.$iy.cmf -D CATDIR $CATDIR -D CAMERA gpc1 -quick-airmass
+  end
  end
 end
@@ -411,6 +415,7 @@
   subset stars_mr = stars_mag if valid
 
-  set cell_x = int(stars_x / ($CHIP_DX / $NCELL_X))
-  set cell_y = int(stars_y / ($CHIP_DX / $NCELL_X))
+  # note eddie's esoteric padding rule:
+  set cell_x = max(0 , min(1 , int((stars_x +  8) / ($CHIP_DX / $NCELL_X))))
+  set cell_y = max(0 , min(1 , int((stars_y + 10) / ($CHIP_DX / $NCELL_X))))
 
   # eddie says: M_real = M_inst + zpt + ff_offset
@@ -471,8 +476,10 @@
   # create a single flat-field correction map for a single chip
   mcreate cell_off 2 2
-  cell_off[0][0] =  0.01
-  cell_off[1][0] = -0.01
-  cell_off[0][1] =  0.02
-  cell_off[1][1] = -0.02
+  if ($USE_CELL_OFFSETS) 
+    cell_off[0][0] =  0.05
+    cell_off[1][0] = -0.03
+    cell_off[0][1] =  0.08
+    cell_off[1][1] = -0.10
+  end
 
   # in the correction table, we have an image of the full exposure
@@ -487,6 +494,10 @@
     for iyc 0 $NCELL_Y
       for ix 0 $NCHIP_X
+        set tcell_off = cell_off
+        if ($ix < 4)
+          rotate tcell_off 180
+        end
         for ixc 0 $NCELL_X
-          concat cell_off[$ixc][$iyc] image_offset
+          concat tcell_off[$ixc][$iyc] image_offset
         end
       end
@@ -504,5 +515,10 @@
   set mjd_obs = mjd_uc
   set zp = zpt_uc
-  set resid = 0.02*rnd(zpt_uc) - 0.01
+
+  if ($SET_UC_RESID) 
+    set resid = 0.02*rnd(zpt_uc) - 0.01
+  else 
+    set resid = zero(zpt_uc)
+  end
 
   delete -q flatcorr
Index: /branches/eam_branches/ipp-20150419/Ohana/src/addstar/test/tap.dvo
===================================================================
--- /branches/eam_branches/ipp-20150419/Ohana/src/addstar/test/tap.dvo	(revision 38303)
+++ /branches/eam_branches/ipp-20150419/Ohana/src/addstar/test/tap.dvo	(revision 38304)
@@ -3,4 +3,39 @@
 if (not($?TAP_BREAK)) set TAP_BREAK = 0
 if (not($?TAP_VERBOSE)) set TAP_VERBOSE = 0
+
+macro tapEXEC
+  if ($0 < 3) 
+    echo "USAGE: tapEXEC (command)"
+    break
+  end
+
+  local i cmd result
+
+  $cmd = ""
+  for i 1 $0
+    $cmd = $cmd $$i
+  end
+
+  if ($TAP_VERBOSE >= 2) echo $cmd
+
+  break -auto off
+  exec $cmd >& tap.log
+  $result = $STATUS
+  break -auto on
+
+  if (not($result)) 
+    exec cat tap.log
+    echo "not ok : $cmd"
+    $TAP_NFAIL ++
+    $TAP_LAST = 0
+    if ($TAP_BREAK)
+     break
+    end
+  else
+    if ($TAP_VERBOSE >= 1) echo "ok : $cmd"
+    $TAP_LAST = 1
+  end
+  $TAP_NDONE ++
+end
 
 macro tapOK
@@ -11,5 +46,5 @@
 
   if ($1)
-    if ($TAP_VERBOSE)
+    if ($TAP_VERBOSE >= 1)
       echo "ok : $2"
     end
