diff --git a/script/tests/old-tests-and-devices/devices/AMA1/.config b/script/tests/old-tests-and-devices/devices/AMA1/.config
new file mode 100644
index 0000000..fc7fe9d
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/AMA1/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 15:07:43 CEST 2017
+name=AMA1
+tests=RPS Tests Interlocklilmits
+parameters=ilkInExpectedValS&"0x91DD"&"[hex] Interlock Input expected value for small values of magnet";magnetCh&"AMA1\:SOL\:1"&"Magnet epics channel";ilkInCh&"J102025\:REG\:R\:6"&"Interlock Input epics channel";ilkInExpectedValIni&"0x1DDD"&"[hex] Interlock Input expected initial value";ilkOutExpectedValL&"0x0000"&"[hex] Interlock Output expected value for large values of magnet";magnetEndVal&"50000"&"[int] magnet final value for scan sequence";ilkOutCh&"J102025\:REG\:R\:3"&"Interlock Output epics channel";ilkOutExpectedValIni&"0x0000"&"[hex] Interlock Output expected initial value";ilkOutExpectedValS&"0x000C"&"[hex] Interlock Output expected value for small values of magnet";magnetInitVal&"0"&"[int] magnet initial value for scan sequence";setGetDelay&"1"&"[s] delay between set and get";mode&"2,IQCOM,$GNT2,1,DIA"&"operating mode";
+description=Ablenkungsmagnet AMA1
diff --git a/script/tests/old-tests-and-devices/devices/DMAF1/.config b/script/tests/old-tests-and-devices/devices/DMAF1/.config
new file mode 100644
index 0000000..e5ad97b
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/DMAF1/.config
@@ -0,0 +1,3 @@
+name=DMAF1
+description=Collimators
+tests=Collimator Tests pro
diff --git a/script/tests/old-tests-and-devices/devices/FMA1XR/.config b/script/tests/old-tests-and-devices/devices/FMA1XR/.config
new file mode 100644
index 0000000..af412ce
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/FMA1XR/.config
@@ -0,0 +1,4 @@
+#Mon Sep 21 15&08&09 CEST 2015
+name=FMA1XR
+tests=Collimator Tests pro
+description=Spalt
diff --git a/script/tests/old-tests-and-devices/devices/Gantry1/.config b/script/tests/old-tests-and-devices/devices/Gantry1/.config
new file mode 100644
index 0000000..53a0996
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Gantry1/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:16 CEST 2017
+name=Gantry1
+tests=RPS Tests Betriebsmode
+description=rps section till Gantry 1
+parameters=mode&"2,IQCOM,$GNT1,1,DIA"&"betriebsmode";expectedVal14&"0x0040"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
diff --git a/script/tests/old-tests-and-devices/devices/Gantry2/.config b/script/tests/old-tests-and-devices/devices/Gantry2/.config
new file mode 100644
index 0000000..e1a8365
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Gantry2/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:16 CEST 2017
+name=Gantry2
+tests=RPS Tests Betriebsmode
+description=rps section till Gantry 2
+parameters=mode&"2,IQCOM,$GNT2,1,DIA"&"betriebsmode";expectedVal14&"0x0000"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0004"&"[hex] Expected value for channels 5-8";
diff --git a/script/tests/old-tests-and-devices/devices/Gantry3/.config b/script/tests/old-tests-and-devices/devices/Gantry3/.config
new file mode 100644
index 0000000..7c2fa77
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Gantry3/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:16 CEST 2017
+name=Gantry3
+tests=RPS Tests Betriebsmode
+description=rps section till Gantry 3
+parameters=mode&"2,IQCOM,$GNT3,1,DIA"&"betriebsmode";expectedVal14&"0x0400"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
diff --git a/script/tests/old-tests-and-devices/devices/Optis/.config b/script/tests/old-tests-and-devices/devices/Optis/.config
new file mode 100644
index 0000000..99ea97c
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Optis/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:16 CEST 2017
+name=Optis
+tests=RPS Tests Betriebsmode
+description=rps section till Optis
+parameters=mode&"2,IQCOM,$OPT,1,DIA"&"betriebsmode";expectedVal14&"0x4000"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
diff --git a/script/tests/old-tests-and-devices/devices/PIF/.config b/script/tests/old-tests-and-devices/devices/PIF/.config
new file mode 100644
index 0000000..8c21914
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/PIF/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:16 CEST 2017
+name=PIF
+tests=RPS Tests Betriebsmode
+description=rps section till PIF
+parameters=mode&"2,IQCOM,$PIF,1,DIA"&"betriebsmode";expectedVal14&"0x0400"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
diff --git a/script/tests/old-tests-and-devices/devices/PO2DV-NCS-LS/.config b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-LS/.config
new file mode 100644
index 0000000..24fb82e
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-LS/.config
@@ -0,0 +1,4 @@
+name=PO2DV-NCS-LS
+description=Optis 2 Linear Slide in test office setup
+#tests=Collimator Tests
+tests=Linear Slide Tests
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1 - Copy (2)/.config b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1 - Copy (2)/.config
new file mode 100644
index 0000000..d6b0c01
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1 - Copy (2)/.config
@@ -0,0 +1,3 @@
+name=PO2DV-NCS-VHQ3
+description=Optis 2 Linear Slide in test office setup
+tests=PS Tests
diff --git a/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1 - Copy/.config b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1 - Copy/.config
new file mode 100644
index 0000000..5920b09
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1 - Copy/.config
@@ -0,0 +1,3 @@
+name=PO2DV-NCS-VHQ2
+description=Optis 2 Linear Slide in test office setup
+tests=PS Tests
diff --git a/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1/.config b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1/.config
new file mode 100644
index 0000000..efd82e9
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/PO2DV-NCS-VHQ1/.config
@@ -0,0 +1,3 @@
+name=PO2DV-NCS-VHQ1
+description=Optis 2 Linear Slide in test office setup
+tests=PS Tests
diff --git a/script/tests/old-tests-and-devices/devices/PO2TC-NCS-RS/.config b/script/tests/old-tests-and-devices/devices/PO2TC-NCS-RS/.config
new file mode 100644
index 0000000..48567a5
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/PO2TC-NCS-RS/.config
@@ -0,0 +1,3 @@
+name=PO2TC-NCS-RS
+description=RS& Range Shifter
+tests=Range Shifter Tests
diff --git a/script/tests/old-tests-and-devices/devices/Production/DMAF1/.config b/script/tests/old-tests-and-devices/devices/Production/DMAF1/.config
new file mode 100644
index 0000000..b134802
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Production/DMAF1/.config
@@ -0,0 +1,3 @@
+name=PROF02&DMAF1
+description=Collimators
+tests=Collimator Tests pro
diff --git a/script/tests/old-tests-and-devices/devices/Production/PO2DV-NCS-VHQ1/.config b/script/tests/old-tests-and-devices/devices/Production/PO2DV-NCS-VHQ1/.config
new file mode 100644
index 0000000..efd82e9
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Production/PO2DV-NCS-VHQ1/.config
@@ -0,0 +1,3 @@
+name=PO2DV-NCS-VHQ1
+description=Optis 2 Linear Slide in test office setup
+tests=PS Tests
diff --git a/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-FIXL/.config b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-FIXL/.config
new file mode 100644
index 0000000..3058e57
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-FIXL/.config
@@ -0,0 +1,3 @@
+name=PO2TC-NCS-FIXL
+description=FIXL& Fixation Light
+tests=Display Tests
diff --git a/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-MWD/.config b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-MWD/.config
new file mode 100644
index 0000000..ba69bed
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-MWD/.config
@@ -0,0 +1,3 @@
+name=PO2TC-NCS-MWD
+description=MWD& Modulator Wheel Display
+tests=Display Tests
diff --git a/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC21/.config b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC21/.config
new file mode 100644
index 0000000..0f00694
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC21/.config
@@ -0,0 +1,3 @@
+name=PO2TC-NCS-SC21
+description=SC21& Scatter Foil 2.1
+tests=Linear Slide Tests
diff --git a/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC22/.config b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC22/.config
new file mode 100644
index 0000000..4e36bf8
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC22/.config
@@ -0,0 +1,3 @@
+name=PO2TC-NCS-SC22
+description=SC21& Scatter Foil 2.2
+tests=Linear Slide Tests
diff --git a/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC23/.config b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC23/.config
new file mode 100644
index 0000000..e80429e
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/Production/PO2TC-NCS-SC23/.config
@@ -0,0 +1,3 @@
+name=PO2TC-NCS-SC23
+description=SC23& Scatter Foil 2.3
+tests=Linear Slide Tests
diff --git a/script/tests/old-tests-and-devices/devices/XMA0310/.config b/script/tests/old-tests-and-devices/devices/XMA0310/.config
new file mode 100644
index 0000000..60eb5e9
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA0310/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:57:25 CEST 2017
+name=XMA0310
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J101030"&"RPS module EPICS channel name";expectedValue2&"0x0010"&"[hex] expected value 2";expectedValue1&"0x00D0"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMA0311/.config b/script/tests/old-tests-and-devices/devices/XMA0311/.config
new file mode 100644
index 0000000..24c2268
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA0311/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:58:05 CEST 2017
+name=XMA0311
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J101030"&"RPS module EPICS channel name";expectedValue2&"0x0001"&"[hex] expected value 2";expectedValue1&"0x000D"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMA0410/.config b/script/tests/old-tests-and-devices/devices/XMA0410/.config
new file mode 100644
index 0000000..c07e7dd
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA0410/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:58:37 CEST 2017
+name=XMA0410
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:7"&"RPS EPICS attribute";rpsModule&"J101046"&"RPS module EPICS channel name";expectedValue2&"0x0010"&"[hex] expected value 2";expectedValue1&"0x00D0"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMA1115/.config b/script/tests/old-tests-and-devices/devices/XMA1115/.config
new file mode 100644
index 0000000..958b3d6
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA1115/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:53:14 CEST 2017
+name=XMA1115
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:4"&"RPS EPICS attribute";rpsModule&"J102007"&"RPS module EPICS channel name";expectedValue2&"0x0100"&"[hex] expected value 2";expectedValue1&"0x0D00"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMA1116/.config b/script/tests/old-tests-and-devices/devices/XMA1116/.config
new file mode 100644
index 0000000..1f8c70d
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA1116/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:41:43 CEST 2017
+name=XMA1116
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:4"&"RPS EPICS attribute";rpsModule&"J102007"&"RPS module EPICS channel name";expectedValue2&"0x0010"&"[hex] expected value 2";expectedValue1&"0x00D0"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMA1117/.config b/script/tests/old-tests-and-devices/devices/XMA1117/.config
new file mode 100644
index 0000000..1454885
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA1117/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:53:44 CEST 2017
+name=XMA1117
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:4"&"RPS EPICS attribute";rpsModule&"J102007"&"RPS module EPICS channel name";expectedValue2&"0x1000"&"[hex] expected value 2";expectedValue1&"0xD000"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMA1118/.config b/script/tests/old-tests-and-devices/devices/XMA1118/.config
new file mode 100644
index 0000000..04bc1ae
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA1118/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:40:33 CEST 2017
+name=XMA1118
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:7"&"RPS EPICS attribute";rpsModule&"J102025"&"RPS module EPICS channel name";expectedValue2&"0x0010"&"[hex] expected value 2";expectedValue1&"0x00D0"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMA1119/.config b/script/tests/old-tests-and-devices/devices/XMA1119/.config
new file mode 100644
index 0000000..49addfb
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMA1119/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:41:13 CEST 2017
+name=XMA1119
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:4"&"RPS EPICS attribute";rpsModule&"J102007"&"RPS module EPICS channel name";expectedValue2&"0x0001"&"[hex] expected value 2";expectedValue1&"0x000D"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMB0510/.config b/script/tests/old-tests-and-devices/devices/XMB0510/.config
new file mode 100644
index 0000000..fdc4185
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMB0510/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 14:02:17 CEST 2017
+name=XMB0510
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J108053"&"RPS module EPICS channel name";expectedValue2&"0x0100"&"[hex] expected value 2";expectedValue1&"0x0D00"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMC0610/.config b/script/tests/old-tests-and-devices/devices/XMC0610/.config
new file mode 100644
index 0000000..bf9394b
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMC0610/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 14:00:49 CEST 2017
+name=XMC0610
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J110060"&"RPS module EPICS channel name";expectedValue2&"0x0100"&"[hex] expected value 2";expectedValue1&"0x0D00"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMC2010/.config b/script/tests/old-tests-and-devices/devices/XMC2010/.config
new file mode 100644
index 0000000..2753f2e
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMC2010/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 14:01:23 CEST 2017
+name=XMC2010
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J117065"&"RPS module EPICS channel name";expectedValue2&"0x0010"&"[hex] expected value 2";expectedValue1&"0x00D0"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMC2011/.config b/script/tests/old-tests-and-devices/devices/XMC2011/.config
new file mode 100644
index 0000000..3dc2824
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMC2011/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 14:01:52 CEST 2017
+name=XMC2011
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J117065"&"RPS module EPICS channel name";expectedValue2&"0x0100"&"[hex] expected value 2";expectedValue1&"0x0D00"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMD0710/.config b/script/tests/old-tests-and-devices/devices/XMD0710/.config
new file mode 100644
index 0000000..14e1a37
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMD0710/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:59:03 CEST 2017
+name=XMD0710
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J124081"&"RPS module EPICS channel name";expectedValue2&"0x0010"&"[hex] expected value 2";expectedValue1&"0x00D0"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMD0711/.config b/script/tests/old-tests-and-devices/devices/XMD0711/.config
new file mode 100644
index 0000000..c262689
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMD0711/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:59:41 CEST 2017
+name=XMD0711
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J124081"&"RPS module EPICS channel name";expectedValue2&"0x0100"&"[hex] expected value 2";expectedValue1&"0x0D00"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XMD0717/.config b/script/tests/old-tests-and-devices/devices/XMD0717/.config
new file mode 100644
index 0000000..2c935f5
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XMD0717/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 14:00:11 CEST 2017
+name=XMD0717
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:4"&"RPS EPICS attribute";rpsModule&"J124092"&"RPS module EPICS channel name";expectedValue2&"0x0001"&"[hex] expected value 2";expectedValue1&"0x000D"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XME1310/.config b/script/tests/old-tests-and-devices/devices/XME1310/.config
new file mode 100644
index 0000000..a66d3fc
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XME1310/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:54:46 CEST 2017
+name=XME1310
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:6"&"RPS EPICS attribute";rpsModule&"J112009"&"RPS module EPICS channel name";expectedValue2&"0x0001"&"[hex] expected value 2";expectedValue1&"0x000D"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XME1311/.config b/script/tests/old-tests-and-devices/devices/XME1311/.config
new file mode 100644
index 0000000..c42d1e2
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XME1311/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:55:53 CEST 2017
+name=XME1311
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:4"&"RPS EPICS attribute";rpsModule&"J112023"&"RPS module EPICS channel name";expectedValue2&"0x0100"&"[hex] expected value 2";expectedValue1&"0x0D00"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XME1410/.config b/script/tests/old-tests-and-devices/devices/XME1410/.config
new file mode 100644
index 0000000..1d114f8
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XME1410/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:56:25 CEST 2017
+name=XME1410
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J112023"&"RPS module EPICS channel name";expectedValue2&"0x0001"&"[hex] expected value 2";expectedValue1&"0x000D"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/XME1411/.config b/script/tests/old-tests-and-devices/devices/XME1411/.config
new file mode 100644
index 0000000..f874918
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/XME1411/.config
@@ -0,0 +1,5 @@
+#Fri Oct 20 13:56:53 CEST 2017
+name=XME1411
+tests=RPS Tests Diagnostic
+parameters=rpsAttribute&"REG\:R\:5"&"RPS EPICS attribute";rpsModule&"J112023"&"RPS module EPICS channel name";expectedValue2&"0x0010"&"[hex] expected value 2";expectedValue1&"0x00D0"&"[hex] expected value 1";
+description=Diagnostic module
diff --git a/script/tests/old-tests-and-devices/devices/bis-BMA1/.config b/script/tests/old-tests-and-devices/devices/bis-BMA1/.config
new file mode 100644
index 0000000..9fbf4a2
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/bis-BMA1/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:10 CEST 2017
+name=bis-BMA1
+tests=RPS Tests Betriebsmode
+parameters=mode&"2,IQCOM,$BMA1,1,DIAG"&"operating mode";expectedVal14&"0x0000"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
+description=rps section till BMA1
diff --git a/script/tests/old-tests-and-devices/devices/bis-BMC1/.config b/script/tests/old-tests-and-devices/devices/bis-BMC1/.config
new file mode 100644
index 0000000..dd62c9f
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/bis-BMC1/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:10 CEST 2017
+name=bis-BMC1
+tests=RPS Tests Betriebsmode
+parameters=mode&"2,IQCOM,$BMC1,1,DIAG"&"operating mode";expectedVal14&"0x0000"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
+description=rps section till BMC1
diff --git a/script/tests/old-tests-and-devices/devices/bis-BMD1/.config b/script/tests/old-tests-and-devices/devices/bis-BMD1/.config
new file mode 100644
index 0000000..163d7d8
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/bis-BMD1/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:16 CEST 2017
+name=bis-BMD1
+tests=RPS Tests Betriebsmode
+description=rps section till BMD1
+parameters=mode&"2,IQCOM,$BMD1,1,DIA"&"betriebsmode";expectedVal14&"0x0000"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
diff --git a/script/tests/old-tests-and-devices/devices/bis-BME1/.config b/script/tests/old-tests-and-devices/devices/bis-BME1/.config
new file mode 100644
index 0000000..6ae20bb
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/bis-BME1/.config
@@ -0,0 +1,5 @@
+#Wed Oct 18 10:54:16 CEST 2017
+name=bis-BME1
+tests=RPS Tests Betriebsmode
+description=rps section till BME1
+parameters=mode&"2,IQCOM,$BME1,1,DIA"&"betriebsmode";expectedVal14&"0x0000"&"[hex] Expected value for channels 1-4";expectedVal58&"0x0000"&"[hex] Expected value for channels 5-8";
diff --git a/script/tests/old-tests-and-devices/devices/bx84/.config b/script/tests/old-tests-and-devices/devices/bx84/.config
new file mode 100644
index 0000000..715eae5
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/bx84/.config
@@ -0,0 +1,5 @@
+#Tue Oct 03 13&56&43 CEST 2017
+name=bx84
+tests=sad
+description=simulation device in playground
+parameters=delay&".2"&"delay between 2 steps";bla&"234"&"bla bla";setVal&"11"&"value to set";expectedVal&"18.1"&"expected returned value";mask&"2"&"bit mask";
diff --git a/script/tests/old-tests-and-devices/devices/bx84_2/.config b/script/tests/old-tests-and-devices/devices/bx84_2/.config
new file mode 100644
index 0000000..406d46e
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/bx84_2/.config
@@ -0,0 +1,5 @@
+#Fri Oct 13 10:59:28 CEST 2017
+name=bx84_2
+tests=sad
+parameters=a&IQCOM,$GNT3,1,DIA\:22&23;delay&.2&delay between 2 steps;bla&234&bla bla;setVal&21&value to set;expectedVal&18.1&expected returned value;mask&2&bit mask;
+description=simulation device in playground
diff --git a/script/tests/old-tests-and-devices/devices/newbx84/.config b/script/tests/old-tests-and-devices/devices/newbx84/.config
new file mode 100644
index 0000000..927ba6b
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/newbx84/.config
@@ -0,0 +1,5 @@
+#Tue Mar 20 09:48:39 CET 2018
+name=newbx84
+tests=New Structure Tests
+parameters=par1&"1"&"override param 1";par3&"p3"&"device specific param";
+description=bx84 device for new testing list structure
diff --git a/script/tests/old-tests-and-devices/devices/newdev/.config b/script/tests/old-tests-and-devices/devices/newdev/.config
new file mode 100644
index 0000000..64271c8
--- /dev/null
+++ b/script/tests/old-tests-and-devices/devices/newdev/.config
@@ -0,0 +1,5 @@
+#Fri Oct 13 12:10:12 CEST 2017
+name=newdev
+tests=RPS Tests Betriebsmode
+parameters="pv"&"PXXF\:VAL\:2"&"ssp";"ds"&"2,IQCOM,$BMA1,1,DIA"&"vla";
+description=del
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/.config
new file mode 100644
index 0000000..5e59d3d
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/.config
@@ -0,0 +1,12 @@
+name=Calibrate
+description=Calibrates the device
+filename=Calibrate.xml
+help = \
+This test sends a command to the low level firmware which controls the collimators \n\
+requesting that it calibrates itself. \n\n\
+Calibration involves moving to the R1 and R2 reference positions and measuring the \n\
+number of steps required to do so. At the end of the sequence the default collimator \n\
+will be selected. \n\n\
+During the course of the expected calibration period (45-70 seconds) the test \n\
+procedure will plot the values of all critical system variables. \n\n\
+For further information please consult Valery Ovinnikov.
\
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/Calibrate.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/Calibrate.py
new file mode 100644
index 0000000..344762f
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/Calibrate.py
@@ -0,0 +1,139 @@
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+ samplePeriod = 0.1
+
+######### WRITE YOUR CODE HERE BELOW #############
+ scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], ['Motor Pos (IST3:2)', 'Poti Position (IST2:1)',
+ 'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)', 'Logical Position (IST:2)',
+ 'Motor Pos Raw (IST3:1)','Poti Pos From Beam (IST1:2)',
+ 'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idMotorPositionRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idPotiPosFromBeam = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+
+ #Pre-actions: 1 = calibrate
+ caput(DEVICE+':COM:2', 1)
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback( ret, success)
+ return
+
+ countDeviceInModeIdle = 0
+ for setpoint1 in range(0, 10000):
+ sleep( samplePeriod ) # Settling time
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ MotorPositionRaw = idMotorPositionRaw.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosFromBeam = idPotiPosFromBeam.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+ scan.append([setpoint1], [setpoint1],
+ [MotorPosition, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, LogicalPosition,
+ MotorPositionRaw, PotiPosFromBeam, PotiRaw, PotiRef1Position, PotiRef2Position])
+
+ if (int(MotorStatus) & int('1',2))==0: #device finished calibration (bit#1)
+ #give the device some time before stating that it has really finished
+ countDeviceInModeIdle = countDeviceInModeIdle +1
+ if countDeviceInModeIdle == 10:
+ break
+ else:
+ countDeviceInModeIdle = 0
+
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ #Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idMotorPositionRaw.close()
+ idMotorPosition.close()
+ idPotiPosFromBeam.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idInkr.close()
+ idInkrRb.close()
+ scan.end()
+
+ ret = 'Calibration done'
+ success = True
+ scan.end()
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/Calibrate.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/Calibrate.xml
new file mode 100644
index 0000000..7e5028f
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Calibrate/Calibrate.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ 900
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/.config
new file mode 100644
index 0000000..3589d0d
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/.config
@@ -0,0 +1,3 @@
+name=Drive Out
+description=Drives the Collimator to the Out Position
+filename=Drive Out.xml
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out - Copy.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out - Copy.py
new file mode 100644
index 0000000..704a950
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out - Copy.py
@@ -0,0 +1,82 @@
+#Script imported from: Drive Out.xml
+import traceback
+
+#by default, failed
+ret = 'Test failed'
+success = False
+
+try:
+ #Pre-actions: 2 = drive out
+ caput(DEVICE+':COM:2', 2)
+ #Creating channels: dimension 1
+ #PseudoPositioner id000000
+ #ScalarDetector id000001
+ id000001 = Channel(DEVICE+':STA:1', type = 'd')
+ #ScalarDetector id000003
+ id000003 = Channel(DEVICE+':IST:2', type = 'd')
+ #ScalarDetector id000004
+ id000004 = Channel(DEVICE+':DIAM:2', type = 'd')
+ #ScalarDetector id000005
+ id000005 = Channel(DEVICE+':IST1:1', type = 'd')
+ #ScalarDetector id000006
+ id000006 = Channel(DEVICE+':IST1:2', type = 'd')
+ #ScalarDetector id000007
+ id000007 = Channel(DEVICE+':IST2:1', type = 'd')
+ #ScalarDetector id000008
+ id000008 = Channel(DEVICE+':IST2:2', type = 'd')
+ #ScalarDetector id000009
+ id000009 = Channel(DEVICE+':IST3:1', type = 'd')
+ #ScalarDetector id000010
+ id000010 = Channel(DEVICE+':IST3:2', type = 'd')
+except:
+ print "Unexpected error:", sys.exc_info()[0]
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ raise Exception('Unable to create channel - ' + traceback.format_exc())
+ sys.exit()
+
+#TODO: Set the diplay names of positioners and detectors
+scan = ManualScan(['id000000'], ['id000001', 'id000003', 'id000004', 'id000005', 'id000006', 'id000007', 'id000008', 'id000009', 'id000010'] , [0.0], [3000.0], [3000])
+scan.start()
+
+#Dimension 1
+#PseudoPositioner id000000
+for setpoint1 in range(0, 3000):
+ readback1 = setpoint1
+ sleep( 0.1 ) # Settling time
+ #Detector id000001
+ detector1 = id000001.get()
+ #Detector id000003
+ detector2 = id000003.get()
+ #Detector id000004
+ detector3 = id000004.get()
+ #Detector id000005
+ detector4 = id000005.get()
+ #Detector id000006
+ detector5 = id000006.get()
+ #Detector id000007
+ detector6 = id000007.get()
+ #Detector id000008
+ detector7 = id000008.get()
+ #Detector id000009
+ detector8 = id000009.get()
+ #Detector id000010
+ detector9 = id000010.get()
+ scan.append ([setpoint1], [readback1], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9])
+
+#Closing channels
+id000001.close()
+id000003.close()
+id000004.close()
+id000005.close()
+id000006.close()
+id000007.close()
+id000008.close()
+id000009.close()
+id000010.close()
+
+scan.end()
+
+#return ok
+ret = 'Slides moved out'
+success = True
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out.py
new file mode 100644
index 0000000..53b0594
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out.py
@@ -0,0 +1,144 @@
+# Drive Out
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+ samplePeriod = 0.1
+
+######### WRITE YOUR CODE HERE BELOW #############
+ scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], ['Motor Pos (IST3:2)', 'Poti Position (IST2:1)',
+ 'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)', 'Com (COM:2)', 'Logical Position (IST:2)',
+ 'Motor Pos Raw (IST3:1)','Poti Pos From Beam (IST1:2)',
+ 'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idMotorPositionRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idPotiPosFromBeam = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+
+ #Pre-actions: 2 = drive out
+ caput(DEVICE+':COM:2', 2)
+ sleep( samplePeriod ) # Settling time
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback( ret, success)
+ return
+
+ for setpoint1 in range(0, 10000):
+ sleep( samplePeriod ) # Settling time
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ MotorPositionRaw = idMotorPositionRaw.get()
+ Com = idCom.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosFromBeam = idPotiPosFromBeam.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+
+ scan.append([setpoint2], [setpoint2],
+ [MotorPosition, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, Com, LogicalPosition,
+ MotorPositionRaw, PotiPosFromBeam, PotiRaw, PotiRef1Position, PotiRef2Position])
+
+ if (MotorStatus & int('1',2))==0: #device finished calibration (bit#1)
+ #give the device some time before stating that it has really finished
+ countDeviceInModeIdle = countDeviceInModeIdle +1
+ if countDeviceInModeIdle == 10:
+ break
+ else:
+ countDeviceInModeIdle = 0
+
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ #Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idMotorPositionRaw.close()
+ idCom.close()
+ idMotorPosition.close()
+ idPotiPosFromBeam.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idInkr.close()
+ idInkrRb.close()
+ scan.end()
+
+ ret = 'Drive Out done'
+ success = True
+ scan.end()
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out.xml
new file mode 100644
index 0000000..5a1c925
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Drive Out/Drive Out.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ 3000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/.config
new file mode 100644
index 0000000..916f437
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/.config
@@ -0,0 +1,4 @@
+#Fri Jun 09 14&14&06 CEST 2017
+name=Monitor Movement
+description=Monitor the movements during the specified time interval. No commands are sent.
+parameters=monitorTime&20&How long the monitoring is performed [s];samplingDelay&0.1&Delay between each sample is taken [s];
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/Monitor Movement.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/Monitor Movement.py
new file mode 100644
index 0000000..5a4b63f
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/Monitor Movement.py
@@ -0,0 +1,98 @@
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+def startTest(testName, DEVICE, params):
+ #by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ #plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ #put the whole custom code under try/catch
+ try:
+ #get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ #init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+
+######### WRITE YOUR CODE HERE BELOW #############
+ #get parameters from the calling interface
+ try:
+ #test.log( "with the following parameters:\n" + str(params))
+ #test.log( 'testpath: ' + testPath )
+ #test.log( 'parameters:' + str( params) )
+ #test.log( 'device: ' + DEVICE )
+ monitorTime = float(test.getParam("monitorTime"))
+ samplePeriod = 0.05 #seconds
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback( ret, success)
+ return
+
+ #get parameters from the calling interface
+ scan = ManualScan(['time [s]'],
+ ['Motor Pos (IST3:2)', 'Poti Position (IST2:1)', 'Motor Pos - Poti Pos'] )
+ scan.setPlotTitle(plotName)
+ scan.start()
+
+ #Creating channels: dimension 1
+ try:
+ idCom = Channel(DEVICE+':COM:2' , type = 'd') #current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE+':IST3:2', type = 'd') #current position as from motor step counter [mm]
+ #idPotiPosFromBeam = Channel(DEVICE+':IST1:2', type = 'd') #current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE+':IST2:1', type = 'd') #current position as from potentiometer [mm]
+ #idPotiRef1Position = Channel(DEVICE+':REF1:1', type = 'd') #R1 position as from potentiometer [mm]
+ #idPotiRef2Position = Channel(DEVICE+':REF2:1', type = 'd') #R2 position as from potentiometer [mm]
+
+ except:
+ test.sendFeedback( 'Unable to create channel - ' + traceback.format_exc(), False)
+ return
+
+ r1 = tscan((idMotorPosition, idPotiPosition), int(monitorTime/0.02), 0.02)
+
+
+ test.log( 'Monitoring movement for ' + str(monitorTime) + 's')
+ #scan quickly the output during some seconds
+ timeElapsed=0
+ startTime=float(java.lang.System.currentTimeMillis())
+ currentTime = float(java.lang.System.currentTimeMillis())
+ timeElapsed=currentTime-startTime
+ while timeElapsed<(monitorTime*1000):
+ #Detector time
+ currentTime = float(java.lang.System.currentTimeMillis())
+ timeElapsed=currentTime-startTime
+ motorPosition = idMotorPosition.get()
+ #potiPosFromBeam = idPotiPosFromBeam.get()
+ potiPosition = idPotiPosition.get()
+ #potiRef1Position = idPotiRef1Position.get()
+ #potiRef2Position = idPotiRef2Position.get()
+ diff1 = motorPosition-potiPosition
+ scan.append ([timeElapsed/1000], [timeElapsed/1000], [motorPosition, potiPosition, diff1])
+ sleep( samplePeriod ) # Settling time
+ #timeElapsed=timeElapsed+1
+
+ #Closing channels
+ idCom.close()
+ idMotorPosition.close()
+ #idPotiPosFromBeam.close()
+ idPotiPosition.close()
+ #idPotiRef1Position.close()
+ #idPotiRef2Position.close()
+ ret = 'End of Monitoring'
+ success = True
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ #just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ #generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+#launch the test
+startTest(test, device, parameters)
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/help.html
new file mode 100644
index 0000000..7d4e3ca
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Monitor Movement/help.html
@@ -0,0 +1,12 @@
+
+
+Description
+Monitor the movements during the specified time interval. No commands are sent.
+Parameters
+monitorTime Monitoring time interval [s]
+samplingDelay Delay between each sample is taken [s]
+Contact
+Marco Boccioli
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/.config
new file mode 100644
index 0000000..82f7ba0
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/.config
@@ -0,0 +1,7 @@
+name=Motor Test 1
+description=Moves to CW switch then CCW switch N times.
+
+
+#optional parameters. Description is compulsory. Syntax&
+#parameters=&&[;&&]
+parameters=repeatTimes&1&Repeat N times;delayS&5&Pause delay [s]
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1 - Copy.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1 - Copy.py
new file mode 100644
index 0000000..f14d7ef
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1 - Copy.py
@@ -0,0 +1,154 @@
+#Script Motor Test 1
+#Moves to CCW switch; then for M times moves N times to CW switch then CCW switch; between each M pauses for delay; log at CCW and CW
+
+import traceback
+
+#by default, failed
+ret = 'Test failed'
+status = False
+DEVICE = device
+params = parameters
+#DEVICE = 'PO2DV-NCS-LS'
+#get parameters from the calling interface
+try:
+ print "Running test Motor Test 1 with the following parameters:"
+ print params
+ loopTimes = int(params["repeatTimes"]["value"])
+ delaySeconds = int(params["delayS"]["value"])
+except:
+ print "Could not retrieve testing parameters: ", sys.exc_info()[0]
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ raise Exception('Could not retrieve testing parameters - ' + traceback.format_exc())
+
+#TODO: Set the diplay names of positioners and detectors
+#scan = ManualScan(['idX', 'idInkr'], ['idMotorStatus', 'idLogicalPosition', 'idDiameter', 'idMotorPosition', 'idPotiRaw', 'idPotiProc', 'idBtvsRaw', 'idBtvsProc', 'idDiff01', 'idDiff02'] , [-0.5, 0.0], [4.0, 3000.0], [3000, 20])
+scan = ManualScan(['idX'], ['idMotorStatus', 'idLogicalPosition', 'idDiameter', 'idMotorPosition', 'idPotiRaw', 'idPotiProc', 'idBtvsRaw', 'idBtvsProc', 'idDiff01', 'idDiff02'] , [ 0.0], [ 3000.0], [20])
+scan.start()
+#Creating channels: dimension 1
+try:
+ #RegionPositioner idInkr
+ #idInkr = Channel(DEVICE+':INKR:2', type = 'd')
+ idInkr = Channel(DEVICE+':MOTOR.VAL', type = 'd')
+ #ScalarDetector idMotorStatus
+ #idMotorStatus = Channel(DEVICE+':STA:1', type = 'd')
+ idMotorStatus = Channel(DEVICE+':MOTOR.MSTA', type = 'd')
+ #ScalarDetector idLogicalPosition
+ #idLogicalPosition = Channel(DEVICE+':IST:2', type = 'd')
+ idLogicalPosition = Channel(DEVICE+':MOTOR.RVAL', type = 'd')
+ #ScalarDetector idDiameter
+ #idDiameter = Channel(DEVICE+':DIAM:2', type = 'd')
+ idDiameter = Channel(DEVICE+':ENCODERoff', type = 'd')
+ #ScalarDetector idMotorPosition
+ #idMotorPosition = Channel(DEVICE+':IST1:2', type = 'd')
+ idMotorPosition = Channel(DEVICE+':MOTOR.RBV', type = 'd')
+ #ScalarDetector idPotiRaw
+ #idPotiRaw = Channel(DEVICE+':POSA:1', type = 'd')
+ idPotiRaw = Channel(DEVICE+':ENCODERraw', type = 'd')
+ #ScalarDetector idPotiProc
+ #idPotiProc = Channel(DEVICE+':POSA:2', type = 'd')
+ idPotiProc = Channel(DEVICE+':ENCODER', type = 'd')
+ #ScalarDetector idBtvsRaw
+ #idBtvsRaw = Channel(DEVICE+':IST3:1', type = 'd')
+ idBtvsRaw = Channel(DEVICE+':MOTOR.LLS', type = 'd')
+ #ScalarDetector idBtvsProc
+ #idBtvsProc = Channel(DEVICE+':IST3:2', type = 'd')
+ idBtvsProc = Channel(DEVICE+':MOTOR.HLS', type = 'd')
+ #ScalarDetector idEndSwitchL
+ #idBtvsRaw = Channel(DEVICE+':IST3:1', type = 'd')
+ idEndSwitchL = Channel(DEVICE+':MOTOR.LLS', type = 'd')
+ #ScalarDetector idEndSwitchH
+ #idBtvsProc = Channel(DEVICE+':IST3:2', type = 'd')
+ idEndSwitchH = Channel(DEVICE+':MOTOR.HLS', type = 'd')
+ #high position limit
+ idLimitH = Channel(DEVICE+':MOTOR.HLM', type = 'd')
+ #low position limit
+ idLimitL = Channel(DEVICE+':MOTOR.LLM', type = 'd')
+except:
+ print "Unexpected error:", sys.exc_info()[0]
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ raise Exception('Unable to create channel - ' + traceback.format_exc())
+ sys.exit()
+
+#remove limits
+idLimitH.put(999999.9, timeout=None)
+idLimitL.put(-999999.9, timeout=None)
+#Dimension 1
+direction = 1.0;
+startDefault = -100.0
+endDefault = 1000.0
+end = endDefault
+#find position at Low end switch: it will be the starting point of the test
+print 'Homing'
+idInkr.put(-100.0, timeout=None) # TODO: Set appropriate timeout
+start = startDefault #idInkr.get()+direction
+setpoint2 = end
+count = 0
+print 'Starting test sequence'
+for setpoint1 in range(0, loopTimes*2):
+ sleep( delaySeconds ) # Settling time
+ #RegionPositioner idInkr
+ idInkr.put(setpoint2, timeout=None) # TODO: Set appropriate timeout
+ readback2 = idInkr.get()
+ #if abs(readback2 - setpoint2) > 1 : # TODO: Check accuracy
+ # ret = 'Actor idInkr could not be set to the value ' + str(setpoint2) + ' (current value: ' + str(readback2) + ')'
+ # success = False
+ # raise Exception(ret)
+ #Detector idMotorStatus
+ detector1 = idMotorStatus.get()
+ #Detector idLogicalPosition
+ detector2 = idLogicalPosition.get()
+ #Detector idDiameter
+ detector3 = idDiameter.get()
+ #Detector idMotorPosition
+ detector4 = idMotorPosition.get()
+ #Detector idPotiRaw
+ detector5 = idPotiRaw.get()
+ #Detector idPotiProc
+ detector6 = idPotiProc.get()
+ #Detector idBtvsRaw
+ detector7 = idBtvsRaw.get()
+ #Detector idBtvsProc
+ detector8 = idBtvsProc.get()
+ #end switches
+ endH = idEndSwitchH.get()
+ endL = idEndSwitchL.get()
+ #Manipulation idDiff02
+ #Variable Mappings
+ a = detector4
+ b = detector8
+ idDiff02 = a-b
+ #Manipulation idDiff01
+ #Variable Mappings
+ a = detector4
+ b = detector6
+ count = count + 1
+ idDiff01 = a-b
+ if endH>0.0 :
+ #invert direction and swap start with end of translation
+ setpoint2 = start
+ print 'End H switch, changing target to ' + str(setpoint2)
+ scan.append ([setpoint2], [readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, idDiff02, idDiff01])
+ if endL>0.0 :
+ #invert direction and swap start with end of translation
+ setpoint2 = end
+ print 'End L switch, changing target to ' + str(setpoint2)
+ scan.append ([setpoint2], [readback2], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, idDiff02, idDiff01])
+
+#set limits back
+idLimitH.put(145.0, timeout=None)
+idLimitL.put(0.0, timeout=None)
+#Closing channels
+idInkr.close()
+idMotorStatus.close()
+idLogicalPosition.close()
+idDiameter.close()
+idMotorPosition.close()
+idPotiRaw.close()
+idPotiProc.close()
+idBtvsRaw.close()
+idBtvsProc.close()
+scan.end()
+ret = 'Slide moved back and forth (' + str(count) + ' runs)'
+status = True
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1.py
new file mode 100644
index 0000000..e449c36
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1.py
@@ -0,0 +1,187 @@
+# Script Motor Test 1
+# Moves to CCW switch; then for M times moves N times to CW switch then CCW switch; between each M pauses for delay; log at CCW and CW
+
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+
+######### WRITE YOUR CODE HERE BELOW #############
+
+ # DEVICE = 'PO2DV-NCS-LS'
+ # get parameters from the calling interface
+ try:
+ test.log("Running test with the following parameters:")
+ test.log(params)
+ loopTimes = int(test.getParam("repeatTimes"))
+ delaySeconds = int(test.getParam("delayS"))
+ samplePeriod = 0.05 #seconds
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], [
+ 'Btvs Poti Position (IST3:2)',
+ 'Mcs Poti Position (IST2:1)',
+ 'Motor Status (STA:1)',
+ 'Inkr (INKR:2)',
+ 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)',
+ 'Logical Position (IST:2)',
+ 'Btvs Raw (IST3:1)',
+ 'Motor Position (IST1:2)',
+ 'Poti Raw (POSA:1)',
+ 'Poti Ref1 Position (REF1:1)',
+ 'Poti Ref2 Position (REF2:1)'])
+
+ p1 = plot(None, name = "Motor Position - Btvs Poti Position", context = plotName + " pos difference")[0]
+ scan.setPlotTitle(plotName)
+ scan.start()
+ # Creating channels: dimension 1
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idBtvsRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # motor commands [0=Stop; 1=Calibrate; 2=gotoR1; 3=gotoR2]
+ idBtvs = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ end = 4.0 #go to R2
+ start = 3.0 #go to R1
+ setpoint2 = end
+ count = 0
+ test.log('Starting test sequence')
+ for setpoint1 in range(0, (loopTimes * 2)):
+ p1.addSeries(LinePlotSeries("Run"+str(count)))
+ sleep(delaySeconds) # Settling time between runs
+ # RegionPositioner idInkr
+ idCom.put(setpoint2, timeout=None) # TODO: Set appropriate timeout
+ count = count + 1
+ # scan for changes
+ for scanTimes in range(0, 100000):
+ sleep(samplePeriod)
+ currentTime = float(java.lang.System.currentTimeMillis())
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ BtvsRaw = idBtvsRaw.get()
+ Btvs = idBtvs.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+ idDiff01 = MotorPosition - Btvs
+
+ scan.append([currentTime], [currentTime],
+ [Btvs, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, LogicalPosition,
+ BtvsRaw, MotorPosition, PotiRaw, PotiRef1Position, PotiRef2Position])
+
+ p1.getSeries(count).appendData(currentTime, idDiff01)
+
+ #extract Status bits
+ endH = bool(int(MotorStatus) & 8) #Ref2 (high limit)
+ endL = bool(int(MotorStatus) & 4) #Ref1 (low limit)
+
+ #check if arrived to R1 or R2
+ if endH:
+ # invert direction and swap start with end of translation
+ setpoint2 = start
+ test.log('Reached R2 switch, changing target to R1')
+ break
+ elif endL:
+ # invert direction and swap start with end of translation
+ setpoint2 = end
+ test.log('Reached R1 switch, changing target to R2')
+ break
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ # Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idBtvsRaw.close()
+ idBtvs.close()
+ idMotorPosition.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idCom.close()
+ idInkr.close()
+ idInkrRb.close()
+
+ scan.end()
+ ret = 'Slide moved back and forth (' + str(count) + ' runs)'
+ success = True
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1.py.bak b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1.py.bak
new file mode 100644
index 0000000..0d66c9a
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/Motor Test 1.py.bak
@@ -0,0 +1,178 @@
+# Script Motor Test 1
+# Moves to CCW switch; then for M times moves N times to CW switch then CCW switch; between each M pauses for delay; log at CCW and CW
+
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+
+######### WRITE YOUR CODE HERE BELOW #############
+
+ # DEVICE = 'PO2DV-NCS-LS'
+ # get parameters from the calling interface
+ try:
+ test.log("Running test with the following parameters:")
+ test.log(params)
+ loopTimes = int(test.getParam("repeatTimes"))
+ delaySeconds = int(test.getParam("delayS"))
+ samplePeriod = 0.05 #seconds
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], ['Btvs (IST3:2)', 'Poti Position (IST2:1)',
+ 'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)', 'Logical Position (IST:2)',
+ 'Btvs Raw (IST3:1)','Motor Position (IST1:2)',
+ 'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
+ p1 = plot(None, name = "Poti Pos From Beam - Motor Position", context = plotName + " pos difference")[0]
+ scan.setPlotTitle(plotName)
+ scan.start()
+ # Creating channels: dimension 1
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idBtvsRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # current position as from motor step counter [mm]
+ idBtvs = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ end = 4.0 #go to R2
+ start = 3.0 #go to R1
+ setpoint2 = end
+ count = 0
+ test.log('Starting test sequence')
+ for setpoint1 in range(0, (loopTimes * 2)):
+ p1.addSeries(LinePlotSeries("Run"+str(count)))
+ sleep(delaySeconds) # Settling time between runs
+ # RegionPositioner idInkr
+ idCom.put(setpoint2, timeout=None) # TODO: Set appropriate timeout
+ count = count + 1
+ # scan for changes
+ for scanTimes in range(0, 100000):
+ sleep(samplePeriod)
+ currentTime = float(java.lang.System.currentTimeMillis())
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ BtvsRaw = idBtvsRaw.get()
+ Btvs = idBtvs.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+ idDiff01 = PotiPosition - Btvs
+
+ scan.append([currentTime], [currentTime],
+ [Btvs , PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, LogicalPosition,
+ BtvsRaw , MotorPosition, PotiRaw, PotiRef1Position, PotiRef2Position])
+
+ p1.getSeries(count).appendData(currentTime, idDiff01)
+
+ #extract Status bits
+ endH = bool(int(MotorStatus) & 8) #Ref2 (high limit)
+ endL = bool(int(MotorStatus) & 4) #Ref1 (low limit)
+
+ #check if arrived to R1 or R2
+ if endH:
+ # invert direction and swap start with end of translation
+ setpoint2 = start
+ test.log('Reached R2 switch, changing target to R1')
+ break
+ elif endL:
+ # invert direction and swap start with end of translation
+ setpoint2 = end
+ test.log('Reached R1 switch, changing target to R2')
+ break
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ # Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idBtvsRaw .close()
+ idBtvs.close()
+ idMotorPosition.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idCom.close()
+ idInkr.close()
+ idInkrRb.close()
+
+ scan.end()
+ ret = 'Slide moved back and forth (' + str(count) + ' runs)'
+ success = True
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/help.html
new file mode 100644
index 0000000..87b5e83
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 1/help.html
@@ -0,0 +1,14 @@
+
+
+Short Description
+Moves to CW switch then CCW switch N times.
+Details
+Moves to CW switch then CCW switch N times.
+Parameters
+repeatTimes Repeat the moving N times
+delayS Pause delay between each repetition [s]
+Contact
+Marco Boccioli
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/.config
new file mode 100644
index 0000000..01f6773
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/.config
@@ -0,0 +1,7 @@
+name=Motor Test 2
+description=Go to absolute position A, then move +B steps, then -2B steps, then +2Bsteps (ie oscillate round centre position, logging after each movement); repeat N times
+
+
+#optional parameters. Description is compulsory. Syntax&
+#parameters=&&[;&&]
+parameters=repeatTimes&1&Repeat N times;midPoint&41.0&Middle point A [mm];spanFromMidPoint&2.0&B steps around middle point A [integer];translationStep&5.0&Step lenght [mm]
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/Motor Test 2.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/Motor Test 2.py
new file mode 100644
index 0000000..5cb7aa4
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/Motor Test 2.py
@@ -0,0 +1,206 @@
+# Script Motor Test 2 for production system
+# Go to absolute position A, then move +B steps, then -2B steps, then +2Bsteps (ie oscillate round centre position, logging after each movement); repeat N times
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+
+######### WRITE YOUR CODE HERE BELOW #############
+
+ # get parameters from the calling interface
+ try:
+ test.log("Running test with the following parameters:")
+ test.log(params)
+ middle = float(test.getParam("midPoint"))
+ loopTimes = int(test.getParam("repeatTimes"))
+ span = float(test.getParam("spanFromMidPoint"))
+ translationStep = float(test.getParam("translationStep")) # each translation will be this amount of mm
+ settlingTime = 0.2 # seconds
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ scan = ManualScan(['time [1/'+ str(1/settlingTime) + ' s]'], ['Btvs Poti Position (IST3:2)', 'Mcs Poti Position (IST2:1)',
+ 'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)', 'Logical Position (IST:2)',
+ 'Btvs Raw (IST3:1)','Motor Position (IST1:2)',
+ 'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+ # coloured plot (one colour per scan)
+ p1 = plot(None, name="Motor Position - Btvs Poti Position", context=plotName + " difference")[0]
+
+ # Creating channels: dimension 1
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idBtvsRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idBtvs = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # motor commands [0=Stop; 1=Calibrate; 2=gotoR1; 3=gotoR2]
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+
+ # find position: it will be the middle point of the test
+ test.log('Moving to initial position R1')
+ idCom.put(2, timeout=None) # go to R1 start limit
+ test.log('Moving to middle point ' + str(middle))
+ idInkr.put(middle, timeout=None) # TODO: Set appropriate timeout
+ if abs(readback2 - middle) > 5: # TODO: Check accuracy
+ ret = 'Actor idInkr could not be set to the value ' + str(middle) + ' (current value: ' + str(readback2) + ')'
+ success = False
+ test.sendFeedback(ret, success)
+ return
+ direction = 1.0
+ count = 0
+ test.log('Moving around middle point (+-' + str(span) + ')')
+ for setpoint1 in range(0, (loopTimes * 2)):
+ count = count + 1
+ sleep(5) # Settling time
+ p1.addSeries(LinePlotSeries("Run" + str(count)))
+ # RegionPositioner idInkr
+ for setpoint2 in range(0, span+1):
+ idInkr.put(translationStep*direction, timeout=None)
+ sleep(settlingTime) # Settling time
+ currentTime = float(java.lang.System.currentTimeMillis())
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ BtvsRaw = idBtvsRaw.get()
+ Btvs = idBtvs.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+ idDiff01 = MotorPosition - Btvs
+
+ # plots
+ scan.append([currentTime], [currentTime],
+ [Btvs, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, LogicalPosition,
+ BtvsRaw, MotorPosition, PotiRaw, PotiRef1Position, PotiRef2Position])
+ # plot error against position
+ p1.getSeries(count).appendData(MotorPosition, idDiff01)
+
+ # end of loop: invert direction
+ if setpoint2 == span:
+ direction = direction*(-1.0)
+ break
+
+ # check if reached end of span before the end of loop; if so, invert direction
+ if (direction > 0.0 and MotorPosition >= middle+span):
+ # invert direction and swap start with end of translation
+ direction = -1.0
+ test.log('End of span (' + str(MotorPosition) + '), changing direction to towards R1')
+ break
+ if (direction < 0.0 and MotorPosition <= middle-span):
+ # invert direction and swap start with end of translation
+ direction = 1.0
+ test.log('End of span (' + str(MotorPosition) + '), changing direction to towards R2')
+ break
+
+ # extract Status bits
+ endH = bool(int(MotorStatus) & 8) # Ref2 (high limit)
+ endL = bool(int(MotorStatus) & 4) # Ref1 (low limit)
+ # check if arrived to R1 or R2; if so, invert direction
+ if endH:
+ # invert direction and swap start with end of translation
+ direction = -1.0
+ test.log('Reached R2, changing direction to ' + str(direction))
+ break
+ elif endL:
+ # invert direction and swap start with end of translation
+ direction = 1.0
+ test.log('Reached R1, changing direction to ' + str(direction))
+ break
+
+ # check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): # error: abort test
+ test.sendFeedback('Motor switched off (bit# 4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): # error: abort test
+ test.sendFeedback('No motor link (bit# 5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): # error: abort test
+ test.sendFeedback('No poti link (bit# 6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): # error: abort test
+ test.sendFeedback('Calibration error (bit# 7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): # error: abort test
+ test.sendFeedback('Cannot get to R1 (bit# 8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): # error: abort test
+ test.sendFeedback('Cannot get to R2 (bit# 9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): # error: abort test
+ test.sendFeedback('Position measurement mismatch (bit# 10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): # error: abort test
+ test.sendFeedback('Movement timeout (bit# 11)', False)
+ return
+
+ # Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idBtvsRaw.close()
+ idBtvs.close()
+ idMotorPosition.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idInkr.close()
+ idInkrRb.close()
+ idCom.close()
+
+ scan.end()
+ ret = 'Slide moved back and forth (' + str(count) + ' runs)'
+ success = True
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/Motor Test 2.py.bak b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/Motor Test 2.py.bak
new file mode 100644
index 0000000..0ef89b0
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/Motor Test 2.py.bak
@@ -0,0 +1,209 @@
+# Script Motor Test 2 for production system
+# Go to absolute position A, then move +B steps, then -2B steps, then +2Bsteps (ie oscillate round centre position, logging after each movement); repeat N times
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+
+######### WRITE YOUR CODE HERE BELOW #############
+
+ # get parameters from the calling interface
+ try:
+ test.log("Running test with the following parameters:")
+ test.log(params)
+ middle = float(test.getParam("midPoint"))
+ loopTimes = int(test.getParam("repeatTimes"))
+ span = float(test.getParam("spanFromMidPoint"))
+ settlingTime = 0.2 #seconds
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ scan = ManualScan(['time [1/'+ str(1/settlingTime) + ' s]'], ['Motor Pos (IST3:2)', 'Poti Position (IST2:1)',
+ 'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)', 'Logical Position (IST:2)',
+ 'Motor Pos Raw (IST3:1)','Poti Pos From Beam (IST1:2)',
+ 'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+ # coloured plot (one colour per scan)
+ p1 = plot(None, name="Poti-Increment difference", context=plotName + " difference")[0]
+ p2 = plot(None, name="Poti-MotorPosition difference", context=plotName + " difference")[0]
+
+ # Creating channels: dimension 1
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idMotorPositionRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idPotiPosFromBeam = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ direction = 1.0
+ startDefault = middle - span
+ endDefault = middle + span
+ end = endDefault + 1
+ # find position: it will be the middle point of the test
+ test.log('Moving to middle point ' + str(middle))
+ idInkr.put(middle, timeout=None) # TODO: Set appropriate timeout
+ readback2 = idInkr.get()
+ if abs(readback2 - middle) > 5: # TODO: Check accuracy
+ ret = 'Actor idInkr could not be set to the value ' + str(middle) + ' (current value: ' + str(
+ readback2) + ')'
+ success = False
+ test.sendFeedback(ret, success)
+ return
+ start = readback2 + direction
+ countSteps = 0
+ count = 0
+ test.log('Moving around middle point (+-' + str(span) + ')')
+ for setpoint1 in range(0, (loopTimes * 2)):
+ count = count + 1
+ sleep(5) # Settling time
+ p1.addSeries(LinePlotSeries("Run" + str(count)))
+ # RegionPositioner idInkr
+ for setpoint2 in frange(start, end, direction):
+ readback1 = setpoint1
+ idInkr.put(setpoint2, timeout=None) # TODO: Set appropriate timeout
+ sleep(settlingTime) # Settling time
+ readback2 = idInkr.get()
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ MotorPositionRaw = idMotorPositionRaw.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosFromBeam = idPotiPosFromBeam.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+ idDiff01 = PotiPosition - MotorPosition
+ countSteps = countSteps + 1
+ scan.append([setpoint2], [setpoint2],
+ [MotorPosition, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, LogicalPosition,
+ MotorPositionRaw, PotiPosFromBeam, PotiRaw, PotiRef1Position, PotiRef2Position])
+ p1.getSeries(count).appendData(setpoint2, idDiff01)
+ if (direction > 0.0 and setpoint2 >= end - 1):
+ # invert direction and swap start with end of translation
+ end = startDefault - 1
+ start = setpoint2 - direction
+ direction = -1.0
+ test.log('End of span (' + str(setpoint2) + '), changing direction to ' + str(direction))
+ break
+ if (direction < 0.0 and setpoint2 <= end + 1):
+ # invert direction and swap start with end of translation
+ end = endDefault + 1
+ start = setpoint2 - direction
+ direction = 1.0
+ test.log('End of span (' + str(setpoint2) + '), changing direction to ' + str(direction))
+ break
+
+
+ #extract Status bits
+ endH = bool(int(MotorStatus) & 8) #Ref2 (high limit)
+ endL = bool(int(MotorStatus) & 4) #Ref1 (low limit)
+
+ #check if arrived to R1 or R2; if so, invert direction
+ if endH:
+ # invert direction and swap start with end of translation
+ end = startDefault - 1
+ start = setpoint2 - direction
+ direction = -1.0
+ test.log('Reached R2 switch, changing direction to ' + str(direction))
+ break
+ elif endL:
+ # invert direction and swap start with end of translation
+ end = endDefault + 1
+ start = setpoint2 - direction
+ direction = 1.0
+ test.log('Reached R1 switch, changing direction to ' + str(direction))
+ break
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ # Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idMotorPositionRaw.close()
+ idMotorPosition.close()
+ idPotiPosFromBeam.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idInkr.close()
+ idInkrRb.close()
+
+ scan.end()
+ ret = 'Slide moved back and forth (' + str(count) + ' runs)'
+ success = True
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/help.html
new file mode 100644
index 0000000..1fa73d6
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 2/help.html
@@ -0,0 +1,16 @@
+
+
+Short Description
+Oscillate around a specified position
+Details
+Go to absolute position A, then move +B steps, then -2B steps, then +2Bsteps (ie oscillate round centre position, logging after each movement); repeat N times
+Parameters
+repeatTimes Repeat N times
+midPoint Position A [mm]
+spanFromMidPoint The B steps [integer]
+translationStep Length of the movement per each traslation step [mm]
+Contact
+Marco Boccioli
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/.config
new file mode 100644
index 0000000..79d889a
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/.config
@@ -0,0 +1,7 @@
+name=Motor Test 3
+description=Moves from CCW to CW as a series of discrete translations (C times) logs after each translation. When end switch is encountered change direction. Repeat N times
+
+
+#optional parameters. Description is compulsory. Syntax&
+#parameters=&&[;&&]
+parameters=repeatTimes&1&Repeat N times;translation&2&Translation C steps
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/Motor Test 3.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/Motor Test 3.py
new file mode 100644
index 0000000..1a8d2b1
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/Motor Test 3.py
@@ -0,0 +1,212 @@
+#Script Motor Test 3
+#Moves from CCW to CW as a series of discrete translations (C times) logs after each translation. When end switch is encountered change direction. Repeat N times
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+def startTest(testName, DEVICE, params):
+ #by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ #plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ #put the whole custom code under try/catch
+ try:
+ #get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ #init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+
+######### WRITE YOUR CODE HERE BELOW #############
+ #get parameters from the calling interface
+ try:
+ test.log("Running test Motor Test 3 with the following parameters:")
+ test.log(params)
+ loopTimes = int(test.getParam("repeatTimes")) # C times
+ translation = int(test.getParam("translation")) # Increment mm
+ samplePeriod = 0.2 #seconds
+ except:
+ test.log("Could not retrieve testing parameters: ", sys.exc_info()[0])
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], [
+ 'Btvs Poti Position (IST3:2)',
+ 'Mcs Poti Position (IST2:1)',
+ 'Motor Status (STA:1)',
+ 'Inkr (INKR:2)',
+ 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)',
+ 'Logical Position (IST:2)',
+ 'Btvs Raw (IST3:1)',
+ 'Motor Position (IST1:2)',
+ 'Poti Raw (POSA:1)',
+ 'Poti Ref1 Position (REF1:1)',
+ 'Poti Ref2 Position (REF2:1)'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+ p1 = plot(None, name = "Motor Position - Btvs Poti Position", context = plotName + " Motor-Poti difference")[0]
+ # Creating channels
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idBtvsRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idBtvs = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # motor commands [0=Stop; 1=Calibrate; 2=gotoR1; 3=gotoR2]
+
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback( ret, success)
+ return
+
+
+ #go to position at Low end switch: it will be the starting point of the test
+ test.log('Homing')
+ idCom.put(2, timeout=10) # go to R1
+ # wait for motor to get to Ref1
+ for setpoint1 in range(0, 100):
+ sleep( 2 ) # Settling time
+ MotorStatus = idMotorStatus.get()
+ if bool(int(MotorStatus) & 4): # arrived at Ref1 (low limit)
+ break
+ if not bool(int(MotorStatus) & 4): # not arrived at Ref1 (low limit)
+ ret = 'Could not reach Ref1'
+ success = False
+ test.sendFeedback( ret, success)
+ return
+
+ direction = 1
+ countSteps = 0
+ test.log('Starting testing sequence')
+ count = 0
+ for setpoint1 in range(0, (loopTimes*2)):
+ count = count + 1
+ sleep( 2 ) # Settling time
+ # add multi cuve plot
+ p1.addSeries(LinePlotSeries("Run"+str(count)))
+
+ for setpoint2 in frange(0, 1000000):
+
+ idInkr.put(translation*direction, timeout=10)
+ sleep(samplePeriod) # Settling time
+ currentTime = float(java.lang.System.currentTimeMillis())
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ BtvsRaw = idBtvsRaw.get()
+ Btvs = idBtvs.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+ idDiff01 = MotorPosition-Btvs
+ countSteps = countSteps + (translation*direction)
+
+ # multi plot
+ scan.append([currentTime], [currentTime],[
+ Btvs,
+ PotiPosition,
+ MotorStatus,
+ Inkr,
+ InkrRb,
+ Diameter,
+ LogicalPosition,
+ BtvsRaw,
+ MotorPosition,
+ PotiRaw,
+ PotiRef1Position,
+ PotiRef2Position])
+ # draw diff against steps
+ p1.getSeries(count).appendData(countSteps, idDiff01)
+
+ #extract Status bits
+ endH = bool(int(MotorStatus) & 8) #Ref2 (high limit)
+ endL = bool(int(MotorStatus) & 4) #Ref1 (low limit)
+
+ #check if arrived to R1 or R2
+ if endH:
+ #invert direction and swap start with end of translation
+ direction = -1
+ test.log('Reached R2 switch, changing target to R1')
+ break
+ elif endL:
+ #invert direction and swap start with end of translation
+ direction = 1
+ test.log('Reached R1 switch, changing target to R2')
+ break
+
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ #Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idBtvsRaw.close()
+ idBtvs.close()
+ idMotorPosition.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idInkr.close()
+ idInkrRb.close()
+ idCom.close()
+
+ scan.end()
+ ret = 'Slide moved back and forth (' + str(count) + ' runs)'
+ success = True
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ #just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ #generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+#launch the test
+startTest(test, device, parameters)
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/help.html
new file mode 100644
index 0000000..6fef1db
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Motor Test 3/help.html
@@ -0,0 +1,13 @@
+
+
+Description
+Moves from CCW to CW as a series of discrete translations (C steps) logs after each translation. When end switch is encountered change direction. Repeat N times
+Parameters
+repeatTimes How many N times the test is repeated
+translation How many C steps are done for one translation
+
+Contact
+boccioli_m
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/.config
new file mode 100644
index 0000000..895fbd5
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/.config
@@ -0,0 +1,3 @@
+name=Move Ref 1
+description=Moves to the Reference 1 Position
+filename=Move Ref 1.xml
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1 - Copy.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1 - Copy.py
new file mode 100644
index 0000000..ebcd9cb
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1 - Copy.py
@@ -0,0 +1,90 @@
+
+###### DO NOT MODIFY THE CODE BELOW ######
+def startTest(testName, DEVICE, params):
+ #get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ #by default, failed
+ ret = 'Test failed'
+ success = False
+ #plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+###### WRITE YOUR CODE HERE BELOW #######
+ #get parameters from the calling interface
+ print_log(testName, DEVICE, 'testpath: ' + testPath )
+ print_log(testName, DEVICE, 'parameters:' + str( params) )
+ print_log(testName, DEVICE, 'device: ' + DEVICE )
+ scan = ManualScan(['time'], ['idMotorStep', 'idPotiPosition', 'idPotiRef1Position','idMotorStep-idPotiPosition'] , [0.0], [30.0], [20])
+ scan.setPlotTitle(plotName)
+ scan.start()
+
+ #Creating channels: dimension 1
+ try:
+ idCom = Channel(DEVICE+':COM:2', type = 'd') #current position as from motor step counter [mm]
+ idMotorStep = Channel(DEVICE+':IST3:2', type = 'd') #current position as from motor step counter [mm]
+ idPotiPosFromBeam = Channel(DEVICE+':IST1:2', type = 'd') #current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE+':IST2:1', type = 'd') #current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE+':REF1:1', type = 'd') #R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE+':REF2:1', type = 'd') #R2 position as from potentiometer [mm]
+
+ except:
+ sendFeedback(testPath, testName, DEVICE, 'Unable to create channel - ' + traceback.format_exc(), False)
+ #raise Exception('Unable to create channel - ' + traceback.format_exc())
+ return
+
+ idCom.put('3', timeout=None) # go to R1
+ print_log(testName, DEVICE, 'Moving to reference point')
+ #scan quickly the output during some seconds
+ detector4 = idPotiPosition.get()
+ detector6 = idPotiRef2Position.get()
+ timeElapsed=0
+ while detector4>detector6 and timeElapsed<600:
+ #Detector time
+ detector1 = float(java.lang.System.currentTimeMillis())
+
+ detector2 = idMotorStep.get()
+ detector3 = idPotiPosFromBeam.get()
+ detector4 = idPotiPosition.get()
+ detector5 = idPotiRef1Position.get()
+ detector6 = idPotiRef2Position.get()
+ diff1 = detector2-detector4
+ scan.append ([detector1], [detector1], [detector2, detector4, detector5, diff1])
+ sleep( 0.1 ) # Settling time
+ timeElapsed=timeElapsed+1
+
+ #Closing channels
+ idCom.close()
+ idMotorStep.close()
+ idPotiPosFromBeam.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ print_log(testName, DEVICE, ' Reference point reached')
+
+########## END OF YOUR CODE ###########
+
+###### DO NOT MODIFY THE CODE BELOW ######
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+
+#prepare and send feedback to calling tool
+def sendFeedback(testPath, testName, DEVICE, returnString, testPassed):
+ print_log(testName, DEVICE, 'End of test. Result:')
+ print_log(testName, DEVICE, 'Test path: ' + testPath)
+ print_log(testName, DEVICE, 'Test name: ' + testName )
+ print_log(testName, DEVICE, 'Device: ' + DEVICE)
+ print_log(testName, DEVICE, 'Test passed: ' + str(testPassed))
+ print_log(testName, DEVICE, 'Return string: ' + returnString)
+ ret = [testPath, DEVICE, returnString, testPassed]
+ set_return(ret)
+
+def print_log(testName, DEVICE, text):
+ time.ctime()
+ now = time.strftime('%Y.%m.%d %H:%M:%S')
+ print now + ' ' + DEVICE + ' - ' + testName + ': ' + text
+
+import sys, inspect, os, traceback
+#get test arguments
+DEVICE = device
+testName = test
+params = parameters
+#launch the test
+startTest(testName, DEVICE, params)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1.py
new file mode 100644
index 0000000..0a631ac
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1.py
@@ -0,0 +1,144 @@
+
+# Drive to R1
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+ samplePeriod = 0.1
+
+######### WRITE YOUR CODE HERE BELOW #############
+ scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], ['Motor Pos (IST3:2)', 'Poti Position (IST2:1)',
+ 'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)', 'Com (COM:2)', 'Logical Position (IST:2)',
+ 'Motor Pos Raw (IST3:1)','Poti Pos From Beam (IST1:2)',
+ 'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idMotorPositionRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idPotiPosFromBeam = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+
+ idCom.put('3', timeout=None) # go to R1
+ sleep( samplePeriod ) # Settling time
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback( ret, success)
+ return
+
+ #scan for a while to collect data
+ for setpoint1 in range(0, 10000):
+ sleep( samplePeriod ) # Settling time
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ MotorPositionRaw = idMotorPositionRaw.get()
+ Com = idCom.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosFromBeam = idPotiPosFromBeam.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+
+ scan.append([setpoint2], [setpoint2],
+ [MotorPosition, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, Com, LogicalPosition,
+ MotorPositionRaw, PotiPosFromBeam, PotiRaw, PotiRef1Position, PotiRef2Position])
+
+ if (MotorStatus & int('1',2))==0: #device finished calibration (bit#1)
+ #give the device some time before stating that it has really finished
+ countDeviceInModeIdle = countDeviceInModeIdle +1
+ if countDeviceInModeIdle == 10:
+ break
+ else:
+ countDeviceInModeIdle = 0
+
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ #Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idMotorPositionRaw.close()
+ idCom.close()
+ idMotorPosition.close()
+ idPotiPosFromBeam.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idInkr.close()
+ idInkrRb.close()
+ scan.end()
+
+ ret = 'Moved to R1'
+ success = True
+ scan.end()
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1.xml
new file mode 100644
index 0000000..5b81083
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/Move Ref 1.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ 3000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/help.html
new file mode 100644
index 0000000..627f6dd
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 1/help.html
@@ -0,0 +1,13 @@
+
+
+Short Description
+Go to reference position R1
+Details
+Go to reference position R1 (command '3').
+Parameters
+none
+Contact
+Marco Boccioli
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/.config
new file mode 100644
index 0000000..0d83dba
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/.config
@@ -0,0 +1,3 @@
+name=Move Ref 2
+description=Moves to the Reference 2 Position
+filename=Move Ref 2.xml
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/Move Ref 2.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/Move Ref 2.py
new file mode 100644
index 0000000..ea100da
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/Move Ref 2.py
@@ -0,0 +1,144 @@
+
+# Drive to R2
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+ samplePeriod = 0.1
+
+######### WRITE YOUR CODE HERE BELOW #############
+ scan = ManualScan(['time [1/'+ str(1/samplePeriod) + ' s]'], ['Motor Pos (IST3:2)', 'Poti Position (IST2:1)',
+ 'Motor Status (STA:1)', 'Inkr (INKR:2)', 'InkrRb (INKRRB:2)',
+ 'Diameter (DIAM:2)', 'Com (COM:2)', 'Logical Position (IST:2)',
+ 'Motor Pos Raw (IST3:1)','Poti Pos From Beam (IST1:2)',
+ 'Poti Raw (POSA:1)', 'Poti Ref1 Position (REF1:1)', 'Poti Ref2 Position (REF2:1)'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+
+ try:
+ idMotorStatus = Channel(DEVICE + ':STA:1' , type = 'd') # DSP device_status reg
+ idLogicalPosition = Channel(DEVICE + ':IST:2' , type = 'd') # Shows current position in logical units as calculated from motor step counter [1..n]
+ idPotiRaw = Channel(DEVICE + ':POSA:1' , type = 'd') # poti raw data [ADC units]
+ idMotorPositionRaw = Channel(DEVICE + ':IST3:1' , type = 'd') # shows current position in steps as as obtained from motor step counter [steps]
+ idInkr = Channel(DEVICE + ':INKR:2' , type = 'd') # move relative distance (positive means towards R2) [mm]
+ idInkrRb = Channel(DEVICE + ':INKRRB:2' , type = 'd') # readback of move relative distance (positive means towards R2) [mm]
+ idDiameter = Channel(DEVICE + ':DIAM:2' , type = 'd') # collimator diameter [mm]
+ idCom = Channel(DEVICE + ':COM:2' , type = 'd') # current position as from motor step counter [mm]
+ idMotorPosition = Channel(DEVICE + ':IST3:2' , type = 'd') # current position as from motor step counter [mm]
+ idPotiPosFromBeam = Channel(DEVICE + ':IST1:2' , type = 'd') # current position from beam as from potentiometer [mm]
+ idPotiPosition = Channel(DEVICE + ':IST2:1' , type = 'd') # current position as from potentiometer [mm]
+ idPotiRef1Position = Channel(DEVICE + ':REF1:1' , type = 'd') # R1 position as from potentiometer [mm]
+ idPotiRef2Position = Channel(DEVICE + ':REF2:1' , type = 'd') # R2 position as from potentiometer [mm]
+
+ idCom.put('4', timeout=None) # go to R2
+ sleep( samplePeriod ) # Settling time
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback( ret, success)
+ return
+
+ #scan for a while to collect data
+ for setpoint1 in range(0, 10000):
+ sleep( samplePeriod ) # Settling time
+
+ MotorStatus = idMotorStatus.get()
+ LogicalPosition = idLogicalPosition.get()
+ PotiRaw = idPotiRaw.get()
+ MotorPositionRaw = idMotorPositionRaw.get()
+ Com = idCom.get()
+ MotorPosition = idMotorPosition.get()
+ PotiPosFromBeam = idPotiPosFromBeam.get()
+ PotiPosition = idPotiPosition.get()
+ PotiRef1Position = idPotiRef1Position.get()
+ PotiRef2Position = idPotiRef2Position.get()
+ Diameter = idDiameter.get()
+ Inkr = idInkr.get()
+ InkrRb = idInkrRb.get()
+
+
+ scan.append([setpoint2], [setpoint2],
+ [MotorPosition, PotiPosition, MotorStatus, Inkr, InkrRb, Diameter, Com, LogicalPosition,
+ MotorPositionRaw, PotiPosFromBeam, PotiRaw, PotiRef1Position, PotiRef2Position])
+
+ if (MotorStatus & int('1',2))==0: #device finished calibration (bit#1)
+ #give the device some time before stating that it has really finished
+ countDeviceInModeIdle = countDeviceInModeIdle +1
+ if countDeviceInModeIdle == 10:
+ break
+ else:
+ countDeviceInModeIdle = 0
+
+ #check if any error bit is raised
+ if bool(int(MotorStatus) & int('10000',2)): #error: abort test
+ test.sendFeedback('Motor switched off (bit#4)', False)
+ return
+ if bool(int(MotorStatus) & int('100000',2)): #error: abort test
+ test.sendFeedback('No motor link (bit#5)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000',2)): #error: abort test
+ test.sendFeedback('No poti link (bit#6)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000',2)): #error: abort test
+ test.sendFeedback('Calibration error (bit#7)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R1 (bit#8)', False)
+ return
+ if bool(int(MotorStatus) & int('1000000000',2)): #error: abort test
+ test.sendFeedback('Cannot get to R2 (bit#9)', False)
+ return
+ if bool(int(MotorStatus) & int('10000000000',2)): #error: abort test
+ test.sendFeedback('Position measurement mismatch (bit#10)', False)
+ return
+ if bool(int(MotorStatus) & int('100000000000',2)): #error: abort test
+ test.sendFeedback('Movement timeout (bit#11)', False)
+ return
+
+ #Closing channels
+ idMotorStatus.close()
+ idLogicalPosition.close()
+ idPotiRaw.close()
+ idMotorPositionRaw.close()
+ idCom.close()
+ idMotorPosition.close()
+ idPotiPosFromBeam.close()
+ idPotiPosition.close()
+ idPotiRef1Position.close()
+ idPotiRef2Position.close()
+ idDiameter.close()
+ idInkr.close()
+ idInkrRb.close()
+ scan.end()
+
+ ret = 'Moved to R2'
+ success = True
+ scan.end()
+
+################ END OF YOUR CODE ################
+###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+# launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/Move Ref 2.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/Move Ref 2.xml
new file mode 100644
index 0000000..2cf0a0a
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/Move Ref 2.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ 3000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/help.html
new file mode 100644
index 0000000..91f86e9
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Move Ref 2/help.html
@@ -0,0 +1,13 @@
+
+
+Short Description
+Go to reference position R2
+Details
+Go to reference position R2 (command '4').
+Parameters
+none
+Contact
+Marco Boccioli
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Stop/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Stop/.config
new file mode 100644
index 0000000..89d5a5f
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Stop/.config
@@ -0,0 +1,3 @@
+name=Stop
+description=Sends the STOP command
+filename=Stop.xml
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Stop/Stop.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Stop/Stop.xml
new file mode 100644
index 0000000..27228d3
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/Stop/Stop.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ 3000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/.config
new file mode 100644
index 0000000..2f1d86a
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/.config
@@ -0,0 +1,4 @@
+#Fri Sep 11 13&31&33 CEST 2015
+name=monitorAllParams
+parameters=monitorTime&0.1&This is the parameter n.1 with unit [unit];samplingDelay&30&This is the parameter n.2 with unit [unit];
+description=d
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/help.html
new file mode 100644
index 0000000..0d6eb66
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/help.html
@@ -0,0 +1,13 @@
+
+
+Description
+d
+Parameters
+monitorTime This is the parameter n.1 with unit [unit]
+samplingDelay This is the parameter n.2 with unit [unit]
+
+Contact
+boccioli_m
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/monitorAllParams.py b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/monitorAllParams.py
new file mode 100644
index 0000000..529764f
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/monitorAllParams/monitorAllParams.py
@@ -0,0 +1,145 @@
+# Test name: monitorAllParams
+# d
+
+###### Init - DO NOT MODIFY THE CODE BELOW ######
+global sys, inspect, os, traceback
+import sys, inspect, os, traceback
+
+
+def startTest(testName, DEVICE, params):
+ # by default, assume the test failed
+ ret = 'Test failed'
+ success = False
+ # plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+ # put the whole custom code under try/catch
+ try:
+ # get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ # init the testing tool class. It can be sued in the following ways:
+ test = TestingTool(testName, testPath, DEVICE, params)
+
+ ################ END OF Init #####################
+ ######### WRITE YOUR CODE HERE BELOW #############
+
+ """
+ All the code in this section ###..YOUR CODE..### can be modified/deleted.
+ It must be indented to the same level as this comment
+ -----------------------------------
+ GETTING INPUTS:
+ If needed, the following variables are available:
+ testPath string, path of this test file
+ testName string, name of this test
+ DEVICE string, device for which the test must run (typically it is the beginning of a process variable name)
+ -----------------------------------
+ GETTING TEST PARAMETERS:
+ if you need to get parameters for the test, use (casting may be necessary):
+ myParamValue = test.getParam('myParamName')
+ see the test config for the list of parameters specific to the test.
+ -----------------------------------
+ SETTING OUTPUTS:
+ ret string, a text summarizing the result of the test. It must be set before the end of your code.
+ success bool, True = test successful. It must be set before the end of your code.
+ test.sendFeedback(ret,success) method that ends the testing script and gives the report to the calling application.
+ Examples:
+
+ whenever the code must quit (i.e. after an error), you must end with:
+ ret = 'here is some info on what failed on the test'
+ success = false
+ test.sendFeedback(ret, success)
+
+ whenever the code is finished successfully, you must end with:
+ ret = 'here is some info on the success of the test'
+ success = true
+ test.sendFeedback(ret, success)
+ -----------------------------------
+ LOG INFO:
+ when some information must be shown on the log, use:
+ test.log('test to log')
+ """
+
+ ########## Example (can be removed) ######
+ # print the list of parameters passed. If any error, stop and send feedback
+ test.log("Example - Test name: " + testName)
+ test.log("Example - Device name: " + DEVICE)
+ try:
+ test.log("Running test Initialise with the following parameters:")
+ test.log(params)
+ # If present, use the parameters here below for your test script. You might need to change the casting
+ monitorTime = float(test.getParam('monitorTime')) ; samplingDelay = float(test.getParam('samplingDelay')) ;
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+ return
+
+ # loop to read channels for a while and plot the channels values.
+ # initialise plot tab with 2 plots
+ scan = ManualScan(['sample'], ['Motor Status (MSTA)', 'Motor Position (VAL)'])
+ # set plot name(tab title)
+ scan.setPlotTitle(plotName)
+ # start plots. See further below how to add points to the plots
+ scan.start()
+
+ # IMPORTANT: if the test failed, write the report into the variables ret and success.
+ # for example, write the following:
+ ret = "Example - Error, the test failed because...."
+ success = False
+ # set up connection to channels. "type" of data can be "d" (= double), "l" (= long)
+ try:
+ pv_motor_msta = Channel(DEVICE + ':MOTOR.MSTA', type='d')
+ pv_motor_val = Channel(DEVICE + ':MOTOR.VAL', type='d')
+ except:
+ # prepare return information: return text
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ # prepare return information: return success
+ success = False
+ # send return information
+ test.sendFeedback(ret, success)
+ return
+ # take 100 samples of the channels
+ for sample in range(0, 100):
+ readback1 = sample
+ sleep(0.1) # Settling time
+ # get value
+ motor_msta = pv_motor_msta.get()
+ # get value
+ motor_val = pv_motor_val.get()
+ # add values to plot
+ scan.append([sample], [readback1], [motor_msta, motor_val])
+
+ # Closing channels
+ pv_motor_msta.close()
+ pv_motor_val.close()
+
+ # IMPORTANT: if the test was successful, write the report into the variables ret and success.
+ # for example, write the following:
+ ret = "Example - Test successful, here some detail: ..."
+ success = True
+ test.sendFeedback(ret, success)
+ # once the test is finished, no need to do anything. The code below yours will do the rest.
+ ################ End of Example ##########
+
+ ################ END OF YOUR CODE ################
+ ###### Final - DO NOT MODIFY THE CODE BELOW ######
+
+ # just in case the feedback was forgotten
+ test.sendFeedback(ret, success)
+ except (KeyboardInterrupt):
+ # user stop error handler
+ ret = 'Test stopped by user.'
+ success = False
+ test.sendFeedback(ret, success)
+ except:
+ # generic error handler
+ ret = traceback.format_exc()
+ success = False
+ test.sendFeedback(ret, success)
+
+
+# launch the test
+startTest(test, device, parameters)
+
+################ END OF Final ####################
+#### IF NEEDED, ADD YOUR FUNCTIONS HERE BELOW ####
+# def yourCustomFunction:
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests pro/what is on damir test tool.txt b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/what is on damir test tool.txt
new file mode 100644
index 0000000..e69ec71
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests pro/what is on damir test tool.txt
@@ -0,0 +1,8 @@
+Test 1 plotted curves
+
+CCWsteps
+CCWpoti
+CWsteps
+CWpoti
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate test vme/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate test vme/.config
new file mode 100644
index 0000000..7ec0790
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate test vme/.config
@@ -0,0 +1,12 @@
+name=Calibrate test vme
+description=Calibrates the device
+filename=Calibrate.xml
+help = \
+This test sends a command to the low level firmware which controls the collimators \n\
+requesting that it calibrates itself. \n\n\
+Calibration involves moving to the R1 and R2 reference positions and measuring the \n\
+number of steps required to do so. At the end of the sequence the default collimator \n\
+will be selected. \n\n\
+During the course of the expected calibration period (45-70 seconds) the test \n\
+procedure will plot the values of all critical system variables. \n\n\
+For further information please consult Valery Ovinnikov.
\
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate test vme/Calibrate test vme.py b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate test vme/Calibrate test vme.py
new file mode 100644
index 0000000..d47c358
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate test vme/Calibrate test vme.py
@@ -0,0 +1,136 @@
+#Script imported from: Calibrate.xml
+
+###### DO NOT MODIFY THE CODE BELOW ######
+import sys, inspect, os, traceback, time
+global print_log, sendFeedback
+def startTest(testName, DEVICE, params):
+ try:
+ import traceback
+ #get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ #by default, failed
+ ret = 'Test failed'
+ success = False
+ #plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+####### WRITE YOUR CODE HERE BELOW #######
+
+ #Pre-actions
+ try:
+ caput(DEVICE+':INIT.PROC', '1')
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+
+ #TODO: Set the diplay names of positioners and detectors
+ scan = ManualScan(['id000000'], ['id000001', 'id000002', 'id000003', 'id000004', 'id000005', 'id000006', 'id000007', 'id000008', 'id000009', 'id000010', 'idResult'] , [0.0], [1000.0], [1000])
+ scan.start()
+
+ #Creating channels: dimension 1
+ #PseudoPositioner id000000
+ #ScalarDetector id000001
+ id000001 = Channel(DEVICE+':MOTOR.MSTA', type = 'd')
+ #ScalarDetector id000002
+ id000002 = Channel(DEVICE+':MOTOR.RVAL', type = 'd')
+ #ScalarDetector id000003
+ id000003 = Channel(DEVICE+':MOTOR.VAL', type = 'd')
+ #ScalarDetector id000004
+ id000004 = Channel(DEVICE+':MOTOR.ATHM', type = 'd')
+ #ScalarDetector id000005
+ id000005 = Channel(DEVICE+':MOTOR.LLS', type = 'd')
+ #ScalarDetector id000006
+ id000006 = Channel(DEVICE+':MOTOR.HLS', type = 'd')
+ #ScalarDetector id000007
+ id000007 = Channel(DEVICE+':ENCODERraw', type = 'd')
+ #ScalarDetector id000008
+ id000008 = Channel(DEVICE+':ENCODER', type = 'd')
+ #ScalarDetector id000009
+ id000009 = Channel(DEVICE+':RDY', type = 'd')
+ #ScalarDetector id000010
+ id000010 = Channel(DEVICE+':ILK', type = 'd')
+
+ #Dimension 1
+ #PseudoPositioner id000000
+ for setpoint1 in range(0, 1000):
+ readback1 = setpoint1
+ sleep( 0.05 ) # Settling time
+ #Detector id000001
+ detector1 = id000001.get()
+ #Detector id000002
+ detector2 = id000002.get()
+ #Detector id000003
+ detector3 = id000003.get()
+ #Detector id000004
+ detector4 = id000004.get()
+ #Detector id000005
+ detector5 = id000005.get()
+ #Detector id000006
+ detector6 = id000006.get()
+ #Detector id000007
+ detector7 = id000007.get()
+ #Detector id000008
+ detector8 = id000008.get()
+ #Detector id000009
+ detector9 = id000009.get()
+ #Detector id000010
+ detector10 = id000010.get()
+ #Manipulation idResult
+ #Variable Mappings
+ ready = detector9
+ interlock = detector10
+ count = setpoint1
+ if count < 800:
+ idResult = (0, "Note: the "+DEVICE+" calibration procedure did not complete.")
+ if ready == 1 and interlock == 1:
+ #print "The "+DEVICE+" drive was successfully initialised. The RDY and ILK signals indicate the drive is ready."
+ ret = 'Drive successfully initialised'
+ success = True
+ else:
+ #print "The RS calibration procedure failed. The RDY and ILK signals indicate the drive was NOT ready at the expected time (after 40s)."
+ ret = 'The RDY and ILK signals indicate the drive was NOT ready at the expected time (after 40s).'
+ success = False
+ scan.append ([setpoint1], [readback1], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9, detector10, idResult])
+
+ #Closing channels
+ id000001.close()
+ id000002.close()
+ id000003.close()
+ id000004.close()
+ id000005.close()
+ id000006.close()
+ id000007.close()
+ id000008.close()
+ id000009.close()
+ id000010.close()
+
+ scan.end()
+############# END OF YOUR CODE ###########
+###### DO NOT MODIFY THE CODE BELOW ######
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ except:
+ ret = traceback.format_exc()
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+
+#prepare and send feedback to calling tool
+def sendFeedback(testPath, testName, DEVICE, returnString, testPassed):
+ print_log(testName, DEVICE, 'End of test. Result:')
+ print_log(testName, DEVICE, 'Test path: ' + testPath)
+ print_log(testName, DEVICE, 'Test name: ' + testName)
+ print_log(testName, DEVICE, 'Device: ' + DEVICE)
+ print_log(testName, DEVICE, 'Test passed: ' + str(testPassed))
+ print_log(testName, DEVICE, 'Return string: ' + returnString)
+ ret = [testPath, DEVICE, returnString, testPassed]
+ set_return(ret)
+
+def print_log(testName, DEVICE, text):
+ time.ctime()
+ now = time.strftime('%Y.%m.%d %H:%M:%S')
+ print now + ' ' + DEVICE + ' - ' + testName + ': ' + text
+
+#launch the test
+startTest(test, device, parameters)
+
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/.config
new file mode 100644
index 0000000..5e59d3d
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/.config
@@ -0,0 +1,12 @@
+name=Calibrate
+description=Calibrates the device
+filename=Calibrate.xml
+help = \
+This test sends a command to the low level firmware which controls the collimators \n\
+requesting that it calibrates itself. \n\n\
+Calibration involves moving to the R1 and R2 reference positions and measuring the \n\
+number of steps required to do so. At the end of the sequence the default collimator \n\
+will be selected. \n\n\
+During the course of the expected calibration period (45-70 seconds) the test \n\
+procedure will plot the values of all critical system variables. \n\n\
+For further information please consult Valery Ovinnikov.
\
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/Calibrate.py b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/Calibrate.py
new file mode 100644
index 0000000..8bb4faa
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/Calibrate.py
@@ -0,0 +1,79 @@
+#Script imported from: Calibrate.xml
+
+ret = 'Calibration failed'
+success = False
+
+try:
+ #Pre-actions: 1 = calibrate
+ caput(DEVICE+':COM:2', 1)
+ #Creating channels: dimension 1
+ #PseudoPositioner id000000
+ #ScalarDetector id000001
+ id000001 = Channel(DEVICE+':STA:1', type = 'd')
+ #ScalarDetector id000003
+ id000003 = Channel(DEVICE+':IST:2', type = 'd')
+ #ScalarDetector id000004
+ id000004 = Channel(DEVICE+':DIAM:2', type = 'd')
+ #ScalarDetector id000005
+ id000005 = Channel(DEVICE+':IST1:1', type = 'd')
+ #ScalarDetector id000006
+ id000006 = Channel(DEVICE+':IST1:2', type = 'd')
+ #ScalarDetector id000007
+ id000007 = Channel(DEVICE+':IST2:1', type = 'd')
+ #ScalarDetector id000008
+ id000008 = Channel(DEVICE+':IST2:2', type = 'd')
+ #ScalarDetector id000009
+ id000009 = Channel(DEVICE+':IST3:1', type = 'd')
+ #ScalarDetector id000010
+ id000010 = Channel(DEVICE+':IST3:2', type = 'd')
+except:
+ print "Unexpected error:", sys.exc_info()[0]
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ raise Exception('Unable to create channel - ' + traceback.format_exc())
+ sys.exit()
+
+#TODO: Set the diplay names of positioners and detectors
+scan = ManualScan(['id000000'], ['id000001', 'id000003', 'id000004', 'id000005', 'id000006', 'id000007', 'id000008', 'id000009', 'id000010'] , [0.0], [900.0], [900])
+scan.start()
+
+#Dimension 1
+#PseudoPositioner id000000
+for setpoint1 in range(0, 900):
+ readback1 = setpoint1
+ sleep( 0.1 ) # Settling time
+ #Detector id000001
+ detector1 = id000001.get()
+ #Detector id000003
+ detector2 = id000003.get()
+ #Detector id000004
+ detector3 = id000004.get()
+ #Detector id000005
+ detector4 = id000005.get()
+ #Detector id000006
+ detector5 = id000006.get()
+ #Detector id000007
+ detector6 = id000007.get()
+ #Detector id000008
+ detector7 = id000008.get()
+ #Detector id000009
+ detector8 = id000009.get()
+ #Detector id000010
+ detector9 = id000010.get()
+ scan.append ([setpoint1], [readback1], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9])
+
+#Closing channels
+id000001.close()
+id000003.close()
+id000004.close()
+id000005.close()
+id000006.close()
+id000007.close()
+id000008.close()
+id000009.close()
+id000010.close()
+
+scan.end()
+
+ret = 'Calibration done'
+success = True
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/Calibrate.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/Calibrate.xml
new file mode 100644
index 0000000..7e5028f
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Calibrate/Calibrate.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ 900
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Check Status/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests/Check Status/.config
new file mode 100644
index 0000000..15def22
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Check Status/.config
@@ -0,0 +1,5 @@
+name=Check Status
+description=Monitors the success of the device
+filename=Check Status.xml
+help= \
+This test plots the success of all relevant drive signals for a period of 15 seconds.
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Check Status/Check Status.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests/Check Status/Check Status.xml
new file mode 100644
index 0000000..b9371fe
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Check Status/Check Status.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+ 3000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/.config
new file mode 100644
index 0000000..3589d0d
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/.config
@@ -0,0 +1,3 @@
+name=Drive Out
+description=Drives the Collimator to the Out Position
+filename=Drive Out.xml
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/Drive Out.py b/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/Drive Out.py
new file mode 100644
index 0000000..704a950
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/Drive Out.py
@@ -0,0 +1,82 @@
+#Script imported from: Drive Out.xml
+import traceback
+
+#by default, failed
+ret = 'Test failed'
+success = False
+
+try:
+ #Pre-actions: 2 = drive out
+ caput(DEVICE+':COM:2', 2)
+ #Creating channels: dimension 1
+ #PseudoPositioner id000000
+ #ScalarDetector id000001
+ id000001 = Channel(DEVICE+':STA:1', type = 'd')
+ #ScalarDetector id000003
+ id000003 = Channel(DEVICE+':IST:2', type = 'd')
+ #ScalarDetector id000004
+ id000004 = Channel(DEVICE+':DIAM:2', type = 'd')
+ #ScalarDetector id000005
+ id000005 = Channel(DEVICE+':IST1:1', type = 'd')
+ #ScalarDetector id000006
+ id000006 = Channel(DEVICE+':IST1:2', type = 'd')
+ #ScalarDetector id000007
+ id000007 = Channel(DEVICE+':IST2:1', type = 'd')
+ #ScalarDetector id000008
+ id000008 = Channel(DEVICE+':IST2:2', type = 'd')
+ #ScalarDetector id000009
+ id000009 = Channel(DEVICE+':IST3:1', type = 'd')
+ #ScalarDetector id000010
+ id000010 = Channel(DEVICE+':IST3:2', type = 'd')
+except:
+ print "Unexpected error:", sys.exc_info()[0]
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ raise Exception('Unable to create channel - ' + traceback.format_exc())
+ sys.exit()
+
+#TODO: Set the diplay names of positioners and detectors
+scan = ManualScan(['id000000'], ['id000001', 'id000003', 'id000004', 'id000005', 'id000006', 'id000007', 'id000008', 'id000009', 'id000010'] , [0.0], [3000.0], [3000])
+scan.start()
+
+#Dimension 1
+#PseudoPositioner id000000
+for setpoint1 in range(0, 3000):
+ readback1 = setpoint1
+ sleep( 0.1 ) # Settling time
+ #Detector id000001
+ detector1 = id000001.get()
+ #Detector id000003
+ detector2 = id000003.get()
+ #Detector id000004
+ detector3 = id000004.get()
+ #Detector id000005
+ detector4 = id000005.get()
+ #Detector id000006
+ detector5 = id000006.get()
+ #Detector id000007
+ detector6 = id000007.get()
+ #Detector id000008
+ detector7 = id000008.get()
+ #Detector id000009
+ detector8 = id000009.get()
+ #Detector id000010
+ detector9 = id000010.get()
+ scan.append ([setpoint1], [readback1], [detector1, detector2, detector3, detector4, detector5, detector6, detector7, detector8, detector9])
+
+#Closing channels
+id000001.close()
+id000003.close()
+id000004.close()
+id000005.close()
+id000006.close()
+id000007.close()
+id000008.close()
+id000009.close()
+id000010.close()
+
+scan.end()
+
+#return ok
+ret = 'Slides moved out'
+success = True
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/Drive Out.xml b/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/Drive Out.xml
new file mode 100644
index 0000000..5a1c925
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Drive Out/Drive Out.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+ 3000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/.config
new file mode 100644
index 0000000..59cbf88
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/.config
@@ -0,0 +1,7 @@
+name=Go to specific position
+description=Go to absolute position A, then move +B steps, then -2B steps, then +2Bsteps (ie oscillate round centre position, logging after each movement); repeat N times
+
+
+#optional parameters. Description is compulsory. Syntax&
+#parameters=&&[;&&]
+parameters=repeatTimes&2&Repeat N times;midPoint&41.0&Middle point A;spanFromMidPoint&3.0&B steps around middle point A;delayS&0&Delay between each oscillation [s]
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/Go to specific position.py b/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/Go to specific position.py
new file mode 100644
index 0000000..18616d1
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/Go to specific position.py
@@ -0,0 +1,162 @@
+
+#Go to absolute position A, then move +B steps, then -2B steps, then +2Bsteps (ie oscillate round centre position, logging after each movement); repeat N times
+
+
+###### DO NOT MODIFY THE CODE BELOW ######
+global print_log, sendFeedback, inspect
+import sys, inspect, os, traceback
+
+def print_log(testName, DEVICE, text):
+ time.ctime()
+ now = time.strftime('%Y.%m.%d %H:%M:%S')
+ print now + ' ' + DEVICE + ' - ' + testName + ': ' + str(text)
+
+#prepare and send feedback to calling tool
+def sendFeedback(testPath, testName, DEVICE, returnString, testPassed):
+ print_log(testName, DEVICE, 'End of test. Result:')
+ print_log(testName, DEVICE, 'Device: ' + DEVICE)
+ print_log(testName, DEVICE, 'Test name: ' + testName)
+ print_log(testName, DEVICE, 'Test path: ' + testPath)
+ print_log(testName, DEVICE, 'Test passed: ' + str(testPassed))
+ print_log(testName, DEVICE, 'Return string: ' + returnString)
+ ret = [testPath, DEVICE, returnString, testPassed]
+ set_return(ret)
+
+def startTest(testName, DEVICE, params):
+ try:
+ import traceback
+ #get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ #by default, failed
+ ret = 'Test failed'
+ success = False
+ #plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+
+###### WRITE YOUR CODE HERE BELOW #######
+
+ #get parameters from the calling interface
+ try:
+ print_log(testName, DEVICE, "Running test Motor Test 2 for device " + DEVICE + " with the following parameters:\n" + str(params))
+ middle = float(params["midPoint"]["value"])
+ loopTimes = int(params["repeatTimes"]["value"])
+ delayS = int(params["delayS"]["value"])
+ if(delayS<1): delayS=1
+ span = float(params["spanFromMidPoint"]["value"])
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+
+ #scan = ManualScan(['idX'], ['idMotorStatus', 'idLogicalPosition', 'idDiameter', 'idMotorPosition', 'idPotiRaw', 'idEncoderPosition', 'idBtvsRaw', 'idBtvsProc', 'idDiff01', 'idDiff02'] , [ 0.0], [ 3000.0], [20])
+ scan = ManualScan(['idX'], ['idMotorStatus', 'idMotorPosition', 'idEncoderPosition', 'idError'])
+ scan.setPlotTitle(plotName)
+ scan.start()
+
+ #Creating channels: dimension 1
+ try:
+ idInkr = Channel(DEVICE+':MOTOR.VAL', type = 'd')
+ idMotorStatus = Channel(DEVICE+':MOTOR.MSTA', type = 'd')
+ idMotorPosition = Channel(DEVICE+':MOTOR.RBV', type = 'd')
+ idEncoderPosition = Channel(DEVICE+':ENCODER', type = 'd')
+ idEndSwitchL = Channel(DEVICE+':MOTOR.LLS', type = 'd')
+ idEndSwitchH = Channel(DEVICE+':MOTOR.HLS', type = 'd')
+ idLimitH = Channel(DEVICE+':MOTOR.HLM', type = 'd')
+ idLimitL = Channel(DEVICE+':MOTOR.LLM', type = 'd')
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+
+ #remove limits
+ idLimitH.put(999999.9, timeout=None)
+ idLimitL.put(-999999.9, timeout=None)
+
+ direction = 1.0
+ startDefault = middle - span
+ endDefault = middle + span
+ end = endDefault+1
+ #find position: it will be the middle point of the test
+ print_log(testName, DEVICE, 'Moving to middle point ' + str(middle) )
+ idInkr.put(middle, timeout=None) # TODO: Set appropriate timeout
+ readback2 = idInkr.get()
+ if abs(readback2 - middle) > 1 : # TODO: Check accuracy
+ ret = 'Actor idInkr could not be set to the value ' + str(middle) + ' (current value: ' + str(readback2) + ')'
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+ start = readback2+direction
+ countSteps = 0
+ count = 0
+ print_log(testName, DEVICE, 'Moving around middle point (+-' + str(span) + ')' )
+ for setpoint1 in range(0, loopTimes*2):
+ count = count + 1
+ print_log(testName, DEVICE, 'Pausing ' + str(delayS) + 's' )
+ sleep( delayS ) # Settling time
+ #RegionPositioner idInkr
+ for setpoint2 in frange(start, end, direction):
+ readback1 = setpoint1
+ idInkr.put(setpoint2, timeout=None) # TODO: Set appropriate timeout
+ sleep( 0.2 ) # Settling time
+ readback2 = idInkr.get()
+ if abs(readback2 - setpoint2) > 1 : # TODO: Check accuracy
+ ret = 'Actor idInkr could not be set to the value ' + str(setpoint2) + ' (current value: ' + str(readback2) + ')'
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+ #Detector idMotorStatus
+ detector1 = idMotorStatus.get()
+ detector4 = idMotorPosition.get()
+ detector6 = idEncoderPosition.get()
+ endH = idEndSwitchH.get()
+ endL = idEndSwitchL.get()
+ #Manipulation idDiff01
+ #Variable Mappings
+ a = detector4
+ b = detector6
+ idDiff01 = a-b
+ countSteps = countSteps + 1
+ scan.append ([countSteps], [countSteps], [detector1, detector4, detector6, idDiff01])
+ if endH>0.0 or (direction > 0.0 and setpoint2 >= end -1):
+ #invert direction and swap start with end of translation
+ end = startDefault-1
+ start = setpoint2 - direction
+ direction = -1.0
+ print_log(testName, DEVICE, 'End of span (' + str(setpoint2) + '), changing direction to ' + str(direction) )
+ break
+ if endL>0.0 or ( direction < 0.0 and setpoint2 <= end +1):
+ #invert direction and swap start with end of translation
+ end = endDefault+1
+ start = setpoint2 - direction
+ direction = 1.0
+ print_log(testName, DEVICE, 'End of span (' + str(setpoint2) + '), changing direction to ' + str(direction) )
+ break
+
+ #set limits back
+ idLimitH.put(145.0, timeout=None)
+ idLimitL.put(0.0, timeout=None)
+
+ #Closing channels
+ idInkr.close()
+ idMotorStatus.close()
+ idMotorPosition.close()
+ idEncoderPosition.close()
+ idLimitH.close()
+ idLimitL.close()
+ scan.end()
+ ret = 'Slide moved back and forth (' + str(count) + ' runs)'
+ success = True
+
+############# END OF YOUR CODE ###########
+###### DO NOT MODIFY THE CODE BELOW ######
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ except:
+ ret = traceback.format_exc()
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+
+#launch the test
+startTest(test, device, parameters)
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/help.html b/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/help.html
new file mode 100644
index 0000000..8aac8f3
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Go to specific position/help.html
@@ -0,0 +1,16 @@
+
+
+Short Description
+Oscillate around a specific position
+Details
+Go to absolute position A, then move +B steps, then -2B steps, then +2Bsteps (ie oscillate round centre position, logging after each movement); repeat N times
+Parameters
+midPoint Middle point A around which it will oscillate
+spanFromMidPoint B stepst to oscillate around A
+repeatTimes Repeat the moving N times
+delayS Pause delay (>0s) between each oscillation [s]
+Contact
+Marco Boccioli
+
+
+
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Initialise/.config b/script/tests/old-tests-and-devices/tests/Collimator Tests/Initialise/.config
new file mode 100644
index 0000000..2f02383
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Initialise/.config
@@ -0,0 +1,8 @@
+name=Initialise
+description=Initialises the motor
+help = \
+This test sends a INIT command to the device, as many times as configured with the parameter RepeatTimes.
+
+#optional parameters. Description is compulsory. Syntax&
+#parameters=&&[;&&]
+parameters=repeatTimes&2&Repeat N times;delayS&4&Delay between each initialisation [s]
\ No newline at end of file
diff --git a/script/tests/old-tests-and-devices/tests/Collimator Tests/Initialise/Initialise.py b/script/tests/old-tests-and-devices/tests/Collimator Tests/Initialise/Initialise.py
new file mode 100644
index 0000000..b5dfa0b
--- /dev/null
+++ b/script/tests/old-tests-and-devices/tests/Collimator Tests/Initialise/Initialise.py
@@ -0,0 +1,129 @@
+
+
+
+###### DO NOT MODIFY THE CODE BELOW ######
+global print_log, sendFeedback, inspect
+import sys, inspect, os, traceback
+
+def print_log(testName, DEVICE, text):
+ time.ctime()
+ now = time.strftime('%Y.%m.%d %H:%M:%S')
+ print now + ' ' + DEVICE + ' - ' + testName + ': ' + str(text)
+
+#prepare and send feedback to calling tool
+def sendFeedback(testPath, testName, DEVICE, returnString, testPassed):
+ print_log(testName, DEVICE, 'End of test. Result:')
+ print_log(testName, DEVICE, 'Device: ' + DEVICE)
+ print_log(testName, DEVICE, 'Test name: ' + testName)
+ print_log(testName, DEVICE, 'Test path: ' + testPath)
+ print_log(testName, DEVICE, 'Test passed: ' + str(testPassed))
+ print_log(testName, DEVICE, 'Return string: ' + returnString)
+ ret = [testPath, DEVICE, returnString, testPassed]
+ set_return(ret)
+
+def startTest(testName, DEVICE, params):
+ try:
+ import traceback
+ #get the path of this script
+ testPath = inspect.getfile(inspect.currentframe())
+ #by default, failed
+ ret = 'Test failed'
+ success = False
+ #plot name to be given to the scan. Use: scan.setPlotTitle(plotName)
+ plotName = DEVICE + ' - ' + testName
+
+###### WRITE YOUR CODE HERE BELOW #######
+
+ #Pre-actions
+ # try:
+ # caput(DEVICE+':INIT.PROC', '1')
+ # except:
+ # ret = 'Unable to create channel - ' + traceback.format_exc()
+ # success = False
+ # sendFeedback(testPath, testName, DEVICE, ret, success)
+ # return
+
+
+ #get parameters from the calling interface
+ try:
+ print_log(testName, DEVICE, "Running test Initialise with the following parameters:")
+ print_log(testName, DEVICE, params )
+ loopTimes = int(params["repeatTimes"]["value"])
+ delaySeconds = int(params["delayS"]["value"])
+ except:
+ ret = 'Could not retrieve testing parameters - ' + traceback.format_exc()
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+
+ scan = ManualScan(['idX'], ['idMotorPosition', 'idEncoderPosition', 'idError'] )
+ scan.setPlotTitle(plotName)
+ scan.start()
+ #Creating channels: dimension 1
+ try:
+ idInit = Channel(DEVICE+':INIT.PROC', type = 'l')
+ idReady = Channel(DEVICE+':RDY', type = 'l')
+ idInterlock = Channel(DEVICE+':ILK', type = 'l')
+ idMotorPosition = Channel(DEVICE+':MOTOR.RBV', type = 'd')
+ idEncoderPosition = Channel(DEVICE+':ENCODER', type = 'd')
+ except:
+ ret = 'Unable to create channel - ' + traceback.format_exc()
+ success = False
+ sendFeedback(testPath, testName, DEVICE, ret, success)
+ return
+
+ count = 0
+ timeout = 90000 #timeout in ms
+ for count in range(1, loopTimes+1):
+ print_log(testName, DEVICE, 'Initialisation #' + str(count) + '/' + str(loopTimes))
+ idInit.put(1, timeout=None) # TODO: Set appropriate timeout
+ timeStampStart = float(java.lang.System.currentTimeMillis())
+ sleep(0.1)
+ ready = 0
+ interlock = idInterlock.get()
+ timeElapsed = 0 #in ms
+ while (ready == 0) and timeElapsed
+
+Short Description
+Initialise N times.
+Details
+This test sends a INIT command to the device, as many times as configured with the parameter repeatTimes.
+Parameters
+repeatTimes Repeat the Initialisation N times
+delayS Pause delay between each Initialisation [s]
+Contact
+Marco Boccioli
+
+