From 227a654010813ec0b8200b52ad12345dcceba494 Mon Sep 17 00:00:00 2001 From: agricolab Date: Fri, 13 Dec 2019 14:55:46 +0100 Subject: [PATCH] Wrap up documentation --- docs/source/_autosummary/localite.api.rst | 6 -- docs/source/_static/flow-diagram.png | Bin 0 -> 54461 bytes docs/source/api.rst | 20 ++++++ docs/source/cli.rst | 26 ++++++++ docs/source/conf.py | 2 +- docs/source/index.rst | 76 +++++++++++++++++++--- localite/api.py | 19 ------ readme.md | 76 +++++++++++----------- 8 files changed, 151 insertions(+), 74 deletions(-) delete mode 100644 docs/source/_autosummary/localite.api.rst create mode 100644 docs/source/_static/flow-diagram.png create mode 100644 docs/source/api.rst create mode 100644 docs/source/cli.rst diff --git a/docs/source/_autosummary/localite.api.rst b/docs/source/_autosummary/localite.api.rst deleted file mode 100644 index 9705bd0..0000000 --- a/docs/source/_autosummary/localite.api.rst +++ /dev/null @@ -1,6 +0,0 @@ -localite.api -============ - -.. automodule:: localite.api - :members: - :undoc-members: \ No newline at end of file diff --git a/docs/source/_static/flow-diagram.png b/docs/source/_static/flow-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..3494e2641961224793c7d1fd323fb2dcd3ab7f81 GIT binary patch literal 54461 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

