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 degrees
|
||||||
# m_dTwistAngle m
|
# m_dTwistAngle m
|
||||||
# m_iMaxSpeed rpm
|
# m_iMaxSpeed rpm
|
||||||
variable m_dTwistAngle
|
|
||||||
variable m_dLength
|
|
||||||
variable m_iMaxSpeed
|
|
||||||
variable rBeamCenter
|
|
||||||
variable VNeutron
|
|
||||||
variable blocked_speeds
|
variable blocked_speeds
|
||||||
|
|
||||||
set sim_mode [SplitReply [velsel_simulation]]
|
set sim_mode [SplitReply [velsel_simulation]]
|
||||||
|
|
||||||
proc AngleSpeedToWavelength {angle VsVarSpeed} {
|
proc AngleSpeedToWavelength {angle VsVarSpeed {velsel 0}} {
|
||||||
variable m_dTwistAngle
|
variable nvs40Par
|
||||||
variable m_dLength
|
variable nvs43Par
|
||||||
variable m_iMaxSpeed
|
variable velsel_ID
|
||||||
variable rBeamCenter
|
|
||||||
variable VNeutron
|
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} {
|
if {$VsVarSpeed < 3100} {
|
||||||
return -code error "Minimum speed is 3100 rpm"
|
return -code error "Minimum speed is 3100 rpm"
|
||||||
@@ -69,12 +86,34 @@ namespace eval ::scobj::velocity_selector {
|
|||||||
return [format "%#.5g" $lambda1]
|
return [format "%#.5g" $lambda1]
|
||||||
}
|
}
|
||||||
|
|
||||||
proc WavelengthToSpeed {angle lambda1} {
|
proc WavelengthToSpeed {angle lambda1 {velsel 0}} {
|
||||||
variable m_dTwistAngle
|
variable nvs40Par
|
||||||
variable m_dLength
|
variable nvs43Par
|
||||||
variable m_iMaxSpeed
|
variable velsel_ID
|
||||||
variable rBeamCenter
|
|
||||||
variable VNeutron
|
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} {
|
if {$lambda1 < 4.6125} {
|
||||||
return -code error "Minimum wavelength is 4.6125 Angstrom"
|
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
|
makesctcontroller sct_velsel astvelsel $velsel_IP:$velsel_port "" 10
|
||||||
sct_velsel poll $statusPath $pollrate
|
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