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

# $Log: not supported by cvs2svn $
# Revision 1.6  2012/02/22 21:02:02  shang
# fixed a potential problem of "delete files" button.
#
# Revision 1.5  2012/02/22 20:45:09  shang
# added instruction message when the scope has no signal, added "Delete" button to plot widget to delete selected files, and made the "Accept" button work any time when it is clicked.
#
# Revision 1.4  2011/11/17 21:12:44  shang
# correct ICTcurrent units which should be Amps instead of volts.
#
# Revision 1.3  2011/11/03 15:35:32  shang
# changed the labels' display position to be able to see them better.
#
# Revision 1.2  2011/11/03 15:16:48  shang
# fixed a typo.
#
# Revision 1.1  2011/11/01 22:23:12  shang
# per Stan's request, separate it from AcquireITSLinacWaveforms.
#

set CVSRevisionAuthor "\$Revision: 1.7 $ \$Author: shang $"
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

proc AcquireITSGunRFWaveform {args} {
    set subDir ""
    APSParseArguments {subDir}
    
    global archiveDir xstart xend scalarsFile
    set ext [clock format [clock seconds] -format %Y-%j-%m%d-%H%M%S]
    set dir /home/helios/oagData/$subDir
    set file $dir/${ext}.sdds
    if [catch {exec sddswmonitor $file \
		   -scalars=$scalarsFile \
		   -PVnames=LI:MON:chan1ScaledWaveWF,LI:MON:chan2ScaledWaveWF,LI:MON:scaledTimeAxisWF \
		   -steps=1  } result] {
        return -code error "AcqureITSGunRFWaveform2: error in sddswmonitor: $result"
    }
    if [catch {exec sddsprocess $file -pipe=out -process=LI:MON:chan1ScaledWaveWF,max,PeakPower \
		   | sdds2stream -pipe -par=PeakPower} peakPower] {
	return -code error "AcqureITSGunRFWaveform2: error in sddsprocess: $result"
    }
    if {$peakPower<=0} {
	SetStatus "Error: the ITS RF waveform has no signal (all zeros or negative), please contact control personnel to check the Linace RF scope."
	return
    }
    if [catch {exec sddsprocess $file -nowarnings -pipe=out \
		   -process=LI:MON:chan1ScaledWaveWF,max,PeakPower \
		   "-redefine=col,Time,LI:MON:scaledTimeAxisWF,symbol=Time,units=\$gm\$rs" \
		   "-redefine=param,ITSRFGFwdPwr,ITSRFGFwdPwr 1.0e6 /,units=MW" \
		   "-reprint=param,RFGFPWRString,ITS RG RF Gun Peak FWD Power = %0.2f %s,ITSRFGFwdPwr,ITSRFGFwdPwr.units" \
		   "-reprint=param,RFGHTRPWRString,ITS Heater Power = %0.2f %s,ITSHeaterPower,ITSHeaterPower.units" \
		   "-reprint=param,RFGSupplyTempString,ITS RFG H2O Supply Temp = %0.2f %s,ITSWaterSupplyTemp,ITSWaterSupplyTemp.units" \
		   "-reprint=param,RFGReturnTempString,ITS RFG H2O Return Temp = %0.2f %s,ITSWaterReturnTemp,ITSWaterReturnTemp.units" \
		   | sddsprocess -pipe=in $file.proc \
		   "-redefine=col,ForwardPower,LI:MON:chan1ScaledWaveWF PeakPower / ITSRFGFwdPwr *,symbol=FWD Power,units=MW" \
		   "-redefine=col,ReflectPower,LI:MON:chan2ScaledWaveWF PeakPower / ITSRFGFwdPwr *,symbol=REF Power,units=MW" } result] {
        return -code error "AcqureITSGunRFWaveform4: error in sddsprocess: $result"
    }
    SetStatus "done."
    exec sddsplot -limits=xminimum=$xstart,xmaximum=$xend -leg \
	-scale=$xstart,$xend,0,0 \
      -subticksettings=xdivisions=5,ydivisions=5 \
      -title=@TimeStamp,scale=0.6 \
      $file.proc  \
      -topline=@RFGFPWRString,scale=0.5 \
      -string=@RFGHTRPWRString,p=0.1,q=0.90 \
      -string=@RFGSupplyTempString,p=0.1,q=0.85 \
      -string=@RFGReturnTempString,p=0.1,q=0.80 \
      "-col=Time,*Power" -graph=line,vary \&
   return 
}

proc AcquireLinacICTWaveform {args} {
    set subDir ""
    APSParseArguments {subDir}
    global archiveDir xstart xend scalarsFile
    set dir /home/helios/oagData/$subDir
    if [catch {exec cavget -list=L1:RFG:RF:SW2:positionMI -printErrors -pend=30} gun] {
	return -code error "Error in reading RG gun type: $gun"
    }
    switch $gun {
	RG2 {
	    set gun 2
	}
	RG1 {
	    set gun 1
	}
    }
    set ext [clock format [clock seconds] -format %Y-%j-%m%d-%H%M%S]
    set file $dir/RG-${gun}${ext}.sdds
    if [catch {exec sddswmonitor $file \
		   -scalars=$scalarsFile \
		   -PVnames=L1:SCOPE1:scaledTimeAxisWF,L1:SCOPE1:chan4ScaledWaveWF \
		   -steps=1  } result] {
        return -code error "AcqureLiancICTWaveform2: error in sddswmonitor: $result"
    }
    if [catch {exec sddsprocess $file $file.proc -define=col,Time,L1:SCOPE1:scaledTimeAxisWF,units=\$gm\$rs \
		   -define=col,ICTcurrent,L1:SCOPE1:chan4ScaledWaveWF,units=Amps \
		   "-print=par,ICTpeakCurrentString,RG$gun peak current = %0.2f %s,RG${gun}PeakCurrent,RG${gun}PeakCurrent.units" } result] {
	return -code error "AcqureLiancICTWaveform3: error in processing data: $result"
    }
    exec sddsplot -col=Time,ICTcurrent -topline=@ICTpeakCurrentString $file.proc &
}

