aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlaise Thompson <blaise@untzag.com>2018-04-14 12:59:30 -0500
committerBlaise Thompson <blaise@untzag.com>2018-04-14 12:59:30 -0500
commit00fb8d01e53be66fe4dfde3beee3c98acc18f3b7 (patch)
treec35e3b7972e007928d2632e545cdf453ab6da7f5
parent9b1b744d5c205f8bff39cd3b1cbe80626a46015c (diff)
2018-04-14 12:59
-rw-r--r--acquisition/chapter.tex34
-rw-r--r--active_correction/chapter.tex70
2 files changed, 71 insertions, 33 deletions
diff --git a/acquisition/chapter.tex b/acquisition/chapter.tex
index 78b4199..a7d434e 100644
--- a/acquisition/chapter.tex
+++ b/acquisition/chapter.tex
@@ -103,7 +103,7 @@ spectroscopist to the next, but there is almost no overlap between hardware conf
the two primary instruments maintained by the Wright Group. %
Besides the extendable modular pieces, the rest of PyCMDS is a mostly-static code-base that accepts
modules and does the necessary things to handle display of information from, and communication
-between them. %
+between, them. %
PyCMDS offers many ways to interact with component hardwares. %
Hardware can be set directly, or it can be moved in the context of a scan. %
@@ -124,7 +124,7 @@ I have borrowed the terms ``autonomic'' and ``somatic'':
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
+ The functions of the autonomic 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). %
@@ -143,7 +143,6 @@ acquiring a multidimensional scan. %
In this section I introduce the GUI of PyCMDS, with the goal of introducing the basic structure as
experienced by a first time user of the software. %
-
When PyCMDS starts up, the GUI is constructed out of modules depending on which hardware and
sensors the user has instructed the program to address. %
A screenshot of the PyCMDS GUI, running on the fs table, is shown in
@@ -353,7 +352,7 @@ For OPAs in the Wright Group, this operation requires the following:
This is not even to mention the complexity of spawning and sending information between the main
thread and working threads. %
Through abstraction, PyCMDS is able to wrap all this complexity into the \python{OPA} class and
-it's \python{set_position} method---so doing all of the operations above is as simple as
+its \python{set_position} method---so doing all of the operations above is as simple as
\python{opa.set_position(1300, 'nm')}. %
Importantly, abstraction does not magically get rid of the complexity. %
It simply \emph{hides} the complexity so that it becomes tractable to write simple interfaces to
@@ -365,7 +364,7 @@ The \emph{child} class acquires all of the properties of the \emph{parent} class
The child class, then, can modify or extend the properties that it needs, without needing to
re-implement the properties that it shares with the parent. %
Let's consider PyCMDS hardware again. %
-Every single unique hardware in PyCMDS lives in it's own worker thread, so the basic problem of
+Every single unique hardware in PyCMDS lives in its own worker thread, so the basic problem of
information transfer through queues and Mutexes is shared between them. %
A \python{Hardware} class which is parent to \emph{all} hardwares can define the methods and
attributes necessary to abstract this basic thread communication issue. %
@@ -399,7 +398,7 @@ Now we can see that PyCMDS is going to use multi-threading, inheritance and abst
possible, so let's get into some details about the \emph{actual} internal structure of the
software. %
-For those that want to dig deeper, most of these top level classes are defined in
+For those that want to dig deeper, most of these top level classes are defined in \\
\bash{PyCMDS/project/classes.py}. %
\subsubsection{Data types} % ---------------------------------------------------------------------
@@ -512,7 +511,10 @@ enabled. %
Input tables are the two column GUI elements that are everywhere in PyCMDS. %
The great thing about input tables is that they accept PyCMDS ``data type'' objects directly. %
Given an instance of \python{Number} called \python{destination}, adding to the input table is as
-easy as \python{input_table.add('Destination', destination)}. %
+easy as
+\begin{codefragment}{python}
+input_table.add('Destination', destination)
+\end{codefragment}
Internally, PyCMDS will do all of the work to make sure that \python{destination} is displayed in
the GUI. %
The \python{destination.updated} signal will fire whenever a user manually interacts with the
@@ -538,16 +540,16 @@ 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),
+Currently only line plots are supported (through PyCMDS' \python{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
+For those wanting to learn more, all GUI components are defined in
\bash{PyCMDS/project/widgets.py}. %
\clearpage
\section{Hardware} \label{aqn:sec:hardware} % ====================================================
-Hardware are things that 1) have a position, 2) can be set to a destination. %
+Hardware are things that 1. have a position, and 2. can be set to a destination. %
Typically they also have associated units and limits. %
They sometimes have an offset, as specified by the autonomic system
(\autoref{aqn:sec:autonomic}). %
@@ -712,7 +714,7 @@ following:
Many of these additional features have to do with the tuning curve, a crucial feature of OPAs. %
The tuning curve contains motor positions needed to achieve each valid output color. %
-Read more about my implementation of tuning curves in \ref{cha:opa}. %
+Read more about my implementation of tuning curves in \autoref{cha:opa}. %
\autoref{aqn:fig:opa_advanced} is a screenshot of the advanced menu for one of the TOPAS-C [CITE]
OPAs on the fs table. %
@@ -807,7 +809,13 @@ Although only one piece of hardware was scanned, the data is considered to be
\emph{two}-dimensional, with the second dimension being $\bar{\nu}_a$, the differential color axis
for the array vs the OPA setpoint. %
-[EQUATION]
+The data in \autoref{aqn:fig:array_as_axis} does not occupy a rectangular region in this
+parameterization. %
+This is because the range of colors covered at each monochromator setpoint is different, with a
+smaller dispersion (more colors across the finite array) at higher energies. %
+This relationship is somewhat complex, and requires terms like angle of deviation, focal length,
+and focal plane tilt to solve. %
+It has been derived previously by \textcite{KainSchuyler2017a}. %
\begin{figure}
\includegraphics[scale=0.5]{"acquisition/tune_test"}
@@ -994,7 +1002,7 @@ Arbitrary expressions (PyCMDS calls them ``constants'') are also possible, as ca
\subsubsection{TUNE TEST}
-The TUNE TEST module does a simple thing: it sets a chosen OPA to each of the points in it's tuning
+The TUNE TEST module does a simple thing: it sets a chosen OPA to each of the points in its tuning
curve and does a monochromator scan of set width about that setpoint. %
In this way the tune (output color) agreement between the curve and the OPA can be determined. %
As a convinience, a new point curve with remapped colors is automatically created. %
diff --git a/active_correction/chapter.tex b/active_correction/chapter.tex
index 4f7003d..7ecbe2f 100644
--- a/active_correction/chapter.tex
+++ b/active_correction/chapter.tex
@@ -19,13 +19,13 @@ MR-CMDS is subject to a number of possible artifacts, many of them stemming from
nature of the frequency-tunable light sources we currently have. %
It is self-evidently desirable to correct these artifacts, when possible. %
Indeed many of these artifacts, such as OPA power, phase mismatch and absorption effects have
-regularly been corrected for. % TODO: link to examples in applications section
+regularly been corrected for. % TODO: link to examples in applications section, cite
These corrections are applied after measurement, typically including information from other sources
(such as absorption spectra, in the case of absorption effect corrections).
A more interesting class of corrections are ``active'' corrections---that is, corrections that must
be actively applied during acquisition and cannot be applied in post processing. %
-These corrections are more insidious, and they are often neglected because the hardware and/or
+These corrections are more insidious, as they are often neglected because the hardware and/or
software does not allow for them. %
In this chapter I explore some of these active correction strategies that are useful in the context
@@ -34,17 +34,19 @@ Some of these strategies have already been implemented, others are partially imp
others are still just ideas. %
I hope to show that active correction is a particularly useful strategy in MR-CMDS. %
-[SPECTRAL DELAY PARAGRAPH]
+Section ... addresses spectral delay correction, where automated delay stages are used to
+explicitly correct for small changes in optical path length at different pulse frequencies. %
-[POYNTING CORRECTION PARAGRAPH]
+Section ... addresses poynting correction, where mirrors with motorized pitch and yaw control are
+used to actively correct for small changes in OPA output poynting. %
-[EXCITATION POWER CORRECTION PARAGRAPH]
+Section ... addresses (dual) chopping, used to actively subtract artifacts such as scatter and
+unwanted nonlinear outputs. %
+Chopping can only account for intensity level (additive) artifacts. %
+Fibrillation is the opposite of chopping, as it can only account for amplitude level
+\emph{iterference} effects. %
+Section ... addresses fibrillation. %
-[CHOPPING PARAGRAPH]
-
-[FIBRILLATION]
-
-\clearpage
\section{Spectral delay correction} % ============================================================
As a frequency domain technique, MR-CMDS requires automated tuning of multiple OPAs. %
@@ -53,13 +55,14 @@ Crucially, the relative arrival time of each pulse must be carefully controlled
the MR-CMDS experiment. %
Unfortunately, changing the output frequency also changes the optical path length, meaning that
there is some unavoidable coupling between delay and frequency axes. %
-Because we have full control over delay through delay stages, we can correct for this phenomenon by
-choosing a different zero delay \emph{offset} for each OPA output color. %
+Because we have full control over delay with our automated stages, we can correct for this
+phenomenon by choosing a different zero delay \emph{offset} for each OPA output color. %
This strategy has been dubbed ``spectral delay correction''. %
-Spectral delay correction (SDC) is certainly the longest running active correction strategy employed
+Spectral delay correction (SDC) is certainly the oldest active correction strategy employed
within the Wright Group. %
-SDC was first implemented by Schuyler Kain within his COLORS acquisition software. [CITE] %
+SDC was first implemented by Schuyler Kain within his COLORS acquisition software.
+\cite{KainSchuyler2017a} %
COLORS' implementation was hardcoded for one particular OPA / delay configuration---it wasn't until
PyCMDS that fully arbitrary SDC became possible through the autonomic system (see section ...). %
Erin Boyle ``backported'' similar functionality into to ps\_control, although her implementation
@@ -74,7 +77,13 @@ A special method of \python{Data}, \python{Data.offset} is designed to do the ne
interpolation for \emph{post hoc} SDC. %
In many experiments spectral delay must be actively corrected for. %
-Fully coherent experiments do
+Fully coherent experiments are typically performed by scanning OPA frequencies while attempting to
+keep delays constant. %
+In such experiments, the dataset does not in-and-of-itself contain the information needed to
+offset in post processing. %
+Indeed it can easily become time-prohibitive to collect the full response. %
+For a three-beam experiment, an entire two dimensional delay-delay collection would be required at
+each pixel to allow for post-correction. %
It has been found that SDC is necessary for each individual scanned OPA, and for each separate path
when pulses from a single OPA are split. %
@@ -82,7 +91,7 @@ The difference between different paths is typically small, but enough to move pu
amount relative to each-other. %
For this reason, SDC for split OPAs is a multidimensional problem, which in principle requires a
multi-dimensional acquisition to fully record. %
-In practice, however, these corrections are recorded iteravely. %
+In practice, however, these corrections are typically recorded iteratively. %
White light sources are also interesting to consider in the context of spectral delay
correction. %
@@ -101,7 +110,28 @@ using a delay stage. %
COLORS' has taken this idea to it's logical conclusion, with support for ``OPAs'' that are actually
controlled by delay stages, although the idea has not yet been realized in practice. %
-[DESCRIPTION OF FIGURE]
+\autoref{act:fig:sdc} contains two plots that were automatically generated by PyCMDS in the context
+of an experiment. %
+In this case, the user used a sapphire plate as a nonresonant medium to record the spectral delay
+dependence. %
+It was a three beam $\omega_1$, $\omega_2$, $\omega_{2^\prime}$ experiment, so three corrections
+were necessary: D2 vs OPA1, D1 vs OPA2, and D2 vs OPA2. %
+Here we focus only on D2 ($\tau_{21}$) vs OPA1, the simplest of the corrections. %
+
+In the left-hand subplot of \autoref{act:fig:sdc} we see the original experiment. %
+Without corrections applied, the user scanned OPA1 vs D2. %
+The curvature in the plot is due entirely to SDC, as sapphire is entirely nonresonant (driven). %
+Using WrightTools, PyCMDS fits each slice to find the delay that gives maximum signal. %
+It then passes those separate fits through a spline to guess the ultimate SDC dependence. %
+PyCMDS makes a best guess in regions where there is not enough signal to determine the appropriate
+delay, like in at 800 nm in the left hand plot. %
+The magnitude of the corrections are roughly 30 fs in this particular experiment: not large, but
+enough to change signal levels by roughly a factor of 2. %
+In other cases SDC is as much as 200 fs. %
+
+In the right-hand subplot the user has taken the same scan again, this time after corrections were
+applied. %
+The delay traces (horizontal) peaks at the same value for every OPA1 position (vertical). %
\begin{figure}
\includegraphics[width=0.45\textwidth]{"active_correction/sdc_before"}
@@ -109,6 +139,7 @@ controlled by delay stages, although the idea has not yet been realized in pract
\caption[CAPTION TODO]{
CAPTION TODO: SPECTRAL DELAY CORRECTION FIGURE
}
+ \label{act:fig:sdc}
\end{figure}
\section{Poynting correction} % ==================================================================
@@ -130,9 +161,6 @@ controlled by delay stages, although the idea has not yet been realized in pract
}
\end{figure}
-\section{Excitation power correction} % ==========================================================
-
-\clearpage
\section{Chopping} % =============================================================================
\subsection{Scatter} % ---------------------------------------------------------------------------
@@ -374,3 +402,5 @@ This is a well known strategy for removing unwanted interference terms \cite{Spe
McClainBrianL2004a}. %
\section{Conclusions} % ==========================================================================
+
+In the future I'd like to do excitation power correction. % \ No newline at end of file