Adding Gun device to numass
This commit is contained in:
parent
669766e816
commit
aab01f964f
@ -19,7 +19,7 @@ apply plugin: 'application'
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
||||||
if (!hasProperty('mainClass')) {
|
if (!hasProperty('mainClass')) {
|
||||||
ext.mainClass = 'inr.numass.control.gun.EGunApplicationkt'
|
ext.mainClass = 'inr.numass.control.gun.EGunApplication'
|
||||||
}
|
}
|
||||||
mainClassName = mainClass
|
mainClassName = mainClass
|
||||||
|
|
||||||
|
@ -25,8 +25,10 @@ import hep.dataforge.meta.Meta
|
|||||||
import hep.dataforge.meta.Metoid
|
import hep.dataforge.meta.Metoid
|
||||||
import hep.dataforge.names.Name
|
import hep.dataforge.names.Name
|
||||||
import hep.dataforge.optional
|
import hep.dataforge.optional
|
||||||
|
import inr.numass.control.DeviceView
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
@DeviceView(GunDisplay::class)
|
||||||
class EGun(context: Context, meta: Meta) : AbstractDevice(context, meta), DeviceHub, ContextAware, Metoid {
|
class EGun(context: Context, meta: Meta) : AbstractDevice(context, meta), DeviceHub, ContextAware, Metoid {
|
||||||
val sources: List<IT6800Device> by lazy {
|
val sources: List<IT6800Device> by lazy {
|
||||||
meta.getMetaList("source").map {IT6800Device(context, it) }
|
meta.getMetaList("source").map {IT6800Device(context, it) }
|
||||||
@ -37,4 +39,14 @@ class EGun(context: Context, meta: Meta) : AbstractDevice(context, meta), Device
|
|||||||
override fun optDevice(name: Name): Optional<Device> {
|
override fun optDevice(name: Name): Optional<Device> {
|
||||||
return sources.find { it.name == name.toString() }.optional
|
return sources.find { it.name == name.toString() }.optional
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun init() {
|
||||||
|
super.init()
|
||||||
|
sources.forEach { it.init() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun shutdown() {
|
||||||
|
sources.forEach { it.shutdown() }
|
||||||
|
super.shutdown()
|
||||||
|
}
|
||||||
}
|
}
|
@ -38,6 +38,6 @@ class EGunApplication: NumassControlApplication<EGun>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getDeviceMeta(config: Meta): Meta {
|
override fun getDeviceMeta(config: Meta): Meta {
|
||||||
return MetaUtils.findNode(config,"device"){it.getString("name") == "numass.gun"}.orElseThrow{RuntimeException("Gun configuration not found")}
|
return MetaUtils.findNode(config,"device"){it.getString("type") == "numass.gun"}.orElseThrow{RuntimeException("Gun configuration not found")}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,19 +16,58 @@
|
|||||||
|
|
||||||
package inr.numass.control.gun
|
package inr.numass.control.gun
|
||||||
|
|
||||||
|
import hep.dataforge.fx.asBooleanProperty
|
||||||
import hep.dataforge.fx.asDoubleProperty
|
import hep.dataforge.fx.asDoubleProperty
|
||||||
|
import inr.numass.control.DeviceDisplayFX
|
||||||
|
import inr.numass.control.indicator
|
||||||
|
import javafx.geometry.Orientation
|
||||||
import tornadofx.*
|
import tornadofx.*
|
||||||
|
|
||||||
class EGunView(gun: EGun) : View() {
|
class GunDisplay: DeviceDisplayFX<EGun>(){
|
||||||
|
override fun buildView(device: EGun): UIComponent? {
|
||||||
|
return EGunView(device)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class EGunView(val gun: EGun) : View() {
|
||||||
override val root = borderpane {
|
override val root = borderpane {
|
||||||
|
top{
|
||||||
|
buttonbar {
|
||||||
|
button("refresh"){
|
||||||
|
action {
|
||||||
|
gun.sources.forEach {
|
||||||
|
it.update()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
center {
|
center {
|
||||||
vbox {
|
vbox {
|
||||||
gun.sources.forEach { device ->
|
gun.sources.forEach { source ->
|
||||||
hbox {
|
hbox {
|
||||||
label(device.name)
|
label(source.name)
|
||||||
slider(range = 0.0..5.0, value = 0){
|
separator(Orientation.VERTICAL)
|
||||||
valueProperty().bindBidirectional(device.currentState.asDoubleProperty())
|
|
||||||
}
|
indicator {
|
||||||
|
bind(source.connected.asBooleanProperty())
|
||||||
|
}
|
||||||
|
|
||||||
|
val voltageProperty = source.voltageState.asDoubleProperty()
|
||||||
|
val currentProperty = source.currentState.asDoubleProperty()
|
||||||
|
|
||||||
|
textfield {
|
||||||
|
|
||||||
|
}
|
||||||
|
separator(Orientation.VERTICAL)
|
||||||
|
label("V: ")
|
||||||
|
label(voltageProperty)
|
||||||
|
|
||||||
|
separator(Orientation.VERTICAL)
|
||||||
|
|
||||||
|
label("I: ")
|
||||||
|
label(currentProperty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,7 @@ class IT6800Device(context: Context, meta: Meta) : AbstractDevice(context, meta)
|
|||||||
|
|
||||||
private var monitorJob: Job? = null
|
private var monitorJob: Job? = null
|
||||||
|
|
||||||
val connected get() = portHelper.connected
|
val connected get() = portHelper.connectedState
|
||||||
|
|
||||||
val address: Byte = meta.getValue("address", 0).number.toByte()
|
val address: Byte = meta.getValue("address", 0).number.toByte()
|
||||||
|
|
||||||
|
9
numass-control/gun/src/main/resources/config/devices.xml
Normal file
9
numass-control/gun/src/main/resources/config/devices.xml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
<config>
|
||||||
|
<device type="numass.gun">
|
||||||
|
<source name="bending" port="tcp::192.168.111.34:4001" />
|
||||||
|
<source name="focus" port="tcp::192.168.111.34:4002" />
|
||||||
|
<source name="transport.1" port="tcp::192.168.111.34:4003" />
|
||||||
|
<source name="transport.2" port="tcp::192.168.111.34:4004" />
|
||||||
|
<source name="transport.middle" port="tcp::192.168.111.34:4005" />
|
||||||
|
</device>
|
||||||
|
</config>
|
@ -24,6 +24,7 @@ import hep.dataforge.values.Value
|
|||||||
import hep.dataforge.values.ValueMap
|
import hep.dataforge.values.ValueMap
|
||||||
import hep.dataforge.values.Values
|
import hep.dataforge.values.Values
|
||||||
import hep.dataforge.values.asValue
|
import hep.dataforge.values.asValue
|
||||||
|
import java.lang.Math.sqrt
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import java.util.stream.Stream
|
import java.util.stream.Stream
|
||||||
|
|
||||||
@ -83,8 +84,8 @@ class SpectrumAdapter : BasicAdapter {
|
|||||||
when {
|
when {
|
||||||
y < 0 -> Optional.empty()
|
y < 0 -> Optional.empty()
|
||||||
y == 0.0 -> //avoid infinite weights
|
y == 0.0 -> //avoid infinite weights
|
||||||
Optional.of(Value.of(1.0 / getTime(values)))
|
Optional.of(Value.of(1.0 / sqrt(getTime(values))))
|
||||||
else -> Optional.of(Value.of(Math.sqrt(y / getTime(values))))
|
else -> Optional.of(Value.of(sqrt(y / getTime(values))))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user