proc DeleteFiles {args} {
    set dataDir ""
    APSParseArguments {dataDir}
    set list .its.userFrame.sl.listbox 
    set chosenList [$list curselection]
    if ![llength $chosenList] {
	return
    }
    foreach index $chosenList {
	set file $dataDir/[$list get $index]
	if [APSYesNoPopUp "Are you sure to delete file $file and related files?"] {
	    set fileList [glob -nocomplain [file root $file]*]
	    SetStatus "deleting $file..."
	    eval file delete -force $fileList
	    $list delete $index
	}
    }
    SetStatus "delete done."
}

proc PlotCallback {args} {
    eval PlotFile -files $args
}

proc PlotFile {args} {
    set files ""
    APSParseArguments {files}
    global figureDir EPS PNG xstart xend plotData
    if ![llength $files] {
	return
    }
    SetStatus "plotting $plotData data ..."
    global EPS PNG
    if {$EPS || $PNG} {
        global figureDir
        set ext [file tail [file root [file root $files]]]
        if [winfo exist .fig] {
            destroy .fig
        }
        APSDialogBox .fig -name "Directory for figures" 
        APSLabeledEntry .dir -parent .fig.userFrame -label "Directory for saving figures:"  \
          -textVariable figureDir -width 70
        APSButton .daily -parent .fig.userFrame.dir -text "daily" -size small \
          -command "set figureDir [APSGoToDailyDirectory]"
        tkwait window .fig
        if $EPS {
            set device ceps
            set type eps
        } elseif $PNG {
            set device png
            set type png
        }
    }
    if [llength $files]>1 {
        switch $plotData {
            ITS_RF {
                eval exec sddsplot $files -limits=xminimum=$xstart,xmaximum=$xend -leg=file,edit=%/.sdds.proc// -layout=1,2 \
                  -scale=$xstart,$xend,0,0 \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  \"-title=Forward Power Waveforms\" \
                  -col=Time,ForwardPower  -graph=line,vary \
                  -endp  \
                  -col=Time,ReflectPower \
                  -graph=line,vary \
                  \"-title=Reflect Power Waveforms\" &
                if {$EPS || $PNG} {
                    set filename $figureDir/ITS_RF-000.$type
                    set lastFile [lindex [lsort -decreasing [glob -nocomplain $figureDir/ITS_RF-*.$type]] 0]
                    if [string length $lastFile] {
                        set num [scan [file tail $lastFile] ITS_RF-%ld]
                        set num [expr $num +1]
                        set filename $figureDir/ITS_RF-[format %03d $num].$type
                    }
                    eval exec sddsplot $files -limits=xminimum=$xstart,xmaximum=$xend -leg=file,edit=%/.sdds.proc// -layout=1,2 \
                      -scale=$xstart,$xend,0,0 \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      \"-title=Forward Power Waveforms\" \
                      -col=Time,ForwardPower  -graph=line,vary \
                      -endp  \
                      -col=Time,ReflectPower \
                      -graph=line,vary \
                      \"-title=Reflect Power Waveforms\" -device=$device -output=$filename
                }
            }
            ICT -
            BendFC -
            StraightFC {
                eval exec sddsplot $files -grap=line,vary -leg=file,edit=%/.sdds.proc//  \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  -col=Time,${plotData}current \"-title=$plotData Baseline Subtracted Waveforms and Integrals\" -endp 
                if {$EPS || $PNG} {
                    set filename $figureDir/${plotData}_current-000.$type
                    set lastFile [lindex [lsort -decreasing [glob -nocomplain $figureDir/${plotData}_current-*.$type]] 0]
                    if [string length $lastFile] {
                        set num [scan [file tail $lastFile] ITS_current-%ld]
                        set num [expr $num +1]
                        set filename $figureDir/ITS_current-[format %03d $num].$type
                    }
                    
                    eval exec sddsplot $files -grap=line,vary -leg=file,edit=%/.sdds.proc// -layout=1,3 \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      -col=Time,${plotData}current \"-title=$plotData Baseline Subtracted Waveforms and Integrals\" -endp 
                }
            }
            ITS_current {
		eval exec sddsplot $files -grap=line,vary -leg=file,edit=%/.sdds.proc//  \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  -col=Time,ICTcurrent \"-title=ICT Baseline Subtracted Waveforms and Integrals\" -endp \
                  -col=Time,FCcurrent \"-title=FC Baseline Subtracted Waveforms and Integrals\" -endp \
                  -col=Time,Current \"-title=FC Current Waveform\" -endp &
                if {$EPS || $PNG} {
                    set filename $figureDir/ITS_current-000.$type
                    set lastFile [lindex [lsort -decreasing [glob -nocomplain $figureDir/ITS_current-*.$type]] 0]
                    if [string length $lastFile] {
                        set num [scan [file tail $lastFile] ITS_current-%ld]
                        set num [expr $num +1]
                        set filename $figureDir/ITS_current-[format %03d $num].$type
                    }
                    
                    eval exec sddsplot $files -grap=line,vary -leg=file,edit=%/.sdds.proc// -layout=1,3 \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      -col=Time,ICTcurrent \"-title=ICT Baseline Subtracted Waveforms and Integrals\" -endp \
                      -col=Time,FCcurrent \"-title=FC Baseline Subtracted Waveforms and Integrals\" -endp \
                      -col=Time,Current \"-title=FC Current Waveform\" -endp -device=$device -output=$filename
                }
	    }
            ITS_WaveGuide {
                eval exec sddsplot $files -limits=xminimum=$xstart,xmaximum=$xend  -leg=file,edit=%/.sdds.proc// -layout=1,2 \
                  -scale=$xstart,$xend,0,0 \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  \"-title=Forward Power Waveforms\" \
                  -col=Time,ForwardPower  -graph=line,vary \
                  -endp  \
                  -col=Time,ReflectPower \
                  -graph=line,vary \
                  \"-title=Reflect Power Waveforms\" &
                if {$EPS || $PNG} {
                    set filename $figureDir/ITS_WaveGuide-000.$type
                    set lastFile [lindex [lsort -decreasing [glob -nocomplain $figureDir/ITS_WaveGuide-*.$type]] 0]
                    if [string length $lastFile] {
                        set num [scan [file tail $lastFile] ITS_WaveGuide-%ld]
                        set num [expr $num +1]
                        set filename $figureDir/ITS_WaveGuide-[format %03d $num].$type
                    }
                    eval exec sddsplot $files -limits=xminimum=$xstart,xmaximum=$xend  -leg=file,edit=%/.sdds.proc// -layout=1,2 \
                      -scale=$xstart,$xend,0,0 \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      \"-title=Forward Power Waveforms\" \
                      -col=Time,ForwardPower  -graph=line,vary \
                      -endp  \
                      -col=Time,ReflectPower \
                      -graph=line,vary \
                      \"-title=Reflect Power Waveforms\" -device=$device -output=$filename 
                }
            }
            ITS_GunProbe {
                eval exec sddsplot $files  -limits=xminimum=$xstart,xmaximum=$xend -leg=file,edit=%/.sdds.proc// -layout=1,2  \
                  -scale=$xstart,$xend,0,0 \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                   \"-title=Cathode Cell Probe Waveforms\" \
                  -col=Time,CathodCellProbe  -graph=line,vary \
                  -endp  \
                  -col=Time,FullCellProbe \
                  -graph=line,vary \
                  \"-title=Full Cell Probe Waveforms\" &
                if {$EPS || $PNG} {
                    set filename $figureDir/ITS_GunProbe-000.$type
                    set lastFile [lindex [lsort -decreasing [glob -nocomplain $figureDir/ITS_GunProbe-*.$type]] 0]
                    if [string length $lastFile] {
                        set num [scan [file tail $lastFile] ITS_GunProbe-%ld]
                        set num [expr $num +1]
                        set filename $figureDir/ITS_GunProbe-[format %03d $num].$type
                    }
                    eval exec sddsplot $files  -limits=xminimum=$xstart,xmaximum=$xend -leg=file,edit=%/.sdds.proc// -layout=1,2  \
                      -scale=$xstart,$xend,0,0 \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      \"-title=Cathode Cell Probe Waveforms\" \
                      -col=Time,CathodCellProbe  -graph=line,vary \
                      -endp  \
                      -col=Time,FullCellProbe \
                      -graph=line,vary \
                      \"-title=Full Cell Probe Waveforms\" -device=$device -output=$filename
                }
            }
            PMT {
                eval exec sddsplot -leg=file,edit=%/.sdds.proc//  \
                   -grap=line,vary \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                   \"-title=ITS PMT Waveforms\" \
                  -col=Time,PMT $files &
                if {$EPS || $PNG} {
                    set filename $figureDir/PMT-000.$type
                    set lastFile [lindex [lsort -decreasing [glob -nocomplain $figureDir/PMT-*.$type]] 0]
                    if [string length $lastFile] {
                        set num [scan [file tail $lastFile] PMT-%ld]
                        set num [expr $num +1]
                        set filename $figureDir/PMT-[format %03d $num].$type
                    }
                    eval exec sddsplot $files   -leg=file,edit=%/.sdds.proc//  \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      \"-title=ITS PMT Waveforms\" \
                      -col=Time,PMT -endp -grap=line,vary -device=$device -output=$filename
                }
            }
	}
    } else {
        switch $plotData {
            ITS_RF {
                exec sddsplot -limits=xminimum=$xstart,xmaximum=$xend -leg \
                  -scale=$xstart,$xend,0,0 \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  -title=@TimeStamp,scale=0.6 \
                  $files  \
                  -topline=@RFGFPWRString,scale=0.5 \
                  -string=@RFGHTRPWRString,p=0.1,q=0.90 \
                  -string=@RFGSupplyTempString,p=0.1,q=0.85 \
                  -string=@RFGReturnTempString,p=0.1,q=0.80 \
                  "-col=Time,*Power" -graph=line,vary & 
                if {$EPS || $PNG} {
                    exec sddsplot -limits=xminimum=$xstart,xmaximum=$xend -leg \
                      -scale=$xstart,$xend,0,0 \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      -title=@TimeStamp,scale=0.6 \
                      $files  \
                      -topline=@RFGFPWRString,scale=0.5 \
                      -string=@RFGHTRPWRString,p=0.1,q=0.90 \
                      -string=@RFGSupplyTempString,p=0.1,q=0.85 \
                      -string=@RFGReturnTempString,p=0.1,q=0.80 \
                      "-col=Time,*Power" -graph=line,vary -device=$device -output=$figureDir/ITS_RF_${ext}.$type
                }
            }
            ITS_WaveGuide {
                 exec sddsplot -limits=xminimum=$xstart,xmaximum=$xend -leg \
                  -scale=$xstart,$xend,0,0 \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  -title=@TimeStamp,scale=0.6 \
                  -string=@WGTempString,p=0.1,q=0.90 \
                  -string=@WGGateString,p=0.1,q=0.85 \
                  -string=@WGRepRateString,p=0.1,q=0.8 \
                  $files  \
                  -topline=@WGPowerString,scale=0.5 \
                  "-col=Time,*Power" -graph=line,vary &
                if {$EPS || $PNG} {
                   exec sddsplot -limits=xminimum=$xstart,xmaximum=$xend -leg \
                     -scale=$xstart,$xend,0,0 \
                     -subticksettings=xdivisions=5,ydivisions=5 \
                     -title=@TimeStamp,scale=0.6 \
                     -string=@WGTempString,p=0.1,q=0.90 \
                     -string=@WGGateString,p=0.1,q=0.85 \
                     -string=@WGRepRateString,p=0.1,q=0.8 \
                     $files  \
                     -topline=@WGPowerString,scale=0.5 \
                     "-col=Time,*Power" -graph=line,vary -device=$device -output=$figureDir/${ext}.$type 
                    
                }
            }
            ITS_GunProbe {
                
                exec sddsplot -limits=xminimum=$xstart,xmaximum=$xend -leg \
                  -scale=$xstart,$xend,0,0 \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  -title=@TimeStamp,scale=0.6 \
                  -string=@WGTempString,p=0.1,q=0.90 \
                  -string=@WGGateString,p=0.1,q=0.85 \
                  -string=@WGRepRateString,p=0.1,q=0.8 \
                  $files  \
                  -topline=@WGPowerString,scale=0.5 \
                  "-col=Time,*Probe" -graph=line,vary &
                if {$EPS || $PNG} {
                    exec sddsplot -limits=xminimum=$xstart,xmaximum=$xend -leg \
                      -scale=$xstart,$xend,0,0 \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      -title=@TimeStamp,scale=0.6 \
                      -string=@WGTempString,p=0.1,q=0.90 \
                      -string=@WGGateString,p=0.1,q=0.85 \
                      -string=@WGRepRateString,p=0.1,q=0.8 \
                      $files  \
                      -topline=@WGPowerString,scale=0.5 \
                      "-col=Time,*Probe" -graph=line,vary -device=$device -output=$figureDir/${ext}.$type
                }
            }
            ICT -
            BendFC -
            StraightFC {
                set pars [exec sddsquery -par $files]
                if [lsearch -exact $pars "FCType"]>=0 {
                    set FCType [exec sdds2stream -par=FCType $files]
                    set title "$FCType"
                } else {
                    set title "FC"
                }
                exec sddsplot $files -layout=1,2 -graph=line,vary "-topline=@TimeStamp" \
                  -subticksettings=xdivisions=5,ydivisions=5 \
                  -col=Time,ICTcurrent -leg=spec=ICT \
                  -param=ICTcurrentPeakTime,ICTcurrentPeak \
                  -graph=symb,sca=3,type=0,sub=2 "-leg=spec=ICT Peak" \
                  -string=@ICTcurrentPeakString,p=0.55,q=0.45,scale=0.9 \
                  -string=@ICTIntegString,p=0.55,q=0.15,scale=0.9 \
                  "-title=FC and ICT Baseline Subtracted Waveforms and Integrals" -end \
                  -col=Time,FCcurrent  -leg=spec=FC \
                  -string=@FCIntegString,p=0.55,q=0.15,scale=0.9 \
                  -param=FCcurrentPeakTime,FCcurrentPeak  \
                  -graph=symb,sca=3,type=1,sub=3 "-leg=spec=FC Peak" \
                  -string=@FCcurrentPeakString,p=0.55,q=0.35,scale=0.9 \
                  "-title=$title Baseline Subtracted Waveforms and Integrals" &
                if {$EPS || $PNG} {
                    exec sddsplot $files -layout=1,2 -graph=line,vary "-topline=@TimeStamp" \
                      -subticksettings=xdivisions=5,ydivisions=5 \
                      -col=Time,ICTcurrent -leg=spec=ICT \
                      -param=ICTcurrentPeakTime,ICTcurrentPeak \
                      -graph=symb,sca=3,type=0,sub=2 "-leg=spec=ICT Peak" \
                      -string=@ICTcurrentPeakString,p=0.55,q=0.45,scale=0.9 \
                      -string=@FCIntegString,p=0.55,q=0.15,scale=0.9 \
                      "-title=FC and ICT Baseline Subtracted Waveforms and Integrals" -end \
                      -col=Time,FCcurrent  -leg=spec=FC \
                      -string=@FCIntegString,p=0.55,q=0.15,scale=0.9 \
                      -param=FCcurrentPeakTime,FCcurrentPeak  \
                      -graph=symb,sca=3,type=1,sub=3 "-leg=spec=FC Peak" \
                      -string=@FCcurrentPeakString,p=0.55,q=0.35,scale=0.9 \
                      "-title=$title Baseline Subtracted Waveforms and Integrals" \
                      -device=$device -output=$figureDir/ITS_current_${ext}.$type
                    
                }
            }
            PMT {
                exec  sddsplot $files -col=Time,PMT -leg "-title=ITS PMT current" -subticksettings=xdivisions=5,ydivisions=5  &
                if {$EPS || $PNG} {
                    exec  sddsplot $files -col=Time,PMT -leg "-title=ITS PMT current" -subticksettings=xdivisions=5,ydivisions=5 \
                      -device=$device -output=$figureDir/PMT_${ext}.$type
                }
            }
            
        }
    }
    
}
proc PlotWaveform {args} {
    global EPS PNG xstart xend plotData plotFiles
    
    switch $plotData {
	ICT -
        BendFC -
        StraightFC -
        PMT  {
	    set dir /home/helios/oagData/ITS/cmData
	    set prefix ""
	}
	ITS_RF {
	    set dir /home/helios/oagData/ITS/gunRF
	    set prefix ""
	   # set xend 2.5
	}
        ITS_WaveGuide {
            set dir /home/helios/oagData/ITS/ITS_WaveGuide_Probe
            set prefix WaveGuidePower
        }
        ITS_GunProbe {
            set dir /home/helios/oagData/ITS/ITS_WaveGuide_Probe
            set prefix GunProbe
        }
    }
    cd $dir
    global files 
    set files [lsort -decreasing [glob -nocomplain ${prefix}*.sdds.proc]]
    if ![llength $files] {
        SetStatus "No data found for $plotData in $dir."
        return
    }
    set plotFiles ""
    APSScrolledListWindow .its -name "Select files for plot" \
	-label "Select Files for plot." -callback "PlotCallback"  \
	-itemList $files  -selectionVar plotFiles 
    APSDialogBoxAddButton .delete -parent .its -text "Delete" -command "DeleteFiles -dataDir $dir"
    tkwait variable plotFiles
    if ![llength $plotFiles] {
	SetStatus "no files chosen for plot."
	return
    }
    #PlotFile  -files $plotFiles
}

