Parameterise the wavelength/speed conversion functions so that you can choose velocity selector.

r3219 | ffr | 2011-06-20 10:03:50 +1000 (Mon, 20 Jun 2011) | 1 line
This commit is contained in:
Ferdi Franceschini
2011-06-20 10:03:50 +10:00
committed by Douglas Clowes
parent 7a92bfb4dd
commit 355c204598

View File

@@ -38,21 +38,38 @@ namespace eval ::scobj::velocity_selector {
# m_dTwistAngle degrees
# m_dTwistAngle m
# m_iMaxSpeed rpm
variable m_dTwistAngle
variable m_dLength
variable m_iMaxSpeed
variable rBeamCenter
variable VNeutron
variable blocked_speeds
set sim_mode [SplitReply [velsel_simulation]]
proc AngleSpeedToWavelength {angle VsVarSpeed} {
variable m_dTwistAngle
variable m_dLength
variable m_iMaxSpeed
variable rBeamCenter
variable VNeutron
proc AngleSpeedToWavelength {angle VsVarSpeed {velsel 0}} {
variable nvs40Par
variable nvs43Par
variable velsel_ID
if {$velsel == 40} {
set currVelsel "NVS40"
} elseif {$velsel == 43} {
set currVelsel "NVS43"
} else {
set currVelsel $velsel_ID
}
switch $currVelsel {
"NVS40" {
set m_dTwistAngle $nvs40Par(m_dTwistAngle)
set m_dLength $nvs40Par(m_dLength)
set m_iMaxSpeed $nvs40Par(m_iMaxSpeed)
set rBeamCenter $nvs40Par(rBeamCenter)
set VNeutron $nvs40Par(VNeutron)
}
"NVS43" {
set m_dTwistAngle $nvs43Par(m_dTwistAngle)
set m_dLength $nvs43Par(m_dLength)
set m_iMaxSpeed $nvs43Par(m_iMaxSpeed)
set rBeamCenter $nvs43Par(rBeamCenter)
set VNeutron $nvs43Par(VNeutron)
}
}
if {$VsVarSpeed < 3100} {
return -code error "Minimum speed is 3100 rpm"
@@ -69,12 +86,34 @@ namespace eval ::scobj::velocity_selector {
return [format "%#.5g" $lambda1]
}
proc WavelengthToSpeed {angle lambda1} {
variable m_dTwistAngle
variable m_dLength
variable m_iMaxSpeed
variable rBeamCenter
variable VNeutron
proc WavelengthToSpeed {angle lambda1 {velsel 0}} {
variable nvs40Par
variable nvs43Par
variable velsel_ID
if {$velsel == 40} {
set currVelsel "NVS40"
} elseif {$velsel == 43} {
set currVelsel "NVS43"
} else {
set currVelsel $velsel_ID
}
switch $currVelsel {
"NVS40" {
set m_dTwistAngle $nvs40Par(m_dTwistAngle)
set m_dLength $nvs40Par(m_dLength)
set m_iMaxSpeed $nvs40Par(m_iMaxSpeed)
set rBeamCenter $nvs40Par(rBeamCenter)
set VNeutron $nvs40Par(VNeutron)
}
"NVS43" {
set m_dTwistAngle $nvs43Par(m_dTwistAngle)
set m_dLength $nvs43Par(m_dLength)
set m_iMaxSpeed $nvs43Par(m_iMaxSpeed)
set rBeamCenter $nvs43Par(rBeamCenter)
set VNeutron $nvs43Par(VNeutron)
}
}
if {$lambda1 < 4.6125} {
return -code error "Minimum wavelength is 4.6125 Angstrom"
@@ -618,4 +657,10 @@ proc halt {root} {
makesctcontroller sct_velsel astvelsel $velsel_IP:$velsel_port "" 10
sct_velsel poll $statusPath $pollrate
}
namespace export AngleSpeedToWavelength
namespace export WavelengthToSpeed
}
namespace import ::scobj::velocity_selector::AngleSpeedToWavelength
namespace import ::scobj::velocity_selector::WavelengthToSpeed
publish AngleSpeedToWavelength user
publish WavelengthToSpeed user