nL&Izs2K32!c!c&A5c#!5zacEW zmAQZD3_rOf%$1wS%zfE=B;od5a_@$+MkVtI)p2vKWY-WO6Oz*+&M_Uqy^WGl6Q9_gfp^e8TXFcJ}TIhec zp&|aW4Hvh?|6sABnue~UN5-2x56eV>Gw!u!HSVha%lnVQD}$Gl{$FJhooa2x*x+;h zSNjO;2Ny1^2uJJFxtUXKnOEdQM7p<+zqB21QW9d2P)X0|7p*bB(zBM`)N_Irwzkz? z$Hzd1-|Rm4QTThvcyC!}`1#-PnuqnI_hY#ik^4#!KbIupcp@ZYhz;qhD49l$fdYtR z0uh3ES3^q+3nO5GFRiLFpR3k?)4n^Jeffv~41@O`Z&K*a^z=n%DsC>4%Cz#<13Eqi zF11=;R`aX(6c;zaOK_Ee*cjS%3bxB)8Z8vN)U} z9Nb>&=Ofh7RdsRiSa$x%Wo~|_rlDBa>S0vGGn=w0Iv{)?v>5G7Hrs;wM#cY3Xzfdn zS%?-cl6$uc^Vdn_lk`JjKdqq-f1V$JU5}0`z#@i|DGIq~VawIu^i@=PC$jm|S&Vy2 z1tvam$daP11MXpPpRwyOiG>x4&+yrGh^O5NrjO-mOK77adGdO)YK_Ciq67m2!{}j! z&dvAJC+n!5=95?Iwx&pK#n2u<3q4E@Khj>ylhh&)1%T+LnHd+yb0cox8$CFdcgJLA zXiVc`%sgWrwmj(DN)r-HU0&`{x1c%wb>~I6XM%A2QiqrEW=jJr?#1XC2h~~6VELJ^ z;tuIGdfHpP$>7pEN=>3>6aWjjZ|J zqq6pz*#8(73oDAi?O~rML~XbEWLb}36yM-suRX-s*7mLYu^Dhk+T8C^IhXyQ(Z1RMDNHdv!Foe@AF{OXK-`f&>GzcW@oT61U5y8e+%V!sv)9 zBjk^yQW?xZ;lsy@umB!QayC6RO-%@GdUrB+641lbxb0WN7GDMjCCkgp_YV)ragoY< z7Nk+)Xg*$C=X4SBFZ7Pt`vv_z6B=$TQ%zG+`e0|rrM<8)|A!F}Z~D|F1R1!Ar<%cUate7 zfI@U|?^0P?TSi%Vs&;h`d7cn)Z04rs%C>g*N=KJr`{#sp~h^H93-EOd8GB_qp zJ|v^z4$V5Y0f&QH27;w#7<2W}*Gu)RgU}4el?+jitkj7u3KlRmesoLC3=I5TztUXX z?cc;{5B+qx7^zC}su`oy*3yD6^w__O`sJ9`UJ85~ruFmXj z{go&iFMnmE*Vp>!^Zj|2+`_ja7?0f|F1t!Q@!fx(EHiO9m>_ULF=K~7W;KLQ+s9-h zRiNB#w<7yrL9-HV@Y>m&uss&rV4OU)40R$U#)^x6o2+|%rrOUPi}=1~214!?gvVr#rXYU3J zkXnN`f)wpn!yI{j+@p%F4pq+xhaRXrVx0 z4{&R6a$=(Y=K)8@69iChG4RWTC^yh{u|r}qGVq`l^i_qwa-+=^@cjF&+}+ukU0+}S zL%S#556~Cjb=-UlK1ctSqX03gK@Cp#TI|}H=B$o5R=q1e`_ as `LSL stream `_ Additionally, it allows you to control the TMS device connected to the localite software over an api. + +This package has been developed using MagVenture TMS devices connected with localite TMS Navigator, and with a beta version of TMS Navigator 4.0. It's current test and coverage status is: + + + .. image:: https://github.com/pyreiz/ctrl-localite/workflows/pytest/badge.svg + :target: https://github.com/pyreiz/ctrl-localite/actions + + .. image:: https://coveralls.io/repos/github/pyreiz/ctrl-localite/badge.svg?branch=master + :target: https://coveralls.io/github/pyreiz/ctrl-localite?branch=master + + +Installation +------------ + +.. code-block:: bash + + git clone git@github.com:pyreiz/ctrl-localite.git + cd ctrl-localite + pip install . + +Basic Usage +----------- + +Usage of the API depends on a running localite-flow Server. Start this server ideally from the command line using e.g. ``localite-flow --host HOST`` with HOST the ip-adress of your localite PC. + +.. code-block:: bash + + usage: localite-flow [-h] [--host HOST] [--kill] + + optional arguments: + -h, --help show this help message and exit + --host HOST The IP-Adress of the localite-PC + --kill + + + +After that, you can use the python API to access the stream and control TMS Navigator remotely. + +.. code-block:: python + + from localite.api import Coil + coil = Coil(0) # initializes the api for coil 1 (of e.g. 2) + + coil.amplitude = 30 # sets the amplitude of this coil to 30% MSO + coil.trigger() # triggers the coil + + coil.push_marker("Experiment finished") # publishes a marker over LSL + + .. toctree:: - :maxdepth: 2 - :caption: Contents: + cli + api + +Information Flow +---------------- + +Information flows within the server in a relatively complex fashion. There is an EXT listening to messsages sent over the API, which are queued to be delivered to LOC, where they are sent to the localite PC. Concurrently, LOC is constantly listening for messages from the localite PC and sends them indirectly to MRK, where these messages are pubklished in an LSL Marker StreamOutlet. This allows you to publish additional markers over the API, and additonally supports easy automated logging of any command sent to localite. + +.. image:: _static/flow-diagram.png + :width: 600 + +The setup is based on + + + -API ---- -The main interface to controlling your TMS coil with localite-flow -.. autosummary:: - :toctree: _autosummary - :template: module.rst - localite.api Indices and tables -================== +****************** * :ref:`genindex` * :ref:`modindex` diff --git a/localite/api.py b/localite/api.py index f89c447..6ca9d10 100644 --- a/localite/api.py +++ b/localite/api.py @@ -1,22 +1,3 @@ -""" -Localite Flow -------------- - -.. automodule:: localite.flow.mitm - :members: start, kill - -Controlling the Coil --------------------- - -Before you can control the coil and read its parameters, make sure the localite-flow is running, e.g. with :meth:`~localite.flow.mitm.start` or the command-line-interface. - - -.. automodule:: localite.coil - :members: Coil - - -""" - from localite.flow.mitm import start, kill from localite.coil import Coil diff --git a/readme.md b/readme.md index 873b07d..9f88d58 100644 --- a/readme.md +++ b/readme.md @@ -1,51 +1,51 @@ - [![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://en.wikipedia.org/wiki/MIT_License) [![pytest-status](https://github.com/pyreiz/ctrl-localite/workflows/pytest/badge.svg)](https://github.com/pyreiz/ctrl-localite/actions) [![Coverage Status](https://coveralls.io/repos/github/pyreiz/ctrl-localite/badge.svg?branch=develop)](https://coveralls.io/github/pyreiz/ctrl-localite?branch=develop) + [![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](https://en.wikipedia.org/wiki/MIT_License) [![pytest-status](https://github.com/pyreiz/ctrl-localite/workflows/pytest/badge.svg)](https://github.com/pyreiz/ctrl-localite/actions) [![Coverage Status](https://coveralls.io/repos/github/pyreiz/ctrl-localite/badge.svg?branch=master)](https://coveralls.io/github/pyreiz/ctrl-localite?branch=master) [![Documentation Status](https://readthedocs.org/projects/ctrl-localite/badge/?version=latest)](https://ctrl-localite.readthedocs.io/en/latest/?badge=latest) -### ctrl-localite +ctrl-localite +------------ -A repository to control localite 4.0 +This package allows you to stream the current settings and messages from your [localite TMS Navigator](https://www.localite.de/en/home/>) as [LSL stream](https://labstreaminglayer.readthedocs.io/) Additionally, it allows you to control the TMS device connected to the localite software over an api. -### Command Line Tools +This package has been developed using MagVenture TMS devices connected with localite TMS Navigator, and with a beta version of TMS Navigator 4.0. -- localiteLSL +Installation +------------ -starts reading from localite TCP/IP-json and forwards all stimulation trigger -events as LSL Marker stream +``` bash + git clone git@github.com:pyreiz/ctrl-localite.git + cd ctrl-localite + pip install . +``` -- localiteMock +Basic Usage +----------- -mocks a localite TCP/IP-json server for testing and development +Usage of the API depends on a running localite-flow Server. Start this server ideally from the command line using e.g. ``localite-flow --host HOST`` with HOST the ip-adress of your localite PC. + usage: localite-flow [-h] [--host HOST] [--kill] -### Information Flow + optional arguments: + -h, --help show this help message and exit + --host HOST The IP-Adress of the localite-PC + --kill -![Alt text](https://g.gravizo.com/source/custom_mark10?https://raw.githubusercontent.com/pyreiz/ctrl-localite/develop/readme.md) -

