#!/bin/bash

if [ $# -ne 1 ] ; then
     echo "usage: iterateOnce <newIndex>"
     exit 1
fi   
     
i=$1
iLabel=`printf %03d $i`

q=15.6
V=4.6
nhsteps=100
if [ $i -eq 0 ] ; then
    echo "Running IBS with rf voltage"
    ibsEmittance basic.twi ibs${iLabel}.sdds -charge=$q -coupling=0.1 -isRing=1 -rf=voltage=$V,harmonic=1296  -nowarning
else
    im1=$((i-1))
    im1Label=`printf %03d $im1`
    if [ ! -e hai${im1Label}.sdds ] ; then
        echo "Not found: hai${im1Label}.sdds"
        exit 1
    fi
    echo "Running IBS with Haissinki result hai${im1Label}.sdds"
    length=`sdds2stream -parameter=SigmaZ hai${im1Label}.sdds`
    length=`rpnl $length 1e3 mult`
    echo "New bunch length is $length mm"
    ibsEmittance basic.twi ibs${iLabel}.sdds -charge=$q -coupling=0.1 -isRing=1 -super=40 -length=$length -nowarning
fi

# Transfer energy spread and emittances from ibs result to the twiss file, 
# renaming as needed. Note that the emittances aren't used.
sddsconvert basic.twi -pipe=out -delete=param,ex0,Sdelta0 \
    | sddsxref -pipe=in ibs${iLabel}.sdds twiss${iLabel}.sdds -leave=* \
    -transfer=parameter,sigmaDelta,emitx,emity -rename=parameter,sigmaDelta=Sdelta0

echo "Running haissinski with IBS result"
sddsprintout -param='(emitx,emity,Sdelta0)' twiss${iLabel}.sdds
haissinski twiss${iLabel}.sdds hai${iLabel}.sdds -model=Zn=0.2,R=1e3  -charge=${q}e-9 \
    -rf=voltage=${V}e6,harmonic=1296  -superPeriods=40 -steps=$nhsteps \
    -integration=deltaTime=1.4e-13,points=4000,fraction=0.01,iterations=1000,tolerance=0.0001
# Keep just the last page, which contains the result for the desired charge
sddsconvert  hai${iLabel}.sdds -frompage=$nhsteps -topage=$nhsteps -nowarning
\rm hai${iLabel}.sdds~

sddsplot -column=Time,Density hai${iLabel}.sdds

sddsprintout -param=SigmaZ hai${iLabel}.sdds 
