#!/bin/sh
# \
exec oagwish  "$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

set debug 0
set dryRun 0
set optimizeList ""
set expert 0
set args $argv
APSStrictParseArguments {debug dryRun optimizeList expert}

if {![string length $optimizeList]} {
    set optimizeList rg1
   }

#source /home/oxygen/SHANG/oag/apps/src/tcltkapp/oagapp/optimize.tcl

APSApplication . -name "APS Optimize: [join $optimizeList +]" \
        -overview "optimize provides convenience controls for optimizations."

set mainStatus "Initializing ..."
APSStatusLine .status -parent .userFrame -variable mainStatus -width 100

# to add more controllaw instances, insert appropriate entries
# for the arrays directory, rcDesc, and title.
# The new member name must be added to the groupDef list a few lines down.
# The list items of groupDef must be a member of the arrays mentioned above.
# If a new group of scripts is required, then a new array element
# for groupDef should be added.

set HomeDir /home/helios/oagData/optimize
cd $HomeDir
set arguments {}

#this is testing purpose
set groupTitle(rg1Test) "RG1 Opt Test"
set groupDef(rg1Test) rg1Test
set rcDesc(rg1Test) {RG1 Opt Test}
set rcPV(rg1Test)  {OAG195RC}
set title(rg1Test) {rg1Test}
set groupTitle(rg1Test) "RG1 Opt Test"
set groupDef(rg1Test) rg1Test
set directory(rg1Test) Test/rg1Test


######################

set directory(rg1) LINAC/rg1
set directory(rg2) LINAC/rg2

# The list items for arguments are generated in procedure MakeControlLawWidget.
# These list items are actually arrays globalized and created in MakeControlLawWidget,
# and used elsewhere. Though C. Saunders warned me against the practice
# of possibly changing the state external to this procedure, I have no other choice
# in making this controllaw tcl script more functional. The array names
# are necessarily unknown before running this script.


set rcDesc(rg1) {RG1Optimize}
set rcDesc(rg2) {RG2Optimize}
set rcPV(rg1)  {OAG180RC}
set rcPV(rg2)  {OAG181RC}

set title(rg1) {RG1 Optimization}
set title(rg2) {RG2 Optimization}

set groupTitle(rg1) "RG1 Optimization"
set groupDef(rg1) rg1
set groupTitle(rg2) "RG2 Optimization"
set groupDef(rg2) rg2

set groupTitle(linac) "Linac RF Gun Optimization"
set groupDef(linac) {rg1 rg2}

#SR optimizers
set rcDesc(srInjEff) {SR Injection Efficiency Optimize}
set rcPV(srInjEff)  {OAG156RC}
set title(srInjEff) {SR Inj-Eff Optimization}
set groupTitle(srInjEff) "SR Injection Efficiency Optimization"
set groupDef(srInjEff) srInjEff
set directory(srInjEff) SR/srInjEff

#PAR optimizers
set rcDesc(parInjEff) {PAR Injection Efficiency Optimize}
set rcPV(parInjEff)  {OAG157RC}
set title(parInjEff) {PAR Inj-Eff Optimization}
set groupTitle(parInjEff) "PAR Injection Efficiency Optimization"
set groupDef(parInjEff) parInjEff
set directory(parInjEff) PAR/parInjEff

pack .userFrame -fill x

foreach group $optimizeList {
    APSOptimizeMakeWidgetGroup .$group -parent .userFrame -group $group
}


# pack forget .userFrame.status
