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:
committed by
Douglas Clowes
parent
7a92bfb4dd
commit
355c204598
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user