diff options
Diffstat (limited to 'acquisition')
| -rw-r--r-- | acquisition/chapter.tex | 116 | 
1 files changed, 90 insertions, 26 deletions
| diff --git a/acquisition/chapter.tex b/acquisition/chapter.tex index 02be26a..803049e 100644 --- a/acquisition/chapter.tex +++ b/acquisition/chapter.tex @@ -94,6 +94,26 @@ between them.  %  % TODO: describe each of the sections of this chapter
 +In designing PyCMDS, I was inspired by the nervous system...
 +
 +\begin{dquote}
 +  The autonomic nervous system, which innervates primarily the smooth musculature of all organs,
 +  the heart and the glands, mediates the neuronal regulation of the internal milieu.  %
 +  The actions of this system, as its name implies, are in general not under direct voluntary
 +  control.  %
 +  These characteristics distinguish the autonomic nervous system from the somatic nervous system,
 +  which mediates afferent and efferent communication with the enviornment and, for the most part,
 +  is subject to voluntary control and accessible to consciousness.  %
 +
 +  The autonomic and somatic systems operate hand in hand...
 +
 +  The functions of the autnomic nervous system are to keep the internal milieu of the body constant
 +  (homeostasis...) or adjust it as required by changing circumstances (e.g., mechanical work, food
 +  intake, water deprivation, heat or cold).  %
 +
 +  \dsignature{W. J\"{a}nig, Autonomic Nervous System (1989) \cite{JanigW1989a}}
 +\end{dquote}
 +
  \clearpage
  \section{Graphical user interface}  % =============================================================
 @@ -385,6 +405,8 @@ which point \python{Driver.dequeue} will be called in the worker thread.  %  There is no way for the driver to command hardware to do something in the main thread, but the
  driver can trigger signals like \python{update_ui} and modify Mutexes.  % 
 +[PARENTS ARE VIRTUAL HARDWARE]
 +
  \begin{figure}
  	\includepython{"acquisition/parent_hardware.py"}
    \caption[Parent to hardware and sensors.]{
 @@ -409,8 +431,8 @@ The PyCMDS GUI must change depending on which exact hardware, sensors, and acqui  being used on a given instrument and given day.  %
  Internally, the GUI components are made to be modular and flexable to accommodate this
  requirement.  %
 -
 -[programmatically defined GUI]
 +Rather than having each piece placed ``by hand'', the PyCMDS GUI is defined programmatically and,
 +as such, the full power of abstraction and inheritance is available to the GUI-defining code.  %
  To keep things simple and easy to extend, PyCMDS is made up of only a few minimalist GUI
  elements.  %
 @@ -460,6 +482,8 @@ delay stage.  %  PyCMDS uses pyqtgraph \cite{pyqtgraph} for interactive plotting.  %
  pyqtgraph is great because it is optimized for speed and interactivity.  %
 +Currently only line plots are supported (through the \python{PyCMDS.project.widgets.Plot1D} class),
 +but 2D plots are supported by pyqtgraph and could be added in future versions.  %
  For those wanting to learn more, all graphical components are defined in
  \bash{PyCMDS/project/widgets.py}.  %
 @@ -639,39 +663,83 @@ Old boxcar: 300 ns window, ~10 micosecond delay. Onset of saturation ~2 V.  \section{Autonomic} \label{aqn:sec:autonomic}  % ==================================================
 -\begin{dquote}
 -  The autonomic nervous system, which innervates primarily the smooth musculature of all organs,
 -  the heart and the glands, mediates the neuronal regulation of the internal milieu.  %
 -  The actions of this system, as its name implies, are in general not under direct voluntary
 -  control.  %
 -  These characteristics distinguish the autonomic nervous system from the somatic nervous system,
 -  which mediates afferent and efferent communication with the enviornment and, for the most part,
 -  is subject to voluntary control and accessible to consciousness.  %
 +The autonomic system is used to define ``reflexes'' for PyCMDS---operations that are automatically
 +applied when certain conditions are met.  %
 +Currently the autonomic system has only functionality: \emph{offset} certain hardware as functional
 +of other hardware's positions.  %
 -  The autonomic and somatic systems operate hand in hand...
 +The classic example of autonomic offsets comes from spectral delay correction (see section
 +[ACT]).  %
 +Spectral delay refers to the small delay changes that occur when OPAs change output frequency.  %
 +To correct for spectral delay, the appropriate delay stages can simply be \emph{offset}.  %
 -  The functions of the autnomic nervous system are to keep the internal milieu of the body constant
 -  (homeostasis...) or adjust it as required by changing circumstances (e.g., mechanical work, food
 -  intake, water deprivation, heat or cold).  %
 +In PyCMDS, the autonomic system is fully general---that is to say, any hardware can be offset
 +according to any other hardware.  %
 +This means that spectral delay correction is possible for arbitrarily complex laser setups, and it
 +means that PyCMDS is prepared for corrections that have not yet been fully implemented, such as
 +automated power correction.  %
 -  \dsignature{W. J\"{a}nig, Autonomic Nervous System (1989) \cite{JanigW1989a}}
 -\end{dquote}
 +Simple plain-text \bash{.coset} files define the offset arrays.  %
 +They are automatically generated using processing scripts in \python{attune} [CITE].  %
 +Their headers prevent them from being loaded in the wrong spot.  %
 +These files are internally represented as instances of the \python{CoSet} class, which is capable
 +of linear interpolation and extrapolation at the edges.  %
 -% TODO: concept of additive offsets
 +A single hardware can be offset by multiple other hardwares.  %
 +In such cases, \emph{offsets always add}.  %
  \begin{figure}
 -  \caption[Representative spectral delay correction]{
 -    CAPTION TODO
 -  }
 -  \label{aqn:fig:sdc}
 +  \caption{AUTONOMIC SDC SCREENSHOT}
  \end{figure}
 -  
 +
 +\clearpage
  \section{Somatic} \label{aqn:sec:somatic} % =======================================================
  In contrast with the autonomic system (\autoref{aqn:sec:autonomic}), the somatic system is all
  about voluntary, user specified motion.  %
  This is where the fun stuff happens---the acquisitions!
 +PyCMDS uses the words ``scan'' and ``acquisition'' in very careful ways.  %
 +\begin{ditemize}
 +  \item An acquisition is a single user-defined, enqueable, instruction.
 +  \item A scan is a single traversal in the multidimensional hardware space.  %
 +\end{ditemize}
 +Each scan corresponds to one \bash{.data} file, and one WrightTools \python{Data} instance (see
 +section ...)  %
 +There can be many scans within a single acquisition.  %
 +And there can be many acquisitions in a queue.  %
 +
 +PyCMDS saves the data that it is collecting within a nested folder structure
 +queue/acquisition/scan.  %
 +A \bash{.queue} file holds everything needed to recreate the queue, \python{.aqn} files define each
 +acquisition in plain text and \python{.data} files hold the multidimensional data itself.  %
 +
 +In this section I describe each component of the somatic system in greater detail.  %
 +
 +\subsection{Queue manager}  % ---------------------------------------------------------------------
 +
 +The queue manager keeps track of all enqueued acquisitions, and tells each acquisition when to
 +begin.  %
 +A singleton \python{Queue} class lives in the main thread and handles interfacing to the
 +\bash{.queue} plain-text file.  %
 +When a user appends new acquisitions, or changes their order, the \python{queue} instance makes
 +sure that those changes are reflected in the GUI and the file.  %
 +
 +A special singleton \python{QueueStatus} keeps track of, well, the queue status: a series of
 +booleans \python{go}, \python{going}, \python{pause}, \python{paused}, \python{stop}, and
 +\python{stopped}.  %
 +The verb booleans (\python{go}, \python{pause}, \python{paused}), are control flags, to be
 +written by the main thread.  %
 +The present particple booleans (\python{going}, \python{paused}, \python{stopped}) are flags to be
 +written by the worker thread to indicate status of the current acquisition.  %
 +
 +A singleton \python{Worker} class lives in the acquisition worker thread and carries out the actual
 +operation.  %
 +The \python{queue} instance pushes operations to the \python{worker}, and the \python{worker} sends
 +a signal that causes \python{queue.on_action_complete} to be called.  %
 +If there are more enqueued acquisitions, and \python{queue_status.go} is true, the \python{queue}
 +instance pushes the next operation to the \python{worker} and the process starts over again.  %
 +
  \subsection{Scans}  % -----------------------------------------------------------------------------
  The central loop of scans in PyCMDS.  %
 @@ -731,10 +799,6 @@ Automatically do appropriate scans and process as in chapter...  Dedicated to poynting (get content from Kyle S)...
 -z\subsection{Queue manager}  % ---------------------------------------------------------------------
 -
 -\subsection{The central loop of PyCMDS}  % --------------------------------------------------------
 -
  \subsection{The data file}  % ---------------------------------------------------------------------
  Does not have the same dimensionality restrictions as prior acquisition software.  %
 | 
