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

# $Log: not supported by cvs2svn $
# Revision 1.3  2002/10/09 09:23:52  emery
# Did the copying right this time.
#
# Revision 1.2  2002/10/09 09:19:50  emery
# Gave correct directory target of copy of couplingTemplate.ele
#
# Revision 1.1  2002/08/09 20:13:10  emery
# First installation.
#
# Creates vertical dispersion (etay) response matrix to be used
# by SRvertDispersionCorrection

set usage "usage: makeEtayCorrectionMatrix -lattice <lattice>"
set lattice ""
set args $argv
APSParseArguments {lattice}

if ![string length $lattice] {
    puts stderr "Error for $argv0 in [pwd]: $usage"
    exit 1
}

set latticeDir /home/helios/oagData/sr/lattices/${lattice}
set scriptDir /home/helios/oagData/sr/lattices/scripts
if ![file exists $latticeDir/couplingTemplate.ele] {
    file copy $scriptDir/couplingTemplate.ele $latticeDir
}

set StartTime [clock seconds]

cd $latticeDir

set amplitude 0.1
set firstSkew 3
set start $firstSkew
set fileList ""
for {set i $start} {$i < 41} {incr i 2} {
    if [expr ($i - 1)/4*4 == $i - 1] {
        set sectorHalf B
    } else {
        set sectorHalf A
    }
    set skewQuad S${i}${sectorHalf}:QS
    if {$i == 1} {
#        puts stderr "Skipping $skewQuad because it doesn't exist"
        continue
    } else {
#        puts stderr "Doing skew quad $skewQuad"
    }
    if [catch {exec replaceText couplingTemplate.ele coupling.ele \
                 -original=<skewQuad>,<amplitude> \
                 -replace=$skewQuad,$amplitude \
             } result] {
        puts stderr "$argv0 in [pwd]: $result"
        exit
    }
    if [catch {exec elegant coupling.ele >& coupling.log \
             } result] {
        puts stderr "$argv0 in [pwd]: $result"
        # no exit 
    }

    if [catch {exec sddsprocess $skewQuad.twi -pipe=out \
                 -match=col,ElementType=MONI \
                 | sddsconvert -pipe \
                 -retain=col,etay -dele=para,* \
                 | sddsprocess -pipe \
                 -def=col,$skewQuad,etay \
                 | sddsconvert -pipe=in $skewQuad.etay \
                 -retain=col,$skewQuad \
             } result] {
        puts stderr "$argv0 in [pwd]: $result"
        exit
    }

# first skew quad that exist is skew quad 3.
    if {$i == $firstSkew} {
        file copy -force $skewQuad.twi baseline.twi
    }
    catch {file delete $skewQuad.twi $skewQuad.mag}
    if {$i == $firstSkew} {
        if [catch {file copy -force $skewQuad.etay matrix.etay \
                 } result] {
            puts stderr "$argv0 in [pwd]: $result"
            exit
        }
    } else {
        if [catch {exec sddsxref matrix.etay $skewQuad.etay \
                     -take=$skewQuad -noWarning  \
                 } result] {
            puts stderr "$argv0 in [pwd]: $result"
            exit
        }
    }
    lappend fileList $skewQuad.etay
}
APSAddToTmpFileList -ID etayCorrection -fileList $fileList

if [catch {exec sddsprocess baseline.twi -pipe=out \
             -match=col,ElementType=MONI \
             | sddsconvert -pipe=in bpm.names \
             -retain=col,ElementName -dele=para,*
    exec sddsxref matrix.etay bpm.names \
             -take=ElementName -noWarning  \
         } result] {
    puts stderr "$argv0 in [pwd]: $result"
    exit
}

APSAddToTmpFileList -ID etayCorrection -fileList "bpm.names baseline.twi matrix.etay~ coupling.ele~"

set oldDir [pwd]
set etayCorrectionDir /home/helios/oagData/sr/latticeFunctionCorrection/etay/lattices/${lattice}
if ![file exists $etayCorrectionDir] {
    exec mkdir -p $etayCorrectionDir
}
cd $etayCorrectionDir
set dateStamp [clock format [clock seconds] -format %Y-%m%d]
set name [APSNextGenerationedName -name etay.$dateStamp.00 -separator . \
             -newFile 1]
if [catch {file copy $oldDir/matrix.etay $name
    file delete etay.default
    exec ln -s $name etay.default} result] {
    puts stderr "$result"
    exit 1
}

set Time [clock seconds]
set deltaTime [expr $Time - $StartTime]
#puts stderr "Elapsed time for $argv0: $deltaTime"

# clean-up
APSDeleteTmpFileList  -ID etayCorrection 

exit 0


# What does this file do?
if [catch {exec sddsprocess baseline.twi -pipe=out \
             -match=col,ElementType=MONI \
             | sddsconvert -pipe=in baseline.etay0.names \
             -retain=col,ElementName,etay -dele=para,*
         } result] {
    puts stderr "$argv0 in [pwd]: $result"
    exit
}

exit
