.. SPDX-FileCopyrightText: 2021-2023 Constantine Evans <qslib@mb.costi.net>
..
.. SPDX-License-Identifier: EUPL-1.2

qslib |version|
===============


.. currentmodule:: qslib

Introduction
------------

QSLib is a package for interacting with Applied Biosystems' QuantStudio
qPCR machines, intended for non-qPCR uses, such as DNA computing and
molecular programming systems.

There are a few different ways to use QSLib:

- Through its command-line script, `qslib`, which has a number of subcommands allowing basic machine control, experiment
  file information, and data export.

- As a library in Python, often either in the REPL, or via a notebook system like Jupyter.  QSLib uses nest-asyncio to
  allow it to operate seamlessly within Jupyter notebooks.  This allows experiment creation, modification, and processing,
  data plotting, machine control, and all other features.  Machine communication, however, does require some setup.

- As a monitoring system integrated with Matrix and InfluxDB.  This allows real-time storage of machine and run state
  and fluorescence data, and almost-live synchronization of in-progress and finished experiment files (in-progress
  files may not be usable by AB's software).

Basic use within Python
-----------------------

Basic of QSLib is mostly built around the :class:`Experiment` and :class:`Machine` classes, along with several classes for
defining a :class:`PlateSetup` and temperature :class:`Protocol`.

By default (as of v0.5.0), most methods communicating with a machine are "automatic": they handle connection
and disconnection, and access levels, automatically.  They are also written so that, if there is no passsword
required, the machine's hostname as a string can be used as a reference to the machine.  So, for example, if you
want to run an experiment :code:`experiment` on machine `example-qs5`, you could use: :code:`experiment.run("example-qs5")`, or,
to load an experiment named `my-experiment` from a machine, you could use
:code:`experiment = Experiment.from_machine("example-qs5", "my-experiment")`.  Similarly, to open the machine's drawer,
you could use :code:`Machine("example-qs5").drawer_open()`.

Documention contents
--------------------

.. toctree::
    tutorial
    experiments
    machines
    commandline
    monitor
    setup

.. toctree::
   :maxdepth: 3

   API Reference <api/modules>

.. toctree::
   :maxdepth: 2

   changelog
   License <LICENSE.txt>
   authors


Indices and tables
------------------

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
