From 651ed71b79ef6b92320b1b5a7dbee65dba0ffb39 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sat, 21 Feb 2015 20:34:31 -0700 Subject: [PATCH] master: basic automatic experiment list --- .gitignore | 2 +- artiq/frontend/artiq_master.py | 4 +-- artiq/master/repository.py | 31 ++++++++++++++++++- examples/explist.pyon | 12 ------- examples/{ => master}/ddb.pyon | 0 examples/{ => master}/pdb.pyon | 0 examples/{ => master/repository}/dds_test.py | 0 .../repository}/flopping_f_simulation.py | 1 + .../flopping_f_simulation_gui.glade | 0 .../repository}/flopping_f_simulation_gui.py | 0 .../{ => master/repository}/mandelbrot.py | 0 .../repository}/photon_histogram.py | 0 examples/{ => master/repository}/transport.py | 0 examples/{ => sim}/al_spectroscopy.py | 2 ++ examples/{ddb_sim.pyon => sim/ddb.pyon} | 7 +++++ examples/sim/pdb.pyon | 1 + examples/{ => sim}/simple_simulation.py | 0 17 files changed, 43 insertions(+), 17 deletions(-) delete mode 100644 examples/explist.pyon rename examples/{ => master}/ddb.pyon (100%) rename examples/{ => master}/pdb.pyon (100%) rename examples/{ => master/repository}/dds_test.py (100%) rename examples/{ => master/repository}/flopping_f_simulation.py (96%) rename examples/{ => master/repository}/flopping_f_simulation_gui.glade (100%) rename examples/{ => master/repository}/flopping_f_simulation_gui.py (100%) rename examples/{ => master/repository}/mandelbrot.py (100%) rename examples/{ => master/repository}/photon_histogram.py (100%) rename examples/{ => master/repository}/transport.py (100%) rename examples/{ => sim}/al_spectroscopy.py (95%) rename examples/{ddb_sim.pyon => sim/ddb.pyon} (84%) create mode 100644 examples/sim/pdb.pyon rename examples/{ => sim}/simple_simulation.py (100%) diff --git a/.gitignore b/.gitignore index b7de79247..cc84aec24 100644 --- a/.gitignore +++ b/.gitignore @@ -9,4 +9,4 @@ doc/manual/_build /dist /*.egg-info /.coverage -examples/results +examples/master/results diff --git a/artiq/frontend/artiq_master.py b/artiq/frontend/artiq_master.py index f2061cb24..d7f23686b 100755 --- a/artiq/frontend/artiq_master.py +++ b/artiq/frontend/artiq_master.py @@ -40,7 +40,6 @@ def main(): pdb.hooks.append(simplephist) rtr = RTResults() repository = Repository() - explist = FlatFileDB("explist.pyon") if os.name == "nt": loop = asyncio.ProactorEventLoop() @@ -71,7 +70,6 @@ def main(): "master_pdb": pdb, "master_schedule": scheduler, "master_repository": repository, - "master_explist": explist }) loop.run_until_complete(server_control.start( args.bind, args.port_control)) @@ -84,7 +82,7 @@ def main(): "parameters": pdb.data, "parameters_simplehist": simplephist.history, "rt_results": rtr.groups, - "explist": explist.data + "explist": repository.explist }) loop.run_until_complete(server_notify.start( args.bind, args.port_notify)) diff --git a/artiq/master/repository.py b/artiq/master/repository.py index dae6b3e1e..c465a5d27 100644 --- a/artiq/master/repository.py +++ b/artiq/master/repository.py @@ -1,4 +1,33 @@ +import os +from inspect import isclass + +from artiq.protocols.sync_struct import Notifier +from artiq.tools import file_import + + +def scan_experiments(): + r = dict() + for f in os.listdir("repository"): + if f.endswith(".py"): + try: + m = file_import(os.path.join("repository", f)) + except: + continue + for k, v in m.__dict__.items(): + if isclass(v) and hasattr(v, "__artiq_unit__"): + entry = { + "file": os.path.join("repository", f), + "unit": k, + "gui_file": getattr(v, "__artiq_gui_file__", None) + } + r[v.__artiq_unit__] = entry + return r + + class Repository: + def __init__(self): + self.explist = Notifier(scan_experiments()) + def get_data(self, filename): - with open(filename) as f: + with open(os.path.join("repository", filename)) as f: return f.read() diff --git a/examples/explist.pyon b/examples/explist.pyon deleted file mode 100644 index debb3a6d3..000000000 --- a/examples/explist.pyon +++ /dev/null @@ -1,12 +0,0 @@ -{ - "Flopping F simulation": { - "file": "flopping_f_simulation.py", - "unit": null, - "gui_file": "flopping_f_simulation_gui.py" - }, - "RTIO skew": { - "file": "rtio_skew.py", - "unit": null, - "gui_file": null - } -} diff --git a/examples/ddb.pyon b/examples/master/ddb.pyon similarity index 100% rename from examples/ddb.pyon rename to examples/master/ddb.pyon diff --git a/examples/pdb.pyon b/examples/master/pdb.pyon similarity index 100% rename from examples/pdb.pyon rename to examples/master/pdb.pyon diff --git a/examples/dds_test.py b/examples/master/repository/dds_test.py similarity index 100% rename from examples/dds_test.py rename to examples/master/repository/dds_test.py diff --git a/examples/flopping_f_simulation.py b/examples/master/repository/flopping_f_simulation.py similarity index 96% rename from examples/flopping_f_simulation.py rename to examples/master/repository/flopping_f_simulation.py index 7f8c110a5..c63fe1dd6 100644 --- a/examples/flopping_f_simulation.py +++ b/examples/master/repository/flopping_f_simulation.py @@ -25,6 +25,7 @@ def model_numpy(xdata, F0): class FloppingF(AutoDB): __artiq_unit__ = "Flopping F simulation" + __artiq_gui_file__ = "flopping_f_simulation_gui.py" class DBKeys: implicit_core = False diff --git a/examples/flopping_f_simulation_gui.glade b/examples/master/repository/flopping_f_simulation_gui.glade similarity index 100% rename from examples/flopping_f_simulation_gui.glade rename to examples/master/repository/flopping_f_simulation_gui.glade diff --git a/examples/flopping_f_simulation_gui.py b/examples/master/repository/flopping_f_simulation_gui.py similarity index 100% rename from examples/flopping_f_simulation_gui.py rename to examples/master/repository/flopping_f_simulation_gui.py diff --git a/examples/mandelbrot.py b/examples/master/repository/mandelbrot.py similarity index 100% rename from examples/mandelbrot.py rename to examples/master/repository/mandelbrot.py diff --git a/examples/photon_histogram.py b/examples/master/repository/photon_histogram.py similarity index 100% rename from examples/photon_histogram.py rename to examples/master/repository/photon_histogram.py diff --git a/examples/transport.py b/examples/master/repository/transport.py similarity index 100% rename from examples/transport.py rename to examples/master/repository/transport.py diff --git a/examples/al_spectroscopy.py b/examples/sim/al_spectroscopy.py similarity index 95% rename from examples/al_spectroscopy.py rename to examples/sim/al_spectroscopy.py index a1f2768a6..c40850d09 100644 --- a/examples/al_spectroscopy.py +++ b/examples/sim/al_spectroscopy.py @@ -2,6 +2,8 @@ from artiq import * class AluminumSpectroscopy(AutoDB): + __artiq_unit__ = "Aluminum spectroscopy (simulation)" + class DBKeys: mains_sync = Device() laser_cooling = Device() diff --git a/examples/ddb_sim.pyon b/examples/sim/ddb.pyon similarity index 84% rename from examples/ddb_sim.pyon rename to examples/sim/ddb.pyon index 65046a116..7b749e6fd 100644 --- a/examples/ddb_sim.pyon +++ b/examples/sim/ddb.pyon @@ -1,35 +1,42 @@ { "core": { + "type": "local", "module": "artiq.sim.devices", "class": "Core", "arguments": {} }, "mains_sync": { + "type": "local", "module": "artiq.sim.devices", "class": "Input", "arguments": {"name": "mains_sync"} }, "pmt": { + "type": "local", "module": "artiq.sim.devices", "class": "Input", "arguments": {"name": "pmt"} }, "laser_cooling": { + "type": "local", "module": "artiq.sim.devices", "class": "WaveOutput", "arguments": {"name": "laser_cooling"} }, "spectroscopy": { + "type": "local", "module": "artiq.sim.devices", "class": "WaveOutput", "arguments": {"name": "spectroscopy"} }, "spectroscopy_b": { + "type": "local", "module": "artiq.sim.devices", "class": "VoltageOutput", "arguments": {"name": "spectroscopy_b"} }, "state_detection": { + "type": "local", "module": "artiq.sim.devices", "class": "WaveOutput", "arguments": {"name": "state_detection"} diff --git a/examples/sim/pdb.pyon b/examples/sim/pdb.pyon new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/examples/sim/pdb.pyon @@ -0,0 +1 @@ +{} diff --git a/examples/simple_simulation.py b/examples/sim/simple_simulation.py similarity index 100% rename from examples/simple_simulation.py rename to examples/sim/simple_simulation.py