From c1f9953f667a7ac0a416526a389f585e97c10099 Mon Sep 17 00:00:00 2001 From: Isaac Lenton Date: Fri, 27 Mar 2020 12:36:57 +1000 Subject: [PATCH] Updated docs/getting started to be more helpful --- README.md | 13 +- docs/Bsc.rst | 3 + docs/Calculating-forces-with-the-gui.rst | 15 + docs/Examples.rst | 8 +- docs/Exploring-the-toolbox-with-the-UI.rst | 10 - docs/Further-Reading.rst | 2 + docs/Getting-Started.rst | 346 +++++++++++++++----- docs/Introduction.rst | 21 +- docs/Other-functions.rst | 2 + docs/images/gettingStarted/gui_launcher.png | Bin 0 -> 32482 bytes 10 files changed, 316 insertions(+), 104 deletions(-) create mode 100644 docs/Calculating-forces-with-the-gui.rst delete mode 100644 docs/Exploring-the-toolbox-with-the-UI.rst create mode 100644 docs/images/gettingStarted/gui_launcher.png diff --git a/README.md b/README.md index e523cd9b..b01fdd27 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ There are several methods for installing the toolbox. If using Matlab, the easiest method is to launch Matlab and navigate to Home -> Addons -> Get-Addons and search for "Optical Tweezers Toolbox". Then, simply click the -"Add from GitHub" button to automatially download the package and +"Add from GitHub" button to automatically download the package and add it to the path. Alternatively, you can download the toolbox directly from the [GitHub repository](https://github.com/ilent2/ott) or select a @@ -49,6 +49,9 @@ or for the graphical user interface ott.ui.Launcher ``` +More detailed instructions can be found in the Getting Started +section of the [documentation](https://ott.readthedocs.io/). + Dependencies ------------ @@ -65,8 +68,8 @@ We are currently working on a full list; however, if you encounter any difficulties with missing dependencies, please let us know and we may be able to find a workaround. -Getting started ---------------- +Quick-start guide +----------------- The toolbox has changed a lot since previous releases, the most notable change is addition of a graphical user interface (still a work-in-progress) @@ -158,8 +161,8 @@ or by directly citing the toolbox and the respective Bibtex entry ```latex -@misc{Nieminen2018, - author = {Lenton, Isaac C. D. and Nieminen, Timo A. and Loke, Vincent L. Y. and Stilgoe, Alexander B. and Kn{\ifmmode\ddot{o}\else\"{o}\fi}ner, Gregor and Bra{\ifmmode\acute{n}\else\'{n}\fi}czyk, Agata M. and Heckenberg, Norman R. and Rubinsztein-Dunlop, Halina}, +@misc{Lenton2020, + author = {Lenton, Isaac C. D. and Nieminen, Timo A. and Loke, Vincent L. Y. and Stilgoe, Alexander B. and Y. Hu and Kn{\ifmmode\ddot{o}\else\"{o}\fi}ner, Gregor and Bra{\ifmmode\acute{n}\else\'{n}\fi}czyk, Agata M. and Heckenberg, Norman R. and Rubinsztein-Dunlop, Halina}, title = {Optical Tweezers Toolbox}, year = {2020}, publisher = {GitHub}, diff --git a/docs/Bsc.rst b/docs/Bsc.rst index f84d128c..2d48b5a2 100644 --- a/docs/Bsc.rst +++ b/docs/Bsc.rst @@ -1,3 +1,6 @@ + +.. _bsc-classes: + ############# `Bsc` classes ############# diff --git a/docs/Calculating-forces-with-the-gui.rst b/docs/Calculating-forces-with-the-gui.rst new file mode 100644 index 00000000..891a2134 --- /dev/null +++ b/docs/Calculating-forces-with-the-gui.rst @@ -0,0 +1,15 @@ + +.. _calculating-forces-with-the-gui: + +############################### +Calculating forces with the GUI +############################### + +.. contents:: + :depth: 3 +.. + +Information on exploring the toolbox with the UI + +.. todo:: Write this page + diff --git a/docs/Examples.rst b/docs/Examples.rst index cce0f3ed..dfa44be3 100644 --- a/docs/Examples.rst +++ b/docs/Examples.rst @@ -1,11 +1,13 @@ +.. _examples: ######## Examples ######## -This section provides detailed examples to help you get started using the toolbox. -Further examples scripts and LiveScripts can be found in the ``examples`` directory. +This section provides detailed examples to help you get started using +the toolbox. Further examples scripts and LiveScripts can be found +in the ``examples`` directory. .. toctree:: :maxdepth: 2 @@ -14,5 +16,5 @@ Further examples scripts and LiveScripts can be found in the ``examples`` direct Combining-beams Creating-a-custom-beam Creating-a-custom-Tmatrix - Exploring-the-toolbox-with-the-UI.rst + Calculating-forces-with-the-gui.rst diff --git a/docs/Exploring-the-toolbox-with-the-UI.rst b/docs/Exploring-the-toolbox-with-the-UI.rst deleted file mode 100644 index ab41c680..00000000 --- a/docs/Exploring-the-toolbox-with-the-UI.rst +++ /dev/null @@ -1,10 +0,0 @@ - -################################## -Exploring the toolbox with the GUI -################################## - -.. contents:: - :depth: 3 -.. - -Information on exploring the toolbox with the UI diff --git a/docs/Further-Reading.rst b/docs/Further-Reading.rst index 8966fdf7..8b54c1cd 100644 --- a/docs/Further-Reading.rst +++ b/docs/Further-Reading.rst @@ -1,4 +1,6 @@ +.. _further-reading: + ############### Further Reading ############### diff --git a/docs/Getting-Started.rst b/docs/Getting-Started.rst index c14b04e6..dfaac6f4 100644 --- a/docs/Getting-Started.rst +++ b/docs/Getting-Started.rst @@ -1,108 +1,304 @@ +.. _getting-started: + ############### Getting Started ############### -This page has information about getting started with the toolbox -including `installation <#installation>`__ and `running the -examples <#running-the-examples>`__. +This section has information about getting started with the toolbox +including information on `installation <#installation>`__, +`using the GUIs <#exploring-the-toolbox-with-the-gui>`__ +and `running the example files <#running-the-examples>`__. +This section also contains a brief +`overview of the toolbox <#toolbox-overview>`__, further +information can be found in the papers listed in +:ref:`further-reading`. Installation ============ -To use the toolbox, download or clone the GitHub repository. You will -also need a modern version of MATLAB, we recommend updating to at least -2018a. You may also need some of the Matlab support packages. This -version of the toolbox is released as a package, ``+ott``, which -contains a collection of functions for calculating T-matrices, beam -coefficients, force and torques. To use the functions in your code, the -easiest way is to add the directory containing the package to your path -and importing the package, +To use the toolbox, you will need a recent version of Matlab (at +least R2016b; R2018a is needed for some features; Octave should also work) +and the latest version of OTT. +There are a couple of ways to get OTT. +You can download one of the Matlab toolbox files (with the ``.mltbx`` +file extension), or download one of the ``.zip`` archives containing +the source code, or download the latest source directly from GitHub. +If you are using Matlab, the easiest method is to install OTT via +the Addons explorer. +The following sub-sections detail each of these methods. -.. code:: matlab +Installing via Matlab Addons Explorer +------------------------------------- + +If using Matlab, the easiest method to install the toolbox is using +the Matlab Addons explorer. +Simply launch Matlab and navigate to **Home** > **Addons** > **Get-Addons** +and search for +"Optical Tweezers Toolbox". Then, simply click the +*Add from GitHub* button to automatically download the package and +add it to the path. +You may need to logging to a Mathworks account to complete this step. + +Using a ``.mltbx`` file +----------------------- - addpath('/ott'); - help ott % Test that ott was found, should display ott Contents page +You can download the latest stable release of OTT from either the +`GitHub release page `__. +Simply download the appropriate ``.mltbx`` file for the relevant version. +Once downloaded, execute the file and follow the instructions to install +the toolbox. + +To change/remove the toolbox, go to **Home** > **Add-ons** +> **Manage Add-ons** and select the toolbox you would like to configure. + +Using a ``.zip`` or cloning the repository +------------------------------------------ -if you regularly use the toolbox you might want to add the command to -your -`startup.m `__ -file. If you have multiple version of ``ott`` installed, you might want -to check which version is currently being found, you can use the -following command +The latest version of OTT can be downloaded from the +`OTT GitHub page `__. +Simply click the *Clone or Download* button and select your +preferred method of download. +The advantage of cloning the GitHub repository is you can easily switch +between different versions of the toolbox or download the most recent +changes/improvements to the toolbox. +There are a range of online tutorials for getting started with +git and GitHub, for example +https://product.hubspot.com/blog/git-and-github-tutorial-for-beginners. + +If you are cloning the repository you can checkout different +tags to select the desired release. +Alternatively, for a specific release, navigate to the +`release page `__ +and select the ``.zip`` file for the desired release. + +To install OTT, download the latest version of the toolbox to your +computer, if you downloaded a ``.zip`` file, extract the files to +your computer. + +Once downloaded, most of the toolbox functionality is ready to use. To +start exploring the functionality of the toolbox immediately, you can +run the ``examples``. +To use the graphical user interface or add the toolbox to your own code, +you will need to make Matlab aware of the toolbox path. +To do this, simply run .. code:: matlab - what ott + addpath('/path/to/toolbox/ott'); -Changes and overview -==================== +Replace the path with the path you placed the downloaded toolbox in. The +folder must contain the ``+ott`` directory and the ``docs`` directory. +If you downloaded the latest toolbox from GitHub, the final part of the +pathname will either be the repository path (if you used ``git clone``) +or something like ``ott-master`` (if you downloaded a ZIP). The above +line can be added to the start of each of your files or for a more +permanent solution you can add it to the `Matlab startup +script `__. -The toolbox has changed a lot since previous releases. To get started, -it is probably easiest to take a look at the examples, run and modify -them. - -The examples calculate the force and torque efficiencies. These are the -force and torque per photon, in photon units. To convert to SI units: -force\_SI = force\_Q \* n \* P/c torque\_SI = torque\_Q \* P/w where n -is the refractive index of the surrounding medium, P is the beam power -in watts, c is the speed of light in free space, w is the angular -optical frequency, in radians/s. - -To understand how the toolbox calculates optical forces and torques, -take a look at the guide to version 1.2 of the toolbox and the optical -tweezers computational toolbox paper (pre-print). Both are available on -our -`website `__. - -T-matrices are represented by ``Tmatrix`` objects. For simple shapes, -the ``Tmatrix.simple`` method can be used to construct T-matrices for a -variety of common objects. More complex T-matrices can be generated by -inheriting the T-matrix class, for an example, take a look at TmatrixMie -and TmatrixPm. - -Beams are represented by a ``Bsc`` objects. A beam can be multiplied by -T-matrices or other matrix/scalar values to generate new beams. For -Gaussian type beams, including Hermite-Gauss, Ince-Gauss, and -Laguarre-Gaussian beams, the ``BscPmGauss`` class provides the -equivalent of ``bsc_pointmatch_farfield`` in the previous release. - -The new implementation hides ``Nmax``, most routines have a default -choice of ``Nmax`` based on the beam/particle size. ``Nmax`` can still -be accessed and changed manually, but in most cases the automatic choice -of ``Nmax`` should be fine. Beams can T-matrices can be multiplied -without needing to worry about the having equal ``Nmax``, the -beam/T-matrix will be expanded to match the maximum ``Nmax``. If -repeated calculations are being done, it may be faster to first ensure -the ``Nmax`` of the beam and T-matrix match, this is done in -``forcetorque`` when the position or rotation arguments are used. +Post installation +----------------- -Running the examples -==================== +To check that ``ott`` installed correctly and can be found by Matlab, +run the following command and verify it displays the contents of the +``+ott/Contents.m`` file -To get started using the toolbox we provide a list of examples. You can -add the examples to the path using +.. code:: matlab + + help ott + +If you have multiple versions of ``ott`` installed, you may want to +check which version is currently being used. +The following command can be used to check the path of the +toolbox currently being found .. code:: matlab - addpath('/ott/examples'); + what ott + +Further information about using the toolbox functions and graphical +user interface can be found in subsequent sections. + +The toolbox runs on recent versions of Matlab, most functionality +should work on at least R2016b but the graphical user interface might +need R2018a or newer (we have tested the toolbox on R2018a). +Most functionality should work with +[GNU Octave](https://www.gnu.org/software/octave/), however this +has not been tested recently and performance is optimised for Matlab. + +Some functionality may require additional dependences including +additional Matlab products. +We are currently working on a full list; feel free to get in contact +if you encounter problems with missing dependencies. +In some cases it is possible to re-write functions to avoid using +specific Matlab toolboxes. If you encounter difficultly using a function +because of a missing Matlab toolbox, let us know and we may be able to +help. + +Toolbox Overview +================ + +The toolbox includes a collection of functions and classes for calculating +optical forces and torques for particles in various light fields. +The core toolbox files are grouped into a Matlab package (a folder with +a `+` prefix). Other components, including examples and documentation, +are provided in separate folders in the directory where OTT was +downloaded/installed. +If you installed OTT by downloading a ``.zip`` or cloning the repository, +the OTT path is the directory containing the ``+ott`` and ``docs`` +directories. +If you installed OTT with a Matlab package or via the Addons explorer, +you can view the OTT directory containing the docs and examples +by navigating to **Home** > **Addons** > **Manage addons**, find the +toolbox and select **Options** > **Open folder**. + +The following list provides a brief overview of the toolbox parts +and the corresponding folders/file paths: + +**Examples** (`/examples`) + This directory contains examples of various features included in + the toolbox. Most of these examples are described in the + :ref:`examples` part of the documentation and information on + `running the example files <#running-the-examples>`__ can be + found bellow. + +**Graphical user interface** (`+ott/+ui`) + This sub-package contains the graphical user interface components. + See bellow for information on + `using the GUIs <#exploring-the-toolbox-with-the-gui>`__. + +**BSC and T-matrix classes** (`+ott/Bsc*` and `+ott/Tmatrix*`) + The BSC and T-matrix classes represent beams and particles in the + toolbox. In the vector spherical wave function (VSWF) basis, + beams are represented by vectors describing a superposition of + VSWF components and particles are represented by matrices + which operate on beam-vectors to produce scattered beam-vectors. + The BSC and T-matrix classes behave like regular Matlab + vector and matrix classes but also provide additional functionality + such as functions for visualising fields + and beam related properties (wavelength, numerical aperture, etc.). + Further details can be found in the + :ref:`bsc-classes` and :ref:`tmatrix-classes` reference pages. -if you downloaded the latest version from github, the ``ott`` example -will probably be ``ott-master``, use this instead in this section. +**Functions operating on beams and particles** (`+ott/*` functions) + In addition to the BSC and T-matrix classes, the `+ott` package + contains a range of other functions for calculating forces + and locating traps. + Further information can be found in :ref:`other-functions`. -And get a list of the examples with +**Geometric Shapes** (`+ott/+shapes`) + This sub-package provides descriptions of Geometric shapes + which are used mostly by the point-matching and DDA routines for + generating T-matrices for particles. + See :ref:`shapes-package` reference pages for more information. + +**Utility functions** (`+ott/+utils`) + This directory contains functions commonly used by other parts of + the toolbox. Most users will probably not need to access these + directly. + See :ref:`utils-package` reference pages for more information. + +**Documentation** (`/docs`) + This directory contains the restructured text (ReST) used to generate + this documentation. If you don't have or prefer not to use a web + browser to view the documentation, you can open these files in most + regular text editors. + +**Unit tests** (`/tests`) + This directory contains functions and scripts for testing the + toolbox functionality. This is only included in the GitHub version + and you should not need to interact with this directory unless you + are contributing to OTT. + +The toolbox doesn't use any particular units, although most examples will +assume units of dimensionless force :math:`F_Q` and torque +:math:`\tau_Q` efficiencies. To convert to SI units: + +.. math:: + + F_{SI} = F_{Q} \frac{nP}{c} + + \tau_{SI} = \tau_{Q} \frac{P}{\omega} + +where :math:`n` is the refractive index of the medium, +:math:`P` is the beam power, :math:`c` is the speed of light in +vacuum, and :math:`\omega` is the optical frequency. +You should be able to use any units as long as you are consistent +with defining parameters. However, this hasn't been thoroughly tested, +if you encounter any inconsistencies, please let us know. + +To learn more about how the toolbox calculates forces and torques, +take a look at the original paper describing OTT + + T. A. Nieminen, V. L. Y. Loke, A. B. Stilgoe, G. Knöner, A. M. + Branczyk, N. R. Heckenberg, and H. Rubinsztein-Dunlop, "Optical + tweezers computational toolbox", `Journal of Optics A 9, S196-S203 + (2007) `__ + +Exploring the toolbox with the GUI +================================== + +The toolbox includes a graphical user interface (GUI) for performing +many of the basic tasks including generating beams, T-matrices and +calculating force profiles. +The user interface can be used to explore the basic functionalities +of the toolbox without writing a single line of code. +The GUIs can be accessed by running the OTSLM Launcher application. +The launcher can be found in the **Apps** menu (if OTSLM was installed +using a ``.mltbx`` file), or run from the file explorer by navigating +to the ``+ott/+ui`` directory and running ``Launcher.mlapp``. +Alternatively, you can launch the GUI from the command window with .. code:: matlab - help ott/examples + ott.ui.Launcher -This provides a list of the examples. To view a specific example run +If everything is installed correctly, the launcher should appear, +as depicted in :numref:`launcher-overview`. +The window is split into 4 sections: a description of the toolbox, a +list of GUI categories, a list of applications, and a description about +the selected application. Once you select an application, click Launch. + +.. _launcher-overview: +.. figure:: images/gettingStarted/gui_launcher.png + :alt: Launcher + + Overview of the Launcher application. + +BSC and T-matrix generation function need to specify a variable name. +This variable name is used when assigning the object data to the +Matlab workspace. +Other GUIs which support output can also specify a variable name. +Output from one GUI can be used as input to another GUI by specifying +the corresponding variable name as the input. + +If an app produces an error or warning, these will be displayed in the +Matlab console. + +For a complete example showing how to use the GUI, see +:ref:`calculating-forces-with-the-gui` + +Running the examples +==================== + +To run the examples, navigate to the examples directory, either following +the instructions above or using the ``what`` command: .. code:: matlab - open ott/example_sphere + what_result = what('ott'); + ott_path = fileparts(what_result.path); + cd([a, '/examples']); -The following section walks through the contents of this example. -Calculating forces on a spherical particle ------------------------------------------- +To run an example, open the script and run it (either the full file +or section-by-section). +The first line in most script files is ``addpath('../')``, this line +ensure OTT is added to the path. If you have already added OTT to the +path or installed OTT as an Add-on, this line is unnecessary. +If you copy the example to another directory, you will need to adjust +the ``addpath`` command accordingly. + +Further documentation and example output for specific examples can be +found in :ref:`examples`. + diff --git a/docs/Introduction.rst b/docs/Introduction.rst index f4ed553f..d6879c49 100644 --- a/docs/Introduction.rst +++ b/docs/Introduction.rst @@ -32,8 +32,8 @@ paper or by directly citing the toolbox - T. A. Nieminen, V. L. Y. Loke, A. B. Stilgoe, I. C. D. Lenton, Y. - Hu, G. Knöner, A. M. Branczyk, N. R. Heckenberg, and H. + I. C. D. Lenton, T. A. Nieminen, V. L. Y. Loke, A. B. Stilgoe, + Y. Hu, G. Knöner, A. M. Branczyk, N. R. Heckenberg, and H. Rubinsztein-Dunlop, "Optical tweezers toolbox", https://github.com/ilent2/ott @@ -41,15 +41,14 @@ and the respective Bibtex entry .. code:: latex - @misc{Nieminen2018, - author = {Nieminen, Timo A. and Loke, Vincent L. Y. and Stilgoe, Alexander B. and Lenton, Isaac C. D. and Kn{\ifmmode\ddot{o}\else\"{o}\fi}ner, Gregor and Bra{\ifmmode\acute{n}\else\'{n}\fi}czyk, Agata M. and Heckenberg, Norman R. and Rubinsztein-Dunlop, Halina}, - title = {Optical Tweezers Toolbox}, - year = {2018}, - publisher = {GitHub}, - journal = {GitHub repository}, - howpublished = {\url{https://github.com/ilent2/ott}}, - commit = {Optional, a specific commit} - } + @misc{Lenton2020, + author = {Lenton, Isaac C. D. and Nieminen, Timo A. and Loke, Vincent L. Y. and Stilgoe, Alexander B. and Y. Hu and Kn{\ifmmode\ddot{o}\else\"{o}\fi}ner, Gregor and Bra{\ifmmode\acute{n}\else\'{n}\fi}czyk, Agata M. and Heckenberg, Norman R. and Rubinsztein-Dunlop, Halina}, + title = {Optical Tweezers Toolbox}, + year = {2020}, + publisher = {GitHub}, + howpublished = {\url{https://github.com/ilent2/ott}}, + commit = {A specific commit or version (optional)} + } Contributing ============ diff --git a/docs/Other-functions.rst b/docs/Other-functions.rst index 97ab68db..36bc6dc4 100644 --- a/docs/Other-functions.rst +++ b/docs/Other-functions.rst @@ -1,4 +1,6 @@ +.. _other-functions: + ############### Other functions ############### diff --git a/docs/images/gettingStarted/gui_launcher.png b/docs/images/gettingStarted/gui_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..86934f3485c95ab852b8a4c980dc85360dc3ef76 GIT binary patch literal 32482 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