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

#This has been replaced by monitoring/makeSRCorSetPtReqFile
puts "Not used"

# $Log: not supported by cvs2svn $
# Revision 1.5  2007/04/18 15:11:57  soliday
# Increased the tolerance again because the SR event logger is still
# updating too fast.
#
# Revision 1.4  2007/02/07 16:43:00  soliday
# Increased the tolerance because the SR event logger was updating too fast.
#
# Revision 1.3  2006/04/07 16:13:10  soliday
# Fixed issue where the -tolerance argument was not read properly.
#
# Revision 1.2  2005/12/20 16:37:58  shang
# removed DeviceName from the output file.
#
# Revision 1.1  2005/12/19 22:35:10  shang
# first version, for creating corrector setpoints reqeust file.
#
# Revision 1.13  2005/11/09 00:17:25  shang
# now sorted by sector and ControlName.
#
# Revision 1.12  2005/08/08 19:26:45  emery
# Changed wildcard for rf x setpoint to include all rf bpms.
#
# Revision 1.11  2003/03/22 03:17:55  emery
# Added removal of ioc_name
#
# Revision 1.10  2002/10/02 18:58:30  shang
# replaced burtrb by obtaining pvs from iocRecName.sdds
#
# Revision 1.9  2002/05/31 18:07:57  soliday
# Fixed a bug from the last change.
#
# Revision 1.8  2002/05/31 17:53:15  emery
# Set tolerance for offset to 0.01 mm
#
# Revision 1.7  2001/11/14 16:34:22  emery
# Removed DP* PVs.
#
# Revision 1.6  2001/10/26 16:10:50  emery
# Added datapool AdjustP PVs.
#
# Revision 1.5  2001/08/15 08:28:00  emery
# Added RF x setpoint PVs for bpms.
#
# Revision 1.4  2001/01/29 17:57:53  emery
# Use file /home/helios/oagData/sr/DSPXrayBPMs/sectors.sdds to
# determine which sectors are present with DSP Xray bpm data.
#
# Revision 1.3  2001/01/12 21:12:13  emery
# Added 1 2 3 4 13 14 to sectorList according to AOD-DIA instructions.
#
# Revision 1.2  2000/10/31 00:11:50  emery
# Added sector 33 to Xray bpm offsets.
#
# Revision 1.1  2000/10/27 02:09:24  emery
# First installation.
#

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)]
APSStandardSetup

