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


# set the path to pick up OAG libraries
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)]
set CVSRevisionAuthor "\$Revision: 1.4 $ \$Author: soliday $"

proc ConvertMag2SDDS {args} {
    APSParseArguments {input output}
    if {![file exists $input]} {
	puts stderr "input file $input does not exist"
	exit 1
    }

    set sddsData(ColumnNames) "Time Current IntegratedStrength dx dy dtheta"
    set sddsData(ColumnInfo.Time) "type SDDS_LONG units seconds"
    set sddsData(ColumnInfo.Current) "type SDDS_DOUBLE units Amp"
    set sddsData(ColumnInfo.IntegratedStrength) "type SDDS_DOUBLE units T"
    set sddsData(ColumnInfo.dx) "type SDDS_DOUBLE units um"
    set sddsData(ColumnInfo.dy) "type SDDS_DOUBLE units um"
    set sddsData(ColumnInfo.dtheta) "type SDDS_DOUBLE units mrad"

    set fID [open $input]
    set data [read $fID]
    catch {close $fID}
    set pages [split $data \f]
    foreach page $pages {
	set lines [split $page \n]
	if {[string trim [lindex $lines 1]] == "Absolute Measurement Result"} {
	    foreach line $lines {
		set parts [split $line :]
		set name [string trim [lindex $parts 0]]
		switch -exact -- $name {
		    "Measurement Time" {
			lappend time [clock scan [string trim [join [lrange $parts 1 end]]]]
		    }
		    "Current during measurement" {
			lappend current [lindex [lindex $parts 1] 0]
		    }
		    "INT (B' dz)" {
			lappend strength [lindex [lindex $parts 1] 0]
		    }
		    "Magnet Error Angle" {
			lappend dtheta [lindex [lindex $parts 1] 0]
		    }
		    "X-axis Offset (RC - MC)" {
			lappend dx [lindex [lindex $parts 1] 0]
		    }
		    "Y-axis Offset (RC - MC)" {
			lappend dy [lindex [lindex $parts 1] 0]
		    }
		}
	    }
	} elseif {[string trim [lindex $lines 1]] == "M E A S U R E M E N T   S U M M A R Y"} {
	    set steps 0
	    set done 0
	    foreach line $lines {
		if {$done} break
		set parts [split $line :]
		set name [string trim [lindex $parts 0]]
		switch -exact -- $name {
		    "Measurement was made at" {
			lappend time [clock scan [string trim [join [lrange $parts 1 end]]]]
		    }
		    "Current during measurement" {
			lappend current [lindex [lindex $parts 1] 0]
			incr steps
		    }
		    "INT (B' dz)" {
			lappend strength [lindex [lindex $parts 1] 0]
		    }
		    "Magnet Error Angle" {
			lappend dtheta [lindex [lindex $parts 1] 0]
		    }
		    "X-axis Offset (RC - MC)" {
			lappend dx [lindex [lindex $parts 1] 0]
		    }
		    "Y-axis Offset (RC - MC)" {
			lappend dy [lindex [lindex $parts 1] 0]
		    }
		    "PARAMETERS FROM MEASUREMENT STEP \#2" {
			set done 1
		    }
		}
	    }
	    for {set i 1} {$i < $steps} {incr i} {
		lappend time [lindex $time end]
		lappend dx [lindex $dx end]
		lappend dy [lindex $dy end]
	    }
	}
    }
    set sddsData(Column.Time) [list $time]
    set sddsData(Column.Current) [list $current]
    set sddsData(Column.IntegratedStrength) [list $strength]
    set sddsData(Column.dtheta) [list $dtheta]
    set sddsData(Column.dx) [list $dx]
    set sddsData(Column.dy) [list $dy]

    if [catch {sdds save $output sddsData} result] {
	puts stderr "unable to save $output: $result"
	exit 1
    }
}

if {[llength $argv] != 2} {
    puts stderr "usage: mag2sdds <input> <output>\n[join [split $CVSRevisionAuthor $] ""]"
    exit 1
}
set input [lindex $argv 0]
set output [lindex $argv 1]

ConvertMag2SDDS -input $input -output $output
