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

# make a file with a sequence of values of delta
exec sddssequence deltaValues.sdds \
    "-define=delta,type=double,symbol=\$gd\$r" \
    -sequence=begin=-0.030,end=0.030,delta=0.003

# do tracking for each value of delta

if ![file exists sp8Track.log] {
    catch {exec elegant sp8Track.ele -macro=deltaFile=deltaValues.sdds > sp8Track.log}
}


# Analyze tracking results to get tunes
exec sddsnaff sp8Track.w1 -pipe=out -column=Pass -pair=Cx,Cxp -pair=Cy,Cyp \
    -terminate=frequencies=1 \
    | sddscombine -pipe -merge \
    | sddsxref -pipe=in deltaValues.sdds sp8Track.tunes -take=* 

# add the delta variation parameter data to the twiss output
exec sddscollapse sp8Track.twi -pipe=out \
    | sddsxref -pipe deltaValues.sdds -take=* \
    | sddsprocess -pipe=in sp8Track.twic \
    -process=nu?,median,%s0 \
    "-define=column,d%s,%s %s0 int -,select=nu?"  

# Fit polynomial to tunes vs momentum offset
# Number of fitting order is set 4
exec sddsmpfit sp8Track.tunes sp8Track.tunes.fit -indep=delta -depend=CxFrequency,CyFrequency \
    -terms=4 -fitLabelFormat=%.3g

# plot tracking and twiss parameter tunes

exec sddsplot -graph=sym,vary=type,subtype=type \
    -column=delta,CxFrequency sp8Track.tunes -legend=spec=Tracking \
    {-ylabel=$gn$r$bx$n} \
    -column=delta,dnux sp8Track.twic -legend=spec=Twiss \
    -column=delta,CxFrequencyFit sp8Track.tunes.fit -legend=spec=Fit -graph=line \
    {-topline=@CxFrequencySddspfitlabel,edit=%/CxFrequency/$gn$r$bx$n/} -end \
    -column=delta,CyFrequency sp8Track.tunes -legend=spec=Tracking \
    {-ylabel=$gn$r$by$n} \
    -column=delta,dnuy sp8Track.twic -legend=spec=Twiss \
    -column=delta,CyFrequencyFit sp8Track.tunes.fit -legend=spec=Fit -graph=line \
    {-topline=@CyFrequencySddspfitlabel,edit=%/CyFrequency/$gn$r$by$n/} -end


