Files
sics/site_ansto/instrument/hipd/config/commands/hvsteps.tcl
2015-03-13 11:54:50 +11:00

110 lines
2.9 KiB
Tcl

proc SetVoltPosStep {steps} {
# set llen 16384
# set steplen [expr{int($llen/(2*$steps))}]
# set phaselen
set l {}
for {set i 0} {$i < $steps} {incr i} {
lappend l [expr {($i*2.0/$steps)-1.0}]
}
for {set i $steps} {$i > 0} {incr i -1} {
lappend l [expr {($i*2.0/$steps)-1.0}]
}
set s "DATA VOLATILE, "
for {set i 0} {$i < [expr {[llength $l] -1}]} {incr i} {
append s [format "%1.3f" [lindex $l $i]] ","
}
append s [format "%1.3f" [lindex $l [expr {[llength $l] -1}]]]
sct_pulser send $s
broadcast $s
}
proc SetVoltBiStep {steps} {
set l {}
for {set i 0} {$i < $steps} {incr i} {
lappend l [expr {$i*1.0/$steps}]
}
for {set i $steps} {$i > [expr {$steps * -1}]} {incr i -1} {
lappend l [expr {$i*1.0/$steps}]
}
for {set i [expr {$steps * -1}]} {$i < 0} {incr i} {
lappend l [expr {$i*1.0/$steps}]
}
set s "DATA VOLATILE, "
for {set i 0} {$i < [expr {[llength $l] -1}]} {incr i} {
append s [format "%1.3f" [lindex $l $i]] ","
}
append s [format "%1.3f" [lindex $l [expr {[llength $l] -1}]]]
sct_pulser send $s
broadcast $s
}
proc VoltPosStep {volt freq voltsteps} {
PulserOff
newfile HISTOGRAM_XYT
SetVoltPosStep $voltsteps
sct_pulser send "VOLT:LOW [VoltScale 0.0]; LOW?"
sct_pulser send "VOLT:HIGH [VoltScale [expr {$volt*1.0}]]; HIGH?"
sct_pulser send "FREQ $freq;:FREQ?"
sct_pulser send "FUNC: USER VOLATILE"
sct_pulser send "FUNC USER"
}
proc UniZigTexture {motor mstart mstep mnum volt freq vstep binmult oscno} {
histmem mode unlimited
newfile HISTOGRAM_XYT
set bins [expr {$vstep * 2 * $binmult}]
histmem_period_strobo $freq $bins
wait 3
# set pulservolt [VoltScale [expr {$volt*1.0}]]
# set pulseroffs [VoltScale [expr {$volt*0.5}]]
VoltPosStep $volt $freq $vstep
PulserOn
for {set i 0} {$i < $mnum} {incr i} {
drive $motor [expr $i*$mstep+$mstart]
oct oscillate_count $oscno
oct oscillate start
hmm countblock
save $i
}
PulserOff
}
proc VoltBiStep {volt freq steps} {
PulserOff
newfile HISTOGRAM_XYT
SetVoltBiStep $steps
sct_pulser send "VOLT:LOW [VoltScale [expr {$volt*-1.0}]; LOW?"
sct_pulser send "VOLT:HIGH [VoltScale [expr {$volt*1.0}]; HIGH?"
sct_pulser send "FREQ $freq;:FREQ?"
sct_pulser send "FUNC: USER VOLATILE"
sct_pulser send "FUNC USER"
set bins [expr {$steps * 4}]
histmem_period_strobo $freq $bins
wait 3
PulserOn
oct oscillate_count $oscno
oct oscillate start
save 0
}
publish SetVoltPosStep user
publish SetVoltBiStep user
publish UniZigTexture user
publish VoltPosStep user
publish VoltBiStep user