From 33dce4dda33eab677a78fc1399348ba49994e26c Mon Sep 17 00:00:00 2001 From: voulot_d Date: Mon, 10 Apr 2017 10:53:04 +0200 Subject: [PATCH] Startup --- script/Devices/Elements.py | 199 +++++++++++++++++++++++++++++++ script/Devices/WireScan.py | 46 +++++++ script/test/TestAlignmentScan.py | 6 + script/test/WireScanTest.py | 26 ++++ 4 files changed, 277 insertions(+) create mode 100644 script/Devices/Elements.py create mode 100644 script/Devices/WireScan.py create mode 100644 script/test/WireScanTest.py diff --git a/script/Devices/Elements.py b/script/Devices/Elements.py new file mode 100644 index 0000000..989eb2d --- /dev/null +++ b/script/Devices/Elements.py @@ -0,0 +1,199 @@ +DBPM = 1 +DWSC = 2 + +elements = ((DBPM, "SINEG01-DBPM340", 3.0149), +(DBPM, "SINSB01-DBPM150", 7.9459), +(DBPM, "SINSB02-DBPM150", 12.9489), +(DBPM, "SINLH01-DBPM060", 14.5560), +(DBPM, "SINLH02-DBPM210", 16.4806), +(DBPM, "SINLH02-DBPM240", 17.4826), +(DBPM, "SINLH03-DBPM010", 19.2172), +(DBPM, "SINLH03-DBPM050", 20.4632), +(DBPM, "SINLH03-DBPM090", 21.6002), +(DBPM, "SINSB03-DBPM120", 26.9202), +(DBPM, "SINSB03-DBPM220", 32.4202), +(DBPM, "SINSB04-DBPM120", 37.9202), +(DBPM, "SINSB04-DBPM220", 43.4202), +(DBPM, "SINSB05-DBPM120", 48.9202), +(DBPM, "SINSB05-DBPM220", 54.4202), +(DBPM, "SINXB01-DBPM120", 56.2420), +(DBPM, "SINBC01-DBPM010", 60.2912), +(DBPM, "SINBC01-DBPM030", 61.0912), +(DBPM, "SINBC01-DBPM080", 64.4172), +(DBPM, "SINBC01-DBPM100", 65.9432), +(DBPM, "SINBC02-DBPM140", 69.3739), +(DBPM, "SINBC02-DBPM320", 77.5610), +(DBPM, "SINDI01-DBPM010", 82.0967), +(DBPM, "SINDI01-DBPM060", 83.5117), +(DWSC, "SINDI01-DWSC090", 84.2537), +(DBPM, "SINDI02-DBPM010", 86.0767), +(DBPM, "SINDI02-DBPM040", 88.3857), +(DBPM, "SINDI02-DBPM080", 90.6297), +(DBPM, "S10CB01-DBPM220", 95.3947), +(DBPM, "S10CB01-DBPM420", 100.2947), +(DBPM, "S10CB02-DBPM220", 105.1947), +(DBPM, "S10CB02-DBPM420", 110.0947), +(DWSC, "S10DI01-DWSC010", 110.8237), +(DBPM, "S10BD01-DBPM020", 114.6628), +(DBPM, "S10DI01-DBPM110", 114.9947), +(DBPM, "S10CB03-DBPM220", 119.8947), +(DBPM, "S10CB03-DBPM420", 124.7947), +(DWSC, "S10CB03-DWSC440", 125.2127), +(DBPM, "S10CB04-DBPM220", 129.6947), +(DBPM, "S10CB04-DBPM420", 134.5947), +(DBPM, "S10CB05-DBPM220", 139.4947), +(DBPM, "S10CB05-DBPM420", 144.3947), +(DWSC, "S10CB05-DWSC440", 144.8127), +(DBPM, "S10CB06-DBPM220", 149.2947), +(DBPM, "S10CB06-DBPM420", 154.1947), +(DBPM, "S10CB07-DBPM220", 159.0947), +(DBPM, "S10CB07-DBPM420", 163.9947), +(DWSC, "S10CB07-DWSC440", 164.4127), +(DBPM, "S10CB08-DBPM220", 168.8947), +(DBPM, "S10CB08-DBPM420", 173.7947), +(DBPM, "S10CB09-DBPM220", 178.6947), +(DBPM, "S10BC01-DBPM010", 183.5947), +(DWSC, "S10BC01-DWSC030", 184.0127), +(DBPM, "S10BC01-DBPM050", 187.8307), +(DBPM, "S10BC01-DBPM090", 192.2847), +(DBPM, "S10BC02-DBPM140", 196.7798), +(DBPM, "S10BC02-DBPM320", 206.5399), +(DBPM, "S10MA01-DBPM010", 211.2940), +(DBPM, "S10MA01-DBPM060", 215.6600), +(DBPM, "S10MA01-DBPM120", 220.1200), +(DBPM, "S20CB01-DBPM420", 229.0850), +(DWSC, "S20CB01-DWSC440", 229.5030), +(DBPM, "S20CB02-DBPM420", 238.1850), +(DBPM, "S20CB03-DBPM420", 247.2850), +(DBPM, "S20SY01-DBPM010", 256.3850), +(DBPM, "S20SY01-DBPM040", 262.5020), +(DBPM, "S20SY01-DBPM060", 263.6280), +(DWSC, "S20SY01-DWSC070", 263.8280), +(DBPM, "S20SY02-DBPM080", 269.1300), +(DBPM, "S20SY02-DBPM120", 271.0800), +(DBPM, "S20SY02-DBPM150", 272.7600), +(DWSC, "S20SY02-DWSC160", 273.1350), +(DBPM, "SATSY01-DBPM010", 279.1202), +(DBPM, "S20SY03-DBPM010", 280.6200), +(DBPM, "SATSY01-DBPM060", 284.6202), +(DBPM, "S20SY03-DBPM040", 286.9200), +(DBPM, "SATSY01-DBPM100", 288.9352), +(DBPM, "S20SY03-DBPM080", 294.3800), +(DWSC, "S20SY03-DWSC090", 294.5800), +(DBPM, "SATSY01-DBPM240", 296.1202), +(DBPM, "SATSY01-DBPM290", 302.8202), +(DBPM, "S30CB01-DBPM420", 303.8150), +(DWSC, "S30CB01-DWSC440", 304.2330), +(DBPM, "SATSY02-DBPM020", 306.8663), +(DBPM, "SATSY02-DBPM210", 312.6833), +(DBPM, "S30CB02-DBPM420", 312.9150), +(DBPM, "SATSY03-DBPM030", 317.2003), +(DBPM, "SATSY03-DBPM060", 320.0003), +(DBPM, "S30CB03-DBPM420", 322.0150), +(DBPM, "SATSY03-DBPM090", 322.8003), +(DWSC, "SATSY03-DWSC110", 325.1663), +(DBPM, "SATSY03-DBPM120", 325.6003), +(DBPM, "S30CB04-DBPM420", 331.1150), +(DBPM, "SATCL01-DBPM140", 331.9185), +(DBPM, "S30CB05-DBPM420", 340.2150), +(DWSC, "S30CB05-DWSC440", 340.6330), +(DBPM, "SATDI01-DBPM030", 340.8637), +(DBPM, "SATDI01-DBPM060", 342.7637), +(DWSC, "SATDI01-DWSC065", 342.9837), +(DBPM, "SATDI01-DBPM210", 349.2197), +(DBPM, "S30CB06-DBPM420", 349.3150), +(DBPM, "SATDI01-DBPM240", 352.1997), +(DBPM, "SATDI01-DBPM270", 355.1797), +(DWSC, "SATDI01-DWSC290", 356.4797), +(DBPM, "SATDI01-DBPM320", 357.0907), +(DBPM, "S30CB07-DBPM420", 358.4150), +(DBPM, "SATCB01-DBPM220", 361.5357), +(DBPM, "SATCB01-DBPM420", 366.4357), +(DBPM, "S30CB08-DBPM420", 367.5150), +(DBPM, "S30CB09-DBPM420", 376.6150), +(DWSC, "S30CB09-DWSC440", 377.0330), +(DBPM, "SATMA01-DBPM010", 377.2657), +(DBPM, "SATMA01-DBPM020", 379.3147), +(DBPM, "SATMA01-DBPM040", 381.3637), +(DBPM, "S30CB10-DBPM420", 385.7150), +(DBPM, "S30CB11-DBPM420", 394.8150), +(DBPM, "S30CB12-DBPM420", 403.9150), +(DBPM, "S30CB13-DBPM420", 413.0150), +(DWSC, "S30CB13-DWSC440", 413.4330), +(DBPM, "S30CB14-DBPM420", 422.1150), +(DBPM, "S30CB15-DBPM420", 431.2150), +(DBPM, "SARCL01-DBPM010", 440.3150), +(DBPM, "SARCL01-DBPM060", 444.6750), +(DBPM, "SARCL01-DBPM120", 450.7750), +(DBPM, "SARCL01-DBPM150", 452.1510), +(DWSC, "SARCL01-DWSC160", 452.3510), +(DBPM, "SARCL02-DBPM110", 456.9100), +(DBPM, "SARCL02-DBPM220", 460.9609), +(DBPM, "SARCL02-DBPM260", 462.7569), +(DWSC, "SARCL02-DWSC270", 462.9769), +(DBPM, "SARCL02-DBPM330", 466.6909), +(DBPM, "SARCL02-DBPM470", 471.1067), +(DBPM, "SARMA01-DBPM040", 476.4267), +(DBPM, "SARMA01-DBPM100", 483.2767), +(DBPM, "SARMA02-DBPM010", 487.9617), +(DBPM, "SARMA02-DBPM020", 490.0107), +(DBPM, "SARMA02-DBPM040", 492.0597), +(DWSC, "SARMA02-DWSC060", 492.3767), +(DBPM, "SARMA02-DBPM110", 496.8097), +(DBPM, "SARUN01-DBPM070", 501.5597), +(DBPM, "SARUN02-DBPM070", 506.3097), +(DBPM, "SARUN03-DBPM070", 511.0597), +(DBPM, "SARUN04-DBPM070", 515.8097), +(DBPM, "SARUN05-DBPM070", 520.5597), +(DBPM, "SARUN06-DBPM070", 525.3097), +(DBPM, "SARUN07-DBPM070", 530.0597), +(DBPM, "SARUN08-DBPM070", 534.8097), +(DBPM, "SARUN09-DBPM070", 539.5597), +(DBPM, "SARUN10-DBPM070", 544.3097), +(DBPM, "SARUN11-DBPM070", 549.0597), +(DBPM, "SARUN12-DBPM070", 553.8097), +(DBPM, "SARUN13-DBPM070", 558.5597), +(DBPM, "SARUN14-DBPM070", 563.3097), +(DBPM, "SARUN15-DBPM070", 568.0597), +(DBPM, "SARUN16-DBPM070", 572.8097), +(DBPM, "SARUN17-DBPM070", 577.5597), +(DBPM, "SARUN18-DBPM070", 582.3097), +(DBPM, "SARUN19-DBPM070", 587.0597), +(DWSC, "SARUN20-DWSC010", 587.3767), +(DBPM, "SARUN20-DBPM070", 591.8097), +(DBPM, "SARBD01-DBPM040", 593.9132), +(DBPM, "SARBD02-DBPM010", 596.9584), +(DBPM, "SARBD02-DBPM040", 598.3943), +) + + +def get_bpms(): + ret = [] + for element in elements: + if element[0]==DBPM: + ret.append(element[1]) + return ret + +def get_wire_scans(): + ret = [] + for element in elements: + if element[0]==DWSC: + ret.append(element[1]) + return ret + + + +def get_wire_scans_bpms(wire_scans): + last = None + ret = [] + for element in elements: + if element[0]==DWSC and element[1] == wire_scans: + ret = [last,] + else: + if len(ret) > 0: + return [ret[0],element[1]] + last = element[1] + return None + + + diff --git a/script/Devices/WireScan.py b/script/Devices/WireScan.py new file mode 100644 index 0000000..af301fe --- /dev/null +++ b/script/Devices/WireScan.py @@ -0,0 +1,46 @@ +class WireScan: + Garage, W1X, W1Y, W2X, W2Y, Foil = "GARAGE", "W1X", "W1Y", "W2X", "W2Y", "Foil" + + def __init__(self, prefix, sel = None): + self.prefix = prefix + self.velocity = Channel(self.prefix + ":SCAN_VELO_SP") + self.cycles = Channel(self.prefix + ":NB_CYCL_SP") + self.currCycl = Channel(self.prefix + ":CURR_CYCL", callback = self.on_cycle_change) + self.currCycl.set_monitored(True) + #self.current_cycle = self.currCycl.get() + self.selection = None + self.u0 = None + self.offset = None + self.range = None + self.start = None + self.end = None + if sel is not None: + self.set_selection(sel) + + def on_cycle_change(self, val): + print "On cycle chenge: ", val + self.current_cycle = val + + def set_selection(self, sel): + if not sel in [WireScan.Garage, WireScan.W1X, WireScan.W1Y, WireScan.W2X, WireScan.W2Y, WireScan.Foil]: + raise Exception("Invalid Wire Scan selection: " + str(sel)) + self.selection = sel + self.u0 = Channel(self.prefix + ":" + self.selection + "_U0_SP") + self.offset = Channel(self.prefix + ":" + self.selection + "_OFF_SP") + self.range = Channel(self.prefix + ":" + self.selection + "_RANGE_SP") + self.start = Channel(self.prefix + ":" + self.selection + "_START_SP") + self.end = Channel(self.prefix + ":" + self.selection + "_END_SP") + + def close(self): + self.velocity.close() + self.cycles.close() + self.currCycl.close() + if self.u0 is not None: self.u0.close() + if self.offset is not None: self.offset.close() + if self.range is not None: self.range.close() + if self.start is not None: self.start.close() + if self.end is not None: self.end.close() + + + + diff --git a/script/test/TestAlignmentScan.py b/script/test/TestAlignmentScan.py index 91205f8..0038269 100644 --- a/script/test/TestAlignmentScan.py +++ b/script/test/TestAlignmentScan.py @@ -9,6 +9,7 @@ # look at the centroid position (BPM or screen) downstream of the gun. import datetime +import ch.psi.utils.Chrono as Chrono mode = "camtool" # "camtool", "bpm" or "direct" camera_name = "simulation" @@ -52,9 +53,14 @@ if mode == "camtool": #camtool.stop() #camtool.startPipeline(camera_name, 0, use_background, None, 0.0, None) #camtool.startReceiver(); + c = Chrono() + + print "t1 = " , c.ellapsed camtool.start(camera_name, 0, use_background, None, 0.0, None) + print "t2 = " , c.ellapsed if camtool.value is not None: print "Started " , camtool.value.getTimestamp() wait_camtool_message() + print "t3 = " , c.ellapsed print "OK" else: if mode == "bpm": diff --git a/script/test/WireScanTest.py b/script/test/WireScanTest.py new file mode 100644 index 0000000..42ad772 --- /dev/null +++ b/script/test/WireScanTest.py @@ -0,0 +1,26 @@ +if get_exec_pars().source == CommandSource.ui: + prefix = "SARCL02-DWSC270" + sel = WireScan.W1X +else: + prefix = args[0] + sel = args[1] + +run("Devices/Elements") +run("Devices/WireScan") + +print get_wire_scans() + + +wire_scan = WireScan(prefix, sel) + + +print wire_scan.start.read() +print wire_scan.end.read() +time.sleep(1.0) +print wire_scan.current_cycle + +wire_scan.close() + + + +