proc SetStatus {text} {
    global status
    set status "$text"
    update
}

proc SetupDMUscopeMux {args} {
    global dataType
    if [regexp {ICT} $dataType] {
	SetStatus "No need to switch DMU mux for current waveform."
	return
    }
    SetStatus "switching DMU mux to $dataType"
    if [catch {exec sddscasr -restore /home/helios/oagData/ITS/gun_initialize.sdds } result] {
	return -code error $result
    }
    after 1000
    if [regexp {ITS} $dataType] {
	exec cavput -list=LTS:MTM:EDM1:chan1SelReqMO=1,LTS:MTM:EDM1:chan2SelReqMO=2
	exec cavput -list=LTS:MTM:EDM1:chan1SelReqMO=0,LTS:MTM:EDM1:chan2SelReqMO=0
	exec cavput -list=LTS:MTM:EDM1:chan1SelReqMO=1,LTS:MTM:EDM1:chan2SelReqMO=2
    } elseif [regexp {Linac} $dataType] {
	exec cavput -list=L1:MTM:EDM2:chan1SelReqMO=3,L1:MTM:EDM2:chan2SelReqMO=4
	exec cavput -list=L1:MTM:EDM2:chan1SelReqMO=0,L1:MTM:EDM2:chan2SelReqMO=0
	exec cavput -list=L1:MTM:EDM2:chan1SelReqMO=3,L1:MTM:EDM2:chan2SelReqMO=4
    }
    after 2000
    SetStatus "done."
}

