/////////////////////////////////////////////////////////////////////////////////////////////////// // Simulated Devices /////////////////////////////////////////////////////////////////////////////////////////////////// var AnalogOutput = Java.extend(RegisterBase) var dev = new AnalogOutput("ao1") { i:double = 0.0, doRead: function () { return this.i }, doWrite: function (value) { this.i=value }, } add_device(dev, true) var AnalogOutput = Java.extend(RegisterBase) var dev = new AnalogOutput("ao2") { i:double = 0.0, doRead: function () { return this.i }, doWrite: function (value) { this.i=value }, } add_device(dev, true) var SinusoidSample = Java.extend(ReadonlyRegisterBase) var dev = new SinusoidSample("ai1") { x:double = 0.0, doRead: function () { sleep(0.001) this.x += 0.1 var noise = (Math.random() - 0.5) / 10.0 return Math.sin(this.x) + noise }, } add_device(dev, true) var SinusoidTime = Java.extend(ReadonlyRegisterBase) var dev = new SinusoidTime("ai2") { doRead: function () { sleep(0.001) var noise = (Math.random() - 0.5) / 10.0 return Math.sin(Date.now()) + noise }, } add_device(dev, true) var Random = Java.extend(ReadonlyRegisterBase) var dev = new Random("ai3") { doRead: function () { sleep(0.001) return Math.random() }, } add_device(dev, true) var SinusoidWaveform = Java.extend(ReadonlyRegisterBase, ReadonlyRegisterArray) var dev = new SinusoidWaveform("wf1") { doRead: function () { sleep(0.001) var ret = [] var x = Math.random() for (var i = 0; i < 20; i++) { ret.push(Math.sin(x)) x = x + 0.1 } return to_array(ret, 'd') }, getSize: function () { //return wf1.take(-1).length return SinusoidWaveformSuper.take(-1).length }, } var SinusoidWaveformSuper = Java.super(dev) add_device(dev, true) var SinusoidImage = Java.extend(ReadonlyRegisterBase, ReadonlyRegisterMatrix) var dev = new SinusoidImage("im1") { doRead: function () { sleep(0.001) var ret = [] var width = 200 var height = 100 var x = Math.random() var base = [] for (var i = 0; i < width ; i++) { base.push(Math.sin(x)) x = x + 0.05 } for (var i = 0; i < height ; i++) { var noise = (Math.random() - 0.5)/5.0 var row = [] for (var j = 0; j < width ; j++) { row.push(base[j]+noise) } ret.push(row) } return to_array(ret, 'd') }, getWidth: function () { return SinusoidSuper.take(-1)[0].length }, getHeight: function () { return SinusoidSuper.take(-1).length }, } var SinusoidSuper = Java.super(dev) add_device(dev, true)| //Defintion add_device(new DummyMotor("m1"), true) add_device(new DummyMotor("m2"), true) add_device(new DummyRegister("reg1",3), true) add_device(new DummyPositioner("p1"),true) add_device(new MotorGroupBase("mg1", m1, m2), true) add_device(new MotorGroupDiscretePositioner("dp1", mg1), true) //Initial Configuration if (p1.config.unit == null) { p1.config.minValue = 0.0 //Not persisted p1.config.maxValue = 1000.0 p1.config.unit = "mm" p1.config.save() p1.initialize() } if (dp1.config.positions == null) { dp1.config.positions = ["Park","Ready","Out","Clear"] dp1.config.motor1 = ["0.0","4.0","8.0" ,"0.0"] dp1.config.motor2 = ["0.0","5.0","3.0" ,"NaN"] dp1.config.save() dp1.initialize() } //Update m1.setMonitored(true) m2.setMonitored(true) /////////////////////////////////////////////////////////////////////////////////////////////////// // Simple Readable / Writable objects can be created and used in scans /////////////////////////////////////////////////////////////////////////////////////////////////// var WritableScalar = Java.extend(Writable) var ws1 = new WritableScalar() { write: function (value) { }, } var ReadableScalar = Java.extend(Readable) var rs1 = new ReadableScalar() { read: function (value) { return Math.random() }, } var ReadableWaveform = Java.extend(ReadableArray) var rw1 = new ReadableWaveform() { read: function (value) { ret = [] for (var i=0; i< this.getSize(); i++){ ret.push(Math.random()) } return to_array(ret, 'd') }, getSize: function () { return 20 }, } var ReadableImage = Java.extend(ReadableMatrix) var ri1 = new ReadableImage() { read: function (value) { var ret = [] for (var i=0; i< this.getHeight(); i++){ var row = [] for (var j=0; j< this.getWidth(); j++){ row.push(Math.random()) } ret.push(row) } return to_array(ret, 'd') }, getWidth: function () { return 80 }, getHeight: function () { return 40 }, } /////////////////////////////////////////////////////////////////////////////////////////////////// // Imaging /////////////////////////////////////////////////////////////////////////////////////////////////// GenericDevice = Java.type('ch.psi.pshell.device.GenericDevice') File = Java.type('java.io.File') var f = new File(GenericDevice.getConfigFileName("m1")) configured = f.exists() add_device(new RegisterMatrixSource("src1", im1), true) add_device(new RegisterMatrixSource("src2", ri1), true) src1.polling = 100 src2.polling = 100 //Some configuration for so the imaging will work out of the box if (!configured){ Colormap = Java.type('ch.psi.pshell.imaging.Colormap') src1.config.colormapAutomatic = true src1.config.colormap = configured.Temperature src1.config.save() src2.config.colormapAutomatic = true src2.config.save() }