#!/usr/bin/env dvo

# XXX create a config file to hold values like this:
$PV3_CATDIR = /data/ipp105.0/eugene/3pi.dvo.masters/3pi.pv3.20170919

module truth.pro
# provides the following:
# make.truth.sources (camera) (expname) (source) (type)
# make.truth.sources.mpc (camera) (expname) (source)
# make.truth.sources.dvo (camera) (expname) (source)
# get.exposure.metadata (camera) (expname)

module cammask.pro
module warpmask.pro
module diffmask.pro
module camstats.pro
module warpstats.pro

## XXX I need to enable only parts of this analysis
## for now, just comment out the warp & diff stages

macro example.full.dvo
  if ($0 != 3)
    echo "USAGE: example.full.dvo (expname) (label)"
    break
  end

  # XXX Can I add flags to turn on/off certain stages?
  # -no-warp, -no-diff, -no-cam

  args.options -no-cam  BOOL SKIP_CAM
  args.options -no-warp BOOL SKIP_WARP
  args.options -no-diff BOOL SKIP_DIFF

  local expname camlabel
  $expname = $1
  $camlabel = $2
 
  $OUTVERSION = DVO

  make.truth.sources gpc1 $expname $PV3_CATDIR DVO
  get.camera.eff     gpc1 $expname $camlabel       $REFSOURCE
# get.warp.eff       gpc1 $expname $camID          $REFSOURCE
# get.diff.eff       gpc1 $expname $warpID         $REFSOURCE

  $KAPA = kapa -noX
  antialias 0.5

  load.camstats  $expname.stats/$expname.DVO.cam.stf
  plot.camstats.fracs; png -name $expname.stats/$expname.dvo.fracs.png
  plot.camstats.resid; png -name $expname.stats/$expname.dvo.resid.png
  
# load.warpstats $expname.stats/$expname.DVO.wrp.stf
# png -name  $expname.stats/$expname.dvo.warphist.png
#
# load.camstats  $expname.stats/$expname.DVO.dif.stf
# png -name  $expname.stats/$expname.dvo.diffhist.png
end

macro example.full.mpc
  if ($0 != 4)
    echo "USAGE: example.full.mpc (expname) (label) (mpcfile)"
    break
  end

  local expname camlabel mpcfile
  $expname = $1
  $camlabel = $2
  $mpcfile = $3
 
  # download the most current MPCORB.DAT file with:
  # wget ...

  # generate orbit list for night / chunk with
  # exec mpcorb_predict trange (MPCORB.DAT) (Tmin) (Tmax) (Rmin) (Rmax) (Dmin) (Dmax) (range.fits)
  # exec mpcorb_predict trange mpc/mpcorb_extended.59396.dat 59396.3 59396.9 220.0 235.0 40.0 50.0 mpc/mpcorb.trange.59396.fits
  # exec mpcorb_predict trange mpc/mpcorb_extended.59396.dat 59401.3 59401.9 190.0 215.0 12.0 28.0 mpc/mpcorb.trange.59401.fits
  # visit 1 on 59401 has exposures o9401g0123o - o9401g0143o
  # this sample has ~1900 known asteroids covering 375 sq deg. we should expect ~ 35 asteroids per exposure

  # mpcorb_predict trange mpc/mpcorb_extended.59396.dat 59375.2 59375.8 190 250 -10 20 trange.59375.fits
  # this area covers exposures o9375g0060o - o9375g0341o (visit 1) and later visits

  # use a larger match radius for the asteroids
  # MATCH_RADIUS is in pixels : this should probably be even larger
  $MATCH_RADIUS = 8.0
  $OUTVERSION = MPC
  $COPYMASKS = 0

  make.truth.sources gpc1 $expname $mpcfile  MPC; # sets the value of REFSOURCE 
  get.camera.eff     gpc1 $expname $camlabel $REFSOURCE
  # get.warp.eff     gpc1 $expname $camID    $REFSOURCE
  # get.diff.eff     gpc1 $expname $warpID   $REFSOURCE
  # load data from cam stage output:
  $USE_CAMSOURCE = 1
  get.warp.eff       gpc1 $expname $camID    $CAMSOURCE
  get.diff.eff       gpc1 $expname $warpID   $CAMSOURCE

  return

  $KAPA = kapa -noX
  camstats.glob $expname.stats/$expname.*.MPC.cam.stf
  png -name  $expname.stats/$expname.mpc.camhist.png
  
  warpstats.glob $expname.stats/$expname.*.MPC.warp.stf
  png -name  $expname.stats/$expname.mpc.warphist.png

  camstats.glob $expname.stats/$expname.*.MPC.diff.stf
  png -name  $expname.stats/$expname.mpc.diffhist.png
end

macro example.old
  make.truth.sources gpc1 o9395g0315o $PV3_CATDIR DVO
  get.camera.eff     gpc1 o9395g0315o EU.nightlyscience test.fits
  get.warp.eff       gpc1 o9395g0315o $camID            test.fits
  get.diff.eff       gpc1 o9395g0315o $warpID           test.fits
end

# o9396g0312o
# o9396g0313o
# o9396g0314o
# o9396g0315o
# o9395g0315o

if ($SCRIPT)
  if ($argv:n < 3)
    echo "USAGE: ippCheck (mode) (expname) (label) [mpcfile]"
    break
  end

  if ("$argv:0" == "mpc")
    if ($argv:n != 4)
      echo "USAGE: ippCheck mpc (expname) (label) (mpcfile)"
      break
    end

    example.full.mpc $argv:1 $argv:2 $argv:3
    exit 0
  end

  if ("$argv:0" == "dvo")
    if ($argv:n != 3)
      echo "USAGE: ippCheck dvo (expname) (label)"
      break
    end

    example.full.dvo $argv:1 $argv:2
    exit 0
  end

  if ("$argv:0" == "smf")
    if ($argv:n != 4)
      echo "USAGE: ippCheck smf (expname) (label) (smffile)"
      break
    end

    example.full.dvo $argv:1 $argv:2
    exit 0
  end

  echo "USAGE: ippCheck (mode) (expname) (label) [mpcfile]"
  echo "  mode may be 'dvo' or 'mpc'"
  exit 2
end

