{ "info": { "author": "Sam Kohn", "author_email": "skohn@lbl.gov", "bugtrack_url": null, "classifiers": [], "description": "xylem\n========\n\nA modular, parallel-ready data acquisition framework\n\nXylem systems consist of a collection of software components connected\nto represent the flow of information (data and commands) through\nthe experiment. Each component has a particular relation to data\n(e.g. Producer, Consumer, Aggregator) which determines the available\nconnections and functionality. For example, Producers introduce new data\ninto the xylem system, and Consumers remove data from the system (e.g.\ninto offline storage). The components work together to get data through\nthe pipeline as smoothly as possible.\n\nXylem components are designed to fit into code that you already have\nwhich controls your experimental equipment and processes your data. For\nexample, if you have code which interfaces with an instrument and prints\nthe data to the console, you can replace the print statement with a\ncall to ``Producer.produce()``. Then, the xylem Producer will send off\nthe data to the downstream xylem components while your code continues\nrunning.\n\nThe xylem Core is a special component which monitors and commmunicates\nwith all of the other components in the system. It determines if a\ncomponent has crashed or otherwise become unresponsive, and it also can\nsend state updates and arbitrary messages to the components.\n\nHuman operators can access the functionality of the Core component using\nthe Controller component. This component does not participate in the\ndata flow; rather, it allows the human operator to send commands to the\nsystem (via the Core) and query its state (also via the Core). You can\ndesign your system to respond to any set of commands you'd like, such\nas \"Begin run,\" \"Initialize instrumentation,\" \"Perform calibration,\" or\nanything else that makes sense in your system. Internally, your code\nwould translate your commands into state updates that will be sent to\nthe Core. You provide the logic; xylem simply makes sure the messages\nreach their intended destination.\n\n\n## DAQ Components\n\nFundamental building blocks for basic setups:\n\n- Data producer: produces data. Example: digitizers\n\n- Data consumer: accepts data inputs and sends no output to other\n xylem components. Examples: offline data storage, live data display\n\n- Data aggregator: collects data from multiple data producers and\n supplies the data to multiple data consumers\n\nCompound building blocks for more advanced setups:\n\n- Data producer group: a collection of data producers\n whose output is aggregated before being\n sent to the data aggregator, so that the collection can be treated as\n a single data producer. Example: an array of identical sensors\n\n## Example basic architecture\n\n- Data producer\n- Data aggregator\n- Data consumer\n\n## Example complex architecture\n\n- Data producer group 1*\n - Data producer\n - Data producer\n - ...\n- Data producer group 2*\n - Data producer\n - Data producer\n - ...\n- Data aggregator 1\n - Data consumer 1+\n - Data consumer 2\n - ...\n- Data aggregator 2\n - Data consumer 1+\n - Data consumer 3\n - ...\n\n*: The data producer groups are located after the data producers in the\ndata flow.\n\n+: A single data consumer instance can receive data from multiple data\naggregators.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/samkohn/xylem", "keywords": "daq physics", "license": "", "maintainer": "", "maintainer_email": "", "name": "xylem-daq", "package_url": "https://pypi.org/project/xylem-daq/", "platform": "", "project_url": "https://pypi.org/project/xylem-daq/", "project_urls": { "Homepage": "https://github.com/samkohn/xylem" }, "release_url": "https://pypi.org/project/xylem-daq/0.3.2/", "requires_dist": [ "pyzmq", "eventlet (>=0.24)" ], "requires_python": "", "summary": "Modular DAQ system", "version": "0.3.2" }, "last_serial": 5575176, "releases": { "0.3.0": [ { "comment_text": "", "digests": { "md5": "b244bef292b55e5503d59db528916b11", "sha256": "b61bfaaf5ba90a37f0bcad7401c8890d8dadc51d259d3834cae3da421e082411" }, "downloads": -1, "filename": "xylem_daq-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "b244bef292b55e5503d59db528916b11", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19338, "upload_time": "2019-07-15T21:58:49", "url": "https://files.pythonhosted.org/packages/5c/2b/65b14659e4bb6153b6ef19bb218621bdda5dfb9e9604336f4e75f67a8849/xylem_daq-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e4bfdecce5a159af823ccdd50c7b6b0", "sha256": "a2fde5c9614dae268d7905775c29f29e131f9e865b8e0788ec386c9ace523bc7" }, "downloads": -1, "filename": "xylem-daq-0.3.0.tar.gz", "has_sig": false, "md5_digest": "5e4bfdecce5a159af823ccdd50c7b6b0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15103, "upload_time": "2019-07-15T21:58:52", "url": "https://files.pythonhosted.org/packages/a9/14/4e86f2a7d0535cfe75304e01f843e80f45945480e878e71640e0a9b1e953/xylem-daq-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "cda44ac7b08c0246ec7d3f6cf75b9161", "sha256": "34cb5d5e244e8efa3e3b7b5d140065e3eb542027a9b11896ab1704fcb5123b8a" }, "downloads": -1, "filename": "xylem_daq-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cda44ac7b08c0246ec7d3f6cf75b9161", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19355, "upload_time": "2019-07-17T23:49:06", "url": "https://files.pythonhosted.org/packages/21/50/1c0cd2bf8595a5325718ec2e2f154f02ecccf05e7f8e9e0fa9ec85e46b1f/xylem_daq-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6f40bfa678aa12d0eac1e6503333b62", "sha256": "cbd4800855e84ebd28e44296347301651d13bcc53670b8462cc19a1c637a08e1" }, "downloads": -1, "filename": "xylem-daq-0.3.1.tar.gz", "has_sig": false, "md5_digest": "c6f40bfa678aa12d0eac1e6503333b62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15124, "upload_time": "2019-07-17T23:49:10", "url": "https://files.pythonhosted.org/packages/4c/ae/9b0fed4e530269e1820ff86b1d682d61b793c75e54d90f96f8cb455d624a/xylem-daq-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "9b15f11176eb4852c78996d54b67657a", "sha256": "c514ed882b224133bc82ca83ef0b994792e74af54d1d547010a400ce0fc4d895" }, "downloads": -1, "filename": "xylem_daq-0.3.2-py2-none-any.whl", "has_sig": false, "md5_digest": "9b15f11176eb4852c78996d54b67657a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 19359, "upload_time": "2019-07-24T01:21:55", "url": "https://files.pythonhosted.org/packages/44/81/d6338b5adf132399e40432e12dd53beab6daf634e0c007fec08a2bf1c8f5/xylem_daq-0.3.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4dd3bdcc48456b04dca3c6561b4f792c", "sha256": "cf3369c9fce7bc4af59a8c9018d741eb5bb6c7d2a2b5d2bc2dc0bcc05e32132d" }, "downloads": -1, "filename": "xylem_daq-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "4dd3bdcc48456b04dca3c6561b4f792c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19359, "upload_time": "2019-07-18T22:33:19", "url": "https://files.pythonhosted.org/packages/c2/35/4f259a81098b3d7834559aeebe33fa7df37a16b1b0e1a7b453de15e7eb04/xylem_daq-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f01b63c78c9821e4199a8631c11eee62", "sha256": "7a9924f82d52cb3db226ef4e46762b45f6db53dc5e44bd8a50af17b5ac645be8" }, "downloads": -1, "filename": "xylem-daq-0.3.2.tar.gz", "has_sig": false, "md5_digest": "f01b63c78c9821e4199a8631c11eee62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15122, "upload_time": "2019-07-18T22:33:23", "url": "https://files.pythonhosted.org/packages/80/e8/137096ef303afe4be81acc1143b21e683bbb7edc7fbfb850a546c063f43e/xylem-daq-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9b15f11176eb4852c78996d54b67657a", "sha256": "c514ed882b224133bc82ca83ef0b994792e74af54d1d547010a400ce0fc4d895" }, "downloads": -1, "filename": "xylem_daq-0.3.2-py2-none-any.whl", "has_sig": false, "md5_digest": "9b15f11176eb4852c78996d54b67657a", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 19359, "upload_time": "2019-07-24T01:21:55", "url": "https://files.pythonhosted.org/packages/44/81/d6338b5adf132399e40432e12dd53beab6daf634e0c007fec08a2bf1c8f5/xylem_daq-0.3.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4dd3bdcc48456b04dca3c6561b4f792c", "sha256": "cf3369c9fce7bc4af59a8c9018d741eb5bb6c7d2a2b5d2bc2dc0bcc05e32132d" }, "downloads": -1, "filename": "xylem_daq-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "4dd3bdcc48456b04dca3c6561b4f792c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19359, "upload_time": "2019-07-18T22:33:19", "url": "https://files.pythonhosted.org/packages/c2/35/4f259a81098b3d7834559aeebe33fa7df37a16b1b0e1a7b453de15e7eb04/xylem_daq-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f01b63c78c9821e4199a8631c11eee62", "sha256": "7a9924f82d52cb3db226ef4e46762b45f6db53dc5e44bd8a50af17b5ac645be8" }, "downloads": -1, "filename": "xylem-daq-0.3.2.tar.gz", "has_sig": false, "md5_digest": "f01b63c78c9821e4199a8631c11eee62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15122, "upload_time": "2019-07-18T22:33:23", "url": "https://files.pythonhosted.org/packages/80/e8/137096ef303afe4be81acc1143b21e683bbb7edc7fbfb850a546c063f43e/xylem-daq-0.3.2.tar.gz" } ] }