proc AcquireITSCurrentWaveform {args} {
    set subDir ""
    APSParseArguments {subDir}
    global archiveDir dataType scalarsFile ictTurns cableImpedance droopFactor
    SetStatus "Collecting ITS data..."
    set dir /home/helios/oagData/$subDir
    set ext [clock format [clock seconds] -format %Y-%j-%m%d-%H%M%S]
    set chanList [exec sdds2stream -col=ChannelName $archiveDir/its.wmon]
    set nameList [exec sdds2stream -col=WaveformName $archiveDir/its.wmon]
    set option -rename=col
    foreach chan $chanList name $nameList {
        append option ,${chan}=$name
    }
    if [catch {exec getTek5000BScopeData -filename $dir/$ext.sdds } result] {
        return -code error "Error reading scope data: $result"
    }
    if [catch {exec cavget -list=LTS:BM1:CurrentAO -pend=10} BMcurrent] {
        return -code error "Error reading LTS:BM1:CurrentAO: $BMcurrent"
    }
    
    if {$BMcurrent>0} {
        #set option1 -rename=col,BendFCcurrent=FCcurrent
        set FCType BendlineFC
        set option1 "-redefine=col,FCcurrent,BendFCcurrent"
    } else {
       # set option1 -rename=col,StraightFCcurrent=FCcurrent
        set option1 "-redefine=col,FCcurrent,StraightFCcurrent"
        set FCType StraightFC
    }
    #time waveform is in microseconds (us), current (ICTcurrent and FCcurrent) waveforms are in Volts units (original time units is s)
    if [catch {exec sddsconvert $dir/$ext.sdds $option -pipe=out \
                 | sddsprocess -pipe $option1 \
                 | sddsbaseline  -pipe -col=ICTcurrent,FCcurrent -select=endpoints=10 -method=average \
                 | sddsprocess -pipe \
                 -redefine=par,BMcurrent,$BMcurrent \
                 "-reprint=par,FCType,$FCType" \
                 "-redefine=par,ICTturns,$ictTurns,type=long" \
                 "-redefine=par,CableImpedance,$cableImpedance" \
                 "-redefine=par,DroopFactor,$droopFactor" \
                 -process=ICTcurrent,integ,ICTInteg,functionOf=Time \
                 -process=FCcurrent,integ,FCInteg,functionOf=Time \
                 | sddsprocess -pipe "-redefine=par,ICTInteg,ICTInteg 5 /" \
                 | sddsprocess -pipe \
                 "-redefine=param,Charge,ICTInteg ${ictTurns} * ${cableImpedance} / 1.0e3 * ${droopFactor} *,units=nC" \
                 "-redefine=param,ICTInteg,ICTInteg 1.0e12 *,units=pC" \
                 "-print=param,ChargeString,ICT Charge = %0.2e %s,Charge,Charge.units" \
                 "-print=param,ICTIntegString,ICT Integ = %0.2e %s,ICTInteg,ICTInteg.units" \
                 "-redefine=param,FCInteg,FCInteg 1.0e12 *,units=pVs" \
                 "-redefine=col,Current,FCcurrent FCInteg / Charge * 1000.0 *,units=mA" \
                 -process=Current,integ,CurrentInteg,functionOf=Time \
                 "-redefine=param,ChargeFromCurrent,CurrentInteg 1000.0 / 1.0e3 *,units=nC" \
                 "-print=param,FCIntegString,FC Integ = %0.2e %s,FCInteg,FCInteg.units" \
                 | sddsprocess -pipe \
                 "-redefine=col,Time,Time 1.0e3 *,units=ms" \
                 | sddssmooth -pipe \
                 -col=Current -points=3 -passes=5 \
                 | sddsprocess -pipe=in $dir/$ext.sdds.proc \
                 -process=ICTcurrent,minimum,ICTcurrentPeak \
                 -process=ICTcurrent,minimum,ICTcurrentPeakTime,functionOf=Time,position \
                 "-print=param,ICTcurrentPeakString,ICT Peak = %0.2e %s,ICTcurrentPeak,ICTcurrentPeak.units" \
                 -process=FCcurrent,minimum,FCcurrentPeak \
                 -process=FCcurrent,minimum,FCcurrentPeakTime,functionOf=Time,position \
                 "-print=param,FCcurrentPeakString,FC Peak = %0.2e %s,FCcurrentPeak,FCcurrentPeak.units" \
		   -process=Current,minimum,CurrentPeak \
                 -process=Current,minimum,CurrentPeakTime,functionOf=Time,position \
                 "-print=param,CurrentPeakString,Peak Current = %0.2e %s,CurrentPeak,CurrentPeak.units"} result] {
	return -code error "Error in processing ICT/FC data: $result"
    }
    
    exec sddsplot $dir/$ext.sdds.proc -layout=1,2 -graph=line,vary "-topline=@TimeStamp" \
      -subticksettings=xdivisions=5,ydivisions=5 \
      -col=Time,ICTcurrent -leg=spec=ICT \
      -param=ICTcurrentPeakTime,ICTcurrentPeak \
      -graph=symb,sca=3,type=0,sub=2 "-leg=spec=ICT Peak" \
      -string=@ICTcurrentPeakString,p=0.55,q=0.45,scale=0.9 \
      -string=@ICTIntegString,p=0.55,q=0.15,scale=0.9 \
      "-title=ICT Baseline Subtracted Waveforms and Integrals" -end \
      -col=Time,FCcurrent  -leg=spec=FC \
      -string=@FCIntegString,p=0.55,q=0.15,scale=0.9 \
      -param=FCcurrentPeakTime,FCcurrentPeak  \
      -graph=symb,sca=3,type=1,sub=3 "-leg=spec=FC Peak" \
      -string=@FCcurrentPeakString,p=0.55,q=0.35,scale=0.9 \
      "-title=$FCType Baseline Subtracted Waveforms and Integrals" &
    exec sddsplot $dir/$ext.sdds.proc -col=Time,PMT -leg "-title=ITS PMT current" \
        -subticksettings=xdivisions=5,ydivisions=5 &
    SetStatus "done.."
    global EPS PNG
    if {$EPS || $PNG} {
	global figureDir
        if [winfo exist .fig] {
            destroy .fig
        }
        APSDialogBox .fig -name "Directory for figures" 
        APSLabeledEntry .dir -parent .fig.userFrame -label "Directory for saving figures:"  \
	    -textVariable figureDir -width 70
        APSButton .daily -parent .fig.userFrame.dir -text "daily" -size small \
	    -command "set figureDir [APSGoToDailyDirectory]"
        tkwait window .fig
	if $EPS {
	    set output $figureDir/ITS_current_$ext.eps
            set output1 $figureDir/ITS_PMT_$ext.eps
	    set device ceps
	} elseif $PNG {
	    set output $figureDir/ITS_current-$ext.png
            set output1 $figureDir/ITS_PMT_$ext.png
	    set device png
	}
	exec  sddsplot $dir/$ext.sdds.proc -layout=1,2 -graph=line,vary "-topline=@TimeStamp" \
          -subticksettings=xdivisions=5,ydivisions=5 \
          -col=Time,ICTcurrent -leg=spec=ICT \
          -param=ICTcurrentPeakTime,ICTcurrentPeak \
          -graph=symb,sca=3,type=0,sub=2 "-leg=spec=ICT Peak" \
          -string=@ICTcurrentPeakString,p=0.55,q=0.45,scale=0.9 \
          -string=@ICTIntegString,p=0.55,q=0.15,scale=0.9 \
          "-title=FC and ICT Baseline Subtracted Waveforms and Integrals" -end \
          -col=Time,FCcurrent  -leg=spec=FC \
          -string=@FCIntegString,p=0.55,q=0.15,scale=0.9 \
          -param=FCcurrentPeakTime,FCcurrentPeak  \
          -graph=symb,sca=3,type=1,sub=3 "-leg=spec=FC Peak" \
          -string=@FCcurrentPeakString,p=0.55,q=0.35,scale=0.9 \
          "-title=$FCType Baseline Subtracted Waveforms and Integrals" \
          -output=$output \
          -dev=$device,onwhite
        exec sddsplot $dir/$ext.sdds.proc -col=Time,PMT -leg "-title=ITS PMT current" \
            -subticksettings=xdivisions=5,ydivisions=5 -output=$output1 -dev=$device,onwhite
        
     
    }
}