#cd /home/helios/oagData/SCR/requestFiles
set recordFile /home/helios/oagData/pvdata/iocRecNamesOAG.sdds
set rootname SRCorSetpts
set usage {usage: makeCorSetPtReqFile [-output <filename> | -install 1] [-mode {SR|normal}] [-tolerance <value>}
set output ""
set install 0
set mode normal
set tolerance .1
set args $argv
if {[APSStrictParseArguments {output install mode tolerance}] || \
      (![string length $output] && !$install) || \
      ([string length $output] && $install)} {
    puts stderr "Error for $argv0 in [pwd]: $usage"
    exit 1
}
if [file exist $rootname.req] {
    set lastFile [file readlink $rootname.req]
} else {
    set lastFile ""
}
if !$install {
    if [file exists $output] {
        puts stderr "Error for $argv0 in [pwd]: $output exists"
        exit 1
    }
} else {
    if ![string length $lastFile] {
        set lastFile $rootname.req-0000
    }
    set output [APSNextGenerationedName -name $lastFile -separator - -newFile 1]
}

# Use BPMStatus file
set hStatus /home/helios/oagData/sr/HCorrectorStatus/config.sdds
set vStatus /home/helios/oagData/sr/VCorrectorStatus/config.sdds
foreach plane {h v} {
    set Plane [string toupper $plane]
    if [catch {exec sddsprocess [set ${plane}Status] -pipe=out \
                 -match=col,DeviceName=S*\[AB\]:${Plane}\[1-4\]  \
                 -filter=col,Nonexistent,0,0 \
                 | sddsconvert -pipe=in ${plane}corr1 -retain=col,DeviceName} result] {
        puts stderr $result
        exit
    }
    if [catch {exec sddsprocess [set ${plane}Status] -pipe=out -nowarnings \
                 -match=col,DeviceName=S*C:${Plane}1  \
                 -filter=col,Nonexistent,0,0 \
                 | sddsconvert -pipe=in ${plane}corr2 -retain=col,DeviceName} result] {
        puts stderr $result
        exit
    }
    if [catch {exec sddscombine ${plane}corr1 ${plane}corr2 -merge -pipe=out \
                 | sddsprocess -pipe=in ${plane}Correctors \
                 -print=col,Category,$Plane \
                 -define=col,Tolerance,$tolerance,type=double \
                 -edit=column,ControlName,DeviceName,ei/:CurrentAO/ \
                 -scan=column,Sector,DeviceName,S%ld,type=long \
                 -print=col,Beamline,S%ld,Sector \
                 -print=col,ControlType,pv \
                 -print=col,IsNumerical,y,type=character \
                 -print=col,OpsIntervention,n,type=character \
                 -print=col,IsReadOnly,n,type=character \
                 -print=col,IsProtected,n,type=character } result] {
        puts stderr $result
        exit
    }
    if [catch {exec sddsprocess ${plane}Correctors ${plane}SFBCorrectors \
                 -reedit=col,ControlName,ai/SFB:/ } result] {
        puts stderr $result
        exit
    }
    file delete -force ${plane}corr1 ${plane}corr2
}

if {$mode=="SR"} {
    if [catch {exec sddscombine hCorrectors hSFBCorrectors vCorrectors vSFBCorrectors \
                 -merge -pipe=out \
                 | sddsprocess -pipe=in $output.1 \
                 -reprint=col,Category,SteeringPS -reprint=col,Beamline,SR} result] {
        puts stderr $result
        exit
    }
} else {
    if [catch {exec sddscombine hCorrectors hSFBCorrectors vCorrectors vSFBCorrectors \
                 -merge -overwrite $output.1} result] {
        puts stderr $result
    }
}
file delete -force hCorrectors hSFBCorrectors vCorrectors vSFBCorrectors 
# remove PVs that don't connect
if [catch {exec sddsprocess $output.1 -pipe=out \
             -edit=col,rec_name,ControlName,S?/./D \
             | sddssort -column=rec_name -pipe \
             | sddsxref -reuse -nowarnings -pipe $recordFile -match=rec_name \
             | sddsconvert -pipe -delete=col,rec_name,ioc_name,Sector,DeviceName \
             | sddssort -pipe=in -numericHigh -col=ControlName -unique $output \
         } result] {
    puts stderr "error: $result"
    exit 1
}
file delete $output.1
if [string length $lastFile] {
    puts "New  file: [exec sdds2stream -rows $output]"
    puts "Last file: [exec sdds2stream -rows $lastFile]"
    exec sddsselect $output $lastFile -invert $rootname.added -match=ControlName 
    exec sddsselect $lastFile $output -invert $rootname.removed -match=ControlName 
    puts "PVs added ($rootname.added): [exec sdds2stream -rows $rootname.added]"
    puts "PVs removed ($rootname.removed): [exec sdds2stream -rows $rootname.removed]"
}
if $install {
    if [file exists ${rootname}.req] {
        if [catch {file delete ${rootname}.req} result] {
            puts stderr "Error for $argv0 in [pwd]: $result"
            exit 1  
        }
    }
    catch {exec chmod -w $rootname.req}
    if [catch {exec ln -s $output ${rootname}.req} result] {
        puts stderr "Error for $argv0 in [pwd]: $result"
        exit 1
    }
    if [catch {APSMakeSCRCategoryFiles -input ${rootname}.req} result] {
        puts stderr "Error for $argv0 in $pwd: $result"
        exit 1
    }
}

