#!/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 "runCorrection -workDir <dirname> -correctionMode <beta|coupling> -measLatticeParamFile <filename-list> -outputFile <filename> \[-calculateMatrix 0\]"
set args $argv
set workDir ""
set correctionMode ""
set measLatticeParamFile ""
set outputFile ""
set calculateMatrix 1
APSParseArguments {workDir correctionMode measLatticeParamFile outputFile calculateMatrix }
if {![string length $workDir] || ![string length $correctionMode]|| ![string length $measLatticeParamFile] || ![string length $outputFile]} {
    puts stdout $usage
    exit
}

set lteFile $workDir/converted.lte
set beamlineName RING
set elementListFile $workDir/elements.$correctionMode.sdds
set matrixFile $workDir/${correctionMode}CorrectionMatrix.sdds
set targetParamFileList $workDir/step1.param
#set measLatticeParamFile $workDir/step3.param

if [string match beta $correctionMode] {
    set weightList "1 1 100 1000"
    set SVratio 80
    set useRelative 1
}
if [string match coupling $correctionMode] {
    set weightList "1 500"
    set SVratio 50
    set useRelative 0
}

#------ Make element lists:
set command "$workDir/makeElementListFile -listFile elements.$correctionMode.sdds -mode $correctionMode"
puts stdout $command
eval exec $command >&@ stdout
puts stdout " "

#------ Run correction:
set command "$workDir/calculateTwissCorrection \
  -calcMode $correctionMode \
  -mode correct \
  -beamEnergyMeV 2400 \
  -elemByElemSR 0 \
  -workDir $workDir \
  -lteMeasured $lteFile \
  -beamlineMeasured $beamlineName \
  -paramFileListMeasured \"$measLatticeParamFile\" \
  -lteDesired $lteFile \
  -beamlineDesired $beamlineName \
  -paramFileListDesired \"$targetParamFileList\" \
  -outputFile $outputFile \
  -elementListFile $elementListFile \
  -weightList \"$weightList\" \
  -calculateMatrix $calculateMatrix \
  -calculateInverse 1 \
  -useRelative $useRelative \
  -SVratio $SVratio \
  -matrixFile $matrixFile \
  -corFraction 0.5 \
  -useDQS 1 \
  -splitTasks 10 \
  -iterations 10 \
  -useTunes 1 \
  -useInvSolution 0 \
  -locoResultFile dummy \
  -useMeasDisp 0 \
  -measDispFile dummy \
  -abortFile abort.run"

puts stdout $command
puts stdout " "

eval exec $command >&@ stdout


