#!/bin/sh  
# \
exec oagtclsh "$0" "$@"

set auto_path [linsert $auto_path 0  /usr/local/oag/apps/lib/$env(HOST_ARCH)]
set auto_path [linsert $auto_path 0 /usr/local/oag/lib_patch/$env(HOST_ARCH)]
APSStandardSetup

set usage {usage: quad -l <m> -k1 <1/m^2> -input <beamFile> -output <beamFile> }
set l 0
set k1 0
set input ""
set output ""
set args $argv
if {[APSStrictParseArguments {l k1 input output}] || [expr $l<0] || ![string length $input] || ![string length $output]} {
    return -code error "Error: $usage"
}

if [expr $k1<0] {
    # Defocusing 
    exec sddsconvert -pipe=out $input -rename=column,x=x0,xp=xp0,y=y0,yp=yp0 \
      | sddsprocess -pipe=in $output \
      "-define=parameter,kq,$k1 abs sqrt" \
      "-define=parameter,l,$l" \
      "-define=parameter,R33,kq l * cos " \
      "-define=parameter,R34,kq l * sin kq /" \
      "-define=parameter,R43,kq l * sin kq * -1 *" \
      "-define=parameter,R44,R33" \
      "-define=parameter,R11,kq l * cosh " \
      "-define=parameter,R12,kq l * sinh kq /" \
      "-define=parameter,R21,kq l * sinh kq *" \
      "-define=parameter,R22,R11" \
      "-define=col,x,R11 x0 * R12 xp0 * +,units=m" \
      "-define=col,xp,R21 x0 * R22 xp0 * +" \
      "-define=col,y,R33 y0 * R34 yp0 * +,units=m" \
      "-define=col,yp,R43 y0 * R44 yp0 * +" \
      "-define=col,v,p beta.p c_mks *" \
      "-redefine=col,t,t l v / +,units=s" 
} else {
    exec sddsconvert -pipe=out $input -rename=column,x=x0,xp=xp0,y=y0,yp=yp0 \
      | sddsprocess -pipe=in $output \
      "-define=parameter,kq,$k1 sqrt" \
      "-define=parameter,l,$l" \
      "-define=parameter,R11,kq l * cos " \
      "-define=parameter,R12,kq l * sin kq /" \
      "-define=parameter,R21,kq l * sin kq * -1 *" \
      "-define=parameter,R22,R11" \
      "-define=parameter,R33,kq l * cosh " \
      "-define=parameter,R34,kq l * sinh kq /" \
      "-define=parameter,R43,kq l * sinh kq *" \
      "-define=parameter,R44,R33" \
      "-define=col,x,R11 x0 * R12 xp0 * +,units=m" \
      "-define=col,xp,R21 x0 * R22 xp0 * +" \
      "-define=col,y,R33 y0 * R34 yp0 * +,units=m" \
      "-define=col,yp,R43 y0 * R44 yp0 * +" \
      "-define=col,v,p beta.p c_mks *" \
      "-redefine=col,t,t l v / +,units=s" 
} 