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

set auto_path [linsert $auto_path 0 $env(ELEGANT_LOCAL_LIB_PATH)]
set auto_path [linsert $auto_path 0 $env(ELEGANT_LOCAL_LIB_PATH)]

set usage "makeElementListFile -listFile <filename> -mode <beta|coupling>"
set args $argv
set listFile ""
set mode beta
APSParseArguments {listFile mode}
if {![string length $listFile]} {
    puts stdout $usage
    exit
}

exec sddssequence -pipe=out -define=Index,type=long -seq=beg=1,end=168,delta=1 \
    | sddsprocess -pipe -print=col,List,BPM#%1d,Index \
    | sddsconvert -pipe=in bpm.list -del=col,Index
exec sddsprocess bpm.list xbpm.list -print=para,ListName,xBpm
exec sddsprocess bpm.list ybpm.list -print=para,ListName,yBpm
exec sddsprocess bpm.list dbpm.list -print=para,ListName,dBpm
lappend deleteFiles bpm.list xbpm.list ybpm.list dbpm.list

switch -exact $mode {
    beta {
	#------ File for beta function correction:
	set quadList ""
	for {set i 1} {$i < 13} {incr i} {
	    lappend quadList QD1_${i}L#1 QF1_${i}L#1 QD2_${i}L#1 QF2_${i}L#1
	    lappend quadList QF2_${i}R#1 QD2_${i}R#1 QF1_${i}R#1 QD1_${i}R#1
	}
	exec sddsmakedataset quads.list -col=List,type=string -data=[join $quadList ,] \
	    -para=ListName,type=string -data=Quad
	lappend deleteFiles quads.list
	exec sddscombine quads.list xbpm.list ybpm.list dbpm.list $listFile -overwrite
    }
    coupling {
	#------ File for coupling correction:
	set skewList ""
	for {set i 1} {$i < 13} {incr i} {
	    lappend skewList S1A:S5Q#$i S1B:S5Q#$i S1A:S9Q#$i S1B:S9Q#$i
	}
	exec sddsmakedataset skew.list -col=List,type=string -data=[join $skewList ,] \
	    -para=ListName,type=string -data=Quad
	exec sddssequence -pipe=out -define=Index,type=long -seq=beg=1,end=24,delta=1 \
	    | sddsprocess -pipe -print=col,List,CORR#%1d,Index -print=para,ListName,hCorr \
	    | sddsconvert -pipe=in hCorr.list -del=col,Index
	exec sddssequence -pipe=out -define=Index,type=long -seq=beg=1,end=24,delta=1 \
	    | sddsprocess -pipe -print=col,List,CORR#%1d,Index -print=para,ListName,vCorr \
	    | sddsconvert -pipe=in vCorr.list -del=col,Index
	lappend deleteFiles skew.list hCorr.list vCorr.list
	exec sddscombine skew.list hCorr.list vCorr.list xbpm.list ybpm.list dbpm.list $listFile \
	    -overwrite
    }
}

eval file delete $deleteFiles
