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

#Input  /home/helios/oagData/pvdata/iocRecNamesOAG.sdds
#       ../requestFiles/SRBPLD.req.template
#
#Output ../requestFiles/SRBPLD.req
#       ../requestFiles/SRBPLD.req.beamlines
#       ../requestFiles/SRBPLD.req.categories

APSStandardSetup

set root SRBPLD
set recordFile /home/helios/oagData/pvdata/iocRecNamesOAG.sdds
set positionFile /home/helios/oagData/sr/lattices/default/aps.twi
set output "../requestFiles/SRBPLD.req"

#create limits file
#exec ./makeSRBPLDOffsetAndLimitReqFile

set tmpRoot /tmp/[APSTmpString]
for {set sector 1} {$sector<=40} {incr sector 2} {
    
    set sector1 [expr $sector - 1]
    if {$sector1==0} {
	set sector1 40
    }
    set sector2 [expr $sector + 1]
    set sectorf [format %02d $sector]
    set sectorf1 [format %02d $sector1]
    set sectorf2 [format %02d $sector2]
    
    puts "Working on sector $sector"
    foreach ID {ID1 ID2} {
	foreach plane {H V} {
	    foreach coord {X Y} {
		foreach bpm1 {A:P0 A:P1 A:P2 A:P3 A:P4 A:P5 A:P6 B:P6 B:P5 B:P4 B:P3 B:P2 B:P1 B:P1 B:P0} {
		    set bpm [regsub ":" $bpm1 ""]
		    if [catch {exec replaceText ../requestFiles/${root}.req.template \
				   $tmpRoot.$sector.$ID.$plane.$coord.$bpm.req \
				   -orig=<sectorf>,<sectorf1>,<sectorf2>,<plane>,<coord>,<bpm>,<bpm1>,<ID> \
				   -repl=$sectorf,$sectorf1,$sectorf2,$plane,$coord,$bpm,$bpm1,$ID } result] {
			puts stderr "Error1: $result"
			exit 1
		    }
		    lappend fileList $tmpRoot.$sector.$ID.$plane.$coord.$bpm.req
		}
	    }
	}
    }
    #add bmBPLD inuse PVs
   
}

#add BM-BPLD inUse BPMs
puts "add inUse PVs..."
for {set sector 1} {$sector<=40} {incr sector} {
    set sectorf [format %02d $sector]
    set pvList ""
    foreach bpm {A:P0 A:P1 A:P2 A:P3 A:P4 A:P5 A:P6 B:P6 B:P5 B:P4 B:P3 B:P2 B:P1 B:P1 B:P0} {
	lappend pvList S${sectorf}${bpm}:MPS:bmBPLD:InUse
	lappend pvList S${sectorf}${bpm}:MPS:idBPLD:InUse
    }
    if [catch {exec sddsmakedataset -pipe=out -col=ControlName,type=string -data=[join $pvList ,] \
		   | sddsprocess -pipe=in $tmpRoot.$sector.inuse \
		   "-print=col,IsProtected,n,type=character" "-print=col,IsReadOnly,n,type=character" \
		   "-print=col,ControlType,pv" "-print=col,Category,InUse" \
		   "-print=col,Beamline,S$sectorf" "-print=col,ControlMode,RO" \
		   "-print=col,Description,BPLD BPM InUse" "-print=col,IsNumerical,n,type=character" \
		   "-print=col,Provider,ca" "-print=col,ExpectNumeric,n,type=character" \
		   "-print=col,ExpectFieldType,scalar" "-define=col,ExpectElements,1,type=long" \
                   "-print=col,Units,,type=string" \
		   "-define=col,Tolerance,0" } result] {
	return -code error "Error creating InUse PVs: $result"
    }
    lappend fileList $tmpRoot.$sector.inuse
}

if [catch {eval exec sddscombine $fileList -merge -pipe=out \
	       | sddssort -pipe -unique -col=ControlName \
               | sddsprocess -pipe -nowarn \
               -edit=col,rec_name,ControlName,S?/./D \
               | sddssort -column=rec_name -pipe \
               | sddsxref -reuse -nowarnings -pipe $recordFile -match=rec_name \
               | sddssort -pipe -col=ControlName -numericHigh -unique \
               | sddsconvert -pipe=in $output -delete=col,rec_name,ioc_name } result] {
    puts stderr "Error: $result"
    #exit
   }

eval file delete $fileList

while {1} {
    after 2000
    if {[catch {exec sddscheck -printErrors $output} result]} {
        continue
    }
    break
}

if {[catch {exec sddsconvert $output -pipe=out -ascii "-delete=para,*" | \
              sddsprocess -nowarn -pipe=in $output -print=parameter,InstallLocation,/home/helios/oagData/SCR/requestFiles/SRBPLD.req} result]} {
    puts stderr "error: $result"
    exit
}

#exec sddsprocess -nowarn $output ${output}.sr -reprint=column,Beamline,SR "-delete=parameter,*"

#if [catch {APSMakeSCRCategoryFiles -input $output} result] {
#    puts stderr "Error for $argv0 in $pwd: $result"
#    exit 1
#}
if {[catch {exec sddssort $output -pipe=out -col=Category -unique \
		| sddsconvert -pipe  -ascii | \
		sddsprocess -pipe=in ${output}.categories -nowarn -delete=parameter,NumberCombined \
              -reprint=parameter,InstallLocation,/home/helios/oagData/SCR/requestFiles/SRBPLD.req.categories} result]} {
    puts stderr "error: $result"
    exit
}
if {[catch {exec sddssort $output -pipe=out -col=Beamline -unique \
		| sddsconvert -pipe -ascii | \
		sddsprocess -pipe=in ${output}.beamlines -nowarn -delete=parameter,NumberCombined \
		-reprint=parameter,InstallLocation,/home/helios/oagData/SCR/requestFiles/SRBPLD.req.beamlines} result]} {
    puts stderr "error: $result"
    exit
}
file delete ${output}.categories~ ${output}.beamlines~

#exec sddsprocess $output $output.sr -reprint=col,Category,BPLD -reprint=column,Beamline,SR "-delete=parameter,*"
