#!/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)]
#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
}

for {set iCell 1} {$iCell < 13} {incr iCell} {
    if [expr $iCell/4 != $iCell/4.0] {
	for {set j 1} {$j < 15} {incr j} {lappend bpmList BPM#[expr $j+($iCell-1)*14]}
    }
}
exec sddsmakedataset bpm.list -col=List,type=string -data=[join $bpmList ,]

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 4} {$i < 13} {incr i 4} {
	    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
#	    lappend quadList SBB1B#[expr $i/4]
	}
	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