proc AcquireWaveform {args} {
    global archiveDir dataType scalarsFile subDir

    if {$dataType!="ITS_WaveGuide_Probe"} {
        if [catch {SetupDMUscopeMux} result] {
            SetStatus $result
            return
        }
    }
    switch $dataType {
	ITS_ICT_FC {
	    if [catch { AcquireITSCurrentWaveform -subDir $subDir} result] {
		SetStatus  "Error in collecting ITS current waveform: $result"
		return
	    }
	}
	ITS_RF {
	    if [catch {AcquireITSGunRFWaveform -subDir $subDir} result] {
		SetStatus  "Error in collecting ITS RF gun waveform: $result"
		return
	    }
	}
        ITS_WaveGuide_Probe {
            if [catch {AcquireITSGunProbesWaveform -subDir $subDir} result] {
                SetStatus "Error in collecting ITS PC gun data: $result"
                return
            }
        }
    }
   # SetStatus "done."
}

proc AcquireITSGunProbesWaveform {args} {
    set subDir ""
    APSParseArguments {subDir}
    global archiveDir xstart xend
    set scalarsFile /home/helios/oagData/ITS/ITSGun.scalars
    set dir /home/helios/oagData/$subDir
    SetStatus "switching DMU mux to ITS waveguide..."
   # if [catch {exec sddscasr -restore /home/helios/oagData/ITS/gun_initialize.sdds } result] {
#	return -code error $result
 #   }
  #  if [catch {exec cavput -list=LI:MON:GPIBenableBO=Remote,LI:MON:singleSeqBO=RUNSTOP,LI:MON:stopReadRunMO=3 -pend=10} result] {
   #     return -code error "AcquireITSGunProbesWaveform1: error in setup scope: $result"
   # }
   # after 2000
    set ext [clock format [clock seconds] -format %Y-%j-%m%d-%H%M%S]
    set file1 $dir/WaveGuidePower${ext}.sdds
    set file2 $dir/GunProbe${ext}.sdds
    if [catch {exec cavput -list=LTS:PT3:DC1ARF.AQWF=1,LTS:PT3:DC1BRF.AQWF=1,LTS:PT2:DC1ARF.AQWF=1,LTS:PT2:DC1BRF.AQWF=1 -pend=10} result] {
        return -code error $result
    }
    if [catch {exec sddswmonitor -pv=LTS:PT3:DC1ARF.TMFP,LTS:PT3:DC1ARF.PWFP,LTS:PT3:DC1BRF.PWFP -scalars=$scalarsFile -pend=20 -step=1 $file1 } result] {
        return -code error "Error reading waveguide waveform data: $result"
    }
    if [catch {exec sddswmonitor -pv=LTS:PT2:DC1ARF.TMFP,LTS:PT2:DC1ARF.PWFP,LTS:PT2:DC1BRF.PWFP -scalars=$scalarsFile -pend=20 -step=1 $file2 } result] {
        return -code error "Error reading gun probe waveform data: $result"
    }
    set peak1 [exec sddsprocess $file1 -pipe=out -process=LTS:PT3:DC1ARF.PWFP,max,PeakPower -process=LTS:PT3:DC1ARF.PWFP,ave,AvePower \
                 | sddsprocess -pipe "-define=par,Peak,PeakPower AvePower -" \
                 | sdds2stream -pipe -par=Peak]
    set peak2 [exec sddsprocess $file2 -pipe=out -process=LTS:PT2:DC1ARF.PWFP,max,PeakPower -process=LTS:PT2:DC1ARF.PWFP,ave,AvePower \
                 | sddsprocess -pipe "-define=par,Peak,PeakPower AvePower -" \
                 | sdds2stream -pipe -par=Peak]
    set peak3 [exec sddsprocess $file2 -pipe=out -process=LTS:PT2:DC1BRF.PWFP,max,PeakPower -process=LTS:PT2:DC1BRF.PWFP,ave,AvePower \
                 | sddsprocess -pipe "-define=par,Peak,PeakPower AvePower -" \
                 | sdds2stream -pipe -par=Peak]
    if {$peak1>0.01} {
        #there is signal the epics waveform works, otherwise does not
		
        #if [catch {exec cavput "-list=LI:MON:scopeCh1MuxMO=Ch#1 ITS,LI:MON:scopeCh2MuxMO=Ch#2 ITS,LTS:MTM:EDM1:chan1SelReqMO=TstRm Pt3 Fwd,LTS:MTM:EDM1:chan2SelReqMO=TstRm Pt3 Refl" -pend=30} result] {
        #    return -code error "AcquireITSGunProbesWaveform1: error in setup mux1: $result"
        #}
        if [catch {exec sddscasr -restore /home/helios/oagData/ITS/ITSWaveGuideScope.setup -pend=60} result] {
            return -code error "Error in setuping ITS waveguid mux: $result"
        }
        after 5000
        
        SetStatus "Collecting wave guide data..."    
       # if [catch {exec cavput -list=LI:MON:GPIBenableBO=Local -pend=10} result] {
       #     return -code error "Error in disconnect EPICS with scope: $result"
       # }
        if [catch {exec getTek5000BScopeData -filename $file1.1 -channelList "1 2" -instrument tekdpo4} result] {
            return -code error "Error in reading scope tekdpo4 data: $result"
        }
        if [catch {exec sddsxref $file1.1 $file1 -leave=* -transfer=par,* $file1.2} result] {
            return -code error "Error in transfering parameters: $result"
        }
        exec mv $file1.2 $file1
        catch  {exec rm $file1.1 ${file1}~}
        set renameopt -rename=col,Channel1=ForwardPower,Channel2=ReflectPower
        set timefactor 1.0e6
    } else {
        set renameopt  -rename=col,LTS:PT3:DC1ARF.TMFP=Time,LTS:PT3:DC1ARF.PWFP=ForwardPower,LTS:PT3:DC1BRF.PWFP=ReflectPower
        set timefactor 1.0
    }
    if [catch {exec sddsconvert $file1 -pipe=out $renameopt \
                 | sddsprocess -pipe \
                 "-redefine=col,Time,Time $timefactor *,symbol=Time,units=\$gm\$rs" \
                 -process=ForwardPower,max,PeakPower \
                 "-redefine=param,K3RFForwardPower,K3RFForwardPower 1.0e6 /,units=MW" \
                 "-redefine=param,K3RFReflectedPower,K3RFReflectedPower 1.0e6 /,units=MW" \
                 | sddsprocess -pipe \
                 "-reprint=par,WGPowerString,ITS Waveguide Peak FWD Power = %0.2f MW  Reflected Power = %0.2f MW,K3RFForwardPower,K3RFReflectedPower" \
                 "-reprint=par,WGTempString,Run H2O Supply Temp = %0.2f %s,GunWaterTemp,GunWaterTemp.units" \
                 "-reprint=par,WGGateString,Gate Start = %.2f    Gate Width=%.2f,GateStart,GateWidth" \
                 "-reprint=par,WGRepRateString,Rep Rate = %.0f,RepRate" \
                 | sddsprocess -pipe=in $file1.proc \
                 "-redefine=col,ForwardPower,ForwardPower PeakPower 1.0e-6 + / K3RFForwardPower *,symbol=FWD Power,units=MW" \
                 "-redefine=col,ReflectPower,ReflectPower PeakPower 1.0e-6 + / K3RFForwardPower *,symbol=REF Power,units=MW" } result] {
        return -code error "AcquireITSGunProbesWaveform4: error in sddsprocess waveguid file: $result"
    }
    
    if {$peak2>0.01 || $peak3>0.01} {
        if [catch {exec sddscasr -restore /home/helios/oagData/ITS/ITSGunProbeScope.setup -pend=60} result] {
            return -code error "Error in setuping ITS gun probe mux: $result"
        }
        after 5000
        
        SetStatus "Collecting gun probe data..."    
      #  if [catch {exec cavput -list=LI:MON:GPIBenableBO=Local -pend=10} result] {
      #      return -code error "Error in disconnect EPICS with scope: $result"
      #  }
        if [catch {exec getTek5000BScopeData -filename $file2.1 -channelList "1 2" -instrument tekdpo4} result] {
            return -code error "Error reading tekdpo4 scope data: $result"
        }
        if [catch {exec sddsxref $file2.1 $file2 -leave=* -transfer=par,* $file2.2} result] {
            return -code error "Error in transfering parameters: $result"
        }
        exec mv $file2.2 $file2
        catch {exec rm $file2.1 ${file2}~ }
        set renameopt -rename=col,Channel1=CathodCellProbe,Channel2=FullCellProbe
        set timefactor 1.0e6
    } else {
        set renameopt  -rename=col,LTS:PT2:DC1ARF.TMFP=Time,LTS:PT2:DC1ARF.PWFP=CathodCellProbe,LTS:PT2:DC1BRF.PWFP=FullCellProbe
        set timeopt "-redefine=col,Time,Time,symbol=Time,units=\$gm\$rs"
        set timefactor 1.0
    }
    
    if [catch {exec sddsconvert $file2 -pipe=out \
                 $renameopt  \
                 | sddsprocess -pipe \
                  "-redefine=col,Time,Time $timefactor *,symbol=Time,units=\$gm\$rs"  \
                 -process=CathodCellProbe,max,PeakPower \
                 "-redefine=param,CathodeProbePower,CathodeProbePower 1.0e6 /,units=MW" \
                 | sddsprocess -pipe \
                 "-reprint=par,WGRepRateString,Rep Rate = %.0f,RepRate" \
                 "-reprint=par,WGPowerString,Cathode Probe Power = %.2f MW,CathodeProbePower" \
                 "-reprint=par,WGTempString,Run H2O Supply Temp = %0.2f %s,GunWaterTemp,GunWaterTemp.units" \
                 "-reprint=par,WGGateString,Gate Start = %.2f    Gate Width=%.2f,GateStart,GateWidth" \
                 | sddsprocess -pipe=in $file2.proc \
                 "-redefine=col,CathodCellProbe,CathodCellProbe PeakPower 1.0e-6 + / CathodeProbePower *,symbol=CathodeCell Probe,units=MW" \
                 "-redefine=col,FullCellProbe,FullCellProbe PeakPower 1.0e-6 + / CathodeProbePower *,symbol=FullCell Probe,units=MW" } result] {
        return -code error "AcquireITSGunProbesWaveform5: error in sddsprocess gun probe file: $result"
    }
   
    SetStatus "done."
    exec sddsplot  -leg \
      -subticksettings=xdivisions=5,ydivisions=5 \
         -scale=$xstart,$xend,0,0 \
      -title=@TimeStamp,scale=0.6 \
      -string=@WGTempString,p=0.1,q=0.90 \
      -string=@WGGateString,p=0.1,q=0.85 \
      -string=@WGRepRateString,p=0.1,q=0.8 \
      $file1.proc  \
      -topline=@WGPowerString,scale=0.5 \
      "-col=Time,*Power" -graph=line,vary &

     exec sddsplot  -leg \
      -subticksettings=xdivisions=5,ydivisions=5 \
          -scale=$xstart,$xend,0,0 \
      -title=@TimeStamp,scale=0.6 \
      -string=@WGTempString,p=0.1,q=0.90 \
      -string=@WGGateString,p=0.1,q=0.85 \
      -string=@WGRepRateString,p=0.1,q=0.8 \
      $file2.proc  \
      -topline=@WGPowerString,scale=0.5 \
      "-col=Time,*Probe" -graph=line,vary &
    return
}