- -custom_mark10 - digraph Flow { - rankdir=LR; - { - node [shape = circle] - node [style=filled] - rankdir=LR; - QUEUE -> CTRL - EXT -> QUEUE - CTRL -> LOC - CTRL -> MRK - LOC -> QUEUE - } - fo[label="", shape=plaintext] - fo -> EXT - to[label="", shape=plaintext] - lo[label="", shape=plaintext] - MRK -> to - LOC -> lo - } -custom_mark10 -
-The EXT receives a payload via JSON over TCP-IP. Payloads have to have the form -`[:str, :str, :int]`. The fmt defines how the message will be distributed. Only the following targets for `fmt` are valid: `["cmd", "mrk", "loc"]`. Invalid fmts will not be forwarded, and their message ignored. -Whether the message part of the payload is valid depends on the recipient and will be evaluated there. +After that, you can use the python API to access the stream and control TMS Navigator remotely. +``` python + from localite.api import Coil + coil = Coil(0) # initializes the api for coil 1 (of e.g. 2) + + coil.amplitude = 30 # sets the amplitude of this coil to 30% MSO + coil.trigger() # triggers the coil + + coil.push_marker("Experiment finished") # publishes a marker over LSL +``` + + +Information Flow +---------------- + +Information flows within the server in a relatively complex fashion. There is an EXT listening to messsages sent over the API, which are queued to be delivered to LOC, where they are sent to the localite PC. Concurrently, LOC is constantly listening for messages from the localite PC and sends them indirectly to MRK, where these messages are pubklished in an LSL Marker StreamOutlet. This allows you to publish additional markers over the API, and additonally supports easy automated logging of any command sent to localite. + +![flow-diagram](docs/source/_static/flow-diagram.png) \ No newline at end of file