proc ChangeXStopAndSubDir {args} {
    set value ""
    APSParseArguments {value}
    global xend subDir dataType
    set xend $value
    switch $dataType {
	ITS_ICT_FC {
	    set subDir ITS/cmData
	}
	ITS_RF {
	    set subDir ITS/gunRF
	}
        ITS_WaveGuide_Probe {
            set subDir ITS/ITS_WaveGuide_Probe
        }
    }
}

set status ""
APSApplication . -name AcquireITSWaveforms -version $CVSRevisionAuthor \
    -overview {This utility is for acquring and process ICTFC waveforms}
APSScrolledStatus .status  -parent .userFrame  -textVariable status -width 100 \
  -height 4 -withButtons 1 -packOption "-fill x"

set archiveDir /home/helios/oagData/ITS/
set ictScopeChannel Ch1
set fcScopeChannel Ch3
set ictTurns 10.0
set cableImpedance 50.0
set droopFactor 1.1
set plotOnly 0
set scalarsFile /home/helios/oagData/ITS/ITS_LinacRFGun_scalars.mon

set dataType ITS_ICT_FC
set subDir ITS/cmData
APSRadioButtonFrame .sel -parent .userFrame -label "Collect data for?" -buttonList {ITS_ICT_FC_PMT ITS_RFWf ITS_WaveGuide_Probe_RF} \
    -valueList {ITS_ICT_FC ITS_RF ITS_WaveGuide_Probe} -variable dataType -orientation horizontal \
    -commandList {"ChangeXStopAndSubDir -value 2.0" "ChangeXStopAndSubDir -value 2.0" "ChangeXStopAndSubDir -value 6.0"}
APSButton .acq1 -parent .userFrame.sel  -text "Acquire Waveform" -command "AcquireWaveform"  -highlightColor blue -highlight 1
set plotData ICT

set width 30
APSFrameGrid .grid -parent .userFrame -xList {x1 x2}
set w1 .userFrame.grid.x1
set w2 .userFrame.grid.x2
APSLabeledEntry .ictturns -parent $w1 -label "ICT turns:" -textVariable ictTurns \
  -width $width
APSLabeledEntry .cable -parent $w2 -label "Cable impedance:" -textVariable cableImpedance \
  -width $width
APSLabeledEntry .factor -parent $w1 -label "Droop factor:" -textVariable droopFactor \
  -width $width
#APSRadioButtonFrame .plot -parent $w2 -label "Plot only?" -buttonList {Yes No} \
#  -valueList {1 0} -variable plotOnly -orientation horizontal
set EPS 0
set PNG 0
APSCheckButtonFrame .fig1 -parent $w2 -label "Creat EPS/PNG files?"  -buttonList {EPS PNG} \
    -variableList {EPS PNG} -orientation horizontal

set xstart -0.5
set xend 4.0

APSLabeledEntry .xstart -parent $w1 -label "X-axis start:" -width $width -textVariable xstart
APSLabeledEntry .xend -parent $w2 -label "X-axis stop:" -width $width -textVariable xend

APSRadioButtonFrame .plot -parent .userFrame -label "Plot data for?" -buttonList {ICT BendFC StraightFC  PMT ITS_RF ITS_WaveGuide ITS_Probe} \
    -valueList {ICT BendFC StraightFC PMT ITS_RF ITS_WaveGuide ITS_GunProbe} -variable plotData -orientation horizontal 
APSButton .plot1 -parent .userFrame.plot -text "Plot" -command "PlotWaveform" -highlightColor purple -highlight 1

#APSButton .acq1 -parent .userFrame -text "Acquire Waveform" -command "AcquireWaveform"
#APSButton .plot1 -parent .userFrame -text "Plot" -command "PlotWaveform"
#APSButton .setup -parent .userFrame -text "Setup Mux" -command "SetupDMUscopeMux" 
set figureDir $env(HOME)
