diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 0000000..9606c43 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 81deec6a464779255dfab988332950f5 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/Developers/Checkout-specific-date/index.html b/Developers/Checkout-specific-date/index.html new file mode 100644 index 0000000..4858a14 --- /dev/null +++ b/Developers/Checkout-specific-date/index.html @@ -0,0 +1,155 @@ + + + + + + + Checkout to a Specific Version — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Developers/CodeDocumentation/index.html b/Developers/CodeDocumentation/index.html new file mode 100644 index 0000000..1ab5bc9 --- /dev/null +++ b/Developers/CodeDocumentation/index.html @@ -0,0 +1,152 @@ + + + + + + + Code documentation — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Developers/Guidelines/index.html b/Developers/Guidelines/index.html new file mode 100644 index 0000000..ec526a7 --- /dev/null +++ b/Developers/Guidelines/index.html @@ -0,0 +1,327 @@ + + + + + + + Guidelines — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Developers/How-to-release/index.html b/Developers/How-to-release/index.html new file mode 100644 index 0000000..a1399b1 --- /dev/null +++ b/Developers/How-to-release/index.html @@ -0,0 +1,385 @@ + + + + + + + How to release — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Developers/ParallelPrograming/index.html b/Developers/ParallelPrograming/index.html new file mode 100644 index 0000000..9fe2c41 --- /dev/null +++ b/Developers/ParallelPrograming/index.html @@ -0,0 +1,376 @@ + + + + + + + Parallel Programming — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Developers/UsefulScripts/index.html b/Developers/UsefulScripts/index.html new file mode 100644 index 0000000..80fea19 --- /dev/null +++ b/Developers/UsefulScripts/index.html @@ -0,0 +1,261 @@ + + + + + + + Useful Tricks and Scripts — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Developers/testing-with-google-C++/index.html b/Developers/testing-with-google-C++/index.html new file mode 100644 index 0000000..e757aeb --- /dev/null +++ b/Developers/testing-with-google-C++/index.html @@ -0,0 +1,341 @@ + + + + + + + Google C++ Testing Framework — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Developers/xmipp-Binding/index.html b/Developers/xmipp-Binding/index.html new file mode 100644 index 0000000..bc68d5d --- /dev/null +++ b/Developers/xmipp-Binding/index.html @@ -0,0 +1,402 @@ + + + + + + + Python Binding — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Installation/Installation-with-Scipion/index.html b/Installation/Installation-with-Scipion/index.html new file mode 100644 index 0000000..bde1081 --- /dev/null +++ b/Installation/Installation-with-Scipion/index.html @@ -0,0 +1,151 @@ + + + + + + + Installation with Scipion — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Installation/InstallationNotes/index.html b/Installation/InstallationNotes/index.html new file mode 100644 index 0000000..4f06c28 --- /dev/null +++ b/Installation/InstallationNotes/index.html @@ -0,0 +1,620 @@ + + + + + + + Installation Notes — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Installation/Requirements/index.html b/Installation/Requirements/index.html new file mode 100644 index 0000000..bcb8838 --- /dev/null +++ b/Installation/Requirements/index.html @@ -0,0 +1,228 @@ + + + + + + + Requirements — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Installation/Standlone-installation/index.html b/Installation/Standlone-installation/index.html new file mode 100644 index 0000000..000ce6e --- /dev/null +++ b/Installation/Standlone-installation/index.html @@ -0,0 +1,202 @@ + + + + + + + Standalone installation — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e6ea093 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ + +# Xmipp +drawing +This is the full content: [https://i2pc.github.io/docs/](https://i2pc.github.io/docs/) + + +Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron microscopy, designed and managed by the [Biocomputing Unit](http://biocomputingunit.es/) located in Madrid, Spain. diff --git a/Releases/Releases-scipion-em-xmipp/index.html b/Releases/Releases-scipion-em-xmipp/index.html new file mode 100644 index 0000000..35a7df3 --- /dev/null +++ b/Releases/Releases-scipion-em-xmipp/index.html @@ -0,0 +1,505 @@ + + + + + + + Releases scipion-em-xmipp — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Releases/Releases-scipion-em-xmippTomo/index.html b/Releases/Releases-scipion-em-xmippTomo/index.html new file mode 100644 index 0000000..dac4532 --- /dev/null +++ b/Releases/Releases-scipion-em-xmippTomo/index.html @@ -0,0 +1,222 @@ + + + + + + + Releases scipion-em-xmippTomo — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Releases/Releases-xmipp-program/index.html b/Releases/Releases-xmipp-program/index.html new file mode 100644 index 0000000..9e32a6c --- /dev/null +++ b/Releases/Releases-xmipp-program/index.html @@ -0,0 +1,550 @@ + + + + + + + Releases xmipp program — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Utils/ConfigurationF/index.html b/Utils/ConfigurationF/index.html new file mode 100644 index 0000000..ef81b90 --- /dev/null +++ b/Utils/ConfigurationF/index.html @@ -0,0 +1,442 @@ + + + + + + + Configuration file — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Utils/Conventions/index.html b/Utils/Conventions/index.html new file mode 100644 index 0000000..feb89b1 --- /dev/null +++ b/Utils/Conventions/index.html @@ -0,0 +1,405 @@ + + + + + + + Conventions — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Utils/Deprecated-programs/index.html b/Utils/Deprecated-programs/index.html new file mode 100644 index 0000000..9f37fbe --- /dev/null +++ b/Utils/Deprecated-programs/index.html @@ -0,0 +1,215 @@ + + + + + + + Programs deprecated — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/Utils/xmippStructure/index.html b/Utils/xmippStructure/index.html new file mode 100644 index 0000000..ebf437f --- /dev/null +++ b/Utils/xmippStructure/index.html @@ -0,0 +1,524 @@ + + + + + + + Xmipp structure — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/_images/Euler1.gif b/_images/Euler1.gif new file mode 100644 index 0000000..39734f9 Binary files /dev/null and b/_images/Euler1.gif differ diff --git a/_images/Euler10.gif b/_images/Euler10.gif new file mode 100644 index 0000000..a939459 Binary files /dev/null and b/_images/Euler10.gif differ diff --git a/_images/Euler11.gif b/_images/Euler11.gif new file mode 100644 index 0000000..aa334c1 Binary files /dev/null and b/_images/Euler11.gif differ diff --git a/_images/Euler12.gif b/_images/Euler12.gif new file mode 100644 index 0000000..a1caea2 Binary files /dev/null and b/_images/Euler12.gif differ diff --git a/_images/Euler13.gif b/_images/Euler13.gif new file mode 100644 index 0000000..13106c2 Binary files /dev/null and b/_images/Euler13.gif differ diff --git a/_images/Euler14.gif b/_images/Euler14.gif new file mode 100644 index 0000000..f8a55cd Binary files /dev/null and b/_images/Euler14.gif differ diff --git a/_images/Euler2.gif b/_images/Euler2.gif new file mode 100644 index 0000000..777f0ad Binary files /dev/null and b/_images/Euler2.gif differ diff --git a/_images/Euler3.gif b/_images/Euler3.gif new file mode 100644 index 0000000..aa334c1 Binary files /dev/null and b/_images/Euler3.gif differ diff --git a/_images/Euler4.gif b/_images/Euler4.gif new file mode 100644 index 0000000..a0ffa14 Binary files /dev/null and b/_images/Euler4.gif differ diff --git a/_images/Euler5.gif b/_images/Euler5.gif new file mode 100644 index 0000000..465bb0d Binary files /dev/null and b/_images/Euler5.gif differ diff --git a/_images/Euler7.gif b/_images/Euler7.gif new file mode 100644 index 0000000..fcc2f5f Binary files /dev/null and b/_images/Euler7.gif differ diff --git a/_images/Euler8.gif b/_images/Euler8.gif new file mode 100644 index 0000000..2ac3193 Binary files /dev/null and b/_images/Euler8.gif differ diff --git a/_images/Euler9.gif b/_images/Euler9.gif new file mode 100644 index 0000000..9e4fd1d Binary files /dev/null and b/_images/Euler9.gif differ diff --git a/_images/banner.png b/_images/banner.png new file mode 100644 index 0000000..6b9abaa Binary files /dev/null and b/_images/banner.png differ diff --git a/_images/composed.png b/_images/composed.png new file mode 100644 index 0000000..f5b5b4a Binary files /dev/null and b/_images/composed.png differ diff --git a/_images/euler6.gif b/_images/euler6.gif new file mode 100644 index 0000000..424dc8a Binary files /dev/null and b/_images/euler6.gif differ diff --git a/_images/xmipp_noBackground.png b/_images/xmipp_noBackground.png new file mode 100644 index 0000000..8744783 Binary files /dev/null and b/_images/xmipp_noBackground.png differ diff --git a/_sources/Developers/Checkout-specific-date/index.rst.txt b/_sources/Developers/Checkout-specific-date/index.rst.txt new file mode 100644 index 0000000..a49b87a --- /dev/null +++ b/_sources/Developers/Checkout-specific-date/index.rst.txt @@ -0,0 +1,13 @@ +Checkout to a Specific Version +------------------------------------------ + +If you need to revert to a specific version of Xmipp or its associated repositories based on a particular date, you can achieve this using Git. This is useful, for example, when you encounter a new bug that was not present in an earlier version or when you have a long-lived branch in Xmipp that needs to be synchronized with a specific historical state. + +Here is a step-by-step guide on how to accomplish this: + +1. **Identify the Date**: Determine the date of the version you want to revert to. In the following example, we'll use "2020-09-27 08:57:42" as an example date. + +2. **Checkout a Specific Commit**: Use the following command to checkout the latest commit on the "devel" branch before the specified date: + + ```bash + git checkout `git rev-list -n 1 --first-parent --before="2020-09-27 08:57:42" devel` diff --git a/_sources/Developers/CodeDocumentation/index.rst.txt b/_sources/Developers/CodeDocumentation/index.rst.txt new file mode 100644 index 0000000..b1c6f7e --- /dev/null +++ b/_sources/Developers/CodeDocumentation/index.rst.txt @@ -0,0 +1,8 @@ +Code documentation +--------------------- +This documentation serves as a valuable resource for developers, offering detailed information about the source code, such as function/method descriptions, class details, variable explanations, data structures, inter-component relationships, and more. + +- `Xmipp C++ code `_ +- `Xmipp Python code `_ +- `Xmipp Java code `_ + diff --git a/_sources/Developers/Guidelines/index.rst.txt b/_sources/Developers/Guidelines/index.rst.txt new file mode 100644 index 0000000..95a4f44 --- /dev/null +++ b/_sources/Developers/Guidelines/index.rst.txt @@ -0,0 +1,225 @@ +Guidelines +------------ + +Programming - Handling images +^^^^^^^^^^ + +Although Xmipp supports stacks of volumes (4 dimensions arrays) in +memory, it is recommended to avoid allocate in memory as much images as +possible at once. If your code is going to iterate over a set of images +stored in a stack file, then you should try accessing each image at +once. + +Coding - C++ guidelines +^^^^^^^^^^^^^^^^^^^^^^^ + +Source code is like the text of a book, it is possible to be understood +with almost any formatting but much more easier if it is done properly. +Forcing a certain indentation style is important in free-form languages +like C or C++, just as publishers and book printers do. + +That said, these are the proposed guidelines for writing C++ code: + +1. Same language for code and comments, English in this case. + +2. Use the header guard standard. The easiest option is the file name, + in caps, without in-between underscores, and with a =_H= at the end: + +:: + + + #ifndef HASHINFO_H + #define HASHINFO_H + + // This file is called "HashInfo.h" + + #endif + + +1. Group the system includes (``< >``), as well as the local ones + (``" "``). A blank line should be in between: + +:: + + + #include + #include + #include + + #include "Timer.h" + #include "HashInfo.h" + + +1. Do not use more than one blank line to separate sections: + +:: + + + const int globalVar = 0; + + // Just one blank line + struct Foo + { + // ... + }; + + // Just one blank line + + +1. Choose a consistent name criteria. The following is very common: + +- CamelCase notation: use a capital letter when a new word starts. + +- Classes/structs begin with a capital letter. + +- Variables and functions begin in lowercase. + +- Functions have imperative names + +- Use descriptive variable names, the only exception are those with a + very limited lifespan, like:``i``,\ ``j``,\ ``tmp``,\ ``aux``\ … + +1. Indent with spaces, not with tabs. The recommended value is__4_\_ + spaces. Most_decent\_ editors can convert automatically tabs into + spaces. + +2. Save files with\ ``UNIX`` end-of-line characters. + +3. Use a pair of files for each class (``.cpp`` y\ ``.h``). Avoid inner + classes. + +4. Follow\ ``Doxygen`` guidelines for documentation. + +5. Position of\ ``{}``: + +- for + +:: + + + for (int i=0; i0) + { + // do something + } + + +- switch, case + +:: + + + switch (tmp) + { + case 0: + // do something + break; + case 1: + // do something + break; + default: + // do something + } + + +1. Limit line lenght to__80_\_ chars (printing). Indent one time + afterwards. + +2. Use methods with few parameters, but on those times when it’s not + possible, give each parameter a line: + +:: + + + void functionWithManyParams(int par1, + float par2, + char* par3, + std::vector< double >& par4, + double par5); + + +1. Compile with at least\ ``-Wall -ansi``. Pay attention to warnings + too. + +2. Make a test program for each class. + +3. Do not make optimizations without verifying they are needed. Aim for + clear code. + +4. Do not open namespaces in global scope. + +5. Include every header that is needed for the code in that particular + file. In\ ``.h`` files use forward declarations when possible. + +6. Use a good editor with the following feature: folding, syntax + highlighting, autocompletion, line numbers… + +7. Do not use\ ``malloc`` or\ ``free``, C++ uses\ ``new`` + and\ ``delete``. + +8. Use\ ``const`` instead of\ ``#define``. Avoid the preprocessor. + +9. Use variables as local as possible. Do not group variable + definitions at the beginning of a method (old\ ``ANSI C`` + requirement). + +10. Always clean up your code of unused variables. ## Code formatting + +Automatic code formatting can be achieved using a program like astyle. +It can reindent and reformat C, C++ and Java code. It can be used from +the command-line or integrated into another program, like Eclipse or +Emacs. + +Although not 100% accurate it performs most of the hard work required to +follow basic style guidelines. + +It accepts several command-line options, or an options file with the +equivalent entries. Command-line use is: + +:: + + + $ astyle [options] < !OriginalSourceFile > !BeautifiedSourceFile + +From the various predefined styles we are currently using ANSI, and the +full options file\ ``.astylerc`` is: + +:: + + + style=ansi + brackets=break + indent-preprocessor + min-conditional-indent=0 + unpad=paren + pad=oper + convert-tabs + + + + \ No newline at end of file diff --git a/_sources/Developers/How-to-release/index.rst.txt b/_sources/Developers/How-to-release/index.rst.txt new file mode 100644 index 0000000..68fceaf --- /dev/null +++ b/_sources/Developers/How-to-release/index.rst.txt @@ -0,0 +1,277 @@ +How to release +---------------- + +Let’s assume that we want to make a new Xmipp version from the ‘devel’ +branch with a version name **X.YY.ZZ** where **X=3** (to keep the main +version number to be able to sort the version as usual. Also to keep the +name *xmipp3*), **YY=Year** of the release, **ZZ=Month** of release. +Also, we name the version following Greek gods/goddess (`Apollo, +Boreas… `__), +see the `TAGging section +below `__. + +**Create the release notes** + +Add all the information about the release +`here `__ + +**Schedule the releasing** + +Prepare everything, but post the release at the beginning of your +workday. + +Make release branches +^^^^^^^^^^^^^^^^^^^^^ + +Create a branch where freeze the code and fix some minor bug before to +upgrade the version for all Xmipp repositories. The usual name for that +branch is ``release-X.YY.ZZ``. > Branches with ‘release’ word are +protected, to unprotect it create a PR from an other branch and get the +aprove from other developer + + If some Xmipp repository has not to be uploaded (scipion-em-xmipp, + xmipp, xmippViz, xmippCore), please make this ``release-X.YY.ZZ`` + branch from the ``master`` one in order to make sure that the update + from other repos is compatible. In this way, we will also be able to + include some bug fixing during the release procedure. + +**Set the version to the code** + +There are three types of version tags. One is the plugin version (in +sync with pypi), other is the software version (related with the name of +the tgz hosted in the Scipion web) and, finally, the third is the +linking from the plugin to the software. + +- **Software version**: It must be set at ``$XMIPP_BUNDLE/xmipp`` –> + `XMIPP_VERSION=X.YY.ZZ `__. + This version is used when the software is compiled and the + ``xmipp_version`` is done, to create the end-of-installation token + (``$XMIPP_HOME/vX.YY.ZZ``) and when the bundle is created using + ``./xmipp tar ...`` with an automatic version. + +- **Linking version**:It must be set at + ``$XMIPP_BUNDLE/src/scipion-em-xmipp/xmipp3/__init__.py`` –> + `\_currentVersion = + ‘X.YY.ZZ’ `__. + This is used to find the binaries to install. This is also in sync + with `the pypi + versions `__ + since this version is used when the pypi module is created and + uploaded. + +- **XMIPP_VERNAME** Replace devel for the name of the release + `here `__ + +- Replace the logo for the protocols: replace + `scipion-em-xmipp `__/`xmipp3 `__/xmipp_logo.png + (in devel is the devel version of the image) for + xmipp_logo_original.png + +- Review the status of each protocol (_devStatus), maybe some change + from New to Production, or production to updated… + +Creating the Xmipp software bundle +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When the ``release-X.YY.ZZ`` branch is ready and all bugs seem fixed, +**we must do a Pull Request** for each Xmipp repository from +``release-X.YY.ZZ`` to ``master``. Once approved but **not merged yet**, +we can start with the release procedure. + + If the Pull Request contain conflicts, merge Master into your release + branch and resolve it. If the release only contain changes in the + plugin (not in the rest of the Xmipp repositories), you can go to the + next section below. + +Make sure that all is self-contained (keep in mind the rest of the +Xmipp’s repositories) and compatible with the current Scipion version. +To do that, go for a fresh compilation as follow + +(*We assume that the current version of Scipion is installed in +``$scipionMASTER``.*) + +:: + + git clone git@github.com:I2PC/xmipp.git xmipp2release + cd xmipp2release + + $scipionMASTER/scipion3 run ./xmipp all br=release-X.YY.ZZ N=8 + + $scipionMASTER/scipion3 uninstallp -p scipion-em-xmipp + git checkout release-X.YY.ZZ + $scipionMASTER/scipion3 installp -p ./xmipp2release/src/scipion-em-xmipp --devel + + rm -rf $scipionMASTER/software/em/xmipp + ln -s ~/xmipp2release/build $scipionMASTER/software/em/xmipp + + $scipionMASTER scipion3 test --grep xmipp + $scipionMASTER scipion3 test xmipp3.tests.XXX + $scipionMASTER scipion3 test xmipp3.tests.XXY + +If all goes well (no error should be in the tests, however we assume +some ones… (at least all those at Buildbot +`xmipp_bundle_devel `__ +and +`xmipp_devel `__) +then, we can make the Xmipp bundle. + +First ensures that the new version info is well set at the `Xmipp main +script `__. +If not, update it, commit the change and push it. **All should be pushed +to github since the bundle is done from the github/branch, instead of +you local version.** + +Then, we are able to create the bundle + +:: + + ./xmipp tar Sources br=release-X.YY.ZZ + +A ``xmippSrc-vX.YY.ZZ.tgz`` should be created, where ``YY.ZZ`` is +according to the version info set above. + +Test the archive in the Scipion +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To test the archive, install new Scipion without Xmipp following the +guide +`here `__: + +:: + + python3 -m scipioninstaller -conda -noXmipp -noAsk scipion2ReleaseXmipp + +First thing that needs to be done is to install Xmipp plugin. + +:: + + ./scipion3 installp -p path/of/xmipp2release/src/scipion-em-xmipp --devel + +Once the plugin is installed, you should see Xmipp sources available for +installation: + +:: + + $ ./scipion3 installb + ... + xmippSrc 3.YY.ZZ.0[ ] + +Copy (overwrite) the source file ``xmippSrc-vX.YY.ZZ.tgz`` to the +*/software/em* path of the Scipion installation. Now install the +binaries and run some test to verify that everything works. Typical +problem is not matching version number in the *scipion-em-xmipp* plugin. + +:: + + ./scipion3 installb xmippSrc -j 8 + +If all seems fine means that bundle ``xmippSrc-vX.YY.ZZ.tgz`` is +compatible to work with the Scipion under ``$scipionMASTER`` and under +the plugin at ``~/xmipp2release/src/scipion-em-xmipp``, thus upload the +``.tgz`` to Nolan to be able to get it remotely. If you don’t know how +to do it, please `ask Scipion’s people `__ +(…/downloads/scipion/software/em) + +Creating the PyPi module +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Testing the installation with source archive from Nolan** + + +Before creation the Pypi module, **it is worth it to start a testing +stage** to be sure that all is working well. Take into account that, +once the Pypi module is uploaded, the current available version will +automaticly be this. + +Make sure that you remove existing Xmipp installation from the Scipion. +The easiest way is to do so via the Plugin manager. Make also sure that +there is no Xmipp archive in the ``software/em`` folder. + +Install the Scipion-em-xmipp plugin directly from the Github: + +:: + + ./scipion3 run pip install git+https://github.com/I2PC/scipion-em-xmipp.git@release-X.YY.MM # What is after '@' is the release branch. + ./scipion3 installb xmippSrc -j 8 + +During the installation, the source file archive should be downloaded +from Nolan. + +**Update PyPi module** + +Ensures that the `release +information `__ +is updated and match with those above. + +- **New way:** + +Merge in scipìon-em-xmipp the PR from release to master, one action will +manage the update to pypi, also will create a tag that we have to remove +(will be managed in the next step) ``git tag -d tagname`` +``git push --delete origin tagname`` > If you have no permissions to +push, clone each repository with +``git clone git@github.com:I2PC/scipion-em-xmipp.git`` +``git clone git@github.com:I2PC/xmippCore.git`` + +- **Old way:** + +When all is checked, create and upload the Pypi module by (check +`this `__ +for more information) Notice that you should have the Scipion virtual +environment active. + +:: + + cd src/scipion-em-xmipp + rm -rf dist/* # To clean the already uploaded modules + python setup.py sdist + twine upload dist/* -c "scipion-X.Y" + +after **``-c`` flag have to be the lowest Scipion’s compatible version** +(e.g. ``"scipion-3.0"``). + +Making a git-TAG and promoting the code to MASTER +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +After concluding the two section above, the new Xmipp version is already +released. Congrats! Publish it in mailing list, Twitter… but also we +want to keep this checkpoint in the git history by a TAG and we must +promote the code to the master branch: + +:: + + cd ~/xmipp2release + ./xmipp git tag 'vX.YY.ZZ-GreekGod' # replace GreekGod for one in the list below + ./xmipp git push origin 'vX.YY.ZZ-GreekGod' + +we name the version following Greek gods (`Apollo, +Boreas… `__) > If you have no +permissions to push, clone each repository with +``git clone git@github.com:I2PC/scipion-em-xmipp.git`` +``git clone git@github.com:I2PC/xmippCore.git`` + +Finally, **merge the rest 3 Pull Requests** to conclude the release! + +XmippTomo wants a release +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +XmippTomo wants a release syncronized with the release of Xmipp. To do +that: 1. Create a branch (release_3….) from devel 2. Edit the +`xmipptomo/init.py `__ +version number and writhe the same of the Xmipp, the last digit mst be +.0. 3. Be sure you have all the changes in your local path (git pull). +4. Create a PR from your branch to master. When it will be merged, the +action will create the tag and upload the version to pypi. + +Final considerations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Probably, you want all the bug fixings during the release procedure also +in the ``devel`` branch. + +To do so, **make a Pull Request from ``release`` to ``devel``**. Also +replace the name of the version for devel +`here `__ +and replace the logo for the protocols: replace +`xmipp_logo.png `__ +(in devel is the devel version of the image) for xmipp_logo_devel.png \ No newline at end of file diff --git a/_sources/Developers/ParallelPrograming/index.rst.txt b/_sources/Developers/ParallelPrograming/index.rst.txt new file mode 100644 index 0000000..af774bc --- /dev/null +++ b/_sources/Developers/ParallelPrograming/index.rst.txt @@ -0,0 +1,247 @@ +Parallel Programming +---------------------- + +Introduction +^^^^^^^^^^^^^^^^^^^^^ + +In the simplest sense, **parallel computing** is the simultaneous use of +multiple compute resources to solve a computational problem: + +- To be run using multiple CPUs +- A problem is broken into discrete parts that can be solved + concurrently +- Each part is further broken down to a series of instructions +- Instructions from each part execute simultaneously on different CPUs + +The compute resources might be: + +- A single computer with multiple processors (using of **threads**); +- An arbitrary number of computers connected by a network(using + parallel library like **MPI**); +- A combination of both. + +The computational problem should be able to: + +- Be broken apart into discrete pieces of work that can be solved + simultaneously; +- Execute multiple program instructions at any moment in time; +- Be solved in less time with multiple compute resources than with a + single compute resource. + +In **Xmipp3.0** we have develop several classes to make easier the use +of threads and MPI when developing parallel programs. If you want to +read more about parallel computing there is a nice introduction +`here `__. ## Task +distribution + +One of the first steps in designing a parallel program is to break the +problem into discrete “chunks” of work that can be distributed to +multiple tasks. This is known as decomposition or partitioning. There +are two basic ways to partition computational work among parallel tasks: +the data is partitioned or the work to be done. + +In image processing for *single particles* on electron microscopy we +usually deal with several thousands of images, so the most common and +easy way to distribute is by data. Then each CPU take care of some part +of the data to perform processing tasks. + +We have create the class **[[ParallelTaskDistributor]]** which have the +function to distribute N tasks (without knowing what each “task” really +means) between a group of workers (threads or MPI). Each worker will ask +for a some tasks, process it and ask for more tasks until there is +nothing to be done. The following are several subclasses of +`ParallelTaskDistributor `__: + +:: + + + //... + // Create a task distributor with N total task and serve 10 on each request + ParallelTaskDistributor * td = new ThreadTaskDistributor(N, 10); + //... + //function to perform some operation + //to N images executed in parellel + void processSeveralImages() + { + size_t firstImage, lastImage; + while (td->getTasks(firstImage, lastImage)) + for (size_t image = firstImage; image <= lastImage; ++image) + { + //... + processOneImage(image); + //... + } + } + +Using threads +^^^^^^^^^^^^^^^^^^^^^ + +Technically, a **thread** is defined as an independent stream of +instructions that can be scheduled to run as such by the operating +system. Before understanding a thread, one first needs to understand a +UNIX process. A process is created by the operating system, and requires +a fair amount of “overhead”. Processes contain information about program +resources and program execution state, including: Process ID, process +group ID, user ID, and group ID, environment, working directory, program +instructions, registers, stack, heap, file descriptors, signal actions, +shared libraries, inter-process communication tools (such as message +queues, pipes, semaphores, or shared memory). Threads use and exist +within these process resources, yet are able to be scheduled by the +operating system and run as independent entities largely because they +duplicate only the bare essential resources that enable them to exist as +executable code. + +So, in summary, in the UNIX environment a thread: + +- Exists within a process and uses the process resources +- Has its own independent flow of control as long as its parent process + exists and the OS supports it +- Duplicates only the essential resources it needs to be independently + schedulable +- May share the process resources with other threads that act equally + independently (and dependently) +- Dies if the parent process dies - or something similar +- Is “lightweight” because most of the overhead has already been + accomplished through the creation of its process. + +Because threads within the same process share resources: + +- Changes made by one thread to shared system resources (such as + closing a file) will be seen by all other threads. +- Two pointers having the same value point to the same data. +- Reading and writing to the same memory locations is possible, and + therefore requires explicit synchronization by the programmer. + +A more detailed explanation about use of POSIX threads can be found + here. ### Creating threads and passing parameters + +Imagine that you have a program that perform tasks *A*, *B* and *C*, and +tasks *A* and *C* task can be threaded. So, task *A* can be splited in +several concurrent tasks *A1, A2, A3…An* and the same for C. In the +following figure you can see the serial and threaded version of the +program execution: + +This type of threading now can be easily done using the following +classes: + +- *[[ThreadManager]]* will create the threads and run diffent functions + in parallel +- *[[ThreadFunction]]* prototype of function that can be runned by + *[[ThreadManager]]*. +- Its definition is typedef void( **[[ThreadFunction]] )(ThreadArgument + &arg) typedef void(** [[ThreadFunction]] )(ThreadArgument &arg) +- *[[ThreadArgument]]*: Argument type that is passed to + *[[ThreadFunction]]*. It contains: +- thread_id: number identifying each thread +- data: void \* pointer to pass additional information +- workClass: void \* pointer to hold a reference to working class + +The previous example can be coded: + +:: + + + void * functionA(ThreadArgument & data) + { + //... + } + void * functionB() + { + //... + } + void * functionC(ThreadArgument & data) + { + //... + } + + int main() + { + //Start 4 threads to work + ThreadManager * tm = new ThreadManager(4); + // Run in parallel functionA + tm.run(functionA); + // All threads are syncronized at this point + functionB(); + //If you need to pass some additional information + // to work on functionB you can do: + tm.setData(myData); + // Put the threads works on functionB + tm.run(functionB); + } + +Synchronizing threads +^^^^^^^^^^^^^^^^^^^^^ + +Synchronization is vital for almost all parallel programs. We want +things done faster but also we want things done well. Through +synchronization we can guarantee that things are done in the correct +order and provide the same results as if it was done sequentially. + +Synchronization between threads is done primarily through mutexes. A +mutex allows to protect a portion of the code so only one thread can +access it at a time. We have created the *Mutex* class wich encapsulates +the mutex creation, initialization and clean up through the *pthreads* +library. + +:: + + + Mutex mutexUpdate; + //.... + // Inside some threaded function: + mutexUpdate.lock(); + //Perform the updated + mutexUpdate.unlock(); + +Other different synchronization structures exist that can adapt better +to different circumstances. For example, a barrier is used when we want +to synchronize a number of threads at a point of the code so no one can +continue working until all of them have reached such point. Barriers are +not always present on all computing platforms. For example, old Unix +implementations do not have such structure defined on the pthreads +library. To avoid problems of this type, a *Barrier* class have been +implemented base on mutexes. ### Example + + Here you will find a complete example of a parallel program using all +the elements together. This example estimate the value of PI. ### Some +Tips + +Programming threads is easy… but debugging threads can be a nightmare. +So take note of these tips: + +- Do not use static variables on threaded code. Such variables are + shared between all threads and can lead to unexpected results. +- Do not use threads for everything. Use them when it is clear they + will represent an advantage. Using too much threads will lead to a + decreared performance. +- Try to create threads once and reuse them. Creating and destroying + threads will represent a slight overhead. On some applications this + can translate into lower performance. (Create just one + *[[ThreadManager]]* and run several functions ) +- Be careful with critical regions and the use of *Mutex* and + *Barrier*. A misuse can lead to race conditions(bad results) or + deadlock (program will runs forever) + +Programming with MPI +^^^^^^^^^^^^^^^^^^^^^ + +The Message Passing Interface Standard ( **MPI**) is a message passing +library standard based on the consensus of the MPI Forum, which has over +40 participating organizations, including vendors, researchers, software +library developers, and users. The goal of the Message Passing Interface +is to establish a portable, efficient, and flexible standard for message +passing that will be widely used for writing message passing programs. +As such, MPI is the first standardized, vendor independent, message +passing library. The advantages of developing message passing software +using MPI closely match the design goals of portability, efficiency, and +flexibility. MPI is not an IEEE or ISO standard, but has in fact, become +the “industry standard” for writing message passing programs on HPC +platforms. You can find more about MPI  here. + +We have created some useful classes like *[[MpiNode]]* that will take +care of some MPI initialization and cleaning. This class also have a +method to synchronize: *barrierWait* and other utilities. The same +concepts for task distribution can be used with MPI through the +*[[MpiTaskDistributor]]* class. + +A complete example using the MPI tools is available  Here . \ No newline at end of file diff --git a/_sources/Developers/UsefulScripts/index.rst.txt b/_sources/Developers/UsefulScripts/index.rst.txt new file mode 100644 index 0000000..357312d --- /dev/null +++ b/_sources/Developers/UsefulScripts/index.rst.txt @@ -0,0 +1,106 @@ +Useful Tricks and Scripts +---------------------------- + +This a list of commonly used scripts for processing of electron +microscopy images. Please feel free to share your own. + +Rafa’s tricks +^^^^^^^^^^^^^^^^ + +- [[BoxerToXmippMark]] - translate the coordinates of EMAN’s Boxer to + Xmipp_Mark +- [[CorrectCoordinates]] - correct the coordinates too near to the + border of the image +- [[CreateMaskFromMap]] - using a binarized, thresholded map +- [[RunKerdenSOM]] - apply kerdensom to a set of 2D images or to a set + of rotational power spectra +- [[SubmitMpiJobOnJumilla]] - run parallel jobs using our Alpha queues. +- [[ConvertXmdfileToRelionPosFile]] - After a classfication in Xmipp3, + generate Pos file to extract particles in Relion + +Sjors’ tricks +^^^^^^^^^^^^^^^^ + +- [[FromXmippToVariance3D]] - use Pawel Penzeck’s Spider scripts after + an Xmipp alignment +- [[SelectionFileSpidertoXmipp]] - convert Spider selection file (with + numbers only) to an Xmipp selfile +- [[XmippPreprocessing]] - Tiff2raw, CTF-estimation, extraction, + normalization, phase correction etc. +- [[MovingParticles]] - analyze the behaviour of your particles in a ML + classification experiment. +- [[SortImagesBasedOnDocfile]] - Make a sorted selfile from a newxmipp + style docfile (e.g. sort by CC). +- [[CtffindToXmippCtfParam]] - convert the .ctf file from CTFFIND to an + XMIPP CTF-parameter file +- [[CompareClassAveragesWithReprojections]] - Align reference-free + class averages with projections of a 3D model and visualize + +Roberto’s tricks +^^^^^^^^^^^^^^^^ + +- [[OpenDX]] - visualize Xmipp volumes in opendx +- [[CompareVolumeT]] using python (Note volumeT is the base clase of + [[VolumeXmipp]]) +- +- +- +- [[CTFParamOldNew]] Convert ctf from old to new (metadata +- [[ExportPos]] +- [[CtfFindToXmippThree]] + +Coss’ tricks +^^^^^^^^^^^^^^^^ + +- [[WebToXmippMark]] - How to convert coordinates of particles picked + with Web (Spider) into a set of particles picked with Xmipp +- [[EstimatingNoisePowerForAGivenSNR]] - How to estimate how much noise + to add to a set of phantom projections to have a given average SNR +- [[CoSSSmallTricks]] - How to generate an empty image, compute a + radial average, … +- [[EstimateTheCTF]] - How to estimate the CTF +- [[RunMpiProgramsWithoutRepeatingThePassword]] - How to run MPI + programs without having to repeat the password for each process + (depends on the UNIX distribution) +- [[CorrectingMisalignmentOfPDB]] - How to look for a misaligned + rotational symmetry axis in a PDB and correct it +- [[HowManyReferenceProjections]] - What is the number of reference + projections given an angular step +- [[EquivalentEulerAngles]] - Given an Euler angle, what are the Euler + angles of its X, Y and XY mirrors and how are they expressed with + another set of angles +- [[ConvertImagesToXmipp]] - Given images in EMAN, CCP4, Spider, … How + to convert them to Xmipp +- [[RemoveOpenMPIWarnings]] - Remove [[OpenMPI]] warning about openib + and udapl +- [[EulerAngles]] - What is the interpretation of Euler angles in Xmipp +- [[HexDumpF]] - Hexdump of float numbers considering endianness +- [[ConvertingFrealignXmipp]] - Conversion of Euler angles from + FRealign to Xmipp +- [[ConvertingLstXmipp]] - Conversion of Eman lst files to Xmipp +- [[DefinedMacros]] - How to know the macros defined by a compiler in a + given system +- [[ConvertDownsamplePos]] - Convert and downsample posfiles of Xmipp + 3.0 to Xmipp 2.4 +- [[ImportPosFromEmanAndSpider]] - Import coordinates from Eman and + Spider into Xmipp 3.0 +- [[ApplyGeoInReconstructionMetadata]] - Given a metadata for + reconstruction, generate the aligned images needed for reconstructing + without shifts and mirrors +- [[GenerateTiltPairs]] - Generate untilted and tilted images for a + given volume + + + +Carmen’s scripts +^^^^^^^^^^^^^^^^ + +- If you have performed a projection matching after downsampling the + micrographs by a certain factor, and now want to proceed with a + different downsampling factor (eg to use a finer pixel size), you may + find the next two shell scripts useful: + + - [[ScalePos]] - to write new .pos files according to the new + downsampling (so you do not have to pick particles again) + - [[ScaleShifts]] - to reuse angles and shifts found in the previous + projection matching run diff --git a/_sources/Developers/testing-with-google-C++/index.rst.txt b/_sources/Developers/testing-with-google-C++/index.rst.txt new file mode 100644 index 0000000..cb303a8 --- /dev/null +++ b/_sources/Developers/testing-with-google-C++/index.rst.txt @@ -0,0 +1,246 @@ +Google C++ Testing Framework +------------------------------------------------------------------- + +Summary +^^^^^^^^^^^^^^^^^ + +Unit testing is a development procedure where programmers create tests +as they develop software. The tests are simple short tests that test +functionality of a particular unit or module of their code, such as a +class or function. Using libraries like gtest these tests can be +automatically run and any problems found quickly. As the tests are +developed in parallel with the source code, when the particular unit is +completed, a successful unit test demonstrates it’s correctness. + +Xmipp incorporates in its code the Google C++ Unit Testing Framework, +`gtest `__ for short (version +1.6). This tutorial explains how you may use this unit testing +framework. ## Basic Concepts + +(extract from +`http://code.google.com/p/googletest/wiki/V1_6_Primer#Introduction:_Why_Google_C++_Testing_Framework?) `__) + +When using gtests, you start by writing assertions, which are statements +that check whether a condition is true. An assertion’s result can be +success, nonfatal failure, or fatal failure. If a fatal failure occurs, +it aborts the current function; otherwise the program continues +normally. + +Tests use assertions to verify the tested code’s behavior. If a test +crashes or has a failed assertion, then it fails; otherwise it succeeds. + +A test case contains one or many tests. You should group your tests into +test cases that reflect the structure of the tested code. When multiple +tests in a test case need to share common objects and subroutines, you +can put them into the same test file. ## Assertions + +(extract from +`http://code.google.com/p/googletest/wiki/V1_6_Primer#Introduction:_Why_Google_C++_Testing_Framework?) `__) + +Gtest assertions are macros that resemble function calls. You test a +class or function by making assertions about its behavior. When an +assertion fails, gest prints the assertion’s source file and line number +location, along with a failure message. You may also supply a custom +failure message which will be appended to Google Test’s message. + +The assertions come in pairs that test the same thing but have different +effects on the current function. ASSERT_\* versions generate fatal +failures when they fail, and abort the current function. EXPECT_\* +versions generate nonfatal failures, which don’t abort the current +function. Usually EXPECT_\* are preferred, as they allow more than one +failures to be reported in a test. However, you should use ASSERT_\* if +it doesn’t make sense to continue when the assertion in question fails. + +Since a failed ASSERT_\* returns from the current function immediately, +possibly skipping clean-up code that comes after it, it may cause a +space leak. Depending on the nature of the leak, it may or may not be +worth fixing - so keep this in mind if you get a heap checker error in +addition to assertion errors. + +To provide a custom failure message, simply stream it into the macro +using the << operator. Example: + +ASSERT_EQ(x.size(), y.size()) << “Vectors x and y are of unequal +length”; + +for (int i = 0; i < x.size(); ++i) { EXPECT_EQ(x[i], y[i]) << “Vectors x +and y differ at index” << i; } + +More about assertion is available +`here `__ # +gtest in Xmipp + +Xmipp already incorporates gtest natively so you do not need to compile +any extra library. ## General Rules + +- Ideally they should be a test for each routine. +- Test can be found in the directory + $HOME_XMIPP/application/tests/test_className +- Test output must be written in the /tmp directory as temporary files. + These files should be deleted once the test is finished. +- If possible input data should be created on the fly. If some input + file is needed it should be place in + $HOME_XMIPP/resources/test/className +- Test are part of the software development cycle and should be written + BEFORE and not AFTER the creation of new routines. + +Adding a test to an existing file +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In this section we will assume that you want to add a test for a class +that has already been incorporated in the test system. Let us assume +that we want to add a test for the metadata class. This test will check +that a function called *Factorial(n)* that compute the factorial number +of *n* works properlly. + +- Edit file at + *$XMIPP_HOME/pplications/tests/test_metadata/test_metadata_main.cpp* +- Use the TEST_F() macro to define and name a test function, These are + ordinary C++ functions that don’t return a value. + +TEST_F() arguments go from general to specific. The first argument is +the name of the test case, and the second argument is the test’s name +within the test case. Both names must be valid C++ identifiers, and they +should not contain underscore (_). + +For example, let’s take a simple integer function: int Factorial(int n); +// Returns the factorial of n. + +A test case for this function might look like: + +// Tests factorial of 0. TEST_F(MetadataTest, FactorialHandlesZeroInput) +{ EXPECT_EQ(1, Factorial(0)); } + +// Tests factorial of positive numbers. TEST_F(MetadataTest, +FactorialHandlesPositiveInput) { EXPECT_EQ(1, Factorial(1)); +EXPECT_EQ(2, Factorial(2)); EXPECT_EQ(6, Factorial(3)); EXPECT_EQ(40320, +Factorial(8)); } + +In addition to the code you have written gtest will create a “fresh” +environment each time a particular test_f is executed: + +- First, initialize running the routineSetUp() , +- Then, execute the test +- After that, clean up by callingTearDown() +- No data structures allocated in memory may be reuse from one test to + the next one + +In the case of *metadata*, the *[[SetUp]]* routine creates three basic +metadata and `[TearDown] <>`__ is not defined. ## Case 2: Create Unit +tests for a new class + +In this section we will assume that you want to add a test for a class +that has NOT been incorporated in the test system. Let us create a test +for a class called *myPrettyClass* + +- Create a new directory called + *$XMIPP_HOME/application/test/test_myPrettyClass* +- Create a new file in this directory called + *test_myPrettyClass_main.cpp* +- Edit the *test_myPrettyClass_main.cpp* file, use the bellow template + for starting +- Edit *$XMIPP_HOME/SConscript* +- Look for the line `[AddXmippCTest] <'test_fftw'>`__ +- Add the line `[AddXmippCTest] <'test_myPrettyClass'>`__ in this + section + +.. raw:: html + + + +#include “../../../external/gtest-1.6.0/fused-src/gtest/gtest.h” + +class myPrettyClassTest : public ::testing::Test { protected: + +virtual void `[SetUp] <>`__ { // Code here will be called immediately +after the constructor (right // before each test). } + +virtual void `[TearDown] <>`__ { // Code here will be called immediately +after each test (right // before the destructor). } + +// Objects declared here can be used by all tests in the test case for +Foo. }; + +// Tests that the myPrettyClassTest::Bar() method does Abc. +TEST_F(myPrettyClass, MethodBarDoesAbc) { FileName input_filepath = +“this/package/testdata/myinputfile.dat”; FileName output_filepath = +“this/package/testdata/myoutputfile.dat”; Foo f; EXPECT_EQ(0, +f.Bar(input_filepath, output_filepath)); } + +// Tests that Foo does Xyz. TEST_F(myPrettyClass, DoesXyz) { // +Exercises the Xyz feature of Foo. } + +GTEST_API\_ int main(int argc, char \**argv) { +testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } ## +Compile and Invoke the Tests + +In a few words: + +- compile: + + .. raw:: html + +
 xcompile xmipp_test_myPrettyClass
+ +- compile and execute: + + .. raw:: html + +
 xcompile run_test_myPrettyClass
+ +- execute: + + .. raw:: html + +
 xmipp_test_myPrettyClass
+ +Example of execution of the test *xmipp_test_matrix* : + +.. raw:: html + +
roberto@tumbao:~/xmipp_svn$ xmipp_test_matrix
+   [==========] Running 4 tests from 1 test case.
+   [----------] Global test environment set-up.
+   [----------] 4 tests from [[MatrixTest]]
+   [ RUN      ] [[MatrixTest]].inverse
+   [       OK ] [[MatrixTest]].inverse (0 ms)
+   [ RUN      ] [[MatrixTest]].det3x3
+   [       OK ] [[MatrixTest]].det3x3 (0 ms)
+   [ RUN      ] [[MatrixTest]].solveLinearSystem
+   [       OK ] MatrixTest.solveLinearSystem (0 ms)
+   [ RUN      ] MatrixTest.initGaussian
+   [       OK ] MatrixTest.initGaussian (0 ms)
+   [----------] 4 tests from MatrixTest (1 ms total)
+
+   [----------] Global test environment tear-down [==========] 4 tests from 1 test case ran. (1 ms total) [  PASSED  ] 4 tests. roberto@tumbao:~/xmipp_svn$  
+ +Unittest checking workflow +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When a unittest is generated, sometimes its result is very tied to the +machine where it is generated (some mathematical results depends on the +compiler, libraries that may differ). This may drive the test to a +failure as long as the result in the testing machine could be a little +different from the goldStandard machine. We recommend giving the test a +little tolerance to avoid this false failures. The workflow after a test +is generated is the following: + +1 A test is generated, the goldStandard is generated in the owner’s +machine. 1 The test is uploaded to the repository. 1 That night, tests +will be passed on einstein, and results are sent to the sysadmins. 1 In +case of failure sysadmins check with the owner whether or not it is a +tolerance problem. 1 If it’s just a tolerance problem, then goldStandard +is regenerated on einstein and owner assume that a failure in that test +in his machine doesn’t mean a thing. 1 If it’s not, then the owner takes +the responsability of repairing the test + +Setting the gold standard +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You may update the gold standard of the tests at the server by doing: + +.. raw:: html + +
+   bin/xmipp_sync_data update tests/data http://scipion.cnb.csic.es/downloads/scipion/data/tests xmipp_programs
+   
\ No newline at end of file diff --git a/_sources/Developers/xmipp-Binding/index.rst.txt b/_sources/Developers/xmipp-Binding/index.rst.txt new file mode 100644 index 0000000..61ac1bc --- /dev/null +++ b/_sources/Developers/xmipp-Binding/index.rst.txt @@ -0,0 +1,1023 @@ +Python Binding +-------------------- + +`Text borrowed from here `_ + +Any code that you write using any compiled language like C, C++ or Java +can be integrated or imported into a Python script. This code is +considered as an “extension”. A Python extension module is nothing more +than a normal C library. On Unix machines, writting extensions, usually +requires installing a developer-specific package such as python2.5-dev. + +For your first look at a Python extension module, you’ll be grouping +your code into three parts: + +- The C functions you want to expose as the interface from your module. +- A table mapping the names of your functions as Python developers will + see them to C functions inside the extension module. +- An initialization function. + +The C functions: +^^^^^^^^^^^^^^^^^ + +The signatures of the C implementations of your functions will always +take one of the following three forms: + +static [[PyObject]] *MyFunction( PyObject*\ self, PyObject \*args ); + +static [[PyObject]] *MyFunctionWithKeywords(PyObject*\ self, PyObject +*args, PyObject*\ kw); + +static [[PyObject]] *MyFunctionWithNoArgs( PyObject*\ self ); + +Each one of the preceding declarations returns a Python object. There’s +no such thing as a void function in Python as there is in C. If you +don’t want your functions to return a value, return the C equivalent of +Python’s None value. The Python headers define a macro, Py_RETURN_NONE, +that does this for us. + +The names of your C functions can be whatever you like as they will +never be seen outside of the extension module. So they would be defined +as static function. + +Your C functions usually are named by combining the Python module and +function names together, as shown here: static [[PyObject]] \* +[[FileName]] \_isImage(PyObject *obj, PyObject*\ args, PyObject +\*kwargs) { if (isImage(FileName \_Value(obj))) Py_RETURN_TRUE; else +Py_RETURN_FALSE; } + +This would be a Python function called isImage inside of the module +[[FileName]]. You’ll be putting pointers to your C functions into the +method table for the module that usually comes next in your source code. + +The method mapping table +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This method table is a simple array of [[PyMethodDef]] structures. That +structure looks something like this: struct [[PyMethodDef]] { char +*ml_name; [[PyCFunction]] ml_meth; int ml_flags; char*\ ml_doc; }; + +Here is the description of the members of this structure: + +``ml_name:`` This is the name of the function as the Python interpreter +will present it when it is used in Python programs. + +``ml_meth:`` This must be the address to a function that has any one of +the signatures described in previous seection. + +``ml_flags:`` This tells the interpreter which of the three signatures +ml_meth is using. + +This flag will usually have a value of METH_VARARGS. + +This flag can be bitwise or’ed with METH_KEYWORDS if you want to allow +keyword arguments into your function. + +This can also have a value of METH_NOARGS that indicates you don’t want +to accept any arguments. + +``ml_doc:`` This is the docstring for the function, which could be NULL +if you don’t feel like writing one + +This table needs to be terminated with a sentinel that consists of NULL +and 0 values for the appropriate members. + +Example: + +static[[PyMethodDef]][[FileName]]_methods[] = { { “compose”, +(PyCFunction) FileName_compose, METH_VARARGS, “Compose from root, number +and extension OR prefix with number @” }, { “composeBlock”, +(PyCFunction) FileName_composeBlock, METH_VARARGS, “Compose from +blockname, number, root and extension” }, { NULL } /\* Sentinel \*/ }; + +The initialization function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The last part of your extension module is the initialization function. +This function is called by the Python interpreter when the module is +loaded. It’s required that the function be named\ ``initModule``, where +Module is the name of the module (the name is\ ``initxmipp`` in our +case). + +Your C initialization function generally has the following overall +structure: + +[[PyMODINIT]]\ *FUNC initModule() { +Py*\ `[InitModule3] `__; } + +Here is the description of Py_InitModule3 function: + +``func:`` This is the function to be exported. + +``module_methods:`` This is the mapping table name defined above. + +``docstring:`` This is the comment you want to give in your extension. + +Example: + +[[PyMODINIT]]_FUNC initxmipp(void) { //Initialize module +variable[[PyObject]]\* module; module = Py_InitModule3(“xmipp”, +xmipp_methods, “Xmipp module as a Python extension.”); + +… } + +All together +^^^^^^^^^^^^^^^^^ + +A simple example that makes use of all the above concepts: + +#include + +static[[PyObject]]\* helloworld(PyObject\* self) { return +Py_BuildValue(“s”, “Hello, Python extensions!!”); } + +static char helloworld_docs[] = “helloworld( ): Any message you want to +put here!!:raw-latex:`\n`”; + +static[[PyMethodDef]] helloworld_funcs[] = { {“helloworld”, +(PyCFunction)helloworld, METH_NOARGS, helloworld_docs}, {NULL} }; + +void inithelloworld(void) { Py_InitModule3(“helloworld”, +helloworld_funcs, “Extension module example!”); } + +Passing Function parameters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Most of the time you will add functions to an existing module. For +example, the following function, that accepts some number of parameters, +would be defined like this: + +static[[PyObject]]\ **module_func(PyObject self, PyObject\ args) { /** +Parse args and do something interesting here. \*/ Py_RETURN_NONE; } + +The method table containing an entry for the new function would look +like this: + +static[[PyMethodDef]] module_methods[] = { + +{ “func”, module_func, METH_VARARGS, “help message” }, { NULL, NULL, 0, +NULL } }; + +You can use API\ ``[[PyArg]]_ParseTuple`` function to extract the +arguments from the one[[PyObject]] pointer passed into your C function. + +The first argument to\ ``[[PyArg]]_ParseTuple`` is the args argument. +This is the object you’ll be parsing. The second argument is a format +string describing the arguments as you expect them to appear. Each +argument is represented by one or more characters in the format string +as follows. + +static[[PyObject]] *module_func(PyObject*\ self, PyObject *args) { int +i; double d; char*\ s; + +if (!PyArg_ParseTuple(args, “ids”, &i, &d, &s)) { return NULL; } + +/\* Do something interesting here. \*/ Py_RETURN_NONE; } + +Compiling the new version of your module and importing it will enable +you to invoke the new function with any number of arguments of any type: + +The PyArg \_ParseTuple Function +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Here is a list of format codes for[[PyArg]] \_ParseTuple function: + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + +
+ +Code + +.. raw:: html + + + +C type + +.. raw:: html + + + +Meaning + +.. raw:: html + +
+ +c + +.. raw:: html + + + +char + +.. raw:: html + + + +A Python string of length 1 becomes a C char. + +.. raw:: html + +
+ +d + +.. raw:: html + + + +double + +.. raw:: html + + + +A Python float becomes a C double. + +.. raw:: html + +
+ +f + +.. raw:: html + + + +float + +.. raw:: html + + + +A Python float becomes a C float. + +.. raw:: html + +
+ +i + +.. raw:: html + + + +int + +.. raw:: html + + + +A Python int becomes a C int. + +.. raw:: html + +
+ +l + +.. raw:: html + + + +long + +.. raw:: html + + + +A Python int becomes a C long. + +.. raw:: html + +
+ +L + +.. raw:: html + + + +long long + +.. raw:: html + + + +A Python int becomes a C long long + +.. raw:: html + +
+ +O + +.. raw:: html + + + +[[PyObject]]\* + +.. raw:: html + + + +Gets non-NULL borrowed reference to Python argument. + +.. raw:: html + +
+ +s + +.. raw:: html + + + +char\* + +.. raw:: html + + + +Python string without embedded nulls to C char*. + +.. raw:: html + +
+ +s# + +.. raw:: html + + + +char*+int + +.. raw:: html + + + +Any Python string to C address and length. + +.. raw:: html + +
+ +t# + +.. raw:: html + + + +char*+int + +.. raw:: html + + + +Read-only single-segment buffer to C address and length. + +.. raw:: html + +
+ +u + +.. raw:: html + + + +Py_UNICODE\* + +.. raw:: html + + + +Python Unicode without embedded nulls to C. + +.. raw:: html + +
+ +u# + +.. raw:: html + + + +Py_UNICODE*+int + +.. raw:: html + + + +Any Python Unicode C address and length. + +.. raw:: html + +
+ +w# + +.. raw:: html + + + +char*+int + +.. raw:: html + + + +Read/write single-segment buffer to C address and length. + +.. raw:: html + +
+ +z + +.. raw:: html + + + +char\* + +.. raw:: html + + + +Like s, also accepts None (sets C char\* to NULL). + +.. raw:: html + +
+ +z# + +.. raw:: html + + + +char*+int + +.. raw:: html + + + +Like s#, also accepts None (sets C char\* to NULL). + +.. raw:: html + +
+ +(…) + +.. raw:: html + + + +as per … + +.. raw:: html + + + +A Python sequence is treated as one argument per item. + +.. raw:: html + +
+ +.. raw:: html + + + +.. raw:: html + + + +The following arguments are optional. + +.. raw:: html + +
+ +: + +.. raw:: html + + + +.. raw:: html + + + +Format end, followed by function name for error messages. + +.. raw:: html + +
+ +; + +.. raw:: html + + + +.. raw:: html + + + +Format end, followed by entire error message text. + +.. raw:: html + +
+ +Returning Values: +^^^^^^^^^^^^^^^^^ + +Py_BuildValue takes in a format string much like PyArg \_ParseTuple +does. Instead of passing in the addresses of the values you’re building, +you pass in the actual values. Here’s an example showing how to +implement an add function: + +static[[PyObject]] *foo_add(PyObject*\ self, PyObject \*args) { int a; +int b; + +if (!PyArg_ParseTuple(args, “ii”, &a, &b)) { return NULL; } return +Py_BuildValue(“i”, a + b); } + +This is what it would look like if implemented in Python: + +You can return two values from your function as follows, this would be +cauptured using a list in Python. + +static[[PyObject]] *foo_add_subtract(PyObject*\ self, PyObject \*args) { +int a; int b; + +if (!PyArg_ParseTuple(args, “ii”, &a, &b)) { return NULL; } return +Py_BuildValue(“ii”, a + b, a - b); } + +This is what it would look like if implemented in Python: + +Calling Python (+numpy) from C +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Here is an example code to perform the sum of two volumes in Python: + +#include + +#include #include + +void myImport_array() { import_array(); } + +int main() { try { time_config(); + +Image I; +I.read(“/home/coss/temp/BPV_Project/BPV_scale_filtered_windowed.vol”);[[ProcessorTimeStamp]] +t0; const[[MultidimArray]] &mI=I(); annotate_processor_time(&t0); double +retval=0.0; FOR_ALL_DIRECT_ELEMENTS_IN_MULTIDIMARRAY(mI) +retval+=DIRECT_MULTIDIM_ELEM(mI,n)+DIRECT_MULTIDIM_ELEM(mI,n); std::cout +<< elapsed_time(t0,false) << std::endl; std::cout << “In C++:” << retval +<< std::endl; + +std::cout << “Initializing Python:raw-latex:`\n`”; +annotate_processor_time(&t0); Py_Initialize(); myImport_array(); +std::cout << elapsed_time(t0,false) << std::endl; + +// Create numpy array in Python with I() std::cout << “Creating numpy +array:raw-latex:`\n`”; annotate_processor_time(&t0); npy_intp dim[3]; +dim[0]=ZSIZE(I()); dim[1]=YSIZE(I()); dim[2]=XSIZE(I());[[PyObject]] +*pyI=PyArray_SimpleNewFromData(3, dim, NPY_DOUBLE, +(void*)MULTIDIM_ARRAY(I())); std::cout << elapsed_time(t0,false) << +std::endl; + +// Import testPython std::cout << “Importing module:raw-latex:`\n`”; +annotate_processor_time(&t0);[[PyObject]]\* pName +=[[PyString]]_FromString(“testPython”); // Import testPython PyObject\* +pModule = PyImport_Import(pName); Py_DECREF(pName); std::cout << +elapsed_time(t0,false) << std::endl; + +// Call sum std::cout << “Calling sum:raw-latex:`\n`”; +annotate_processor_time(&t0); [[PyObject]] *arglist = +Py_BuildValue(“OO”, pyI, pyI); PyObject*\ pFunc = +PyObject_GetAttrString(pModule, “sum”); PyObject \*result = +PyObject_CallObject(pFunc, arglist); std::cout << elapsed_time(t0,false) +<< std::endl; std::cout << “In Python:” << PyFloat_AsDouble(result) << +std::endl; } catch (XmippError e) { std::cout << e << std::endl; } +return 0; } + +You have to compile with + +xmipp_compile -i myCode.cpp –python + +And the Python code is \ No newline at end of file diff --git a/_sources/Installation/Installation-with-Scipion/index.rst.txt b/_sources/Installation/Installation-with-Scipion/index.rst.txt new file mode 100644 index 0000000..1d3cb3c --- /dev/null +++ b/_sources/Installation/Installation-with-Scipion/index.rst.txt @@ -0,0 +1,9 @@ +Installation with Scipion +------------------------------ + +The recommended way for users (not developers) to install and use Xmipp is via the +`Scipion framework `_, +where you can use Xmipp with other Cryo-EM-related software. + +Xmipp will be installed during Scipion installation (pay attention to not include the flag *-noXmipp*). +You can also install Xmipp from the `plugin manager of Scipion `_ \ No newline at end of file diff --git a/_sources/Installation/InstallationNotes/index.rst.txt b/_sources/Installation/InstallationNotes/index.rst.txt new file mode 100644 index 0000000..0c47e73 --- /dev/null +++ b/_sources/Installation/InstallationNotes/index.rst.txt @@ -0,0 +1,510 @@ +Installation Notes +================== +Installing on Ubuntu 22.04 +----------------------------- +Required dependencies +^^^^^^^^^^^^^^^^^^^^ + +**Compiler** + +:: + + sudo apt install gcc-10 g++-10 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 50 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 50 + +**GCC-11 version compatible** + +GCC-11 is compatible with Xmipp but we have experienced some problems in +the installation; if appear: *undefined reference to \`std::…* Please +follow those instructions: https://github.com/I2PC/xmipp/issues/583 or +use gcc-10 or older + +**Other dependencies** + +``sudo apt install -y scons libfftw3-dev libopenmpi-dev libhdf5-dev python3-numpy python3-dev libtiff5-dev libsqlite3-dev default-jdk git cmake`` + +``pip install scons numpy`` + +Optional dependencies +^^^^^^^^^^^^^^^^^^^^ + +**CUDA** + +We recomend CUDA >=11.2. Older version of CUDA requires an older gcc +(gcc-8 could be difficult to install and cause issues with the OS). +Follow official `install +instructions `__. We +recommend you to follow the guide for installation of CUDA 11.4 (deb +(local)) + +**OpenCV** OpenCV is currently not properly supported. See +https://github.com/I2PC/xmipp/issues/436 for details. + +Installation +^^^^^^^^^^^^^^^^^^^^ + +``git clone https://github.com/I2PC/xmipp.git && cd xmipp && ./xmipp`` + + + + + +Installing on Ubuntu 20.04 +----------------------------- +Required dependencies +^^^^^^^^^^^^^^^^^^^^ + +**Compiler (when using CUDA 10.2)** + +:: + + sudo apt install gcc-8 g++-8 + sudo update-alternatives --remove-all gcc + sudo update-alternatives --remove-all g++ + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 + +**Compiler (for CUDA 11.2 or without CUDA)** + +``sudo apt install gcc g++`` + +**Other dependencies** + +``sudo apt install -y libfftw3-dev libopenmpi-dev libhdf5-dev python3-numpy python3-dev libtiff5-dev libsqlite3-dev default-jdk git cmake`` + +``pip install scons numpy`` + +Optional dependencies +^^^^^^^^^^^^^^^^^^^^ + +**CUDA** Follow official `install +instructions `__. We +recommend you to follow the guide for installation of CUDA 11.4 (deb +(local)), but then install ``sudo apt install cuda-10-2`` + +**OpenCV** OpenCV is currently not properly supported. See +https://github.com/I2PC/xmipp/issues/436 for details. + +Installation +^^^^^^^^^^^^^^^^^^^^ + +``git clone https://github.com/I2PC/xmipp.git && cd xmipp && ./xmipp`` + +Installing on Ubuntu 18.04 +--------------------------- +Required dependencies +^^^^^^^^^^^^^^^^^^^^ + +**Compiler** + +:: + + sudo apt install gcc-8 g++-8 + sudo update-alternatives --remove-all gcc + sudo update-alternatives --remove-all g++ + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 + +**Other dependencies** + +``sudo apt install -y scons libfftw3-dev libopenmpi-dev libhdf5-dev python3-numpy python3-dev libtiff5-dev libsqlite3-dev default-jdk git cmake`` + +Optional dependencies +^^^^^^^^^^^^^^^^^^^^ + +**CUDA** Follow official `install +instructions `__ + +**OpenCV** ``sudo apt install libopencv-dev`` + +Installation +^^^^^^^^^^^^^^^^^^^^ + +``git clone https://github.com/I2PC/xmipp.git && cd xmipp && ./xmipp`` + +Installing on Centos-7 +--------------------------- + +.. warning:: + Not recommended though, installations there tend to get way more complicated + +Required dependencies +^^^^^^^^^^^^^^^^^^^^ + +**General dependencies** + +``sudo yum install scons fftw-dev openmpi-devel libtiff-devel sqlite3-devel default-jdk git cmake python3 python3-devel python3-numpy python3-tkinter wget libjpeg-devel java-1.8.0-openjdk-devel libsq3-devel libzstd`` + +**Compiler** + +The version of gcc and g++ included in the latest version of CentOS 7 is +too old (4.8) and it is not supported by Xmipp. Also, the latest version +of gcc-8 and g++-8 obtainable from the devtoolset-8 package is too old +(8.3), so we suggest installing the compilers from version 9 onwards +(the example in this guide installs gcc-10 and g++-10). + +In CentOS, you can install a *devtoolset* to incorporate a newer version +of the compilers. To do this, you must first enable the RedHat CentOS +SCL repository. Please ask your system administrator to do this for you +if you have no permission or have any kind of doubt. The following +commands will install the devtoolset and use it by default for all +users: + +:: + + # Enable the repository and install the binaries + yum install centos-release-scl + yum install devtoolset-10-gcc devtoolset-10-gcc-c++ + # Add the newly installed binaries as options for gcc and g++ + sudo update-alternatives --install /usr/bin/gcc gcc /opt/rh/devtoolset-10/usr/bin/gcc 10 + sudo update-alternatives --install /usr/bin/g++ g++ /opt/rh/devtoolset-10/usr/bin/g++ 10 + # Select them as the default option - this will show an interactive menu: choose the installed version and hit enter + sudo update-alternatives --config gcc + sudo update-alternatives --config g++ + +The packages devtoolset-10-gcc and devtoolset-10-g++ can be found in +``/opt/rh/devtoolset-10/root/usr/bin/gcc`` and +``/opt/rh/devtoolset-10/root/usr/bin/g++``. To temporarily enable them +in a console you can execute ``scl enable devtoolset-10 -- bash`` (bear +in mind it will be disabled on console closing). You can check if you +are using the correct version of the compilers with ``mpicc --version``, +``gcc --version`` and ``g++ --version``. + +Troubleshooting +^^^^^^^^^^^^^^^^^^^^ + +**Errors with hdf5** + +We recommend removing all hdf5 versions and install just hdf5-devel. To +do that: + +:: + + sudo yum remove hdf5 + sudo yum remove hdf5-devel + pip uninstall h5py + +remove all files related to hdf5 in: \* ``_/usr/lib64/libhdf5*_`` \* +``_/usr/include/hdf5*_`` \* ``_/usr/lib/x86_64-linux-gnu/hdf5_*`` \* +``_.../anaconda3/include/H5*.h_`` \* ``_.../anaconda3/include/hdf5*.h_`` +\* ``_.../anaconda3/lib/libhdf5*_`` \* +``_.../anaconda3/envs/.../libhdf5*_`` + +be sure about the gcc version (gcc –version) install hdf5-devel +``sudo yum install hdf5-devel`` + +Optional dependencies +^^^^^^^^^^^^^^^^^^^^ + +**CUDA** Follow official `install +instructions `__ Take +care on the version of GCC/G++ installed. `This +StackOverflow `__ post contains +the compatibility chart of CUDA + GCC/G++. You can have different +versions working at the same time but it can be complex for basic linux +users. + +**OpenCV** ``sudo yum install opencv-devel`` + +Installation +^^^^^^^^^^^^^^^^^^^^ +``git clone https://github.com/I2PC/xmipp.git && cd xmipp && ./xmipp`` + + +Cmake +-------- +Xmipp requires a Cmake version 3.16 or above. To update and install it follow these steps. + +Ubuntu and Debian +^^^^^^^^^^^^^^^^^^^^ + +If you have not installed cmake please + +``sudo apt-get install -y cmake cmake-data`` + +If you have an older version, to install the newest: + +- ``sudo apt remove -y cmake cmake-data`` +- ``hash -r`` +- ``sudo apt-get install -y cmake cmake-data`` +- ``hash -r`` + +Centos +^^^^^^^^^^^^^^^^^^^^ + +To uninstall cmake \* Go to the cmake directory +(``cd / && find . -type d -name "*cmake*"``) \* ``sudo make uninstall`` +\* ``cd .. && rm -rf path/to/cmake`` + +To install cmake \* +``wget https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3.17.3.tar.gz`` +\* ``tar -zxvf cmake-3.17.3.tar.gz`` \* ``cd cmake-3.17.3`` \* +``./bootstrap`` \* ``make`` \* ``sudo make install`` \* Verify the +installed version by typing ``sudo --version`` + +Older Ubuntu (18.0.4) +^^^^^^^^^^^^^^^^^^^^ + +To update gcc from v7 \* ``sudo apt-get remove gcc-7`` \* +``sudo apt-get install gcc-8`` \* +``sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8`` + +To Update Cmake + +- ``wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -`` + +- ``sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main'`` + +- ``sudo apt-get update`` + +Compiler +--------- +Xmipp consists of multiple standalone programs written primarily in C++. +For that reason, the Xmipp suite has to be compiled before its use. The +compilation process is driven by the xmipp script located in this +repository. Xmipp requires C++17 compatible compiler. We recommend +either GCC or CLANG, in the newest version possible. We have good +experience with GCC-8 and bad experience with GCC-7, in any case a +version > 6 is required. If use GCC-11 and experience issues, `please +visit this. `__ + +We strongly recommend you to have this compiler linked to ``gcc`` and +``g++``. Otherwise it might not be properly picked up by wrappers, such +as MPI’s wrapper. We have good experince with using ``alternatives``: + +:: + + sudo apt install gcc-8 g++-8 + sudo update-alternatives --remove-all gcc + sudo update-alternatives --remove-all g++ + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 50 + sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 50 + +**Note:** If you compiled Xmipp with a GCC/G++ version, and you change +the compiler version, you will need to run ``./xmipp cleanAll`` before +compiling again in case you need to. + +Compiling with Matlab +--------- +Xmipp has a binding to MATLAB, which allows the user to run specific +Xmipp functions inside MATLAB. + +Previous requirements +^^^^^^^^^^^^^^^^^^^^ + +It is required to have a regular MATLAB installation. + +Settings +^^^^^^^^^^^^^^^^^^^^ + +Make sure you have these settings in your Xmipp configuration file +(``xmipp-bundle/xmipp.conf``) before compiling Xmipp: + +``MATLAB=True`` + +``MATLAB_DIR=`` (usually something +like: ``MATLAB_DIR=/home/user/MATLAB/R2021b``) + +Run +^^^^^^^^^^^^^^^^^^^^ + +1. Compile Xmipp normally (once the settings are as above): ``./xmipp`` + or ``scipion run ./xmipp`` +2. Open MATLAB +3. In MATLAB, set the path to Xmipp binding: + ``HOME > Set Path > Add Folder...`` and select the path to the + binding (``/xmipp-bundle/build/bindings/matlab``), + then, click in ``Open`` and ``Save`` +4. Now you should be able to run functions like ``xmipp_read()`` in + MATLAB + +DeepLearningToolKit +--------------------- +The DeepLearningToolkit (DLTK) is a set of environments populated with +several libraries related to deep learning and allows running protocols +on Scipion which require deep learning tools. All of them are available +for GPU or CPU only (the installator’ll detect your configuraction) + +Requirements +^^^^^^^^^^^^^^^^^^^ + +A nvidia drivers 450 or higher is required, to review the nvidia driver +version please run ``nvidia-smi``. If older version is detected, the +DLTK will be installed without GPU support. + +How to install +^^^^^^^^^^^^^^^^^^^ + +Run ``scipion3 installb deepLearningToolkit`` + +It could take more than 30 minutes. To speedup the installation we +propose to use libmamba solver (we experienced a x4 speedup) . It is +only available for conda >=4.12 and has to be installed and setup on +your conda installation. For more details, please visit: +https://www.anaconda.com/blog/a-faster-conda-for-a-growing-community + +List environments +^^^^^^^^^^^^^^^^^^^ + +- xmipp_DLTK_v0.3: Protocols ussing it screen_deeplearning, deep_denoising, resolution_deepres, screen_deepConsensus, python=3.7, scikit-image=0.14, tensorflow=1.15, keras=2.2, scikit-learn=0.22, pip, numpy==1.21, h5py==2.10.0 + +- xmipp_DLTK_v1.0, Protocols ussing it: deep_misalingment_detection, python=3.8, tensorflow=2.7, keras=2.7, pip, numpy==1.23 + +- xmipp_MicCleaner, Protocols ussing it: deepMicrographScreen, python=3.6, micrograph-cleaner-em=0.35 + +- xmipp_deepEMhancer, Protocols ussing it: protocol_deepEMhancer, python=3.6, deepemhancer=0.12, numba=0.45 + +- xmipp_pyTorch, Protocols ussing it: deepHand, python=3.8, numpy=1.23, mrcfile=1.4.3, kornia=0.6.12, starfile=0.4.12 , pytorch==1.11, pytorch-cuda=11.7, torchvision=0.12 + + +Troubleshooting +----------------- +libstd versions (compiler - python) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +For some combinations of gcc and python enviroment you could experience some issue similar to: + +**undefined reference to std::...** + +This is because the version of libstdc++ of the system is newer than the one used by the enviroment. +To fix it there are two options: + + 1. Install compiler toolchain in conda: + ``conda install c-compiler cxx-compiler`` + + + 2. Change the symbolic link of libstdc++ in your scipion enviroment of conda: + + Verify the version of libstdc++.so... on the enviroment + + ``cd $CONDA_PREFIX/envs/your_env/lib`` + + Verify the version of libstdc++.so... on your system + + ``find /usr -name "libstdc++.so*"`` + + Back-up the target shared object + + ``mv libstdc++.so.VERSION_ENV. libstdc++.so.VERSION_ENV.old`` + + Change the target to point on the system's + + ``ln -s /usr/lib.../libstdc++.so.VERSION_SYSTEM libstdc++.so.VERSION_ENV`` + + +For more details please visit: https://github.com/I2PC/xmipp/issues/583 +and https://github.com/stan-dev/pystan/issues/294#issuecomment-988791438 + + + +Cmake +^^^^^^^^^^^^^^^^^^^ +Typing ``cmake --version`` or trying to compile Xmipp appears: + +**cmake: libstdc++.so.6: version \`GLIBCXX_3.4.30’ not found (required +by cmake)** (or similar) + +That appears in new versions of Cmake with older versions of the +enviroment Scipion created with gcc-10. To solve it, you may add the +path of the conda lib in the LD_LIBRARY_PATH to avoid that the new Cmake +tries to read older \*.so files. Write the next line in the .bashrc +file: + +``export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH`` + +Could also be necessary to add */path/To/Conda/lib* at the beginning of +the LD_LIBRARY_PATH. + +``export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/path/To/Conda/lib:$LD_LIBRARY_PATH`` + +Other solutions \* Reinstall the library libstdcxx on the base +enviroment of Conda ``conda install -c anaconda libstdcxx-ng`` and add +the path of the base enviroment on +LD_LIBRARY_PATH\ ``export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/conda/lib`` +\* If your Conda was compiled with an older version of gcc you could try +to compile Xmipp with an older version of gcc (limitation: we require +gcc >=8) \* You could reinstall your Conda, but you may need to +reinstall Scipion and all the plugins of Scipion that require +environments + +DeepLearningToolkit +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Error message: +``InvalidVersionSpec: Invalid version '5.11.3imageio>=2.5.0': invalid character(s)`` + +The package *pyvistaqt* installed by an old version of the plugin +*flexutils* or *tomoviz* in the enviroment *scipion3* has a bug in the +version *pyvistaqt*\ =0.3.0. To fix it and be able to install *DLTK* +run: + +``conda activate scipion3`` + +``pip uninstall pyvistaqt`` + +``pip install pyvistaqt==0.4.0`` + +If there is any plugin that require *pyvistaqt* +(`scipion-em-tomoviz `__), +please update it + +Linking Xmipp to Scipion +^^^^^^^^^^^^^^^^^^^ +Once the Standalone version has been installed, the user can link such +installation to Scipion to have the posibility of use Xmipp inside +Scipion. Linking with Scipion requires to the repository of +``scipion-em-xmipp`` which can be found in the folder +``src/scipion-em-xmipp``. This repository contains the files that +Scipion needs to execute Xmipp programs. However, it remains to link the +Xmipp binaries with Scipion. To do that we need Scipion installed (`see +Scipion installation web +page `__) +and just launch the next command to link the binaries + +``scipion3 installp -p ~/scipion-em-xmipp --devel`` + +where ``scipion-em-xmipp`` is the folder of the repository, it means +``src/scipion-em-xmipp``. This command should work in most of the cases. +However, if you do this and Scipion does not find Xmipp, you can link +Scipion and Xmipp manually by editting the config file of Scipion. This +file is located in ``scipion/config/scipion.conf``, and it should looks +like + +:: + + [PYWORKFLOW] + CONDA_ACTIVATION_CMD = eval "$(/home/username/opt/miniconda3/bin/conda shell.bash hook)" + SCIPION_FONT_SIZE = 6 + + [PLUGINS] + EM_ROOT = software/em + MAXIT_HOME = %(EM_ROOT)s/maxit-10.1 + XMIPP_HOME = /home/username/xmipp-bundle/build + +The link between Scipion and Xmipp consist in the last line. +``XMIPP_HOME = /home/username/xmipp-bundle/build``. If this line does +not exist, it must be added. + +HDF5 +^^^^^^^^^^^^^^^^^^^ +We sometimes see issues regarding the HDF5 dependency. We recommend +removing all hdf5 versions and install just hdf5-devel. To do that +(Ubuntu-Debian systems): + +:: + + sudo apt remove hdf5 + sudo apt remove hdf5-devel + pip uninstall h5py + +Remove all files related to hdf5 in: \* ``_/usr/lib64/libhdf5*_`` \* +``_/usr/include/hdf5*_`` \* ``_/usr/lib/x86_64-linux-gnu/hdf5_*`` \* +``_.../anaconda3/include/H5*.h_`` \* ``_.../anaconda3/include/hdf5*.h_`` +\* ``_.../anaconda3/lib/libhdf5*_`` \* +``_.../anaconda3/envs/.../libhdf5*_`` + +We strongy recommend you to install it via your default package manager: +``sudo apt-get install libhdf5-dev`` If you install it using other +package management system (such as Conda), it might lead to compile/link +time issues caused by incompatible version being fetched. Other option +is to run”scipion3 installb xmippSrc” to force the xmipp install its own +HDF5 into its desired directory. \ No newline at end of file diff --git a/_sources/Installation/Requirements/index.rst.txt b/_sources/Installation/Requirements/index.rst.txt new file mode 100644 index 0000000..5c10b61 --- /dev/null +++ b/_sources/Installation/Requirements/index.rst.txt @@ -0,0 +1,88 @@ +Requirements +----------------------- +Supported OS +^^^^^^^^^^^^^^^^^^^^ + +We have tested Xmipp compilation on the following operating systems: +- `Ubuntu 18.04 `_ +- `Ubuntu 20.04 `_ +- `Ubuntu 22.04 `_ +- `Centos 7 `_ +Visit the OS wiki page for more details. + +While compilation and execution might be possible on other systems, it might not be straightforward. If you encounter a problem, please refer to known and fixed `issues `_. Let us know if something is not working. + +Hardware requirements +^^^^^^^^^^^^^^^^^^^^ + +At least 2 processors are required to run Xmipp. In some virtual machine tools only one is assigned, please check that at least two processors are assigned to the virtual machine. + +Software dependencies +^^^^^^^^^^^^^^^^^^^^^ + +Compiler +^^^^^^^^ + +Xmipp requires a C++17 compatible compiler. We recommend GCC with G++; we have good experience with GCC/G++-8.4; in any case, a version >= 8.4 is required. If you use GCC/G++-10.3 and CUDA=11 and experience issues, `please change the compiler version `_. If you use GCC-11 and experience issues, `please visit this `_. For more details about the compilation process and installation of gcc, please visit `compiler `_. + +Cmake +^^^^^ + +Xmipp requires Cmake 3.16 or above. To update it, please `visit `_. + +Cuda +^^^^ + +Xmipp supports Cuda 8 through 12.2. CUDA is optional but highly recommended. We recommend you to use the newest version available for your operating system; though Cuda 10.2 has the widest support among other Scipion plugins. Pay attention to the `compiler - CUDA compatibility `_. + +To install CUDA for your operating system, follow the `official install guide `_. + +.. warning:: + `CUDA 11.5 is not compatible with GCC - 9 `_, please change one of these. + +OpenCV +^^^^^^ + +OpenCV is used for some programs: movie_optical_alignment (with GPU support) and volume_homogenizer; however, it is not required. If you installed OpenCV via apt (``sudo apt install libopencv-dev``), it should be automatically picked up by the Xmipp script. + +HDF5 +^^^^ + +We sometimes see issues regarding the HDF5 dependency. Please visit the `HDF5 Troubleshooting wiki `_. + +Full list of dependencies +^^^^^^^^^^^^^^^^^^^^^^^^^ + +Before installing Xmipp, you need to ensure that your system meets certain requirements. Here are the necessary packages and dependencies: + +- `libfftw3-dev`: FFTW3 library development files. +- `libopenmpi-dev`: OpenMPI development files. +- `libhdf5-dev`: HDF5 library development files. +- `python3-numpy`: NumPy library for Python 3. +- `python3-dev`: Python 3 development headers. +- `libtiff5-dev`: LibTIFF development files. +- `libsqlite3-dev`: SQLite3 development files. +- `default-jdk`: Default Java Development Kit. +- `git`: Version control system for source code management. +- `cmake`: Cross-platform build system. + +You can install these packages on Ubuntu-based systems using the following command: + +.. code-block:: bash + + sudo apt install -y libfftw3-dev libopenmpi-dev libhdf5-dev python3-numpy python3-dev libtiff5-dev libsqlite3-dev default-jdk git cmake + +Additionally, you need to install `scons` in the environment where Xmipp will be compiled. If you plan to run Xmipp within Scipion, you should install it in your Scipion3 environment. You can install `scons` using `pip`: + +.. code-block:: bash + + pip install scons + +Finally, make sure to have a compatible compiler installed. You can install GCC 8 and G++ 8 using the following command: + +.. code-block:: bash + + sudo apt install gcc-8 g++-8 + +These requirements will ensure that your system is ready for installing and using Xmipp. + diff --git a/_sources/Installation/Standlone-installation/index.rst.txt b/_sources/Installation/Standlone-installation/index.rst.txt new file mode 100644 index 0000000..deaca92 --- /dev/null +++ b/_sources/Installation/Standlone-installation/index.rst.txt @@ -0,0 +1,62 @@ +Standalone installation +----------------------- + +Standalone installation of Xmipp is recommended for researchers and +developers. This installation allows you to use Xmipp without Scipion, +however, in the next section it is explained how to link it with +Scipion. Xmipp script automatically downloads several dependencies and +then creates a configuration file that contains paths and flags used +during the compilation. Please refer to the `Xmipp +configuration `__ +guide for more info. + +Start by cloning the repository and then navigate to the right +directory. + +``git clone https://github.com/I2PC/xmipp.git xmipp-bundle && cd xmipp-bundle`` + +Refer to ``./xmipp --help`` for additional info on the compilation +process and possible customizations. + +Next is to compile xmipp. There are two possibilities and in both you +will can run Xmipp in Scipion (see `linking +step `__) + + - Compile Xmipp by invoking the compilation script, which will take you through the rest of the process: + +``./xmipp`` + +that way you will install Xmipp with the dependencies and thier versions that the enviroment youdecide, or the default one. + + - Compile Xmipp via Scipion enviroment + +``scipion3 run ./xmipp`` + +that way you will install Xmipp with the +dependencies and their versions that Scipion decided. + +It is important to highlight that this step only compiles Xmipp, but it +does not link to Scipion. The linking to Scipion is explained in the +next section. + +Linking Xmipp standalone to Scipion +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Once the Standalone version has been installed, the user can link such +installation to Scipion to have the posibility of use Xmipp inside +Scipion. Linking with Scipion requires to the repository of +``scipion-em-xmipp`` which can be found in the folder +``src/scipion-em-xmipp``. This repository contains the files that +Scipion needs to execute Xmipp programs. However, it remains to link the +Xmipp binaries with Scipion. To do that we need Scipion installed (`see +Scipion installation web +page `__) +and just launch the next command to link the binaries + +``scipion3 installp -p ~/scipion-em-xmipp --devel`` + +where ``scipion-em-xmipp`` is the folder of the repository, it means +``src/scipion-em-xmipp``. This command should work in most of the cases. +However, if you do this and Scipion does not find Xmipp, please visit +`Linking Xmipp to Scipion +Troubleshooting `__ \ No newline at end of file diff --git a/_sources/Releases/Releases-scipion-em-xmipp/index.rst.txt b/_sources/Releases/Releases-scipion-em-xmipp/index.rst.txt new file mode 100644 index 0000000..1955a9d --- /dev/null +++ b/_sources/Releases/Releases-scipion-em-xmipp/index.rst.txt @@ -0,0 +1,297 @@ +Releases scipion-em-xmipp +========================= + +3.23.11 - Nereus +-------------------------- + +- New protocols + - Volume local adjustment +- Protocols updated + - convert_pdb: Allowed conversion natively from CIFs + - particle_pick_automatic: The model can now be given by a directory + - volume_local_adjust: Save occupancy volume + - extract_particles: Added two different cases for downsampling, by dimensions and by sampling rate +- Protocols fixed + - movie_resize: Fixed movie resize output size + - movie_gain: Fix update output step by using a generic one from scipion + - tilt_analysis: Fixes in the generated tilt images and in updating correctly the output sets + - ctf_consensus: Fix the dependencies of the step + - preprocess_micrographs: Fixed output size in preprocess micrographs + - deep_center_assignment: Fixed deep center calls + - extract_particles_movies: Get coords correctly + - particle_pick_consensus: Fix MicsPointer + - trigger_data: fix updateOutput and close correclty the output set +- Protocols deprecated (For more details visit `this `__) + - classification_gpuCorr + - classification_gpuCorr_full + - classification_gpuCorr_semi +- More scipion-em-xmipp + - Updated Nvidia driver required version + + +3.23.07 - Morpheus +-------------------------- + +- New protocols + - Movie Dose analysis + - deep_center + - deep_global_assignment + - deep_center_predict + - deep_global_assignment_predict +- Protocols updated + - consensus_classes (Efficient p-value calculation, updated intersection merging process, generalized protocol for other set of classes) + - Movie Gain: changed \_stepsCheckSecs and fixed inputMovies calling, np.asscalar discontinued in numpy 1.16 + - convert_pdb: dont allow set size if template volume, to convert a set of pdbs to volumes, generates an mrc file + - CTF_consensus: add 4 threads by default + - process: Better instantiation of Scipion subclasses + - create_mask3d: Addding a validate in 3dmask, add :mrc to input filename + - consensus_local_ctf: save defocus in proper fields, compute consensus for local defocus U and V separately, add consensus angle + - align_volume: Included the label in the volumes + - crop_resize: Add mask as input. Mask resize is now possible + - subtract_projection: change pad validation error for warning, parallelized +- Protocols fixed + - Tilt analysis: Close correctly the output sets once finished + - Deep micrograph cleaner: fix two bugs that occured during streaming implementation bug + - volume_adjust_sub: fix with :mrc + - Picking consensus: define correctly the possibleOutputs bug + - Center particles: streaming bug when definining the outputs bug + - volume_subtraction: bug fixed in filename + - compare_reprojections: fix update subtract projection output + - deep_micrograph_screen: Bug fix that prevents using small GPUs + - consensus_classes:Fixed manual output generation +- Protocols deprecated (For more details visit `this `__) + - apply_deformation_zernike3d + - classify_kmeans2d + - kmeans_clustering + - particle_boxSize + - rotational_spectra + - split_volume_hierarchical_cluster +- Viewers + - viewer_resolution_fs: fixing 0.1 threshold not found + - viewer_projmatch, viewer_metaprotocol_golden_highres: Fixing viewers, change removed ChimeraClientView to ChimeraView + - monores_viewer: fix histogram + - viewer_structure_map: Change the label for each volume + +3.23.03 - Kratos +------------------------ + +- New protocol status: beta, new, production and updated. Will appear + in the left pannel of Scipion +- Protocol subtract_projection: user experience improvements, no final + mask by default, apply ciruclar mask in adjustment image to avoid + edge artifacts, validate same sampling rate with tolerance in third + decimal +- Protocol convert_pdb: Allowed to save centered PDB used for + conversion. +- Protocol align_volume_and_particles: add alingment validation +- Protocol FlexAlign: updating protocol to reflect changes in the + executable, fixed test, removing unused protocol (Movie average) +- Protocol align_volume_and_particles:Align volume and particles + adapted to tomography and works in the absence of tomo plugin. +- Protocol volume_consensus: validate same sampling rate with tolerance + in third decimal +- Protocols deprecated (for more details visit the + `wiki `__): + protocol_deep \_align, reconstruct_heterogeneous, + protocol_metaprotocol_create_output, + protocol_metaprotocol_discrete_heterogeneity_scheduler + + +3.22.11 - Iris +---------------------- + +Hot fix 3.22.11.2 +^^^^^^^^^^^^^^^^^ + +- Align volume and particles works in the absence of tomo plugin. + +Hot fix 3.22.11.1 +^^^^^^^^^^^^^^^^^ + +- Align volume and particles adapted to tomography. Defines possible + outputs. Optimized. Test more exhaustive for matrices + +3.22.11.0 +^^^^^^^^^^^^^^^^^ + +- Protocol_cl2d_align: The input can now be a set of averages or a set + of 2D classes + +- Protocol_local_ctf: Default value are now changed for + maxDefocusChange + +- Protocol_apply_zernike3d: Now accepts either a Volume or SetOfVolumes + and applies the coefficients in a loop in the deform step + +- Protocol_postProcessing_deepPostProcessing: Managed GPU memory to + avoid errors + +- Protocol_resolution_deepres: Mandatory mask + +- Protocol center particles and Gl2d (all options): Fix streaming + +- Protocol_create_3d_mask: Allows volume Null=True + +- Protocol_reconstruct_fourier: Set pixel size + +- GL2D static: Bug fixing + +- Protocol_trigger_data: Bug fixing + +- Protocol_crop_resize: Set sampling rate of mrc files when cropping + resizing volumes or particles + +- subtract_projection: New protocol for boosting particles. Add + protocol to wizard XmippParticleMaskRadiusWizard as now the protocol + uses it + +- **New tests:** deep_hand, pick_noise, screen_deep_learning, + resolution_B_factor + +- Fixed TestHighres test + +3.22.07 - Helios +------------------------ + +- rotate_volume: New protocol +- subtract_projection: New implementation based on adjustment by + regression instead of POCS and improved performance +- local_ctf: Add new sameDefocus option + formatting +- compare_reprojections & protocol_align_volume: Fast Fourier by + default +- crop_resize: Allows input pointers +- resolution_deepres: Resize output to original size +- denoise_particles: Added setOfAverages as input option +- process: Change output from stk (spider) to mrcs (mrc) +- trigger_data: Bug fixed +- screen_deeplearning: Added descriptive help +- center_particles: Added summary info +- align_volume_and_particles: Summary error fixed +- cl2d: Summary errors solved +- New tests: test_protocol_reconstruct_fourier, + test_protocols_local_defocus, test_protocols_local_defocus, + TestXmippAlignVolumeAndParticles, TestXmippRotateVolume +- Improved tests: test_protocols_deepVolPostprocessing, + test_protocols_xmipp_3d, Test ProjSubtracion +- Excluded tests: test_protocols_zernike3d, + test_protocols_metaprotocol_heterogeneity + +3.22.04 - Gaia +---------------------- + +- protocol_core_analysis: New protocol +- protocol_compare_angles: Bug fix in compare angles under some + conditions +- protocol_center_particles: protocol simplified (removed + setofCoordinates as output) +- protocol_CTF_consensus: concurrency error fixed +- protocol_convert_pdb: remove size if deactivated +- protocol_resolution_deepres: binary masked not stored in Extra folder + and avoiding memory problems on GPUs +- protocol_add_noise: fixes +- protocol_compare_reprojections: improve computation of residuals + + tests + fix + formatting +- protocol_screen_deepConsensus: multiple fixes in batch processing, + trainging and streaming mode +- protocol_shift_particles: apply transform is now optional + +3.22.01 - Eris +---------------------- + +- `Visit release xmipp `_ + +3.21.06 - Caerus +------------------------ + +- CUDA-11 support +- New protocol: Deep align +- ChimeraX support +- Improvements of streaming process +- Several performance optimizations +- Build time optimization +- Multiple bug fixes +- Improved documentation + +3.20.07 - Boreas +------------------------ + +- New Protocol: MicrographCleaner is a new algorithm that removes + coordinates picked from carbon edges, aggregations, ice crystals and + other contaminations +- New functionality: The protocol compare reprojections can now compute + the residuals after alignment +- New protocol: Split frames divide input movies into odd and even + movies so that they can be processed independently +- New protocol: Continuous heterogeneity analysis using spherical + harmonics (not ready to be used) +- Bug fixing when some micrograph has no coordinates in the + consensus-picking. +- New functionalities: Different architectures and training modes +- Normal Mode Analysis protocols have been moved to the plugin + ContinuousFlex +- Fixing MPI version of the Fourier Reconstruction +- New protocol: local CTF integration and consensus protocol for local + ctf (also the viewers) +- Local CTF analysis tools: Not yet ready for general public +- New functionallity: Introducing the posibility of automatic + estimation of the gain orientation. +- Bugs fixings regarding stability on streaming processing +- Support of heterogeneous movie sets +- New protocol: Clustering of subtomogram coordinates into connected + components that can be processed independently +- New Protocol: Removing duplicated coordinates +- New protocol: Subtomograms can be projected in several ways to 2D + images so that 2D clustering tools can be used +- New protocol: Regions of Interest can be defined in tomograms (e.g., + membranes) +- Bug fixing in mask3d protocol +- Bug fix: in helical search symmetry protocol +- Enhanced precision of the FlexAlign program +- Now, deepLearningToolkit is under its own conda environment +- Multiple protocols accelerated using GPU +- New functionality: Xmipp CTF estimation can now take a previous + defocus and do not change it +- New functionallity: CTF-consensus is able to take the primary main + values or an average of the two. +- New functionallity: CTF-consensus is able to append metadata from the + secondary input +- New functionality: Xmipp Highres can now work with non-phase flipped + images +- New functionality: Xmipp Preprocess particles can now phase flip the + images +- New protocol: Tool to evaluate the quality of a map-model fitting +- Allowing multi-GPU processing using FlexAlign +- Improvement in monores and localdeblur +- Randomize phases also available for images +- Change the plugin to the new Scipion structure +- Migrating the code to python3 + +3.19.04 +----------------- + +- Highres can now take a global alignment performed by any other method +- New protocol: 3D bionotes +- New protocol: Align volume and particles +- New protocol: Center particles +- New protocols: GL2D, GL2D streaming and GL2D static +- New protocol: 2D kmeans clustering +- New protocol: compare angles +- New protocol: consensus 3D classes +- New protocol: CTF consensus +- New protocol: deep denoising +- New protocols: Eliminate empty particles and eliminate empty classes +- New protocol: Extract unit cell +- New protocol: Generate reprojections +- New protocol: metaprotocol heterogenety output, metaprotocol + heterogeneity subset and metaprotocol heterogeneity +- New protocol: Movie Max Shift +- New protocol: particle boxsize +- New protocol: pick noise +- New protocol: significant heterogeneity +- New protocol: swarm consensus intial volumes +- New protocol: directional ResDir +- New protocol: local monoTomo +- New protocol: deep consensus picking +- New protocol: screen deep learning +- New protocol: split volume hierarchical +- New protocol: trigger data \ No newline at end of file diff --git a/_sources/Releases/Releases-scipion-em-xmippTomo/index.rst.txt b/_sources/Releases/Releases-scipion-em-xmippTomo/index.rst.txt new file mode 100644 index 0000000..2ab2fe1 --- /dev/null +++ b/_sources/Releases/Releases-scipion-em-xmippTomo/index.rst.txt @@ -0,0 +1,41 @@ + +Releases scipion-em-xmippTomo +========================= +3.23.11 Nereus +-------------------------- + +- Protocols updated + - applyAlignmentTS + - extract_particlesstacks: Added angles from Tilt Series + - extract_subtomos: Keeping directions in extract subtomos + - project_subtomograms: Added angles from Tilt Series + - deep_misalignment_detection: Update deep misalignment detection with new version of subtomo extraction and fiducial size options + - subtraction_subtomo: Improved implementation with MPI and md convert + - cltomo: + - resolution_local_monotomo: Allowing odd-even associated to the full tomogram +- Protocls fixed + - extract_particlestacks: Dose fixes + - deep_misalignment_detection: Recover deleted methods + - dose_filter: Dose validation fixed + - score_coordinates: Test improvements and carbon score fixes +- More xmippTomo + - Fixed calculateRotationAngleAndShiftsFromTM + - Test refactoring + +3.23.07 - Morpheus +-------------------------- +- New protocols + - project_subtomograms (for obtaining sobtomogram projections) + - extract_particlestacks (extract from tilt series and SetOfTiltSeriesParticle) + - denoising_confidence + - extract_particlestacks + - deep_misalignment_detection (misalignment detection in tomographic reconstructions from high-contrast regions) + - peak_high_contrast (for detecting high contrast regions in tomographic reconstruction) +- Protocols updated + - project_top: Subtomo projector compatible with hdf stacks. Test fixed. Projections keep orientation, Ignore alignments in projection + - subtomo_map_back, score_coordinates: Mapback scales any reference to match the tomogram sampling + - subtomo_map_back: Mapback waits now when scheduled and not the reference is needed, works with 3d classes, works with "other tomograms" + - project_subtomograms: Parallelized protocol +- More xmipptomo + - Update requirements.txt + - Fix tests: protocol_extract_subtomos, monotomo, crop, resize, xmipptomo \ No newline at end of file diff --git a/_sources/Releases/Releases-xmipp-program/index.rst.txt b/_sources/Releases/Releases-xmipp-program/index.rst.txt new file mode 100644 index 0000000..e3e9965 --- /dev/null +++ b/_sources/Releases/Releases-xmipp-program/index.rst.txt @@ -0,0 +1,321 @@ +Releases xmipp program +========================= + +3.23.11 - `Nereus `__ +------------------------ + +Xmipp Programs +~~~~~~~~~~~~~~~ +- New programs + - local_volume_adjustment: This program modifies a volume in order to adjust its intensity locally to a reference volume + - subtomo_subtraction: New program with mpi version +- Programs updated + - tomo_extract_subtomogram: Accept target box size + - convert_from_pdb: Added cif support + - phantom_movies: Adding more options: circle and cross + - angular_neighbourhood: Modified to output the result in the best symmetry group + - batch_deep_misalignment: Detection: GPU option +- Programs fixed + - volume_from_pdb: Bug fix in dealing with orig=0, Detection of contrast inverted maps + - tomo_extract_particles: Stack fixes, dose fixes + - image_convert: Fixed issue when providing a metadata file as input + - volume_substraction: Change NaNs generated by a division between 0 by 0s. + +Installation and user guide +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- Disabled downloading 380MB file not required +- Clarifying the requirements +- More robust thread execution in the installator +- Fixed bug collecting versions +- Removed auto updater from libcifpp + +More Xmipp +~~~~~~~~~~~~~ +- Upgraded CUDA toolkit in DLTK 1.0 +- Fix PDB read: This fixes a bug where pdbs whose atom name start in position 12 (in base 0) +- CUDA 12.2 supported (not full tested) +- Fixed PDB reading for shorter PDBs +- Allow not compiling xmipp to debug changes in python scripts +- Xmipp will now be able to read any volume with any values of those fields correctly. +- Fixed pixel size not being properly stored +- Fixed MetaData to avoid dangling references +- Added compatibility for undefined axis sequences in MRC files +- Added option to write mirrors in angularDistance + + +3.23.07 - `Morpheus `__ +------------------------ + +Xmipp Programs +~~~~~~~~~~~~~ +- New programs: image_peak_high_contrast(for detecting high contrast regions in tomographic reconstruction) +- misaligment_detection (to detect misalignment in tomographic reconstructions from high-contrast regions) +- deep_global_assignment +- deep_center +- Programs updated +- xmipp_angular_distance: new features - tomo_extract_particles: new features +- subtract_projection: parallelization with mpi +- tomo_extract_subtomograms: allow downsampling of features +- angular_resolution_alignment: Detect misalignment with resolution +- Programs fixed +- align_volume_and_particles: Fixed error +- angular_project_library: Removed deterministic behaviour (mpi) +- volumen_subtraction: fixed bug - Deprecated programs (For more details `visit `__) +- classify_kmeans_2D - rotational_spectra - particle_boxsize + +Installation and user guide +~~~~~~~~~~~~~ +- New clearer, more intuitive and informative installer. It also creates a file to facilitate user support. +- Refactored the deep learning toolkit, more robust and new environment with updated tensorflow. +- Updated requirement. + +More Xmipp +~~~~~~~~~~~~~ + +- Added half precission suport to numpy +- Added the ability to read and write CIF files +- Modular design of winner filter +- Decoupling XmippTomo from XmippSPA +- Fix Zernike equation - Removed all occurrences of non base-class default destructors +- Improved MultidimArray performance +- Added support for half precision floating point numbers in MRCs +- Assign tiff to gain files - adding half maps labels + + +3.23.03 - `Kratos `__ +------------------------ + +Xmipp Programs +~~~~~~~~~~~~~ + +- New programs: tomo_confidence_map, tomo_extract_particlestacks, tomo_extract_subtomograms, tomo_tiltseries_dose_filter, psd_estimatator +- Deprecated programs (for more details visit the `wiki `_): + angular_distribution_show, apropos ctf_correct_idr, ctf_create_ctfdat , ctf_show , idr_xray_tomo , image_common_lines , metadata_convert_to_spider , metadata_selfile_create , mlf_refine_3d, ml_refine_3d, ml_tomo , mrc_create_metadata , pdb_construct_dictionary, pdb_restore_with_dictionary , reconstruct_admn , reconstruct_art_pseudo , resolution_ibw , resolution_ssnr , score_micrograph , reconstruct_fourier_starpu , tomo_align_tilt_series, tomo_align_dual_tilt_series, tomo_align_refinement, tomo_align_refinement, tomo_extract_subvolume, tomo_project_main, tomo_remove_fluctuations , tomo_align_tilt_series,transform_range_adjust , validation_tilt_pairs , volume_pca , volume_validate_pca , work_test , 6f4d983 , evaulate_coordinates , extract_subset , image_separate_objects , volume_enhance_contrast , volume_reslice , xray_import , xray_project , xray_psf_create , xray_reconstruct_art , gpu_correlation, gpu_utils, classify_significant, deepAlign. +- volume_from_pdb: fixing input pdb file being overwritten when ‘-centerPDB’ flag was set +- xmipp_phantom_movie: adding support for fixed step shift & gain and dark image generation +- CTF simulation allows astigmatism +- xmipp_metadata_utility: Now join operations with an empty set will return a new empty set (previously no output file was generated). +- xmipp_matrix_dimred: Program help improved. Exception is now thrown when the number of output dimensions is larger than the input dimensions +- xmipp_angular_distance: Added itemId column to the output + +Installation and user guide +~~~~~~~~~~~~~ +- Refactor and simplified Readme page. +- Updating CUDA version compatibility +- Updating gcc version availables +- Fixed Matlab installation +- Added missing array include to fix compilation error with g++12 +- Alert and not block compilation if gcc +- CUDA are not compatible +- Avoid compilation warnings +- Required pyworkflow==3.0.31 + +Others +~~~~~~~~~~~~~ +- Maintenance: Recovered python binding tests +- Maintenance: fixing dangling pointer in xmipp_error +- Maintenance: Cleaned includes in xmipp_image_base +- PSD estimation: templating function, improving performance +- Flag cleanDeprecate in the installation; clean all deprecated executables programs +- python binding: fixed bug when Numpy arrays created by slicing were badly interpretted - Removed “seed” library +- Fixed memory pinning CUDA bug - Fixed compilation errors on CUDA 9 + + +3.22.11 - `Iris `__ +------------------------ + +Xmipp Programs +~~~~~~~~~~~~~ +- Speeding up iterations in some xmipp programs (xmipp_ctf_group, xmipp_image_histogram, xmipp_mpi_angular_class_average, xmipp_angular_distance, xmipp_angular_estimate_tilt_axis, xmipp_ctf_create_ctfdat, xmipp_resolution_ssnr) +- New Zernike3D programs +- angular_project_library: Reported some error if there are no images in the range +- angular_discrete_assign.cpp: Removed memory leak and uninitialized values +- angular_distance: Fixing condition to avoid iteration behind the end of the MD in cases when input data have different sizes. Optimized performance +- Pdb_reduce_pseudoatoms: Produced pdb is one-based indexed - xmipp_micrograph_automatic_picking: Fixing memory leak +- subtract_projection: Fixed several bugs (improved results), added circular mask to avoid edge artifacts, added option to boost particles instead of subtract + +Installation and user guide +~~~~~~~~~~~~~ +- Various bug fixing +- More information about hdf5 library +- Updating CUDA +- GCC compatibility. Added CUDA 11.7 (not tested) +- Updating Readme + +Others +~~~~~~~~~~~~~ +- Performance optimization (metadata binding) +- Python binding: adding methods to directly set / get entire MD row +- g++ >= 8 required +- In viewers used pwutils +- The pdb data library now has all the right fields and should write the record type (“ATOM” or “HETATM”) correctly at the beginning of the line and the atomType (element) and charge (if applicable) correctly at the end of the line. +- Removal of anartifact of symmetrization related to the z pitch (symmetries.cpp) +- Using the same identical Deprecated param from pyworkflow. + +3.22.07 - `Helios `__ +------------------------ + +Scripts Xmipp +~~~~~~~~~~~~~ + +- xmipp_image_operate: taked into account non existing files +- angular_continuous_assign2: Bug fixed +- volume_consensus: Bug fixed +- ctf.h and angular_continuous_assign_2: Changes for local defocus estimation #578 + +Installation and user guide +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Version info printed at the end of the installation +- Removed empty folder with cleanBin command +- Clarifing linking to Scipion and removed a bug with the build link +- New flag (OPENCV_VERSION) in xmipp.config +- Updated Readme (explain OpenCV-CUDA support) + +Others +~~~~~~ + +- Validation server: Merged what remains +- Replaced sincos to sin and cos +- Handling of pointers in MPI programs +- “nullptr” used to denote the null pointer not “NULL” +- Check if nvidiaDriverVer is None + +3.22.04 - `Gaia `__ +---------------------- + +Installation and user guide +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Updated readme +- Updated hdf5 info troubleshoting +- Updated Standalone installation +- Updated Scons installation +- xmipp get_models: fixing the run and download path +- Updating xmipp links for Scipion on installation +- Removed fatal message in installation +- Reported error if happen on installation - runjob +- Ensuring that target directory for the libraries exists + +Protocols scipion-em-xmipp +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- protocol_core_analysis: New protocol +- protocol_compare_angles: Bug fix in compare angles under some conditions +- protocol_center_particles: protocol simplified (removed setofCoordinates as output) +- protocol_CTF_consensus: concurrency error fixed +- protocol_convert_pdb: remove size if deactivated +- protocol_resolution_deepres: binary masked not stored in Extra folder and avoiding memory problems on GPUs +- protocol_add_noise: fixes +- protocol_compare_reprojections: improve computation of residuals + tests + fix + formatting +- protocol_screen_deepConsensus: multiple fixes in batch processing, trainging and streaming mode +- protocol_shift_particles: apply transform is now optional + +Others +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +- New XMIPP logo +- subtract_projection: adding new flag + fix +- Add intersection size metadata (bindings/python) +- Fixed unitialized unique pointers (bindings/python) +- Bug fixing: Resolution directional and anisotropic filtering fixing the test +- Removed SonarCloud issues +- Replaced defines with constexpr +- Removing Unused funtion parameters +- Division by zero +- Memory management +- Removed field shadowing +- Destructors should not throw exceptions + +3.22.01 - Eris +---------------------- + +- Updating to C++17 +- Support newer versions of CUDA and gcc +- Zernike programs compatible with Cuda 8.x +- Fixed Sonar Cloud issues and bugs +- Matlab compilation Fixed +- Fixed importing pwem.metadata +- nma_alignment: Fixed arguments for the xmipp_angular_projection_matching invocation +- Fixed test fails: ResolutionSsnr, ReconstructArtMpi, ReconstructArt, MlfRefine3dMpi, MlfRefine3d, MlRefine3dMpi, MlRefine3d, xmipp_test_pocs_main & volume_subtraction +- xmipp_micrograph_automatic_picking: Fixed tests, avoid possible memory corruption +- resolution_pdb_bfactor: bug fixed - error with multiple chains +- FlexAlign: Fixed crash when binning > 1 +- Bug fixed and allowed controlling high sampling rate +- Volume consensus: Fixed number of levels in the wavelet transform +- Compilation: Fixed compilation of starpu programs +- xmipp_transform_dimred: Fixed output metadata in append mode, adding MDL_DIMRED label +- Config file generation: Fixed config version detection outside of the git repo, refactored check_CUDA and managed gcc compiler if it is installed out of /usr/bin/, check and exit if xmipp.conf does not exist +- Compilation: Fixed detection of the last commit changed the config script +- Resolution_fso: Bingham test implemented +- Opencv not detected. Added include to user/include/opencv4 folder on config file +- Compilation: asking whether to continue with compilation even though the config file is outdated +- XMIPP install: Linked libsvm to scipion +- Installation: Referenced ‘global’ xmipp.conf instead of using local copy of it +- Multiple MPI programs: replaced CREATE_MPI_METADATA_PROGRAM macro by templated class +- python_constants: add defocus labels +- Metadata: added new nmaEigenval label +- Python binding: added new function - correlationAfterAlignment, MDL_RESOLUTION_ANISOTROPY, MDL_RESOLUTION_ANISOTROPY +- Matlab binding dependencies: set XMIPP as a hard dependency +- Projections subtraction: new program +- FFTwT: added mutex for plan handling +- Multiple programs: Added a common implementation of the rerun +- Phantom_create: update info link +- Multiple programs: Added a common implementation of the rerun +- Transform Geometry: save new shifted coordinates in option “shift to” + enterOfMass to python binding +- Readme info: add virtual machine info +- Removal of the SVM from inside the XMIPP repository and downloading it as an external dependence +- Solved a configuration problem with CUDA +- ml_tomo: Using .mrc instead of .vol ; volume_align: Addded wrapping during alignment + +3.21.06 - Caerus +------------------------ + +- CUDA-11 support +- New protocol: Deep align +- ChimeraX support +- Improvements of streaming process +- Several performance optimizations +- Build time optimization +- Multiple bug fixes +- Improved documentation + +3.20.07 - Boreas +------------------------ + +- Fast CTF estimation +- CTF includes phase shifts now +- Selection of alpha helices or beta sheets from a PDB (xmipp_pdb_select) +- Centering a PDB (xmipp_pdb_center) +- New Protocol: MicrographCleaner is a new algorithm that removes coordinates picked from carbon edges, aggregations, ice crystals and other contaminations +- New functionality: The protocol compare reprojections can now compute the residuals after alignment +- New protocol: Split frames divide input movies into odd and even movies so that they can be processed independently +- New protocol: Continuous heterogeneity analysis using spherical harmonics (not ready to be used) +- Bug fixing when some micrograph has no coordinates in the consensus-picking. +- New functionalities: Different architectures and training modes +- Normal Mode Analysis protocols have been moved to the plugin ContinuousFlex +- Fixing MPI version of the Fourier Reconstruction +- New protocol: local CTF integration and consensus protocol for local ctf (also the viewers) +- Local CTF analysis tools: Not yet ready for general public +- New functionallity: Introducing the posibility of automatic estimation of the gain orientation. +- Bugs fixings regarding stability on streaming processing +- Support of heterogeneous movie sets +- New protocol: Clustering of subtomogram coordinates into connected components that can be processed independently +- New Protocol: Removing duplicated coordinates +- New protocol: Subtomograms can be projected in several ways to 2D images so that 2D clustering tools can be used +- New protocol: Regions of Interest can be defined in tomograms (e.g., membranes) +- Bug fixing in mask3d protocol +- Bug fix: in helical search symmetry protocol +- Enhanced precision of the FlexAlign program +- Now, deepLearningToolkit is under its own conda environment +- Multiple protocols accelerated using GPU +- New functionality: Xmipp CTF estimation can now take a previous defocus and do not change it +- New functionallity: CTF-consensus is able to take the primary main values or an average of the two. +- New functionallity: CTF-consensus is able to append metadata from the secondary input +- New functionality: Xmipp Highres can now work with non-phase flipped images +- New functionality: Xmipp Preprocess particles can now phase flip the images +- New protocol: Tool to evaluate the quality of a map-model fitting +- Allowing multi-GPU processing using FlexAlign +- Improvement in monores and localdeblur +- Randomize phases also available for images +- Change the plugin to the new Scipion structure +- Migrating the code to python3 \ No newline at end of file diff --git a/_sources/Utils/ConfigurationF/index.rst.txt b/_sources/Utils/ConfigurationF/index.rst.txt new file mode 100644 index 0000000..3eafce7 --- /dev/null +++ b/_sources/Utils/ConfigurationF/index.rst.txt @@ -0,0 +1,302 @@ +Configuration file +=============== +Reviewed for version 20.07 + +The main command ``./xmipp`` will try to make the properly configuration +according to your system, generating a config file named ``xmipp.conf``. +Afterwards, XMIPP will be built. You can run ``./xmipp config`` to only +set the configuration. + +- If your Xmipp is intended to run under **Scipion**, you should run + ``scipion3 run`` as a wrapper (i.e. ``scipion3 run ./xmipp`` or + ``scipion3 run ./xmipp config``). However, Scipion’s installation + includes the Xmipp installation, by default. + Check `this (for + non-developers) `__ + or `this (for + developers) `__ + to learn how to trigger a compilation through Scipion. + +The Xmipp configuration sets mainly six compiling blocks: +`C++ <#c-configuration>`__, `MPI <#mpi-configuration>`__, +`Java <#java-configuration>`__, `Cuda <#cuda-configuration>`__ (optional +but recommended), `Matlab <#matlab-configuration>`__ (optional), +`OpenCV <#opencv-configuration>`__ (optional, not recommended). + +The idea is always the same, Xmipp will try to find compilers in the +PATH (similar to the ``which`` command) and will take the libraries and +headers from them. If some compiler is not found in the PATH, Xmipp will +look for the default paths on the majority of the Linux distros. You can +bypass this automatic searching by means of manually setting the +environment variables described in the sections below. + +Xmipp asks users if agree on using automatically found paths in the +system. Include the ``noAsk`` option to the config command in order to +launch an unattended configuration. + +- If your Xmipp is intended to run under **Scipion**, **the environment + variables described in sections below can be added in the + ``scipion3/config/scipion.conf``** before launching + ``scipion3 installb xmippSrc`` (or your compilation command). + +- Note that ``scipion3 installb xmippSrc`` (or other Xmipp compilation + commands in Scipion) regenerates the ``xmipp.conf``. Therefore, **if + you want to manually set some variables in the ``xmipp.conf``, + ``export XMIPP_NOCONFIG=True`` or include ``XMIPP_NOCONFIG=True`` in + ``scipion3/config/scipion.conf``** to skip that config regeneration. + +C++ configuration +----------------- + +The default C compiler is ``gcc`` while ``g++`` compiler is for C++ code +and C++ library links. Then Xmipp will ensure that they are visible +prior to assign them to the configuration. You can set any other +compilers by setting the ``CC``, ``CXX`` and ``LINKERFORPROGRAMS`` +variables. + +Find below a list of tuneable variables regarding to C and C++ +compilation. Keep in mind that they are automatically set by Xmipp. +However, you can bypass this automatic setting by exporting them +(e.g. ``export CXX=icc``) prior to launch the command or, even, you can +update the resulting ``xmipp.conf`` file, once created. + +| · **CC**: C compiler. gcc`` by default. +| · **CCFLAGS**: Flags to add during C compilations. ``-std=c99`` by + default + +| · CXX C++ compiler. ``g++`` by default. +| · **CXXFLAGS**: Flags to add during C++ compilations. + ``-mtune=native -march=native -std=c++11 -O3`` by default. +| · **INCDIRFLAGS**: Flags to add headers directories. See note + below. +| · **LIBDIRFLAGS**: Flags to add libraries directories. See note + below. + +| · **LINKERFORPROGRAMS**: C++ linker. ``g++`` by default. +| · **LINKFLAGS**: Flags to add while linking. Empty by default. + +| · **PYTHON_LIB**: Python library to make the python binding. Xmipp + automatically discovers the current python (e.g. ``python3.5m). +| · **PYTHONINCFLAGS**: Flags to add during the binding compilation. + Usually to include the python header and the numpy header + (e.g. ``-I/usr/include/python3.5m -I/home/david/scipion3/.scipion3env/lib/python3.5/site-packages/numpy/core/include``) + +- Note regarding **INCDIRFLAGS** and **LIBDIRFLAGS** + + Xmipp adds the ``include`` and ``lib`` from the current environ + (using the python function ``sysconfig.get_path('data')``) in order + to take system or environ headers and libs. + + In addition, if ``hdf5`` is not found there, **Xmipp will look for it + in ``/usr/lib`` and ``/usr/include/hdf5/serial``**. If found it, the + paths are appended to the ``INCDIRFLAGS`` and ``LIBDIRFLAGS``. If not + found and a specific conda environ is present, **Xmipp will try to + install hdf5 through conda** under the current conda-environ. + + Moreover, if ``fftw3`` or ``tiff`` libraries are not found and a + specific conda environ is present, **Xmipp will try to install them + through conda** under the current conda-environ. + +- Note that **``CXXFLAGS``** is optimizing the compilation to the + architecture found during in compilation time. This will make Xmipp + incompatible to be run under another architecture. + + To make more flexible this optimization in order to make Xmipp + compatible on both, Intel and AMD cores, please consider to + + :: + + export CXXFLAGS="-mfma -mavx2 -m3dnow -fomit-frame-pointer -std=c++11 -O3" + + or edit the ``xmipp.conf`` file in such a way, before compiling + Xmipp. + +MPI configuration +----------------- + +The default MPI compiler for C is ``mpicc`` while ``mpicxx`` is for C++ +code and C++ library links. Then Xmipp will ensure that they are visible +prior to assign them to the configuration. You can set any other +compilers by setting the ``MPI_CC``, ``MPI_CXX`` and +``MPI_LINKERFORPROGRAMS`` variables. + +Additionally, ``mpirun`` is the default program to run mpi programs. If +not found, ``mpiexec`` becomes an option. Then, Xmipp will ensure that +they are visible prior to assign them to the configuration (any other +mpi executor can be used by setting the ``MPI_RUN`` variable). You can +set a given MPI toolkit by setting ``MPI_BINDIR``, ``MPI_LIBDIR`` and +``MPI_INCLUDE`` (see `Scipion-config +doc `__). + +If ``mpicc``, ``mpicxx`` or ``mpirun`` are not found following +instructions above, Xmipp looks for them in the Linux default paths: +``/usr/lib/openmpi/bin`` or ``/usr/lib64/openmpi/bin``. + +Find below a list of tuneable variables regarding to MPI compilations. +Keep in mind that they are automatically set by Xmipp. However, you can +bypass this automatic setting by exporting them +(e.g. ``export MPI_CXX=mpi2-intel``) prior to launch the command or, +even, you can update the resulting ``xmipp.conf`` file, once created. + +| · **MPI_RUN**: Executor to run MPI programs. ``mpirun`` by + default. +| · **MPI_CC**: MPI compiler for C code. ``mpicc`` by default. +| · **MPI_CXX**: MPI compiler for C++ code. ``mpicxx`` by default. +| · **MPI_CXXFLAGS**: Flags to add during the MPI compilation. Empty + by default. +| · **MPI_LINKERFORPROGRAMS**: MPI compiler to link C++ libraries. + ``mpicxx`` by default. +| · **MPI_LINKFLAGS**: Flags to add during the MPI linking. Empty by + default. + +Java configuration +------------------ + +Xmipp ensures that ``javac`` command is visible and takes its location +in order to get the ``jar`` and ``java`` programs. If ``javac`` is not +present in the PATH, Xmipp look for it at ``/usr/lib/jvm/java-*/bin``. +If still not found and a specific conda environ is present, **Xmipp will +try to install ``openjdk`` through conda** under that conda-environ. + +Find below a list of tuneable variables regarding to Java compilations. +Keep in mind that they are automatically set by Xmipp. However, you can +bypass this automatic setting by exporting them +(e.g. ``export JAVA_HOME=/my/own/java``) prior to launch the command or, +even, you can update the resulting ``xmipp.conf`` file, once created. + +| · **JAVA_HOME**: Path where java is loacated. + ``dirname $(dirname $(realpath $(which javac)))`` by default + (``jre/bin`` is pull out if present). +| · **JAVA_BINDIR**: Path where ``jar`` and ``javac`` are located. + ``%(JAVA_HOME)s/bin`` by default. +| · **JAVAC**: JavaC compiler. ``%(JAVA_BIN)s/javac`` by default. +| · **JAR**: Jar compiler. ``%(JAVA_BIN)s/jar`` by default. +| · **JNI_CPPPATH**: Include paths during the Java compilation. + ``%(JAVA_HOME)s/include:%(JAVA_HOME)s/include/linux`` by default. + +Cuda configuration +------------------ + +Cuda compilation is optional in Xmipp, but strongly recommended. Xmipp +will find the ``nvcc`` compiler in the PATH and will take its +corresponding cuda toolkit. If no ``nvcc`` is found in the PATH, Xmipp +looks for it in the default Linux locations: ``/usr/local/cuda*/bin``. +In addition, following the Scipion syntax, you can manually set a +certain path where to find the ``nvcc`` by +``export CUDA_BIN=/my/own/cuda/bin`` or even +``export XMIPP_CUDA_BIN=/my/own/cuda/bin`` (or include it in the +``scipion3/config/scipion.conf`` if you are under Scipion structure). + +Check below the preference list while looking for a ``nvcc`` compiler: + +1. in ``XMIPP_CUDA_BIN``. +2. in ``CUDA_BIN`` +3. in ``PATH`` +4. in ``/usr/local/cuda/bin`` +5. in ``/usr/local/cuda*/bin`` (in this case, the glob-expanding order + will be defined by the OS) + +At the end, Xmipp will take as ``CUDA_HOME`` the directory (resolving +any eventual linking) of the ``nvcc`` found. If it is found using +assumption 4. or 5., Xmipp asks users if they agree (use ``noAsk`` +option in the command launching for an unattended behavior). + +Find below a list of tuneable variables regarding to CUDA compilations. +Keep in mind that they are automatically set by Xmipp according to that +described above. However, you can bypass this automatic setting by +exporting them (e.g. ``export NVCC=/my/own/cuda/bin/nvcc``) prior to +launch the command or, even, you can update the resulting ``xmipp.conf`` +file, once created. + +| · **CUDA**: Main flag to enable/disable CUDA compilation, set to + ``True``/``False`` accordingly. By default, it is set to ``True`` if a + ``nvcc`` is found. +| · **NVCC**: Path to the Cuda compiler (it can be just the command + if it is in the PATH). ``nvcc`` (or the real path to it) by default. +| · **CXX_CUDA**: C++ compiler to compile Cuda code. Notice that + Cuda-8.0 is incompatible with ``g++>5``, then this can be set to + ``g++-5``, whereas the main C++ compiler still ``g++-8``. By default, + it is ``g++`` (if compatible). +| · **NVCC_CXXFLAGS**: Cuda compilation flags. + ``--x cu -D_FORCE_INLINES -Xcompiler -fPIC -ccbin %(CXX_CUDA)s -std=c++11 --expt-extended-lambda -gencode=arch=compute_30,code=compute_30 -gencode=arch=compute_35,code=compute_35 -gencode=arch=compute_50,code=compute_50 -gencode=arch=compute_60,code=compute_60 -gencode=arch=compute_61,code=compute_61``, + by default. +| · **NVCC_LINKFLAGS**: Cuda linking flags. + ``-L/usr/local/cuda-X.Y/targets/x86_64-linux/lib -L/usr/local/cuda-X.Y/targets/x86_64-linux/lib/stubs`` + by default. + +Notice that ``NVCC_LINKFLAGS`` contain the libraries according to the +``nvcc`` found (in the default example there is ``cuda-X.Y`` indicating +a certain cuda version). That libraries are set by looking for the +``libcudart.so`` lib following the preference list below: + +1. in ``$CUDA_HOME/lib`` +2. in ``$CUDA_HOME/lib64`` +3. in ``$CUDA_HOME/targets/x86_64-linux/lib`` +4. in ``$CUDA_HOME/lib/x86_64-linux-gnu`` +5. in ``/usr/lib`` +6. in ``/usr/lib64`` +7. in ``/usr/targets/x86_64-linux/lib`` +8. in ``/usr/lib/x86_64-linux-gnu`` + +If it is found using assumptions from 5. to 8., Xmipp asks users if they +agree (use ``noAsk`` option in the command launching for an unattended +behavior). + +Matlab configuration +-------------------- + +Some programs in Xmipp are coded in Matlab and they needs to be compiled +with. (*TODO: list those programs*) + +Find below a list of tuneable variables regarding to Matlab +compilations. Keep in mind that they are automatically set by Xmipp. +However, you can bypass this automatic setting by exporting them +(e.g. ``export MATLAB_DIR=/my/own/matlab``) prior to launch the command +or, even, you can update the resulting ``xmipp.conf`` file, once +created. + +| · **MATLAB**: Main flag to enable/disable Matlab compilation, set + to ``True``/``False`` accordingly. By default is set to ``True`` if a + ``matlab`` is found in the PATH. +| · **MATLAB_DIR**: Matlab home directory where ``bin/mex`` is + expected to compile Matlab code. + ``dirname $(dirname $(which matlab))`` by default. + +OpenCV configuration +-------------------- + +A few programs in Xmipp are coded using the OpenCV library and they +needs to be compiled against it. (*TODO: list those programs*) + +Find below a list of tuneable variables regarding to OpenCV +compilations. Keep in mind that they are automatically set by Xmipp. +However, you can bypass this automatic setting by exporting them +(e.g. ``export OPENCV=False``) prior to launch the command or, even, you +can update the resulting ``xmipp.conf`` file, once created. + +| · **OPENCV**: Main flag to enable/disable OpenCV compilation, set + to ``True``/``False`` accordingly. By default, it is set to ``True`` + if a basic code including the ``opencv2/core/core.hpp`` header + compiles. +| · **OPENCV3**: Flag to indicate if openCV-v3 is present, set to + ``True``/``False`` accordingly. By default, it is set to ``True`` if + the ``CV_MAJOR_VERSION >= 3`` in the ``opencv2/core/version.hpp``. +| · **OPENCVSUPPORTSCUDA**: Flag to enable/disable OpenCV + compilation against CUDA, set to ``True``/``False`` accordingly. By + default, it is set to ``True`` if a basic code including the + ``cudaoptflow.hpp`` header compiles (if OpenCV-v3 is used, the + ``cuda.hpp`` is used to check it). + +Others +------ + +| · **VERIFIED**: Firstly, it is set to ``False`` and, then + ``./xmipp check_config`` swaps it to ``True`` (if checks passes). This + prevents to check the configuration twice. +| · **CONFIG_VERSION**: Config generator’s (``xmipp`` script) hash + version. An error is raised if trying to compile Xmipp with a + different hash than the current in the github repository. +| · **USE_DL**: Flag to download deep learning models during the + compilation process. ``False`` by default. +| · **DEBUG**: Flag to compile the code under the debug mode. + ``False`` by default. \ No newline at end of file diff --git a/_sources/Utils/Conventions/index.rst.txt b/_sources/Utils/Conventions/index.rst.txt new file mode 100644 index 0000000..c725cd2 --- /dev/null +++ b/_sources/Utils/Conventions/index.rst.txt @@ -0,0 +1,501 @@ +Conventions +=============== +Projections with Euler Angles +------------------------------ +The problem addressed here is given any set of Euler angles to know what is the projection that Xmipp (and Spider) will associate to them. The Euler angles are defined as follow: + ++-------------------------+-----------------+-------------------+ +| | | | ++=========================+=================+===================+ +| Rotational or azimuthal | First rotation | Around Z axis | ++-------------------------+-----------------+-------------------+ +| Tilting | Second rotation | Around new Y axis | ++-------------------------+-----------------+-------------------+ +| psi | Second rotation | Around new Z axis | ++-------------------------+-----------------+-------------------+ + + + +All angles are measured using the left hand thumb rule (when aligning the left hand thumb with the rotation axis, positive angles are measured according to the direction of the rest of the fingers). + +There is an approach which consists of rotating the volume according to the Euler angles and then projecting from Z-axis. An alternative one, and the one I have followed and found more practical is to move the view point (or better said the projection plane) according to the Euler Angles. Both ways will be explained here. + +First, the way Xmipp define the coordinate axes is like this. + +.. figure:: ../../../_static/images/Euler/Euler1.gif + :alt: Euler1 + :width: 200 + :align: center + + +Moving the projection plane +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The idea is to define a projection plane and move it around the volume until we get the desired point of view. It would seem that we had to make the rotations in the same order as they are defined in the Euler angles but it is not totally true. We can interchange tilt and rotation to make an easiest method to get manually the projection. I will describe a chain of steps in order to get the projection. + +**Getting Started** + +1)Construct a projection plane: take a little piece of paper and mark on it the image coordinate system will define the orientation of the projection. We will look the projection in the orientation just as it is shown. + +.. figure:: ../../../_static/images/Euler/Euler2.gif + :alt: Euler2 + :width: 200 + :align: center + +2) Our point of view is defined just now for a little point on the bottom of the sphere, while the projection plane is just on the opposite side. + +.. figure:: ../../../_static/images/Euler/Euler3.gif + :alt: Euler3 + :width: 200 + :align: center + +**We begin now to read eulerian angles** +3) TILT: +move the point of view as many degrees as necessary towards right (positive tilting angles) or left (negative tilting angles). Projection plane must move as if the system point_of_view-plane_of_projection were a whole.For example, 90º of tilting would be + +.. figure:: ../../../_static/images/Euler/Euler4.gif + :alt: Euler4 + :width: 200 + :align: center +4) ROTATIONAL (AZIMUTHAL) ANGLE: +move the point of view towards you (positive azimuthal angles) or away from you (negative azimuthal angles) (Notice that this directions are simplifications for when tilting angles are positive, you must keep in mind the direction of turn and not the description of towards or away from you. If tilt angle is negative this directions are reversed in respect to you but not in the direction of turn). For example from the above situation of tilt=90, now let's take rotational=90. The new situation would be + +.. figure:: ../../../_static/images/Euler/Euler5.gif + :alt: Euler5 + :width: 200 + :align: center +5) PSI: +for taking psi into account we must turn the projection plane together with the point of view. Looking from the point of view positive psi angles turns counterclockwise. For example, psi=90, would give, + +.. figure:: ../../../_static/images/Euler/euler6.gif + :alt: Euler6 + :width: 200 + :align: center + +**PROJECTING** +Now we have to project the volume on the projection plane. As an example I have defined a volume which has got a sphere along y-axis, a larger ellipsoid along z-axis and a cylinder along x-axis as you can see in the next figure. If we project for (tilt=90, rot=90, psi=90) we would obtain the following by direct projection + +.. figure:: ../../../_static/images/Euler/Euler7.gif + :alt: Euler7 + :width: 200 + :align: center + +.. figure:: ../../../_static/images/Euler/Euler8.gif + :alt: Euler8 + :width: 200 + :align: center + + + +But as we know that our projection plane always has got its reference with X axis facing to the right and the Y axis looking down, we should rotate the projection obtained until it is well-referenced + +.. figure:: ../../../_static/images/Euler/Euler9.gif + :alt: Euler9 + :width: 200 + :align: center + +.. figure:: ../../../_static/images/Euler/Euler10.gif + :alt: Euler10 + :width: 200 + :align: center + +In the las figures we can check the consistency of this reasoning. The projection with tilt=90, rot=90, psi=90 has been taken with SPIDER. As we can see the results are identical. + +**PROJECTING in a more Euler fashion** + +So far we have devised a method to manually compute projections using a piece of paper and a fixed phantom. But this is not the way really they are taken. In this part we will move the phantom and letting the projection plane fixed. We start again from the same initial point as before. Now we will move the internal reference axes in the reverse order (click here for further information for why this is like that). + +Starting Point: + +.. figure:: ../../../_static/images/Euler/Euler11.gif + :alt: Euler11 + :width: 200 + :align: center + +3) PSI ANGLE + +The rotational angle is the first Euler angle to measure, around Z. It is a left hand angle, so if the left hand thumb is aligned with Z then positive angles are measured in the direction of the rest of the fingers. We will develop the same example as before, so the new internal reference axes are + +.. figure:: ../../../_static/images/Euler/Euler12.gif + :alt: Euler12 + :width: 200 + :align: center + +4) TILTING ANGLE + +The tilting angle is a left handed turn around Y, but the new Y!!!. Applying tilt=90 in our example we get + +.. figure:: ../../../_static/images/Euler/Euler13.gif + :alt: Euler13 + :width: 200 + :align: center + +5) ROTATIONAL ANGLE + +Finally the third angle is again a left handed turn around Z, again the new one!!!. Using rot=90 we finally get + +.. figure:: ../../../_static/images/Euler/Euler14.gif + :alt: Euler14 + :width: 200 + :align: center + + +**FACTS ABOUT THE EULER MATRIX and SPIDER** + + These projections are exactly the same as the ones provided by Spider using the same angles. + The Euler matrix shown in Euler_angles2matrix(rot,tilt,psi,A) is obtained by RotZ(-psi)*RotY(tilt)*RotZ(-rot) + + +More Euler Angles +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +“Euler angles are a mean of representing the spatial orientation of any +system of coordinates of the space as a composition of three rotations +from a reference system of coordinates.” + +- the first rotation is denoted by phi and is around the z axis +- the second rotation is called theta and is around the new y-axis. +- the third rotation is denoted by psi and is around the new z axis + +The three rotations may be expressed as a single 3x3 matrix called Euler +matrix + +.. raw:: html + +
+   r11 = cos(psi)cos(theta)cos(phi) - sin(psi)sin(phi)
+   r12 = cos(psi)cos(theta)sin(phi) + sin(psi)cos(phi)
+   r13 = -cos(psi)*sin(theta)
+
+   r21 = -sin(psi)cos(theta)cos(phi) - cos(psi)sin(phi)
+   r22 = -sin(psi)cos(theta)sin(phi) + cos(psi)cos(phi)
+   r23 = sin(psi)*sin(theta)
+
+   r31 = sin(theta)cos(phi)
+   r32 = sin(theta)sin(phi)
+   r33 = cos(theta)
+
+   where the first index refers to rows and the second to columns 
+ +Apositive rotation implies a clockwise rotation of the OBJECT or a +anti-clockwise rotation of the system of coordinates + +Euler angles in Xmipp complies with the 3DEM standard (see +http://www.ebi.ac.uk/pdbe/docs/3dem/test_image/3DEM_compliance for +details) + +Filenames +------------------------------ + +In general, Xmipp can manage any Filename you can think of. However, +there are some ideas that could help you to organize your data, and +which might tell you more about the file only by its name. We could +divide files in several classes: + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + + + +.. raw:: html + +
+ +Data type + +.. raw:: html + + + +Suggested extension + +.. raw:: html + + + +Suggested filenames + +.. raw:: html + +
+ +Images + +.. raw:: html + + + +.xmp + +.. raw:: html + + + +g1ta000001.xmp + +.. raw:: html + +
+ +Volumes + +.. raw:: html + + + +.vol or .xmp + +.. raw:: html + + + +art000001.vol, wbp000001.vol, sirt000001.vol + +.. raw:: html + +
+ +Selection Files + +.. raw:: html + + + +.sel + +.. raw:: html + + + +g1t.sel + +.. raw:: html + +
+ +Document Files + +.. raw:: html + + + +.doc + +.. raw:: html + + + +angles.doc + +.. raw:: html + +
+ +The class [[FileName]] assumes a filename structure as in +g1ta000001.xmp, ie, a filename root (g1ta), a number (000001) and an +extension (xmp) (“.”); although it can also manage names as g1ta00001 or +g1ta00001.xmp.bak. To mantain compatibility with Spider it is required +that image numbers start at 1, and if possible that all images have got +correlative numbers, but these last conditions are not compulsory within +Xmipp, it’s just for compatibility with Spider. + +Notice also that Spider requires all data files (volumes, images, +document files, …) to have the same extension. You might prefer this +other convention if you don’t want to make copies of the files, or to +have to rename the files before entering in Spider. + +Logical access +------------------------------ + + +The basic multidimensional classes implemented in this library admit two +kinds of access: physical and logical. The physical positions are those +indexes of the pixel inside the C matrix. Just an example, suppose we +have a 65x65 image, then the physical indexes range from 0 to 64, being +I[0][0] (if this could be written) the first pixel stored. However, we +might be interested in writing procedures in a more mathematical fashion +trying to access negative indexes (or even fractional onesSee +[[ImageOver]]) This conception is very useful when you want to represent +a discretized plane whose origin is at the center of the image, for +instance. So, you can express in a simpler way your algorithms without +having to make a by hand translation from the logical positions to the +physical ones. + +Suppose now that we are interested to have the logical origin at the +center of the image 65x65, ie, at physical position [32][32]. This would +mean that the physical position [0][0] is now at logical position +(-32,-32), and the logical indexes range now from -32 to 32. + +This logical index defintion is done by means of the starting indexes of +matrices (see matrix2D) where you can define which logical position is +occupying the first physical pixel, ie, + +.. raw:: html + +
+   I().startingY()`-32; 
+   I().startingX()`-32; 
+   
+ +From now on you can start to access to logical positions even with +negative indexes. The usual way of establishing loops inside this +logical images is by using the starting and finishing information of its +axes + +.. raw:: html + +
  
+       Image I(65,65);
+       I().init_random();
+       float sum=0;
+       for (int i=STARTINGY(I()); i<=FINISHINGY(I()); i++)
+           for (int j=STARTINGX(I()); j<=FINISHINGX(I()); j++) {
+                  sum += I(i,j);
+               // sum += IMGPIXEL(i,j);
+           }
+   
+ +Although the previous example has been used using the class Image, the +logical access rely on the classes matrix1D, matrix2D, and matrix3D, and +all the concepts explained for images are extensible for vectors and +volumes. The related functions are STARTINGX, STARTINGY, STARTINGZ, +FINISHINGX, FINISHINGY, FINISHINGZ, IMGPIXEL, DIRECT_IMGPIXEL, VOLVOXEL, +DIRECT_VOLVOXEL, VEC_ELEM, MAT_ELEM, VOL_ELEM, DIRECT_VEC_ELEM, +DIRECT_MAT_ELEM, DIRECT_VOL_ELEM + +Pay attention to the index order when pointing to a pixel, first you +have to give the most outer coordinate (which is the less varying one in +the actual implementation), and then increase the coordinate. For +volumes the usual way of making a loop is + +.. raw:: html + +
+       Volume V(65,65,65);
+       V().init_random();
+       float sum=0;
+       for (int k=STARTINGZ(V()); k<=FINISHINGZ(V()); k++)
+          for (int i=STARTINGY(I()); i<=FINISHINGY(I()); i++)
+              for (int j=STARTINGX(I()); j<=FINISHINGX(I()); j++) {
+                  sum +=V(k,i,j);
+           }
+   
+ +Notice that if you don’t modify the origin of the multidimensional array +then the physical and logical accesses are the same. + +Image center +------------------------------ + + +There is a special case for the logical access when the origin is set +just at the center of the image, volume or vector. There are several +definitions of center of the image, the one used here is the physical +position ((int)ydim/2, (int)xdim/2). This is the same convention used in +Spider and has been chosen to mantain compatibility with that package. +Remember that in C (int) takes the integer part of the number, for +example, for 2.3 and 2.8 the integer part is 2, while for -2.3 and -2.8 +the integer part is -2. + +This means that for images with an even dimension, the center will be +“displaced” in that direction. Let’s have a look on the following two +diagrams of cell indexes. diff --git a/_sources/Utils/Deprecated-programs/index.rst.txt b/_sources/Utils/Deprecated-programs/index.rst.txt new file mode 100644 index 0000000..8e15efc --- /dev/null +++ b/_sources/Utils/Deprecated-programs/index.rst.txt @@ -0,0 +1,65 @@ +Programs deprecated +===================== + +Deprecating programs +----------------------- + +We have a "legacy" folder with programs and code that is outdated. Some of the reasons we did this are uninteresting code, programs that do not have a protocol and are not used, and programs that are not used and are difficult to maintain. You can `visit the issue `_ with more information and the list of deprecated programs and protocols can be found `here `_. + +We managed to speed up the installation time by 25%, and we were also able to reduce the lines of code to maintain and the number of code smells that were reported by `SonarCloud `_. + +However, it is possible to recover a program if anyone needs it. If you are an external user, please contact us (opening an issue is a good way, `see here `_). If you are part of the Xmipp team: Each deprecated program has an associated `commit `_. Visit it and review all the changes the program needs to be recovered. Here are some clues: + +- Go to the legacy folder and +- Search in the applications/programs folder for the folder of your program. +- Search in the libraries folder for the script of your program. +- Most of the deprecated programs had a test; go to the commit and search in tests_programs_xmipp.py for the test of your program. +- The last step is to remove the program that has been recovered from this list (see listDeprecatedFiles() in utils.py). + +List of deprecated programs +--------------------------- + +- `angular_distribution_show `_ +- `apropos `_ +- `classify_significant `_ +- `ctf_correct_idr `_ +- `ctf_create_ctfdat `_ +- `ctf_show `_ +- `DeepAlign `_ +- `idr_xray_tomo `_ +- `image_common_lines `_ +- `metadata_convert_to_spider `_ +- `metadata_selfile_create `_ +- `mlf_refine_3d, ml_refine_3d, ml_tomo `_ +- `mrc_create_metadata `_ +- `pdb_construct_dictionary, pdb_restore_with_dictionary `_ +- `reconstruct_admn `_ +- `reconstruct_art_pseudo `_ +- `resolution_ibw `_ +- `resolution_ssnr `_ +- `score_micrograph `_ +- `reconstruct_fourier_starpu `_ +- `tomo_align_tilt_series, tomo_align_dual_tilt_series, tomo_align_refinement, tomo_align_refinement, tomo_extract_subvolume, tomo_project_main, tomo_remove_fluctuations `_ +- tomo_align_tilt +- `deep_denoissing `_ + +List of deprecated protocols +----------------------------- +- mltomo +- movie_average +- subtract_projection +- `deep_align `_ +- `reconstruct_heterogeneous `_ +- `metaprotocol_create_output `_ +- `metaprotocol_discrete_heterogeneity_scheduler `_ +- `apply_deformation_zernike3d `_ +- `classify_kmeans2d `_ +- `kmeans_clustering `_ +- `rotational_spectra `_ +- `particle_boxSize `_ +- `protocol_split_volume_hierarchical_cluster `_ +- `deep_denoissing `_ +- `metaprotocol_create_subset `_ +- `metaprotocol_golden_highres `_ +- `solid_angle `_ +- `split_volume `_ diff --git a/_sources/Utils/xmippStructure/index.rst.txt b/_sources/Utils/xmippStructure/index.rst.txt new file mode 100644 index 0000000..cbb5e3b --- /dev/null +++ b/_sources/Utils/xmippStructure/index.rst.txt @@ -0,0 +1,387 @@ +Xmipp structure +============ + +XMIPP software is split in three repositories (XmippCore, XmippViz and +Xmipp) plus the repository regarding to the Scipion’s plugin +(scipion-em-xmipp). All this four repositories are in `I2PC +gitHub `__. + +- **scipion-em-xmipp**: It is the Scipion’s plugin. Protocol + (wrappers), viewers, tests… are there. All Xmipp regarding Scipion is + there. +- **xmipp**: EM-reconstraction methods. Usually wrote in C++. +- **xmippCore**: Low-level image-processing and EM-images definitions. + In addition, metadata_labels, metadata and data are there. +- **xmippViz**: Basically ShowJ, coordinates viewer and Xmipp Picker. + Java code. + +We call ``xmipp-bundle`` to the folder that contains the four +repositories listed above in the following structure. + +:: + + xmipp-bundle # This is the https://github.com/I2PC/xmipp repository + ├── CHANGELOG.md + ├── LICENSE + ├── README.md + │ + ├── xmipp # Main script + ├── xmipp.conf # Config file + │ + ├── scripts + │   └── (...) + ├── sonar-project.properties + │ + ├── src # Sources directory + │   ├── scipion-em-xmipp # This is the https://github.com/I2PC/scipion-em-xmipp repository + │   │   └── (...) + │   ├── xmipp + │   │   └── (...) + │   ├── xmippCore # This is the https://github.com/I2PC/xmippCore repository + │   │   └── (...) + │   └── xmippViz # This is the https://github.com/I2PC/xmippViz repository + │      └── (...) + │ + └── build # Self-contained directory with all runnable Xmipp (created during the installation) +    ├── bin # All binaries of Xmipp +    │   └── (...) +    ├── bindings # Bindings to other languages +    │   └── (...) +    ├── lib # Libraries that some binaries use +    │   └── (...) +    ├── pylib # Python modules that some binaries use +    │   └── (...) +    ├── v3.20.07 # Installation token containing the version number +    ├── xmipp.bashrc # bash script to set Xmipp env. vars. (run 'source xmipp.basrc') +    ├── xmippEnv.json # Variables to set environ for Xmipp in running time +    └── xmipp.fish # fish script to set Xmipp env. vars. (run 'fish xmipp.fish') + +To get this structure in a certain directory, run + +:: + + cd certain_directory + git clone https://github.com/I2PC/xmipp xmipp-bundle + cd xmipp-bundle + ./xmipp get_devel_sources + + +Check below a detailed structure of Xmipp. Please, check also the `Xmipp +API `__. + +:: + + xmipp-bundle -> this is the https://github.com/I2PC/xmipp repository <- + │ + ├── xmipp # Main script + ├── xmipp.conf # Config file + ├── xmippEnv.json # Temporary compilation environ saving for runtime uses + ├── CHANGELOG.md + ├── LICENSE + ├── README.md + ├── scripts + │   ├── install_cuda_travis.sh + │   └── tar.py + ├── sonar-project.properties + │ + ├── src # Main folder containing sources subrepos (scipion-em-xmipp, xmippCore and xmippViz). + │ │ + │   ├── scipion-em-xmipp # Repository of the Scipion's plugin -> this is the https://github.com/I2PC/scipion-em-xmipp repository <- + │   │   ├── CHANGES.txt + │   │   ├── LICENSE + │   │   ├── MANIFEST.in + │   │   ├── README.md + │   │   ├── requirements.txt + │   │   ├── scipion_em_xmipp.egg-info + │   │   ├── setup.py + │   │   ├── sonar-project.properties + │   │   └── xmipp3 # Xmipp plugin for Scipion + │   │   ├── base.py + │   │   ├── bibtex.py + │   │   ├── constants.py + │   │   ├── convert + │ │ │ └── (...) + │   │   ├── __init__.py + │   │   ├── programs.py + │   │   ├── protocols + │ │ │ └── (...) + │   │   ├── protocols.conf + │   │   ├── tests + │ │ │ └── (...) + │   │   ├── utils.py + │   │   ├── viewers + │ │ │ └── (...) + │   │   ├── wizards.py + │   │   └── xmipp_logo.png + │ │ + │   ├── xmipp # Main sources for Xmipp + │   │   │ + │   │   ├── applications + │   │   │   ├── programs # This contains the main fuctions for the Xmipp progrmas + │   │   │   │   ├── angular_accuracy_pca + │   │   │   │   ├── (...) + │   │   │   │   └── xray_psf_create + │   │   │   ├── scripts # This contains programs coded in non-compiling lenguage (e.g. python) + │   │   │   │   ├── apropos + │   │   │   │   ├── (...) + │   │   │   │   └── volume_align + │   │   │   └── tests # This contains some tests + │   │   │   └── function_tests + │   │   │   ├── aft_tests.h + │   │   │   ├── (...) + │   │   │   └── test_funcs_main.cpp + │   │   ├── bin # This is created in compilation time + │   │   │   ├── xmipp_angular_accuracy_pca + │   │   │   ├── (...) + │   │   │   └── xmipp_xray_psf_create + │   │   ├── bindings # This contains binding for other lenguages + │   │   │   ├── matlab + │   │   │   │   ├── mirt3D_mexinterp.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── xmipp_write.m + │   │   │   └── python + │   │   │   ├── python_constants.cpp + │   │   │   ├── (...) + │   │   │   ├── xmipp_base.py + │   │   │   ├── xmipp_conda_envs.py + │   │   │   ├── xmippmodule.cpp + │   │   │   ├── xmippmodule.h + │   │   │   ├── xmippmodule.os + │   │   │   └── xmipp.py + │   │   ├── external + │   │   │   ├── condor + │   │   │   │   ├── CNLSolver.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── Vector.cpp + │   │   │   ├── delaunay + │   │   │   │   ├── dcel.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── voronoi.cpp + │   │   │   ├── gtest + │   │   │   │   └── (...) + │   │   │   └── sh_alignment + │   │   │   ├── frm.cpp + │   │   │   ├── (...) + │   │   │   └── swig_frm.py + │   │   ├── install # This is created in compilation time + │   │   │   ├── scons-tools + │   │   │   │   ├── AutoConfig.py + │   │   │   │   ├── Make.py + │   │   │   │   └── __pycache__ + │   │   │   ├── xmipp.conf + │   │   │   └── xmipp.template + │   │   ├── lib # This contains the compiled final libraries + │   │   │   ├── libcuFFTAdvisor.so + │   │   │   ├── libXmippCuda.a + │   │   │   ├── libXmippInterfaceCuda.so + │   │   │   ├── libXmippParallelCuda.so + │   │   │   ├── libXmippParallel.so + │   │   │   ├── libXmipp.so + │   │   │   ├── _swig_frm.so + │   │   │   └── xmippLib.so + │   │   ├── libraries # This contains the hard code of Xmipp (xmipp is made of C++ libraries) + │   │   │   ├── classification + │   │   │   │   ├── ahc_classifier.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── vector_ops.h + │   │   │   ├── data + │   │   │   │   ├── aft.h + │   │   │   │   ├── (...) + │   │   │   │   └── xmipp_polynomials.cpp + │   │   │   ├── dimred + │   │   │   │   ├── diffusionMaps.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── transform_dimred.cpp + │   │   │   ├── interface + │   │   │   │   ├── docfile.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── virus.h + │   │   │   ├── parallel + │   │   │   │   ├── mpi_angular_accuracy_pca.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── xmipp_mpi.cpp + │   │   │   ├── parallel_adapt_cuda + │   │   │   │   ├── mpi_reconstruct_fourier_gpu.cpp + │   │   │   │   ├── mpi_reconstruct_fourier_gpu.h + │   │   │   │   └── mpi_reconstruct_fourier_gpu.os + │   │   │   ├── py_xmipp + │   │   │   │   ├── coordinatesTools + │   │   │   │   ├── deepConsensusWorkers + │   │   │   │   ├── deepDenoising + │   │   │   │   ├── deepLearningToolkitUtils + │   │   │   │   ├── deepResLearner + │   │   │   │   ├── example_module2 + │   │   │   │   └── example_module.py + │   │   │   ├── reconstruction + │   │   │   │   ├── aalign_significant.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── xray_psf_create.cpp + │   │   │   ├── reconstruction_adapt_cuda + │   │   │   │   ├── align_significant_gpu.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── xmipp_gpu_utils.cpp + │   │   │   └── reconstruction_cuda + │   │   │   ├── cuda_all.cpp + │   │   │   ├── (...) + │   │   │   └── gpu.cpp + │   │   ├── resources + │   │   │   └── test + │   │   │   ├── dimred + │   │   │   ├── EMX + │   │   │   ├── filters + │   │   │   ├── funcs + │   │   │   ├── image + │   │   │   ├── metadata + │   │   │   ├── polynomials + │   │   │   ├── pythoninterface + │   │   │   └── sampling + │   │   ├── SConscript # This contains the instructions to compile Xmipp (SConscript) + │   │   ├── SConstruct # This contains the instructions to compile Xmipp (SConstruct) + │   │   └── tests # This is created in testing time + │   │   ├── data + │   │   │   ├── gold + │   │  │ │   └── (...) + │   │   │   ├── input + │   │  │ │   └── (...) + │   │   │   ├── MANIFEST + │   │   │   ├── temp.txt + │   │   │   └── tmpLink + │   │   ├── __init__.py + │   │   ├── _test_internal.py + │   │   ├── test_programs_xmipp.py + │   │   ├── test.py + │   │   └── _test_pythoninferface_xmipp.py + │ │ + │   ├── xmippCore # Repository of the Core -> this is the https://github.com/I2PC/xmippCore repository <- + │   │   │ + │   │   ├── bindings # This contains bindings to other lenguages + │   │   │   └── python + │   │   │   ├── python_image.h + │   │   │   └── xmippmoduleCore.h + │   │   ├── CHANGELOG.md + │   │   ├── core # This contains the Xmipp CORE code + │   │   │   ├── alglib + │   │   │   │   ├── alglibinternal.cpp + │   │   │   │   ├── (...) + │   │   │   │   └── stdafx.h + │   │   │   ├── args.cpp + │   │   │   ├── (...) + │   │   │   ├── bilib + │   │   │   │   ├── changebasis.cc + │   │   │   │   ├── (...) + │   │   │   │   └── window.CC + │   │   │   ├── gcc_version.h + │   │   │   ├── (...) + │   │   │   ├── utils + │   │   │   │   └── (...) + │   │   │   ├── xmipp_color.cpp + │   │   │   ├── (...) + │   │   │   └── xvsmooth.os + │   │   ├── install # This is created in compilation time + │   │   │   ├── scons-tools + │   │   │   │   ├── AutoConfig.py + │   │   │   │   ├── Make.py + │   │   │   │   └── __pycache__ + │   │   │   ├── xmipp.conf + │   │   │   └── xmipp.template + │   │   ├── lib # Where the final libraries ends up + │   │   │   ├── libXmippCore.so + │   │   │   └── xmippCore.so + │   │   ├── LICENSE + │   │   ├── README.md + │   │   ├── SConscript # This contains the instructions to compile XmippCore (SConscript) + │   │   └── SConstruct # This contains the instructions to compile XmippCore (SConstruct) + │ │ + │   └── xmippViz # Repository of the Core -> this is the https://github.com/I2PC/xmippViz repository <- + │      │ + │      ├── applications + │      │   └── scripts + │      │   ├── metadata_plot + │      │   └── showj + │      ├── bin + │      │   ├── xmipp_metadata_plot + │      │   └── xmipp_showj + │      ├── bindings + │      │   ├── java + │      │   │   ├── src + │      │   │   │ └── (...) + │      │   │   ├── xmipp_Aux.cpp + │      │   │   ├── (...) + │      │   │   └── xmipp_TiltPairAligner.cpp + │      │   └── python + │      │   └── xmippViz.py + │      ├── CHANGELOG.md + │      ├── external + │      │   ├── imagej + │      │   │   └── (...) + │      │   └── imagej.tgz + │      ├── install + │      │   ├── scons-tools + │      │   │   ├── AutoConfig.py + │      │   │   └── Make.py + │      │   ├── xmipp.conf + │      │   └── xmipp.template + │      ├── java + │      │   ├── build + │      │   │   ├── HandleExtraFileTypes.class + │      │   │   ├── (...) + │      │   │   └── XmippViewer.jar_source.txt + │      │   ├── lib + │      │   │   ├── commons-cli-1.1.jar + │      │   │   ├── (...) + │      │   │   └── XmippViewer.jar + │      │   └── src # This contains the hard code of xmippViz (coded in Java) + │      │   ├── HandleExtraFileTypes.java + │      │   └── xmipp + │      │   └── (...) + │      ├── lib + │      │   └── libXmippJNI.so + │      ├── LICENSE + │      ├── README.md + │      ├── resources + │      │   ├── add.gif + │      │   ├── (...) + │      │   └── zoom.png + │      ├── SConscript # This contains the instructions to compile XmippViz (SConscript) + │       ├── SConstruct # This contains the instructions to compile XmippViz (SConstruct) + │      └── xmipp_MetaData.cpp + │ + └── build # After compilation, all binaries ends up to the self-contained build folder +    ├── bin # This contains the binaries to be launched +    │   ├── xmipp_angular_accuracy_pca +    │   ├── (...) +    │   └── xmipp_xray_psf_create +    ├── bindings # This contains the compiled bindings to other lenguages +    │   ├── java +    │   ├── matlab +    │   └── python +    ├── lib # This contains the compiled libraries (needed to launch binaries in the bin folder) +    │   ├── libcuFFTAdvisor.so +    │   ├── libXmippCore.so +    │   ├── libXmippCuda.a +    │   ├── libXmippInterfaceCuda.so +    │   ├── libXmippJNI.so +    │   ├── libXmippParallelCuda.so +    │   ├── libXmippParallel.so +    │   └── libXmipp.so +    ├── pylib # Python modules to use in running time +    │   └── xmippPyModules +    │   └── xmippPyModules +    │   ├── coordinatesTools +    │   ├── deepConsensusWorkers +     │   ├── deepDenoising +     │   ├── deepLearningToolkitUtils +     │   ├── deepResLearner +     │   ├── example_module2 +     │   ├── example_module.py +    │   └── __init__.py +    ├── resources +    │   ├── add.gif +    │   ├── binocular.png +    │   ├── brush.png +    │   ├── (...) +    │   └── zoom.png +    ├── v3.20.07 # Installation token containing the version number +    ├── xmipp.bashrc # bash script to set Xmipp env. vars. (run 'source xmipp.basrc') +    ├── xmippEnv.json # Variables to set environ for Xmipp in running time +    └── xmipp.fish # fish script to set Xmipp env. vars. (run 'fish xmipp.basrc') \ No newline at end of file diff --git a/_sources/contact.rst.txt b/_sources/contact.rst.txt new file mode 100644 index 0000000..09d837d --- /dev/null +++ b/_sources/contact.rst.txt @@ -0,0 +1,29 @@ +.. _contact-us: + +========== +Contact us +========== +From the xmipp-team we would be happy to hear your doubts and suggestions, do not hesitate to contact us at any +time. To do so, you can either open an issue in the Github repository related to your question or +contact us by mail. + +Mail +======================= +If the question is related to the Scipion framework, try the `contact us `_ page. +The easiest way to reach us is by writing to our mail: `xmipp@cnb.csic.es `_ or `i2pc@cnb.csic.es `_ + +Discord channel +======================= +The easiest way to reach us is by writing to our Xmipp channel on the Scipion framework. Request access at `scipion team `_ + +Support for developers +================ +That way you will get almost immediate answers to your "dev-doubts" is by writing to our Xmipp channel on the Scipion framework. You can also `create an issue `_ to report a bug or suggest a new feature. Remember we have four repositories for Xmipp: `xmipp `_, `xmippCore `_, `scipion-em-xmipp `_ and `xmippVix `_) + + + + +.. figure:: ../_static/images/banner.png + :alt: xmipp logo + :width: 600 + :align: center \ No newline at end of file diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt new file mode 100644 index 0000000..4635688 --- /dev/null +++ b/_sources/index.rst.txt @@ -0,0 +1,96 @@ +.. figure:: ../_static/images/xmipp_noBackground.png + :alt: xmipp logo + :width: 400 + +Welcome to Xmipp documentation! +======================================== +Xmipp is a suite of image processing programs, primarily aimed at single-particle 3D electron microscopy, +designed and managed by the `Biocomputing Unit `_ located in Madrid, Spain. + +The Xmipp project is made up by the `xmipp programs `_, mainly written in C++, the `**scipion-em-xmipp** `_ plugin, where all the protocols of SPA are located and the `**scipion-em-xmippTomo** `_ plugin, where all the protocols of tomography are located . + + + + +Getting started +---------------- +Xmipp is composed by a main repository with all the programs writen by C++ and two plugins to run protocols inside Scipion. To run the protocols the compillation of +the main repository is required and also the installation of the plugins. + +.. figure:: ../_static/images/composed.png + :alt: xmippComposed + :width: 450 + :align: center + + +The recommended way for users (not developers) to install and use Xmipp is via the +`Scipion framework `_, where you can use Xmipp with other Cryo-EM-related software. Xmipp will be installed during Scipion installation (pay attemption on the -noXmipp flag). The Scipion installer should take care of all dependencies for you, however, you can make its life easier if you have your compiler, `CUDA `_ and `HDF5 `_ library ready and available in the standard paths. +Read the installation page for more details about these softwares requirements. Follow the official installation guide of Scipion for more details. + + + +.. _Installation-docs: + +.. toctree:: + :maxdepth: 1 + :hidden: + :caption: Installing Xmipp + + Installation/Requirements/index + Installation/Installation-with-Scipion/index + Installation/Standlone-installation/index + Installation/InstallationNotes/index + + +.. _Releases-docs: + + .. toctree:: + :maxdepth: 1 + :hidden: + :caption: Releases + + Releases/Releases-xmipp-program/index + Releases/Releases-scipion-em-xmipp/index + Releases/Releases-scipion-em-xmippTomo/index + +.. _Utils-docs: + + .. toctree:: + :maxdepth: 1 + :hidden: + :caption: Utils + + Utils/ConfigurationF/index + Utils/xmippStructure/index + Utils/Conventions/index + Utils/Deprecated-programs/index + + + +.. _Developers-docs: + + .. toctree:: + :maxdepth: 1 + :hidden: + :caption: Developers + + Developers/Guidelines/index + Developers/CodeDocumentation/index + Developers/Checkout-specific-date/index + Developers/ParallelPrograming/index + Developers/xmipp-Binding/index + Developers/testing-with-google-C++/index + Developers/UsefulScripts/index + Developers/How-to-release/index + + + + + .. toctree:: + :maxdepth: 1 + :hidden: + :caption: Others + + listOfPublications + contact + license diff --git a/_sources/license.rst.txt b/_sources/license.rst.txt new file mode 100644 index 0000000..c8215d7 --- /dev/null +++ b/_sources/license.rst.txt @@ -0,0 +1,12 @@ +.. _license: + +License +======== +All Xmipp code and plugins, are licensed under the `GPL3 License `_. + +Now, Xmipp interacts, and in some cases installs 3rd party software with its own license that must be observed. + +So, it is under the user's responsibility to check the license of each software Xmipp is installing. + +In most cases, if not all, software is freely available for academic use and industry but there are few exceptions where industry +users, or in some extreme cases even academic ones, are not granted free usage. You must check in each case. \ No newline at end of file diff --git a/_sources/listOfPublications.rst.txt b/_sources/listOfPublications.rst.txt new file mode 100644 index 0000000..b50319a --- /dev/null +++ b/_sources/listOfPublications.rst.txt @@ -0,0 +1,720 @@ +.. _listOfPublications: + +List of Publications +=========================== +2024 +----- +DeIsidroGomez2024 +^^^^^^^^^^^^^^^^^^ +:: + +* AUTHOR = F.P. de Isidro-Gómez and J.L. Vilas and P. Losana and J.M. Carazo and C.O.S. Sorzano +* TITLE = A deep learning approach to the automatic detection of alignment errors in cryo-electron tomographic reconstructions +* JOURNAL = Journal of Structural Biology +* VOLUME = 216 +* YEAR = 2024 +* NUMBER = 1 +* URL = https://www.sciencedirect.com/science/article/pii/S1047847723001193 +* ISSN = 1047-8477 +* DOI = https://doi.org/10.1016/j.jsb.2023.108056 + +2023 +----- +Strelak2023 +^^^^^^^^^^^^^^^ +:: + +* AUTHOR = Střelák, David and Marchán, Daniel and Carazo, José María and S. Sorzano, Carlos O. +* TITLE = Performance and Quality Comparison of Movie Alignment Software for Cryogenic Electron Microscopy +* JOURNAL = Micromachines +* VOLUME = 14 +* YEAR = 2023 +* NUMBER = 10 +* ARTICLE-NUMBER = 1835 +* URL = https://www.mdpi.com/2072-666X/14/10/1835 +* ISSN = 2072-666X +* DOI = https://doi.org/10.3390/mi14101835 + + +Fernandez-Gimenez2023a +^^^^^^^^^^^^^^^^^^^^^^ +:: + + - title = A new algorithm for particle weighted subtraction to eliminate signals from unwanted components in Single Particle Analysis + - journal = Journal of Structural Biology + - volume = 215 + - number = 4 + - year = 2023 + - issn = 1047-8477 + - doi = https://doi.org/10.1016/j.jsb.2023.108024 + - url = https://www.sciencedirect.com/science/article/pii/S1047847723000874 + - author = E. Fernández-Giménez, M. Martínez, R. Marabini, D. Strelak, R. Sánchez-García, J.M. Carazo and C.O.S. Sorzano + +Fernandez-Gimenez2023b +^^^^^^^^^^^^^^^^^^^^^^ +:: + + + - title = Local defocus estimation in Single Particle Analysis in Cryo-Electron Microscopy + - journal = Journal of Structural Biology + - volume = 215 + - number = 4 + - year = 2023 + - issn = 1047-8477 + - doi = https://doi.org/10.1016/j.jsb.2023.108030 + - url = https://www.sciencedirect.com/science/article/pii/S104784772300093X + - author = E. Fernández-Giménez, J.M. Carazo and C.O.S. Sorzano + +Vilas2023 +^^^^^^^^^ + +:: + + - AUTHOR = Vilas JL and Tagare HD + - TITLE = A simple and intuitive measurement of directional resolution anisotropy of cryoEM maps + - JOURNAL = Nature Methods + - VOLUME = X + - YEAR = 2023 + - NUMBER = X + - ARTICLE-NUMBER = in press + - URL = https://github.com/I2PC/xmipp/wiki/FSO^^Fourier-Shell-Occupancy + + +2021 +----- + +sanchez2021deepemhancer +^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + - title = DeepEMhancer: a deep learning solution for cryo-EM volume post-processing, + - author = Sanchez-Garcia, Ruben and Gomez-Blanco, Josue and Cuervo, Ana and Carazo, Jose Maria and Sorzano, Carlos Oscar S and Vargas, Javier, + - journal = Communications biology, + - volume = 4, + - number = 1, + - pages = 874, + - year = 2021, + - publisher = Nature Publishing Group UK London + +fernandez2021cryo +^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + - title = Cryo-EM density maps adjustment for subtraction, consensus and sharpening, + - author = Fernandez-Gimenez, E and Martinez, M and Sanchez-Garcia, R and Marabini, R and Ramirez-Aportela, E and Conesa, P and Carazo, JM and Sorzano, COS, + - journal = Journal of Structural Biology, + - volume = 213, + - number = 4, + - pages = 107780, + - year = 2021, + - publisher = Elsevier + +Fernandez-Gimenez2021 +^^^^^^^^^^^^^^^^^^^^^ + +:: + + - title = Cryo-EM density maps adjustment for subtraction consensus and sharpening + - journal = Journal of Structural Biology + - volume = 213 + - number = 4 + - year = 2021 + - issn = 1047-8477 + - doi = https://doi.org/10.1016/j.jsb.2021.107780 + - url = https://www.sciencedirect.com/science/article/pii/S104784772100085X + - author = E. Fernández-Giménez and M. Martínez and R. Sánchez-García and R. Marabini and E. Ramírez-Aportela and P. Conesa and J.M. Carazo and C.O.S. Sorzano + + +Strelak2021 +^^^^^^^^^^ + +:: + + - AUTHOR = Strelak David and Jiménez-Moreno Amaya and Vilas José L. and Ramírez-Aportela Erney and Sánchez-García Ruben and Maluenda David and Vargas Javier and Herreros David and Fernández-Giménez Estrella and de Isidro-Gómez Federico P. and Horacek Jan and Myska David and Horacek Martin and Conesa Pablo and Fonseca-Reyna Yunior C. and Jiménez Jorge and Martínez Marta and Harastani Mohamad and Jonić Slavica and Filipovic Jiri and Marabini Roberto and Carazo José M. and Sorzano Carlos O. S. + - TITLE = Advances in Xmipp for Cryo–Electron Microscopy: From Xmipp to Scipion + - JOURNAL = Molecules + - VOLUME = 26 + - YEAR = 2021 + - NUMBER = 20 + - ARTICLE-NUMBER = 6224 + - URL = https://www.mdpi.com/1420-3049/26/20/6224 + - PubMedID = 34684805 + - ISSN = 1420-3049 + - DOI = https://doi.org/10.3390/molecules26206224 + +2020 +----- +strelak2020flexalign +^^^^^^^^^^^^^^^^ + +:: + + - AUTHOR = Střelák David and Filipovič Jiří and Jiménez-Moreno Amaya and Carazo Jose María and Sánchez Sorzano Carlos Óscar + - TITLE = FlexAlign: An Accurate and Fast Algorithm for Movie Alignment in Cryo-Electron Microscopy + - JOURNAL = Electronics + - VOLUME = 9 + - YEAR = 2020 + - NUMBER = 6 + - ARTICLE-NUMBER = 1040 + - URL = http://www.mdpi.com/2079-9292/9/6/1040 + - ISSN = 2079-9292 + - DOI = http://doi.org/10.3390/electronics9061040 + + + +2018 +----- +Vilas2018 +^^^^^^^^^ + +:: + + - title = MonoRes: Automatic and Accurate Estimation of Local Resolution for Electron Microscopy Maps + - author = Vilas J. L. and et al + - year = 2018 + - journal = Structure + - pages = 337-344 + - volume = 26 + - doi = 10.1016/j.str.2017.12.018 + - url = http://doi.org/10.1016/j.str.2017.12.018 + +2016 +----- +Vilas2016 +^^^^^^^^^ + +:: + + - title = Fast and automatic identification of particle tilt pairs based on Delaunay triangulation. + - author = Vilas J. L. and Navas J. and Gomez-Blanco J. and de la Rosa-Trevin J. M. and Melero and Peschiera I. and Ferlenghi. I and Cuenca J. and Marabini R. and Carazo J. M. and Vargas J. and Sorzano C. O. S. + - journal = Journal of Structural Biology + - year = 2016 + - pages = 525-533 + - volume = 196 + - doi = http://dx.doi.org/10.1016/j.jsb.2016.10.007 + - url = http://www.sciencedirect.com/science/article/pii/S104784771630212X + +Sorzano2016 +^^^^^^^^^^ + +:: + + - title = StructMap: Elastic distance analysis of electron microscopy maps for studying conformational changes + - journal = Biophysical J. + - volume = 110 + - number = + - pages = 1753-1765 + - year = 2016 + - note = + - issn = + - doi = http://doi.org/10.1016/j.bpj.2016.03.019 + - url = http://doi.org/10.1016/j.bpj.2016.03.019 + - author = C.O.S. Sorzano A.L. Álvarez-Cabrera M. Kazemi J.M. Carazo S. Jonic + - keywords = + + +2015 +----- + +Sorzano2015 +^^^^^^^^^^ + +:: + + - author = Sorzano C. O. S. and Vargas J. and de la Rosa-Trevin J. M. and Oton J. and Alvarez-Cabrera A. L. and Abrishami V. and Sesmero E. and Marabini R. and Carazo J. M. + - title = A Statistical approach to the initial volume problem in Single Particle Analysis by Electron Microscopy + - journal = J. Structural Biology + - year = 2015 + - volume = 189 + - pages = 213-219 + - doi = http://dx.doi.org/10.1016/j.jsb.2015.01.009 + +Abrishami2015 +^^^^^^^^^^^^^ + +:: + + - title = Alignment of direct detection device micrographs using a robust Optical Flow approach + - journal = Journal of Structural Biology + - volume = 189 + - number = 3 + - pages = 163 - 176 + - year = 2015 + - note = + - issn = 1047-8477 + - doi = http://dx.doi.org/10.1016/j.jsb.2015.02.001 + - url = http://www.sciencedirect.com/science/article/pii/S1047847715000313 + - author = Vahid Abrishami and Javier Vargas and Xueming Li and Yifan Cheng and Roberto Marabini and Carlos Óscar Sánchez Sorzano and José María Carazo + - keywords = Direct detection devices + - keywords = Beam induced motion + - keywords = Single particle analysis + - keywords = Electron microscopy + +Sorzano2015b +^^^^^^^^^^ + +:: + + - title = Cryo-EM and the elucidation of new macromolecular structures: Random Conical Tilt revisited. + - author = Sorzano C O S. and Alcorlo M. and de la Rosa-Trevín J. M. and Melero R. and Foche I. and Zaldívar-Peraza A. and del Cano L. and Vargas J. and Abrishami V. and Otón J. and Marabini R. and Carazo J. M. + - journal = Scientific Reports + - year = 2015 + - pages = 14290 + - volume = 5 + - doi = http://dx.doi.org/10.1038/srep14290 + - url = http://dx.doi.org/10.1038/srep14290 + +2014 +----- + + +Vargas2014 +^^^^^^^^^ + +:: + + - author = Vargas Javier and Álvarez-Cabrera Ana-Lucia and Marabini Roberto and Carazo Jose M. and Sorzano C. O. S. + - title = Efficient initial volume determination from electron microscopy images of single particles + - volume = 30 + - number = 20 + - pages = 2891-2898 + - year = 2014 + - doi = http://dx.doi.org/10.1093/bioinformatics/btu404 + - abstract =Motivation: Structural information of macromolecular complexes provides key insights into the way they carry out their biological functions. The reconstruction process leading to the final 3D map requires an approximate initial model. Generation of an initial model is still an open and challenging problem in single-particle analysis.Results: We present a fast and efficient approach to obtain a reliable low-resolution estimation of the 3D structure of a macromolecule without any a priori knowledge addressing the well-known issue of initial volume estimation in the field of single-particle analysis. The input of the algorithm is a set of class average images obtained from individual projections of a biological object at random and unknown orientations by transmission electron microscopy micrographs. The proposed method is based on an initial non-lineal dimensionality reduction approach which allows to automatically selecting representative small sets of class average images capturing the most of the structural information of the particle under study. These reduced sets are then used to generate volumes from random orientation assignments. The best volume is determined from these guesses using a random sample consensus (RANSAC) approach. We have tested our proposed algorithm which we will term 3D-RANSAC with simulated and experimental data obtaining satisfactory results under the low signal-to-noise conditions typical of cryo-electron microscopy.Availability: The algorithm is freely available as part of the Xmipp 3.1 package [http://xmipp.cnb.csic.es].Contact: jvargas@cnb.csic.esSupplementary information: Supplementary data are available at Bioinformatics online. + - URL = http://bioinformatics.oxfordjournals.org/content/30/20/2891.abstract + - eprint = http://bioinformatics.oxfordjournals.org/content/30/20/2891.full.pdf+html + - journal = Bioinformatics +Sorzano2014 +^^^^^^^^^^ + +:: + + - title = Outlier detection for single particle analysis in Electron Microscopy + - author = Sorzano C. O. S. and Vargas J. and de la Rosa-Trevín J. M. and Zaldívar-Peraza A. and Otón J. and Abrishami V. and Foche I. and Marabini R. and Caffarena G. and Carazo J. M. + - journal = Proc. Intl. Work-Conference on Bioinformatics and Biomedical Engineering IWBBIO + - year = 2014 + - pages = 950 + - doi = http://biocomp.cnb.csic.es/-coss/Articulos/Sorzano2014.pdf +Jin2014 +^^^^ + +:: + + - title = Iterative Elastic 3D-to-2D Alignment Method Using Normal Modes for Studying Structural Dynamics of Large Macromolecular Complexes + - journal = Structure + - volume = 22 + - pages = 1 - 11 + - year = 2014 + - doi = http://dx.doi.org/10.1016/j.str.2014.01.004 + - url = http://www.ncbi.nlm.nih.gov/pubmed/24508340 + - author = Jin Q. and Sorzano C. O. S. and de la Rosa-Trevín J. M. and Bilbao-Castro J. R. and Núñez-Ramirez R. and Llorca O. and Tama F. and Jonic S. + - keywords = Normal mode analysis NMA +Vargas2014a +^^^^^^^^^^ + +:: + + - title = Particle alignment reliability in single particle electron cryomicroscopy: a general approach + - journal = Scientific reports + - volume = + - number = + - pages = + - year = 2014 + - note = + - issn = + - doi = http://dx.doi.org/10.1038/srep21626 + - url = http://dx.doi.org/10.1038/srep21626 + - author = Vargas + - keywords = Validation + +Marabini2014a +^^^^^^^^^^^^^ + +:: + + - title = CTF Challenge: Result summary + - journal = J. Structural Biology + - volume = + - number = + - pages = + - year = 2015 + - note = + - issn = + - doi = http://doi.org/10.1016/j.jsb.2015.04.003 + - url = http://doi.org/10.1016/j.jsb.2015.04.003 + - author = Marabini + - keywords = Contrast transfer function + + +2013 +----- +Sorzano2013 +^^^^^^^^^^ + +:: + + - title = Semiautomatic High-Throughput High-Resolution Protocol for Three-Dimensional Reconstruction of Single Particles in Electron Microscopy + - booktitle = Nanoimaging + - year = 2013 + - isbn = 978-1-62703-136-3 + - volume = 950 + - journal = Methods in Molecular Biology + - editor = Sousa Alioscka A. and Kruhlak Michael J. + - doi = http://dx.doi.org/10.1007/978-1-62703-137-0_11 + - publisher = Humana Press + - keywords = Single particle analysis; Electron microscopy; Image processing; 3D reconstruction; Workflows + - author = Sorzano C.O.S. and de la Rosa-Trevín J.M. and Otón J. and Vega J.J. and Cuenca J. and Zaldívar-Peraza A. and Gómez-Blanco J. and Vargas J. and Quintana A. and Marabini Roberto and Carazo José María + - pages = 171-193 + + + +Vargas2013a +^^^^^^^^^^ + +:: + + - author = Vargas J. and Otón J. and Marabini R. and Jonic S. and de la + Rosa-Trevín J. M. and et.al. + - title = FASTDEF: Fast defocus and astigmatism estimation for high-throughput + transmission electron microscopy. + - journal = J. Structural Biology + - doi = http://dx.doi.org/10.1016/j.jsb.2012.12.006 + - year = 2013 + - volume = 181 + - pages = 136^148 + - number = 2 + - month = Feb + +Vargas2013b +^^^^^^^^^^ + +:: + + - title = Particle quality assessment and sorting for automatic and semiautomatic particle-picking techniques + - journal = J. Structural Biology + - volume = 183 + - number = 3 + - pages = 342 - 353 + - year = 2013 + - note = + - issn = 1047-8477 + - doi = http://dx.doi.org/10.1016/j.jsb.2013.07.015 + - url = http://www.sciencedirect.com/science/article/pii/S1047847713001950 + - author = J. Vargas and V. Abrishami and R. Marabini and J.M. de la Rosa-Trevín and A. Zaldivar and J.M. Carazo and C.O.S. Sorzano + - keywords = Electron microscopy Particle picking Machine learning Single particle analysis + + +Abrishami2013 +^^^^^^^^^^^^^ + +:: + + - author = Abrishami V. and Zaldívar-Peraza A. and de la Rosa-Trevín J. M. and Vargas J. and Otón J. and Marabini R. and Shkolnisky Y. and Carazo J. M. and Sorzano C. O. S. + - title = A pattern matching approach to the automatic selection of particles from low-contrast electron micrographs + - volume = 29 + - number = 19 + - pages = 2460-2468 + - year = 2013 + - doi = http://dx.doi.org/10.1093/bioinformatics/btt429 + - url = http://bioinformatics.oxfordjournals.org/content/29/19/2460.abstract + - journal = Bioinformatics + + + +delaRosaTrevin2013 +^^^^^^^^^^^^^^^ + +:: + + - title = Xmipp 3.0: An improved software suite for image processing in electron microscopy + - journal = JSB + - volume = 184 + - number = 2 + - pages = 321 - 328 + - year = 2013 + - issn = 1047-8477 + - doi = http://dx.doi.org/10.1016/j.jsb.2013.09.015 + - url = http://www.sciencedirect.com/science/article/pii/S1047847713002566 + - author = de la Rosa-Trevín J.M. and Oton J. and R. Marabini and A. Zaldívar and J. Vargas and J.M. Carazo and Sorzano C.O.S. + - keywords = Electron microscopy Single particles analysis Image processing Software package + + +Nogales2013 +^^^^^^^^^^ + +:: + + - title=3DEM Loupe: analysis of macromolecular dynamics using structures from electron microscopy + - author=Nogales-Cadenas R. and Jonic S. and Tama F. and Arteni A. A. and Tabas-Madrid D. and V\'azquez M. and Pascual-Montano A. and Sorzano C. O. S. + - journal=Nucleic acids research + - year=2013 + - publisher=Oxford Univ Press + - doi=http://dx.doi.org/10.1093/nar/gkt385 + +2010 +----- +Sorzano2010a +^^^^^^^^^^ + +:: + + - title = A clustering approach to multireference alignment of single-particle projections in electron microscopy + - journal = Journal of Structural Biology + - volume = 171 + - number = 2 + - pages = 197 - 206 + - year = 2010 + - note = + - issn = 1047-8477 + - doi = http://dx.doi.org/10.1016/j.jsb.2010.03.011 + - url = http://www.sciencedirect.com/science/article/pii/S1047847710000882 + - author = C.O.S. Sorzano and J.R. Bilbao-Castro and Y. Shkolnisky and M. Alcorlo and R. Melero and G. Caffarena-Fernández and M. Li and G. Xu and R. Marabini and J.M. Carazo + - keywords = Single-particle analysis 2D analysis Multireference analysis Electron microscopy + +2009 +----- +Scheres2009b +^^^^^^^^^^ + +:: + + - author = Scheres Sjors H W. and Carazo José María + - title = Introducing robustness to maximum-likelihood refinement of electron-microscopy + - data. + - journal = Acta Crystallogr D Biol Crystallogr + - year = 2009 + - volume = 65 + - pages = 672^678 + - number = Pt 7 + - month = Jul + - doi = http://dx.doi.org/10.1107/S0907444909012049 + - url = http://dx.doi.org/10.1107/S0907444909012049 + - keywords = Algorithms; Cryoelectron Microscopy; Escherichia coli chemistry; + Likelihood Functions; Models Molecular; Peptide Elongation Factor + G chemistry/ultrastructure; Protein Structure Tertiary + +Scheres2009c +^^^^^^^^^^ + +:: + + - author = Scheres Sjors H W. and Melero Roberto and Valle Mikel and Carazo José María + - title = Averaging of Electron Subtomograms and Random Conical Tilt Reconstructions through Likelihood Optimization + - journal = Structure + - year = 2009 + - volume = 17 + - pages = 1563^1572 + - number = 12 + - month = Dec + - doi = http://dx.doi.org/10.1016/j.str.2009.10.009 + +Sorzano2009d +^^^^^^^^^^ + +:: + + - title = Effects of the downsampling scheme on three-dimensional electron microscopy of single particles + - journal = Proc. of IEEE Workshop on Intelligent Signal Processing + - pages = 175-179 + - year = 2009 + - note = + - issn = 978-1-4244-5059-6 + - doi = http://dx.doi.org/10.1109/WISP.2009.5286563 + - url = http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=5286563 + - author = Sorzano C. O. S. and Iriarte-Ruiz A. and Marabini R. and Carazo J. M. + - keywords = Downsampling Single Particles Electron microscopy + +2007 +----- +Sorzano2007a +^^^^^^^^^^ + +:: + + - Title = Fast robust and accurate determination of transmission electron microscopy contrast transfer function + - Author = Sorzano C. O. S. and Jonic S. and N\'u\\-nez-Ram\'irez R. and Boisset N. and Carazo J. M. + - Journal = J. Structural Biology + - Year = 2007 + - Pages = 249^262 + - Volume = 160 + - doi = http://dx.doi.org/10.1016/j.jsb.2007.08.013 + - url = http://www.sciencedirect.com/science/article/pii/S104784770700202X + +Scheres2007a +^^^^^^^^^^ + +:: + + - author = Scheres Sjors H. W. and Haixiao Gao and Mikel Valle and Gabor T Herman and Paul P B Eggermont and et.al. + - title = Disentangling conformational states of macromolecules in 3D-EM through likelihood optimization. + - journal = Nature Methods + - year = 2007 + - volume = 4 + - pages = 27^29 + - number = 1 + - month = Jan + - doi = http://dx.doi.org/10.1038/nmeth992 + - keywords = Antigens Polyomavirus Transforming; Escherichia coli; Image Processing Computer-Assisted; Imaging Three-Dimensional; Likelihood Functions; Microscopy Electron; Models Molecular; Protein Conformation; Ribosomes; Sensitivity and Specificity; Simian virus 40 + +Scheres2007b +^^^^^^^^^^ + +:: + + - author = Scheres Sjors H. W. and Núñez-Ramírez Rafael and Gómez-Llorente + - Yacob and San Martín Carmen and Eggermont Paul P B. and Carazo + - José María + - title = Modeling experimental image formation for likelihood-based classification + - of electron microscopy data. + - journal = Structure + - year = 2007 + - volume = 15 + - pages = 1167^1177 + - number = 10 + - month = Oct + - doi = http://dx.doi.org/10.1016/j.str.2007.09.003 + - url = http://dx.doi.org/10.1016/j.str.2007.09.003 + - keywords = Algorithms; Antigens Polyomavirus Transforming chemistry/ultrastructure; + Archaeal Proteins chemistry/ultrastructure; Cryoelectron Microscopy + methods/statistics /&/ numerical data; DNA Helicases chemistry/ultrastructure; + Escherichia coli metabolism; Imaging Three-Dimensional; Likelihood + Functions; Models Molecular; Models Statistical; Protein Conformation; + Ribosomes chemistry/ultrastructure + +2005 +----- + + +Scheres2005a +^^^^^^^^^^ + +:: + + - title = Maximum-likelihood Multi-reference Refinement for Electron Microscopy Images Journal=J. Mol. Biol. + - volume = 348 + - number = 1 + - pages = 139 - 149 + - year = 2005 + - issn = 0022-2836 + - doi = http://dx.doi.org/10.1016/j.jmb.2005.02.031 + - url = http://www.sciencedirect.com/science/article/pii/S0022283605001932 + - author = Scheres Sjors H.W. and Valle Mikel and Rafael Núñez and Carlos O.S. Sorzano and Roberto Marabini and Gabor T. Herman and Jose-Maria Carazo + - keywords = maximum-likelihood multi-reference refinement single-particles 2D-alignment classification + +Scheres2005b +^^^^^^^^^^ + +:: + +- author = Scheres Sjors H.W. and Valle Mikel and Carazo José-María +- title = Fast maximum-likelihood refinement of electron microscopy images. +- journal = Bioinformatics +- year = 2005 +- volume = 21 Suppl 2 +- pages = ii243–ii244 +- month = Sep +- doi = http://dx.doi.org/10.1093/bioinformatics/bti1140 +- url = http://dx.doi.org/10.1093/bioinformatics/bti1140 +- keywords = Algorithms; Cryoelectron Microscopy methods; Image Enhancement methods; Image Interpretation Computer-Assisted methods; Imaging Three-Dimensional methods; Likelihood Functions; Reproducibility of Results; Sensitivity and Specificity + +Jonic2005 +^^^^^^^^^ +:: + +- title = Spline-based image-to-volume registration for three-dimensional electron microscopy +- journal = Ultramicroscopy +- volume = 103 +- number = 4 +- pages = 303 - 317 +- year = 2005 +- issn = 0304-3991 +- doi = http://dx.doi.org/10.1016/j.ultramic.2005.02.002 +- url = http://www.sciencedirect.com/science/article/pii/S0304399105000173 +- author = Jonic S. and C.O.S. Sorzano and P. Thevenaz and C. El-Bez and S. De Carlo and M. Unser +- keywords = 2D/3D registration Splines 3DEM Angular assignment + + +2004 +----- +Sorzano2004b +^^^^^^^^^^ + +:: + + - title = A multiresolution approach to orientation assignment in 3D electron microscopy of single particles + - journal = JSB + - volume = 146 + - number = 3 + - pages = 381 - 392 + - year = 2004 + - note = + - issn = 1047-8477 + - doi = http://dx.doi.org/10.1016/j.jsb.2004.01.006 + - url = http://www.sciencedirect.com/science/article/pii/S1047847704000073 + - author = Sorzano C.O.S. and S. Jonic and C. El-Bez and J.M. Carazo and S. De Carlo and P. Thevenaz and M. Unser + + +2002 +----- + +PascualMontano2002 +^^^^^^^^^^^^^^^ + +:: + + - title = Quantitative self-organizing maps for clustering electron tomograms + - journal = JSB + - volume = 138 + - number = 1-2 + - pages = 114 - 122 + - year = 2002 + - note = + - issn = 1047-8477 + - doi = http://dx.doi.org/10.1016/S1047-8477(02)00008-4 + - url = http://www.sciencedirect.com/science/article/pii/S1047847702000084 + - author = Pascual-Montano A and K.A. Taylor and H. Winkler and R.D. Pascual-Marqui and J.-M. Carazo + - keywords = Classification Electron tomography Image processing Neural networks Self-organizing maps Probability density function Kernel functions Actin Myosin Muscle proteins + +2001 +----- +PascualMontano2001 +^^^^^^^^^^^^^^^ + +:: + + - title = A Novel Neural Network Technique for Analysis and Classification of \\EM\\ Single-Particle Images + - journal = JSB + - volume = 133 + - number = 2 - 3 + - pages = 233 - 245 + - year = 2001 + - issn = 1047-8477 + - doi = http://dx.doi.org/10.1006/jsbi.2001.4369 + - url = http://www.sciencedirect.com/science/article/pii/S1047847701943692 + - author = Pascual-Montano A and L.E Donate and M Valle and M Bárcena and R.D Pascual-Marqui and J.M Carazo + - keywords = classification cryo-EM image processing neural networks self-organizing maps probability density function kernel functions + + +2000 +----- + +Pascual2000 +^^^^^^^^^^ + +:: + + - title = Mapping and fuzzy classification of macromolecular images using self-organizing neural networks + - journal = Ultramicroscopy + - volume = 84 + - number = 1-2 + - pages = 85 - 99 + - year = 2000 + - note = + - issn = 0304-3991 + - doi = http://dx.doi.org/10.1016/S0304-3991(00)00022-X + - url = http://www.sciencedirect.com/science/article/pii/S030439910000022X + - author = Pascual-Montano A and Montserrat Bárcena and J.J Merelo and José-María Carazo + - keywords = Image processing Cluster analysis Neural networks Self-organizing maps Fuzzy logic + diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8141580 --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/_static/basic.css b/_static/basic.css new file mode 100644 index 0000000..30fee9d --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,925 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a:visited { + color: #551A8B; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/_static/css/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 0000000..c718cee --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 0000000..19a446a --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/custom.css b/_static/custom.css new file mode 100644 index 0000000..5b964c0 --- /dev/null +++ b/_static/custom.css @@ -0,0 +1,43 @@ +.rst-content code, .rst-content tt { + white-space: pre-wrap; + } + .wy-side-nav-search { + background-color: firebrick; + } + .wy-nav-top { + background-color: firebrick; + } + a { + color: firebrick; + } + /* visited link */ + a:visited { + color: #999; + } + + .wy-side-nav-search a:visited{ + color: white; + } + + .wy-menu-vertical header, .wy-menu-vertical p.caption { + color: white; + } + + .wy-menu-vertical a{ + color: #F3CBCB; + } + + .wy-side-nav-search input[type=text] { + border-color: #F3CBCB; + } + + html.writer-html4 .rst-content dl:not(.docutils)>dt, + html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.glossary):not(.simple)>dt { + background: #F3CBCB; + color: firebrick; + border-top: 3px solid firebrick; + } + + .rst-content .viewcode-back, .rst-content .viewcode-link { + color: firebrick; + } \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 0000000..d06a71d --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/_static/documentation_options.js b/_static/documentation_options.js new file mode 100644 index 0000000..89435bb --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '1.0.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/_static/favicon.ico b/_static/favicon.ico new file mode 100644 index 0000000..4a4de56 Binary files /dev/null and b/_static/favicon.ico differ diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/_static/file.png differ diff --git a/_static/images/Euler/Euler1.gif b/_static/images/Euler/Euler1.gif new file mode 100644 index 0000000..39734f9 Binary files /dev/null and b/_static/images/Euler/Euler1.gif differ diff --git a/_static/images/Euler/Euler10.gif b/_static/images/Euler/Euler10.gif new file mode 100644 index 0000000..a939459 Binary files /dev/null and b/_static/images/Euler/Euler10.gif differ diff --git a/_static/images/Euler/Euler11.gif b/_static/images/Euler/Euler11.gif new file mode 100644 index 0000000..aa334c1 Binary files /dev/null and b/_static/images/Euler/Euler11.gif differ diff --git a/_static/images/Euler/Euler12.gif b/_static/images/Euler/Euler12.gif new file mode 100644 index 0000000..a1caea2 Binary files /dev/null and b/_static/images/Euler/Euler12.gif differ diff --git a/_static/images/Euler/Euler13.gif b/_static/images/Euler/Euler13.gif new file mode 100644 index 0000000..13106c2 Binary files /dev/null and b/_static/images/Euler/Euler13.gif differ diff --git a/_static/images/Euler/Euler14.gif b/_static/images/Euler/Euler14.gif new file mode 100644 index 0000000..f8a55cd Binary files /dev/null and b/_static/images/Euler/Euler14.gif differ diff --git a/_static/images/Euler/Euler2.gif b/_static/images/Euler/Euler2.gif new file mode 100644 index 0000000..777f0ad Binary files /dev/null and b/_static/images/Euler/Euler2.gif differ diff --git a/_static/images/Euler/Euler3.gif b/_static/images/Euler/Euler3.gif new file mode 100644 index 0000000..aa334c1 Binary files /dev/null and b/_static/images/Euler/Euler3.gif differ diff --git a/_static/images/Euler/Euler4.gif b/_static/images/Euler/Euler4.gif new file mode 100644 index 0000000..a0ffa14 Binary files /dev/null and b/_static/images/Euler/Euler4.gif differ diff --git a/_static/images/Euler/Euler5.gif b/_static/images/Euler/Euler5.gif new file mode 100644 index 0000000..465bb0d Binary files /dev/null and b/_static/images/Euler/Euler5.gif differ diff --git a/_static/images/Euler/Euler7.gif b/_static/images/Euler/Euler7.gif new file mode 100644 index 0000000..fcc2f5f Binary files /dev/null and b/_static/images/Euler/Euler7.gif differ diff --git a/_static/images/Euler/Euler8.gif b/_static/images/Euler/Euler8.gif new file mode 100644 index 0000000..2ac3193 Binary files /dev/null and b/_static/images/Euler/Euler8.gif differ diff --git a/_static/images/Euler/Euler9.gif b/_static/images/Euler/Euler9.gif new file mode 100644 index 0000000..9e4fd1d Binary files /dev/null and b/_static/images/Euler/Euler9.gif differ diff --git a/_static/images/Euler/euler6.gif b/_static/images/Euler/euler6.gif new file mode 100644 index 0000000..424dc8a Binary files /dev/null and b/_static/images/Euler/euler6.gif differ diff --git a/_static/images/banner.png b/_static/images/banner.png new file mode 100644 index 0000000..6b9abaa Binary files /dev/null and b/_static/images/banner.png differ diff --git a/_static/images/composed.png b/_static/images/composed.png new file mode 100644 index 0000000..f5b5b4a Binary files /dev/null and b/_static/images/composed.png differ diff --git a/_static/images/favicon.ico b/_static/images/favicon.ico new file mode 100644 index 0000000..4a4de56 Binary files /dev/null and b/_static/images/favicon.ico differ diff --git a/_static/images/xmipp.png b/_static/images/xmipp.png new file mode 100644 index 0000000..1ada983 Binary files /dev/null and b/_static/images/xmipp.png differ diff --git a/_static/images/xmipp_noBackground.png b/_static/images/xmipp_noBackground.png new file mode 100644 index 0000000..8744783 Binary files /dev/null and b/_static/images/xmipp_noBackground.png differ diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 0000000..c4c6022 --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 0000000..cd1c674 --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 0000000..1fddb6e --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 0000000..d96755f Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 0000000..7107cec Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 0000000..84ab303 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #0000FF } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 0000000..7918c3f --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,574 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms, highlightTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + const contentRoot = document.documentElement.dataset.content_root; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = contentRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = contentRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) { + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + // highlight search terms in the description + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + } + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + // highlight search terms in the summary + if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js + highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted")); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms, + highlightTerms, +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms, highlightTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms, highlightTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms, highlightTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 0000000..8a96c69 --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,154 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + const rest = document.createTextNode(val.substr(pos + text.length)); + parent.insertBefore( + span, + parent.insertBefore( + rest, + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + /* There may be more occurrences of search term in this node. So call this + * function recursively on the remaining fragment. + */ + _highlight(rest, addItems, text, className); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(() => { + /* Do not call highlightSearchWords() when we are on the search page. + * It will highlight words from the *previous* search query. + */ + if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords(); + SphinxHighlight.initEscapeListener(); +}); diff --git a/_templates/versioning.html b/_templates/versioning.html new file mode 100644 index 0000000..5347ebb --- /dev/null +++ b/_templates/versioning.html @@ -0,0 +1,8 @@ +{% if versions %} +

{{ _('Versions') }}

+ +{% endif %} \ No newline at end of file diff --git a/contact.html b/contact.html new file mode 100644 index 0000000..2888deb --- /dev/null +++ b/contact.html @@ -0,0 +1,170 @@ + + + + + + + Contact us — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 0000000..e3c1311 --- /dev/null +++ b/genindex.html @@ -0,0 +1,142 @@ + + + + + + Index — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..d96f0f7 --- /dev/null +++ b/index.html @@ -0,0 +1,177 @@ + + + + + + + Welcome to Xmipp documentation! — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/license.html b/license.html new file mode 100644 index 0000000..e9ca0b5 --- /dev/null +++ b/license.html @@ -0,0 +1,149 @@ + + + + + + + License — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/listOfPublications.html b/listOfPublications.html new file mode 100644 index 0000000..d55d0ac --- /dev/null +++ b/listOfPublications.html @@ -0,0 +1,915 @@ + + + + + + + List of Publications — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + \ No newline at end of file diff --git a/objects.inv b/objects.inv new file mode 100644 index 0000000..ab1ee9c Binary files /dev/null and b/objects.inv differ diff --git a/search.html b/search.html new file mode 100644 index 0000000..5076d29 --- /dev/null +++ b/search.html @@ -0,0 +1,157 @@ + + + + + + Search — Xmipp 1.0.0 documentation + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ +
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..e95c9dc --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["Developers/Checkout-specific-date/index", "Developers/CodeDocumentation/index", "Developers/Guidelines/index", "Developers/How-to-release/index", "Developers/ParallelPrograming/index", "Developers/UsefulScripts/index", "Developers/testing-with-google-C++/index", "Developers/xmipp-Binding/index", "Installation/Installation-with-Scipion/index", "Installation/InstallationNotes/index", "Installation/Requirements/index", "Installation/Standlone-installation/index", "Releases/Releases-scipion-em-xmipp/index", "Releases/Releases-scipion-em-xmippTomo/index", "Releases/Releases-xmipp-program/index", "Utils/ConfigurationF/index", "Utils/Conventions/index", "Utils/Deprecated-programs/index", "Utils/xmippStructure/index", "contact", "index", "license", "listOfPublications"], "filenames": ["Developers/Checkout-specific-date/index.rst", "Developers/CodeDocumentation/index.rst", "Developers/Guidelines/index.rst", "Developers/How-to-release/index.rst", "Developers/ParallelPrograming/index.rst", "Developers/UsefulScripts/index.rst", "Developers/testing-with-google-C++/index.rst", "Developers/xmipp-Binding/index.rst", "Installation/Installation-with-Scipion/index.rst", "Installation/InstallationNotes/index.rst", "Installation/Requirements/index.rst", "Installation/Standlone-installation/index.rst", "Releases/Releases-scipion-em-xmipp/index.rst", "Releases/Releases-scipion-em-xmippTomo/index.rst", "Releases/Releases-xmipp-program/index.rst", "Utils/ConfigurationF/index.rst", "Utils/Conventions/index.rst", "Utils/Deprecated-programs/index.rst", "Utils/xmippStructure/index.rst", "contact.rst", "index.rst", "license.rst", "listOfPublications.rst"], "titles": ["Checkout to a Specific Version", "Code documentation", "Guidelines", "How to release", "Parallel Programming", "Useful Tricks and Scripts", "Google C++ Testing Framework", "Python Binding", "Installation with Scipion", "Installation Notes", "Requirements", "Standalone installation", "Releases scipion-em-xmipp", "Releases scipion-em-xmippTomo", "Releases xmipp program", "Configuration file", "Conventions", "Programs deprecated", "Xmipp structure", "Contact us", "Welcome to Xmipp documentation!", "License", "List of Publications"], "terms": {"If": [0, 2, 3, 4, 5, 6, 7, 9, 10, 15, 16, 17, 19], "you": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 19, 20, 21], "need": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 15, 17, 18], "revert": 0, "xmipp": [0, 1, 2, 5, 6, 7, 8, 10, 15, 16, 17, 19, 21, 22], "its": [0, 4, 5, 6, 9, 12, 14, 15, 16, 20, 21], "associ": [0, 13, 16, 17], "repositori": [0, 3, 6, 9, 11, 14, 15, 18, 19, 20], "base": [0, 4, 5, 9, 10, 12, 14, 18, 22], "particular": [0, 2, 6], "date": 0, "can": [0, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 19, 20], "achiev": [0, 2], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18], "us": [0, 2, 3, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22], "git": [0, 9, 10, 11, 14, 18], "i": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "exampl": [0, 4, 6, 7, 9, 15, 16], "when": [0, 2, 3, 4, 6, 7, 9, 12, 13, 14, 16], "encount": [0, 10], "new": [0, 2, 3, 4, 5, 6, 7, 9, 12, 13, 14, 16, 19, 22], "bug": [0, 3, 9, 12, 14, 19], "wa": [0, 4, 9, 14], "present": [0, 4, 7, 15, 22], "an": [0, 2, 3, 4, 5, 7, 9, 12, 14, 15, 16, 17, 19, 22], "earlier": 0, "have": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 14, 16, 17, 19, 20, 22], "long": [0, 4, 6, 7], "live": 0, "branch": 0, "synchron": 0, "histor": 0, "state": [0, 4, 22], "here": [0, 3, 4, 6, 7, 10, 16, 17], "step": [0, 3, 4, 5, 9, 11, 12, 14, 16, 17], "guid": [0, 3, 9, 10, 11, 20], "how": [0, 5, 6, 7, 11, 15], "accomplish": [0, 4], "identifi": [0, 4, 6], "determin": [0, 22], "want": [0, 4, 5, 6, 7, 15, 16], "In": [0, 2, 3, 4, 6, 7, 9, 10, 14, 15, 16, 18, 21], "follow": [0, 2, 3, 4, 6, 7, 9, 10, 15, 16, 18, 20], "we": [0, 2, 3, 4, 6, 9, 10, 11, 16, 17, 18, 19, 22], "ll": [0, 7, 9], "2020": 0, "09": [0, 22], "27": [0, 22], "08": [0, 22], "57": 0, "42": 0, "commit": [0, 3, 14, 17], "command": [0, 2, 9, 10, 11, 14, 15], "latest": [0, 9], "devel": [0, 3, 9, 11], "befor": [0, 3, 4, 6, 9, 10, 15, 16], "specifi": 0, "bash": [0, 9, 18], "rev": 0, "list": [0, 3, 5, 7, 15, 18], "n": [0, 3, 4, 6, 7, 22], "1": [0, 2, 3, 6, 7, 9, 14, 16, 18, 22], "first": [0, 3, 4, 6, 7, 9, 16], "parent": [0, 4], "serv": [1, 4], "valuabl": 1, "resourc": [1, 4, 6, 18], "develop": [1, 3, 4, 6, 7, 8, 10, 11, 15, 16, 20], "offer": 1, "detail": [1, 4, 9, 10, 12, 14, 16, 18, 20], "inform": [1, 3, 4, 14, 16, 17, 22], "about": [1, 3, 4, 5, 6, 9, 10, 14, 16, 20], "sourc": [1, 2, 3, 6, 7, 10, 18], "function": [1, 2, 4, 6, 9, 12, 14, 15, 16, 22], "method": [1, 2, 4, 6, 12, 13, 14, 16, 18, 22], "descript": [1, 2, 7, 12, 16], "class": [1, 2, 4, 5, 6, 12, 13, 14, 16, 18, 22], "variabl": [1, 2, 4, 7, 15, 18], "explan": [1, 4], "data": [1, 4, 6, 7, 9, 12, 14, 15, 16, 18, 22], "structur": [1, 4, 6, 7, 12, 14, 15, 16, 22], "inter": [1, 4], "compon": [1, 12, 14, 22], "relationship": 1, "more": [1, 2, 3, 4, 6, 7, 9, 10, 11, 12, 13, 15, 17, 20], "c": [1, 3, 4, 9, 10, 14, 16, 18, 20, 22], "python": [1, 3, 5, 10, 14, 15, 18], "java": [1, 2, 7, 9, 10, 18], "although": [2, 16], "support": [2, 4, 9, 12, 14], "stack": [2, 4, 13, 14], "volum": [2, 5, 7, 12, 14, 16, 22], "4": [2, 3, 4, 5, 6, 10, 12, 15, 16, 22], "dimens": [2, 12, 14, 16], "arrai": [2, 7, 14, 16], "memori": [2, 4, 6, 12, 14], "recommend": [2, 6, 8, 9, 10, 11, 15, 20], "avoid": [2, 4, 6, 9, 12, 14], "alloc": [2, 6], "much": [2, 4, 5, 7], "possibl": [2, 4, 6, 9, 10, 11, 12, 14, 16, 17], "onc": [2, 3, 4, 6, 9, 11, 12, 15], "your": [2, 3, 5, 6, 7, 9, 10, 15, 16, 17, 19, 20], "go": [2, 3, 6, 9, 17], "iter": [2, 14, 22], "over": [2, 4], "set": [2, 3, 5, 7, 12, 14, 15, 16, 18, 22], "store": [2, 12, 14, 16], "file": [2, 3, 4, 5, 9, 10, 11, 12, 14, 16, 18], "should": [2, 3, 4, 6, 9, 10, 11, 14, 15, 16, 20], "try": [2, 4, 7, 9, 15, 16, 19], "access": [2, 4, 19], "each": [2, 3, 4, 5, 6, 7, 12, 17, 21], "like": [2, 4, 6, 7, 9, 16], "text": [2, 7], "book": 2, "understood": 2, "almost": [2, 4, 19], "ani": [2, 4, 6, 7, 9, 10, 12, 13, 14, 15, 16, 19, 22], "format": [2, 7, 12, 14, 22], "easier": [2, 4, 20], "done": [2, 3, 4, 16], "properli": [2, 9, 14, 15], "forc": [2, 9], "certain": [2, 5, 10, 15, 18], "indent": 2, "style": [2, 5], "import": [2, 5, 7, 11, 14], "free": [2, 5, 21], "form": [2, 7], "languag": [2, 7, 18], "just": [2, 4, 6, 9, 11, 15, 16], "publish": [2, 3, 22], "printer": 2, "do": [2, 3, 4, 5, 6, 7, 9, 11, 12, 14, 17, 19], "That": [2, 6, 7, 9, 15, 19], "said": [2, 16], "ar": [2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16, 17, 18, 20, 21, 22], "propos": [2, 9, 22], "write": [2, 4, 5, 6, 7, 9, 14, 16, 19], "same": [2, 3, 4, 6, 9, 12, 14, 15, 16], "comment": [2, 7], "english": 2, "case": [2, 6, 7, 9, 10, 11, 12, 14, 15, 16, 21], "header": [2, 7, 10, 15], "guard": 2, "standard": [2, 4, 16, 20], "The": [2, 3, 4, 6, 8, 9, 11, 12, 14, 15, 16, 17, 19, 20, 22], "easiest": [2, 3, 16, 19], "option": [2, 7, 10, 12, 13, 14, 15], "name": [2, 3, 6, 7, 9, 14, 15, 16], "cap": 2, "without": [2, 3, 4, 5, 7, 9, 11, 16, 22], "between": [2, 4, 9, 14], "underscor": [2, 6], "_h": 2, "end": [2, 3, 7, 14, 15, 18], "ifndef": 2, "hashinfo_h": 2, "defin": [2, 4, 5, 6, 7, 12, 14, 15, 16], "call": [2, 6, 12, 16, 18], "hashinfo": 2, "h": [2, 6, 7, 14, 18, 22], "endif": 2, "group": [2, 4, 6, 7, 14, 22], "system": [2, 4, 5, 6, 9, 10, 15, 16], "includ": [2, 3, 4, 6, 7, 8, 9, 12, 14, 15], "lt": 2, "gt": 2, "well": [2, 3, 4, 16, 22], "local": [2, 3, 9, 12, 14, 15, 22], "ones": [2, 3, 16, 21], "A": [2, 3, 4, 6, 7, 9, 15, 16, 22], "blank": 2, "line": [2, 6, 9, 14, 17], "iostream": 2, "string": [2, 7], "vector": [2, 6, 16, 18], "timer": 2, "than": [2, 4, 6, 7, 9, 14, 15], "one": [2, 3, 4, 6, 7, 9, 10, 11, 12, 14, 16], "separ": [2, 12], "section": [2, 3, 6, 11, 15], "const": [2, 7], "int": [2, 4, 6, 7, 16], "globalvar": 2, "0": [2, 3, 4, 5, 6, 7, 14, 15, 16, 22], "struct": [2, 7], "foo": [2, 6], "choos": [2, 9], "consist": [2, 7, 9, 16], "criteria": 2, "veri": [2, 6, 16], "common": [2, 4, 6, 14, 18], "camelcas": 2, "notat": 2, "capit": 2, "letter": 2, "word": [2, 3, 6], "start": [2, 3, 4, 6, 11, 14, 16], "begin": [2, 3, 9, 14, 16], "lowercas": 2, "imper": 2, "onli": [2, 3, 4, 5, 7, 9, 10, 11, 15, 16], "except": [2, 14, 21], "those": [2, 3, 9, 14, 15, 16], "limit": [2, 9], "lifespan": 2, "j": [2, 3, 16, 22], "tmp": [2, 6], "aux": 2, "space": [2, 6, 16], "tab": 2, "valu": [2, 4, 6, 12, 14], "is__4__": 2, "most_decent_": 2, "editor": [2, 22], "convert": [2, 5, 12, 13, 18], "automat": [2, 3, 6, 10, 11, 12, 14, 15, 22], "save": [2, 9, 12, 14, 18], "unix": [2, 4, 5, 7], "charact": [2, 7, 9], "pair": [2, 6, 22], "cpp": [2, 6, 7, 14, 18], "y": [2, 3, 5, 6, 9, 10, 15, 16, 22], "inner": 2, "doxygen": 2, "document": [2, 12, 14, 16], "posit": [2, 6, 14, 16], "someth": [2, 4, 7, 9, 10], "els": [2, 7], "while": [2, 4, 10, 15, 16], "switch": 2, "break": [2, 4], "default": [2, 9, 10, 11, 12, 14, 15], "lenght": 2, "to__80__": 2, "char": [2, 6, 7], "print": [2, 6, 14], "time": [2, 4, 6, 7, 9, 12, 14, 15, 17, 18, 19], "afterward": [2, 15], "few": [2, 6, 15, 21], "paramet": [2, 4, 5, 14], "": [2, 3, 6, 7, 9, 15, 16, 18, 21, 22], "give": [2, 6, 7, 16], "void": [2, 4, 6, 7], "functionwithmanyparam": 2, "par1": 2, "float": [2, 5, 7, 14, 16], "par2": 2, "par3": 2, "std": [2, 7, 9, 15], "doubl": [2, 7], "par4": 2, "par5": 2, "compil": [2, 3, 5, 6, 7, 11, 14, 15, 18, 20], "least": [2, 3, 10], "wall": 2, "ansi": 2, "pai": [2, 8, 10, 16, 20], "attent": [2, 8, 10, 16], "warn": [2, 5, 12, 14], "too": [2, 4, 5, 9], "make": [2, 4, 5, 6, 7, 9, 10, 15, 16, 18, 20], "test": [2, 10, 12, 13, 14, 17, 18, 22], "optim": [2, 12, 14, 15, 22], "verifi": [2, 3, 6, 9, 15], "thei": [2, 4, 5, 6, 7, 12, 14, 15, 16, 22], "aim": [2, 20], "clear": [2, 4], "open": [2, 9, 17, 19, 22], "namespac": 2, "global": [2, 6, 12, 14], "scope": 2, "everi": 2, "forward": 2, "declar": [2, 6, 7], "good": [2, 9, 10, 17], "featur": [2, 6, 14, 19], "fold": 2, "syntax": [2, 15], "highlight": [2, 11], "autocomplet": 2, "number": [2, 3, 4, 5, 6, 7, 14, 16, 17, 18, 22], "malloc": 2, "delet": [2, 3, 6, 13], "instead": [2, 3, 7, 12, 14], "preprocessor": 2, "definit": [2, 4, 16, 18], "old": [2, 3, 4, 5, 9], "requir": [2, 4, 7, 11, 12, 13, 14, 16, 18, 20, 22], "alwai": [2, 4, 7, 15, 16], "clean": [2, 3, 4, 6, 14], "up": [2, 4, 6, 9, 10, 14, 17, 18, 20], "unus": [2, 12, 14], "astyl": 2, "It": [2, 3, 4, 7, 9, 11, 14, 16, 18], "reindent": 2, "reformat": 2, "from": [2, 3, 4, 5, 6, 8, 9, 12, 13, 14, 15, 16, 17, 19, 22], "integr": [2, 7, 12, 14], "anoth": [2, 5, 15], "eclips": 2, "emac": 2, "100": 2, "accur": [2, 22], "perform": [2, 4, 5, 7, 12, 14, 22], "most": [2, 4, 7, 9, 11, 16, 17, 21, 22], "hard": [2, 14, 18], "work": [2, 3, 4, 6, 9, 10, 11, 12, 13, 14, 22], "basic": [2, 4, 6, 9, 15, 16, 18], "accept": [2, 7, 12, 14], "sever": [2, 4, 9, 11, 12, 14, 16], "equival": [2, 7], "entri": [2, 7], "originalsourcefil": 2, "beautifiedsourcefil": 2, "variou": [2, 14], "predefin": 2, "current": [2, 3, 6, 9, 15], "full": [2, 13, 14, 22], "astylerc": 2, "bracket": 2, "min": 2, "condit": [2, 4, 6, 12, 14, 16, 22], "unpad": 2, "paren": 2, "pad": [2, 12], "oper": [2, 4, 6, 10, 14], "let": [3, 6, 10, 16], "assum": [3, 6, 16], "version": [3, 4, 6, 7, 10, 11, 12, 13, 14, 15, 18], "x": [3, 5, 6, 14, 15, 16, 22], "yy": 3, "zz": 3, "where": [3, 6, 7, 8, 9, 10, 11, 14, 15, 16, 18, 20, 21], "3": [3, 5, 6, 7, 9, 10, 15, 16, 22], "keep": [3, 6, 13, 15, 16], "main": [3, 4, 6, 7, 9, 12, 14, 15, 18, 20], "abl": [3, 4, 9, 12, 14, 17], "sort": [3, 5, 22], "usual": [3, 4, 6, 7, 9, 15, 16, 18], "also": [3, 4, 6, 7, 8, 9, 12, 14, 16, 17, 18, 19, 20], "xmipp3": [3, 4, 5, 18], "year": [3, 22], "month": [3, 22], "greek": 3, "god": 3, "goddess": 3, "apollo": 3, "borea": 3, "see": [3, 4, 7, 9, 10, 11, 15, 16, 17], "below": [3, 15, 18], "note": [3, 4, 5, 15, 22], "add": [3, 5, 6, 7, 9, 12, 14, 15, 18], "all": [3, 4, 6, 9, 12, 14, 16, 17, 18, 20, 21], "schedul": [3, 4, 13], "prepar": 3, "everyth": [3, 4], "post": [3, 9, 22], "workdai": 3, "freez": 3, "fix": [3, 6, 9, 10, 13, 14, 16], "some": [3, 4, 6, 7, 9, 10, 12, 14, 15, 16, 17, 18, 21], "minor": 3, "upgrad": [3, 14], "protect": [3, 4, 6], "unprotect": 3, "pr": 3, "other": [3, 4, 8, 9, 10, 12, 13, 16, 18, 20], "get": [3, 6, 7, 9, 12, 14, 15, 16, 18, 19], "aprov": 3, "ha": [3, 4, 6, 7, 9, 10, 11, 12, 14, 16, 17], "upload": [3, 6], "em": [3, 8, 9, 11, 18, 19, 20, 22], "xmippviz": [3, 18], "xmippcor": [3, 18, 19], "pleas": [3, 5, 9, 10, 11, 15, 17, 18], "order": [3, 4, 14, 15, 16], "sure": [3, 9, 10], "updat": [3, 4, 6, 9, 10, 12, 13, 14, 15], "repo": [3, 14], "compat": [3, 9, 10, 13, 14, 15, 16], "wai": [3, 4, 8, 9, 11, 12, 14, 15, 16, 17, 19, 20, 22], "dure": [3, 8, 11, 12, 14, 15, 18, 20], "procedur": [3, 6, 16], "There": [3, 4, 7, 11, 16], "three": [3, 6, 7, 16, 18, 22], "type": [3, 4, 7, 9, 14, 16], "One": [3, 4], "plugin": [3, 8, 9, 10, 12, 14, 18, 20, 21], "sync": 3, "relat": [3, 8, 9, 14, 16, 19, 20], "tgz": [3, 18], "host": 3, "web": [3, 5, 9, 11], "third": [3, 12, 16], "link": [3, 14, 15], "must": [3, 6, 7, 9, 16, 21], "xmipp_bundl": 3, "xmipp_vers": 3, "instal": [3, 7, 10, 15, 17, 18, 20, 21], "token": [3, 18], "xmipp_hom": [3, 6, 9], "vx": 3, "tar": [3, 9, 18], "src": [3, 6, 9, 11, 18], "__init__": [3, 18], "py": [3, 7, 17, 18], "_currentvers": 3, "find": [3, 4, 5, 9, 11, 15], "binari": [3, 9, 11, 12, 14, 18], "sinc": [3, 6], "xmipp_vernam": 3, "replac": [3, 14], "logo": [3, 14], "protocol": [3, 9, 12, 13, 18, 20, 22], "xmipp_logo": [3, 18], "png": [3, 18], "imag": [3, 4, 5, 7, 9, 12, 14, 18, 20, 22], "xmipp_logo_origin": 3, "review": [3, 9, 15, 17], "statu": [3, 12], "_devstatu": 3, "mayb": 3, "chang": [3, 4, 9, 10, 12, 14, 17, 18, 22], "product": [3, 12], "readi": [3, 10, 12, 14, 20], "seem": [3, 16], "pull": [3, 15], "request": [3, 4, 19], "approv": 3, "merg": [3, 12, 14], "yet": [3, 4, 12, 14], "contain": [3, 4, 6, 7, 9, 11, 15, 18], "conflict": 3, "resolv": [3, 15], "rest": [3, 11, 16], "next": [3, 5, 6, 7, 9, 11, 16], "self": [3, 7, 18, 22], "mind": [3, 6, 9, 15, 16], "To": [3, 4, 6, 9, 10, 11, 15, 16, 18, 19, 20], "fresh": [3, 6], "scipionmast": 3, "clone": [3, 9, 11, 18], "github": [3, 9, 11, 15, 18, 19, 22], "com": [3, 6, 9, 11, 18, 22], "i2pc": [3, 9, 11, 18, 19, 22], "xmipp2releas": 3, "cd": [3, 9, 11, 18], "scipion3": [3, 9, 10, 11, 15], "run": [3, 4, 5, 6, 10, 11, 14, 15, 18, 20], "br": 3, "8": [3, 6, 9, 10, 14, 15, 16], "uninstallp": 3, "p": [3, 6, 9, 11, 12, 22], "checkout": 3, "installp": [3, 9, 11], "rm": [3, 9], "rf": [3, 9], "ln": [3, 9], "build": [3, 7, 9, 10, 12, 14, 18], "grep": 3, "xxx": 3, "xxy": 3, "goe": 3, "error": [3, 6, 7, 9, 12, 14, 15, 22], "howev": [3, 6, 9, 10, 11, 15, 16, 17, 20], "buildbot": 3, "xmipp_bundle_devel": 3, "xmipp_devel": 3, "ensur": [3, 10, 14, 15], "info": [3, 11, 12, 14, 18], "script": [3, 7, 9, 10, 11, 15, 17, 18], "push": 3, "Then": [3, 4, 6, 15], "xmippsrc": [3, 9, 15], "accord": [3, 5, 15, 16], "abov": [3, 7, 9, 10, 15, 16, 18], "python3": [3, 9, 10, 12, 14, 15], "m": [3, 6, 18, 22], "scipioninstal": 3, "conda": [3, 9, 12, 14, 15], "noxmipp": [3, 8, 20], "noask": [3, 15], "scipion2releasexmipp": 3, "thing": [3, 4, 6, 7], "path": [3, 9, 11, 14, 15, 20], "avail": [3, 4, 6, 9, 10, 12, 14, 20, 21, 22], "installb": [3, 9, 15], "copi": [3, 14, 16], "overwrit": 3, "now": [3, 4, 5, 9, 12, 13, 14, 16, 21], "typic": [3, 22], "problem": [3, 4, 6, 9, 10, 12, 14, 16, 22], "match": [3, 4, 5, 13, 22], "fine": 3, "mean": [3, 4, 6, 7, 9, 11, 15, 16], "under": [3, 12, 14, 15, 21, 22], "thu": 3, "nolan": 3, "remot": 3, "don": [3, 6, 7, 16], "t": [3, 6, 7, 16, 22], "know": [3, 4, 5, 10, 16], "ask": [3, 4, 9, 14, 15], "peopl": 3, "download": [3, 6, 9, 11, 14, 15], "creation": [3, 4, 6], "worth": [3, 6], "stage": 3, "take": [3, 4, 6, 7, 9, 11, 12, 14, 15, 16, 20], "account": [3, 14, 16], "automaticli": 3, "remov": [3, 5, 9, 12, 14, 17], "exist": [3, 4, 7, 9, 14], "so": [3, 4, 5, 6, 7, 9, 12, 14, 15, 16, 18, 19, 21], "via": [3, 8, 9, 10, 11, 20], "manag": [3, 8, 9, 10, 12, 14, 16, 17, 20], "folder": [3, 9, 11, 12, 14, 17, 18], "directli": [3, 14], "pip": [3, 9, 10], "http": [3, 6, 9, 11, 16, 18, 22], "mm": 3, "what": [3, 4, 5, 7, 14, 16], "after": [3, 5, 6, 12, 14, 18], "scip\u00econ": 3, "action": [3, 4], "d": [3, 7, 9, 22], "tagnam": 3, "origin": [3, 12, 16], "permiss": [3, 9], "check": [3, 9, 10, 14, 15, 16, 18, 21], "notic": [3, 15, 16], "virtual": [3, 6, 10, 14], "environ": [3, 4, 6, 10, 12, 14, 15, 18], "activ": [3, 9], "dist": 3, "alreadi": [3, 4, 6], "setup": [3, 6, 9, 18], "sdist": 3, "twine": 3, "flag": [3, 7, 8, 11, 14, 15, 20], "lowest": 3, "e": [3, 5, 6, 7, 12, 14, 15, 18, 19, 22], "g": [3, 5, 9, 10, 12, 14, 15, 18, 22], "conclud": 3, "two": [3, 4, 5, 7, 9, 10, 11, 12, 14, 16, 20], "congrat": 3, "mail": 3, "twitter": 3, "checkpoint": 3, "histori": 3, "greekgod": 3, "syncron": [3, 4], "release_3": 3, "2": [3, 5, 6, 7, 9, 10, 14, 16, 22], "edit": [3, 6, 9, 15], "init": 3, "writh": 3, "last": [3, 7, 9, 14, 16, 17], "digit": 3, "mst": 3, "Be": [3, 4], "probabl": [3, 22], "xmipp_logo_devel": 3, "simplest": 4, "sens": [4, 6], "comput": [4, 5, 6, 12, 14, 16, 22], "simultan": 4, "multipl": [4, 6, 9, 12, 14], "solv": [4, 9, 12, 14], "cpu": [4, 9], "broken": 4, "discret": [4, 16], "part": [4, 6, 7, 16, 17, 22], "concurr": [4, 12, 14], "further": [4, 16], "down": [4, 6, 16], "seri": [4, 13], "instruct": [4, 9, 15, 18], "execut": [4, 6, 9, 10, 11, 12, 14], "differ": [4, 5, 6, 9, 12, 14, 15], "might": [4, 6, 9, 10, 16], "singl": [4, 7, 16, 20, 22], "processor": [4, 10], "arbitrari": 4, "connect": [4, 12, 14], "network": [4, 22], "librari": [4, 6, 7, 9, 10, 14, 15, 16, 17, 18, 20], "combin": [4, 7, 9], "both": [4, 6, 11, 15, 16], "apart": 4, "piec": [4, 16], "moment": 4, "less": [4, 16], "read": [4, 7, 9, 14, 16, 20], "nice": 4, "task": 4, "distribut": [4, 5], "design": [4, 14, 20], "chunk": 4, "known": [4, 10, 22], "decomposit": 4, "partit": 4, "among": [4, 10], "process": [4, 5, 9, 10, 11, 12, 14, 15, 18, 20, 22], "particl": [4, 5, 12, 14, 20, 22], "electron": [4, 5, 20, 22], "microscopi": [4, 5, 20, 22], "deal": [4, 14], "thousand": 4, "easi": 4, "care": [4, 9, 20], "creat": [4, 6, 7, 9, 11, 14, 15, 18, 19], "paralleltaskdistributor": 4, "which": [4, 6, 7, 9, 11, 15, 16, 22], "realli": [4, 16], "worker": 4, "until": [4, 16], "noth": [4, 7], "subclass": [4, 12], "distributor": 4, "total": [4, 6, 16], "10": [4, 9, 10, 22], "td": 4, "threadtaskdistributor": 4, "parellel": 4, "processseveralimag": 4, "size_t": 4, "firstimag": 4, "lastimag": 4, "gettask": 4, "processoneimag": 4, "technic": 4, "independ": [4, 12, 14], "stream": [4, 6, 12, 14], "understand": 4, "fair": 4, "amount": 4, "overhead": 4, "id": [4, 7], "user": [4, 8, 9, 11, 12, 15, 17, 20, 21], "directori": [4, 6, 9, 11, 12, 14, 15, 18], "regist": 4, "heap": [4, 6], "descriptor": 4, "signal": [4, 22], "share": [4, 5, 6, 9], "commun": [4, 9, 22], "tool": [4, 9, 10, 12, 14, 18], "messag": [4, 6, 7, 9, 14], "queue": [4, 5], "pipe": 4, "semaphor": 4, "within": [4, 6, 10, 16], "entiti": 4, "larg": [4, 22], "becaus": [4, 9], "duplic": [4, 12, 14], "bare": 4, "essenti": 4, "enabl": [4, 7, 9, 15], "them": [4, 5, 6, 7, 9, 15, 16], "code": [4, 6, 7, 10, 12, 14, 15, 17, 18, 21], "summari": [4, 12, 22], "own": [4, 5, 9, 12, 14, 15, 21], "flow": [4, 22], "control": [4, 10, 14], "o": [4, 7, 9, 15, 18, 22], "mai": [4, 5, 6, 9, 16], "act": 4, "equal": 4, "depend": [4, 5, 6, 11, 12, 14, 20], "di": 4, "similar": [4, 9, 15], "lightweight": 4, "been": [4, 6, 9, 11, 12, 14, 16, 17], "through": [4, 10, 11, 15, 22], "made": [4, 18, 20], "close": [4, 9, 12], "seen": [4, 7], "pointer": [4, 7, 12, 14, 15], "point": [4, 9, 14, 16], "locat": [4, 6, 9, 15, 20], "therefor": [4, 15], "explicit": 4, "programm": [4, 6], "posix": 4, "found": [4, 5, 6, 9, 11, 12, 15, 16, 17], "pass": [4, 6, 15], "imagin": 4, "b": [4, 7, 22], "splite": 4, "a1": 4, "a2": 4, "a3": 4, "figur": [4, 16], "serial": [4, 15], "easili": 4, "threadmanag": 4, "diffent": 4, "threadfunct": 4, "prototyp": 4, "Its": 4, "typedef": 4, "threadargu": 4, "arg": [4, 7, 18], "argument": [4, 6, 7, 14], "thread_id": 4, "addit": [4, 6, 11, 15, 18], "workclass": 4, "hold": 4, "refer": [4, 5, 7, 9, 10, 11, 13, 14, 16, 22], "previou": [4, 5, 7, 12, 14, 16], "functiona": 4, "functionb": 4, "functionc": 4, "tm": 4, "setdata": 4, "mydata": 4, "put": [4, 6, 7], "vital": 4, "faster": [4, 9], "guarante": 4, "correct": [4, 5, 6, 9], "provid": [4, 6, 14, 16, 22], "result": [4, 6, 7, 14, 15, 16, 22], "sequenti": 4, "primarili": [4, 9, 20], "mutex": [4, 14], "allow": [4, 6, 7, 9, 11, 12, 13, 14, 22], "portion": 4, "wich": 4, "encapsul": 4, "initi": [4, 6, 16, 22], "pthread": 4, "mutexupd": 4, "insid": [4, 7, 9, 11, 14, 16, 20], "lock": 4, "unlock": 4, "adapt": [4, 12], "better": [4, 12, 16], "circumst": 4, "For": [4, 6, 7, 9, 10, 12, 14, 16], "barrier": 4, "continu": [4, 6, 12, 14], "reach": [4, 19], "platform": [4, 10], "implement": [4, 7, 12, 13, 14, 16], "complet": [4, 6], "element": [4, 14], "togeth": [4, 16], "estim": [4, 5, 12, 14, 22], "pi": 4, "tip": 4, "debug": [4, 14, 15], "nightmar": 4, "static": [4, 7, 12], "Such": 4, "lead": [4, 9, 22], "unexpect": 4, "repres": [4, 7, 16, 22], "advantag": 4, "decrear": 4, "reus": [4, 5, 6], "destroi": 4, "slight": 4, "On": [4, 7], "applic": [4, 6, 14, 17, 18], "translat": [4, 5, 16], "lower": 4, "critic": 4, "region": [4, 12, 13, 14], "misus": 4, "race": 4, "bad": [4, 9], "deadlock": 4, "forev": 4, "interfac": [4, 7, 18], "consensu": [4, 12, 14, 22], "forum": 4, "40": [4, 22], "particip": 4, "organ": [4, 16, 22], "vendor": 4, "research": [4, 11, 22], "softwar": [4, 6, 8, 9, 18, 20, 21, 22], "goal": 4, "establish": [4, 16], "portabl": 4, "effici": [4, 12, 22], "flexibl": [4, 15], "wide": 4, "As": [4, 6, 16], "ieee": [4, 22], "iso": 4, "fact": [4, 16], "becom": [4, 7, 15], "industri": [4, 21], "hpc": 4, "mpinod": 4, "barrierwait": 4, "util": [4, 17, 18], "concept": [4, 6, 7, 16], "mpitaskdistributor": 4, "commonli": 5, "feel": [5, 7], "boxertoxmippmark": 5, "coordin": [5, 12, 14, 16, 18], "eman": 5, "boxer": 5, "xmipp_mark": 5, "correctcoordin": 5, "border": 5, "createmaskfrommap": 5, "binar": 5, "threshold": [5, 12], "map": [5, 12, 14, 22], "runkerdensom": 5, "appli": [5, 12, 14, 16], "kerdensom": 5, "2d": [5, 12, 14, 22], "rotat": [5, 16], "power": 5, "spectra": 5, "submitmpijobonjumilla": 5, "parallel": [5, 6, 12, 13, 14, 18], "job": 5, "our": [5, 7, 16, 19, 22], "alpha": [5, 14], "convertxmdfiletorelionposfil": 5, "classfic": 5, "gener": [5, 6, 7, 9, 12, 14, 15, 16, 22], "po": 5, "extract": [5, 6, 7, 12, 13], "relion": 5, "fromxmipptovariance3d": 5, "pawel": 5, "penzeck": 5, "spider": [5, 12, 16], "align": [5, 12, 13, 14, 16, 22], "selectionfilespidertoxmipp": 5, "select": [5, 9, 14, 16, 22], "selfil": 5, "xmipppreprocess": 5, "tiff2raw": 5, "ctf": [5, 12, 14, 22], "normal": [5, 6, 7, 9, 12, 14, 22], "phase": [5, 12, 14], "etc": 5, "movingparticl": 5, "analyz": 5, "behaviour": [5, 14], "ml": 5, "classif": [5, 18, 22], "experi": [5, 9, 10, 12], "sortimagesbasedondocfil": 5, "newxmipp": 5, "docfil": [5, 18], "cc": [5, 15, 18], "ctffindtoxmippctfparam": 5, "ctffind": 5, "compareclassaverageswithreproject": 5, "averag": [5, 12, 14, 22], "project": [5, 12, 13, 14, 18, 20, 22], "3d": [5, 12, 13, 20, 22], "model": [5, 12, 14, 15, 22], "visual": 5, "opendx": 5, "comparevolumet": 5, "volumet": 5, "clase": 5, "volumexmipp": 5, "ctfparamoldnew": 5, "metadata": [5, 6, 12, 14, 18], "exportpo": 5, "ctffindtoxmippthre": 5, "webtoxmippmark": 5, "pick": [5, 9, 10, 12, 14, 22], "estimatingnoisepowerforagivensnr": 5, "nois": [5, 12, 22], "phantom": [5, 16], "given": [5, 12, 15, 16], "snr": 5, "cosssmalltrick": 5, "empti": [5, 12, 14, 15], "radial": 5, "estimatethectf": 5, "runmpiprogramswithoutrepeatingthepassword": 5, "mpi": [5, 9, 12, 13, 14], "program": [5, 6, 7, 9, 10, 11, 12, 15, 18, 20], "repeat": 5, "password": 5, "correctingmisalignmentofpdb": 5, "look": [5, 6, 7, 9, 15, 16], "misalign": [5, 13, 14], "symmetri": [5, 12, 14], "axi": [5, 14, 16], "pdb": [5, 12, 14], "howmanyreferenceproject": 5, "angular": [5, 22], "equivalenteulerangl": 5, "euler": 5, "angl": [5, 12, 13, 14], "xy": 5, "mirror": [5, 14], "express": [5, 16], "convertimagestoxmipp": 5, "ccp4": 5, "removeopenmpiwarn": 5, "openmpi": [5, 9, 10, 15], "openib": 5, "udapl": 5, "eulerangl": 5, "interpret": [5, 7, 14, 22], "hexdumpf": 5, "hexdump": 5, "consid": [5, 7, 15], "endian": 5, "convertingfrealignxmipp": 5, "convers": [5, 12], "frealign": 5, "convertinglstxmipp": 5, "lst": 5, "definedmacro": 5, "macro": [5, 6, 7, 14], "convertdownsamplepo": 5, "downsampl": [5, 12, 14, 22], "posfil": 5, "importposfromemanandspid": 5, "applygeoinreconstructionmetadata": 5, "reconstruct": [5, 12, 13, 14, 18, 22], "shift": [5, 12, 14], "generatetiltpair": 5, "untilt": 5, "tilt": [5, 12, 13, 16, 22], "micrograph": [5, 9, 12, 14, 22], "factor": [5, 22], "proce": 5, "eg": 5, "finer": 5, "pixel": [5, 12, 14, 16], "size": [5, 6, 12, 13, 14], "shell": [5, 9, 22], "scalepo": 5, "again": [5, 9, 16], "scaleshift": 5, "unit": [6, 12, 20], "simpl": [6, 7, 22], "short": 6, "modul": [6, 7, 18], "gtest": [6, 18], "quickli": 6, "success": 6, "demonstr": 6, "incorpor": [6, 9], "6": [6, 9, 22], "tutori": 6, "explain": [6, 11, 14, 16], "googletest": 6, "wiki": [6, 10, 12, 14, 22], "v1_6_primer": 6, "introduct": 6, "_why_google_c": 6, "_testing_framework": 6, "assert": 6, "statement": 6, "whether": [6, 14], "true": [6, 9, 12, 15, 16], "nonfat": 6, "failur": 6, "fatal": [6, 14], "occur": [6, 12], "abort": 6, "otherwis": [6, 9], "behavior": [6, 15], "crash": [6, 14], "fail": [6, 14], "succe": 6, "mani": [6, 16], "reflect": [6, 12], "object": [6, 7, 9, 16, 22], "subroutin": 6, "resembl": 6, "gest": 6, "along": [6, 16], "suppli": 6, "custom": [6, 11], "append": [6, 12, 14, 15], "come": [6, 7], "effect": [6, 22], "assert_": 6, "expect_": 6, "prefer": [6, 15, 16], "report": [6, 14, 17, 19, 22], "doesn": 6, "question": [6, 19], "return": [6, 14], "immedi": [6, 19], "possibli": 6, "skip": [6, 15], "caus": [6, 9], "leak": [6, 14], "natur": [6, 22], "checker": 6, "simpli": 6, "assert_eq": 6, "unequ": 6, "length": [6, 7], "expect_eq": 6, "index": [6, 14, 16], "nativ": [6, 12, 15], "extra": [6, 12, 14], "rule": [6, 16], "ideal": 6, "routin": 6, "home_xmipp": 6, "test_classnam": 6, "output": [6, 12, 14], "written": [6, 9, 16, 20], "temporari": [6, 18], "These": [6, 10, 16, 22], "finish": [6, 12, 16], "input": [6, 12, 14, 18, 22], "fly": 6, "place": 6, "classnam": 6, "cycl": 6, "u": [6, 7, 10, 12, 17, 22], "factori": 6, "properlli": 6, "pplicat": 6, "test_metadata": 6, "test_metadata_main": 6, "test_f": 6, "ordinari": 6, "specif": [6, 7, 9, 15, 22], "second": [6, 7, 16], "valid": [6, 12, 13, 14, 22], "_": [6, 9], "integ": [6, 16], "metadatatest": 6, "factorialhandleszeroinput": 6, "factorialhandlespositiveinput": 6, "40320": 6, "routinesetup": 6, "callingteardown": 6, "No": 6, "teardown": 6, "__": 6, "NOT": 6, "myprettyclass": 6, "test_myprettyclass": 6, "test_myprettyclass_main": 6, "bellow": 6, "templat": [6, 12, 14, 18], "sconscript": [6, 18], "addxmippctest": 6, "format_prepend": 6, "extern": [6, 14, 17, 18], "fuse": 6, "myprettyclasstest": 6, "public": [6, 12, 14], "constructor": 6, "right": [6, 11, 14, 16], "destructor": [6, 14], "bar": 6, "doe": [6, 7, 9, 11, 14], "abc": 6, "methodbardoesabc": 6, "filenam": [6, 7, 12], "input_filepath": 6, "packag": [6, 7, 9, 10, 15, 16, 22], "testdata": 6, "myinputfil": 6, "dat": 6, "output_filepath": 6, "myoutputfil": 6, "f": [6, 7, 22], "xyz": 6, "doesxyz": 6, "exercis": 6, "gtest_api_": 6, "argc": 6, "argv": 6, "initgoogletest": 6, "run_all_test": 6, "invok": [6, 7, 11], "xcompil": [6, 15], "xmipp_test_myprettyclass": 6, "run_test_myprettyclass": 6, "xmipp_test_matrix": 6, "roberto": [6, 22], "tumbao": 6, "xmipp_svn": 6, "matrixtest": 6, "invers": 6, "ok": 6, "det3x3": 6, "solvelinearsystem": 6, "initgaussian": 6, "tear": 6, "ran": 6, "sometim": [6, 9, 10], "ti": 6, "machin": [6, 7, 10, 14, 22], "mathemat": [6, 16], "drive": 6, "could": [6, 7, 9, 16], "littl": [6, 16], "goldstandard": 6, "toler": [6, 12], "fals": [6, 7, 15], "owner": 6, "night": 6, "einstein": 6, "sent": 6, "sysadmin": 6, "regener": [6, 15], "hi": 6, "respons": [6, 21], "repair": 6, "server": [6, 14], "bin": [6, 9, 14, 15, 18], "xmipp_sync_data": 6, "scipion": [6, 10, 15, 18, 19, 20, 22], "cnb": [6, 19, 22], "csic": [6, 19, 22], "xmipp_program": 6, "borrow": 7, "extens": [7, 16], "writ": 7, "python2": 7, "5": [7, 9, 10, 15, 16, 22], "dev": [7, 9, 10, 19], "expos": 7, "signatur": 7, "pyobject": 7, "myfunct": 7, "myfunctionwithkeyword": 7, "kw": 7, "myfunctionwithnoarg": 7, "preced": 7, "none": [7, 14], "py_return_non": 7, "whatev": 7, "never": 7, "outsid": [7, 14], "would": [7, 16, 19], "shown": [7, 16], "_isimag": 7, "obj": 7, "kwarg": 7, "isimag": 7, "_valu": 7, "py_return_tru": 7, "py_return_fals": 7, "pymethoddef": 7, "ml_name": 7, "pycfunct": 7, "ml_meth": 7, "ml_flag": 7, "ml_doc": 7, "member": 7, "address": [7, 16, 22], "describ": [7, 15, 16], "seection": 7, "tell": [7, 16], "meth_vararg": 7, "bitwis": 7, "ed": 7, "meth_keyword": 7, "keyword": [7, 22], "meth_noarg": 7, "indic": [7, 15], "docstr": 7, "null": [7, 9, 12, 14], "termin": 7, "sentinel": 7, "appropri": 7, "_method": 7, "compos": [7, 20], "filename_compos": 7, "root": [7, 9, 16], "OR": 7, "prefix": 7, "composeblock": 7, "filename_composeblock": 7, "blocknam": 7, "load": 7, "initmodul": 7, "initxmipp": 7, "overal": 7, "pymodinit": 7, "func": [7, 18], "initmodule3": 7, "py_initmodule3": 7, "export": [7, 9, 15], "module_method": 7, "_func": 7, "xmipp_method": 7, "helloworld": 7, "py_buildvalu": 7, "hello": 7, "helloworld_doc": 7, "raw": 7, "latex": 7, "helloworld_func": 7, "inithelloworld": 7, "module_func": 7, "pyobjectarg": 7, "pars": 7, "interest": [7, 12, 14, 16], "help": [7, 11, 12, 14, 16], "api": [7, 18], "expect": [7, 15], "appear": [7, 9, 12], "pyarg_parsetupl": 7, "l": [7, 15, 22], "non": [7, 12, 14, 15, 18, 22], "embed": 7, "segment": 7, "buffer": 7, "py_unicod": 7, "unicod": 7, "w": [7, 22], "z": [7, 14, 16], "per": 7, "sequenc": [7, 14], "treat": 7, "item": 7, "entir": [7, 14], "re": 7, "actual": [7, 16], "show": [7, 9], "foo_add": 7, "ii": 7, "cauptur": 7, "foo_add_subtract": 7, "sum": [7, 16], "xmipp_imag": 7, "ndarrayobject": 7, "myimport_arrai": 7, "import_arrai": 7, "time_config": 7, "home": [7, 9, 15], "coss": [7, 22], "temp": [7, 18], "bpv_project": 7, "bpv_scale_filtered_window": 7, "vol": [7, 14, 16], "processortimestamp": 7, "t0": 7, "multidimarrai": [7, 14], "mi": 7, "annotate_processor_tim": 7, "retval": 7, "for_all_direct_elements_in_multidimarrai": 7, "direct_multidim_elem": 7, "cout": 7, "elapsed_tim": 7, "endl": 7, "py_initi": 7, "npy_intp": 7, "dim": 7, "zsize": 7, "ysize": 7, "xsize": 7, "pyi": 7, "pyarray_simplenewfromdata": 7, "npy_doubl": 7, "multidim_arrai": 7, "testpython": 7, "pname": 7, "pystr": 7, "_fromstr": 7, "pmodul": 7, "pyimport_import": 7, "py_decref": 7, "arglist": 7, "oo": 7, "pfunc": 7, "pyobject_getattrstr": 7, "pyobject_callobject": 7, "pyfloat_asdoubl": 7, "catch": 7, "xmipperror": 7, "xmipp_compil": 7, "mycod": 7, "And": 7, "framework": [8, 19, 20], "cryo": [8, 20, 22], "sudo": [9, 10], "apt": [9, 10], "gcc": [9, 10, 14, 15], "altern": [9, 16], "usr": [9, 14, 15], "50": 9, "11": [9, 10, 15, 22], "experienc": 9, "undefin": [9, 14], "issu": [9, 10, 14, 17, 19, 22], "583": 9, "scon": [9, 10, 14, 18], "libfftw3": [9, 10], "libopenmpi": [9, 10], "libhdf5": [9, 10], "numpi": [9, 10, 12, 14, 15], "libtiff5": [9, 10], "libsqlite3": [9, 10], "jdk": [9, 10], "cuda": [9, 12, 14, 20], "recomend": 9, "difficult": [9, 17], "offici": [9, 10, 20], "deb": 9, "opencv": [9, 14], "436": 9, "libopencv": [9, 10], "Not": [9, 12, 14], "though": [9, 10, 14], "tend": 9, "complic": 9, "yum": 9, "fftw": 9, "libtiff": [9, 10], "sqlite3": [9, 10], "tkinter": 9, "wget": 9, "libjpeg": 9, "openjdk": [9, 15], "libsq3": 9, "libzstd": 9, "obtain": [9, 13, 16, 22], "devtoolset": 9, "suggest": [9, 16, 19], "9": [9, 10, 14, 22], "onward": 9, "newer": [9, 14], "redhat": 9, "scl": 9, "administr": 9, "kind": [9, 16], "doubt": [9, 19], "releas": 9, "newli": 9, "opt": 9, "rh": 9, "interact": [9, 21], "menu": 9, "hit": 9, "enter": [9, 16], "config": [9, 14, 15, 18], "temporarili": 9, "consol": 9, "bear": 9, "disabl": [9, 14, 15], "mpicc": [9, 15], "uninstal": 9, "h5py": 9, "lib64": [9, 15], "lib": [9, 15, 18], "x86_64": [9, 15], "linux": [9, 15], "gnu": [9, 15], "hdf5_": 9, "anaconda3": 9, "h5": 9, "h_": 9, "env": [9, 18], "stackoverflow": 9, "chart": 9, "complex": [9, 22], "16": [9, 10, 12], "newest": [9, 10], "hash": [9, 15], "r": [9, 22], "kitwar": 9, "v3": [9, 15, 18], "17": [9, 10, 14, 22], "gz": 9, "zxvf": 9, "bootstrap": 9, "v7": 9, "800": 9, "slave": 9, "kei": [9, 22], "archiv": 9, "asc": 9, "bionic": 9, "standalon": [9, 14], "reason": [9, 16, 17], "suit": [9, 20, 22], "driven": 9, "either": [9, 12, 19], "clang": 9, "visit": [9, 10, 11, 12, 14, 17], "strongli": [9, 15], "wrapper": [9, 15, 18], "experinc": 9, "cleanal": 9, "bind": [9, 14, 15, 18], "regular": 9, "configur": [9, 11, 14], "bundl": [9, 11, 18], "conf": [9, 14, 15, 18], "matlab_dir": [9, 15], "r2021b": 9, "click": [9, 16], "xmipp_read": 9, "dltk": [9, 14], "popul": 9, "deep": [9, 12, 13, 14, 15, 22], "learn": [9, 12, 14, 15, 22], "gpu": [9, 10, 12, 14, 18], "detect": [9, 13, 14, 22], "configuract": 9, "nvidia": [9, 12], "driver": [9, 12], "450": 9, "higher": 9, "smi": 9, "30": [9, 22], "minut": 9, "speedup": 9, "libmamba": 9, "solver": 9, "x4": 9, "12": [9, 10, 14, 22], "www": [9, 16, 22], "anaconda": 9, "blog": 9, "grow": 9, "xmipp_dltk_v0": 9, "uss": 9, "screen_deeplearn": [9, 12], "deep_denois": 9, "resolution_deepr": [9, 12], "screen_deepconsensu": 9, "scikit": 9, "14": [9, 22], "tensorflow": [9, 14], "15": [9, 22], "kera": 9, "21": [9, 22], "xmipp_dltk_v1": 9, "deep_misalingment_detect": 9, "23": 9, "xmipp_micclean": 9, "deepmicrographscreen": 9, "cleaner": [9, 12], "35": 9, "xmipp_deepemhanc": 9, "protocol_deepemhanc": 9, "deepemhanc": [9, 22], "numba": 9, "45": 9, "xmipp_pytorch": 9, "deephand": 9, "mrcfile": 9, "kornia": 9, "starfil": 9, "pytorch": 9, "torchvis": 9, "enviro": [9, 11], "libstdc": 9, "toolchain": 9, "cxx": [9, 15], "symbol": 9, "conda_prefix": 9, "your_env": 9, "back": 9, "target": [9, 14, 15], "mv": 9, "version_env": 9, "version_system": 9, "stan": 9, "pystan": 9, "294": 9, "issuecom": 9, "988791438": 9, "glibcxx_3": 9, "ld_library_path": 9, "tri": 9, "bashrc": [9, 18], "necessari": [9, 10, 16], "solut": [9, 22], "reinstal": 9, "libstdcxx": 9, "ng": 9, "invalidversionspec": 9, "invalid": 9, "3imageio": 9, "pyvistaqt": 9, "flexutil": 9, "tomoviz": 9, "posibl": [9, 11, 12, 14], "remain": [9, 11, 14], "page": [9, 10, 11, 14, 19, 20, 22], "launch": [9, 11, 15, 18], "manual": [9, 12, 15, 16], "pyworkflow": [9, 14], "conda_activation_cmd": 9, "eval": 9, "usernam": 9, "miniconda3": 9, "hook": 9, "scipion_font_s": 9, "em_root": 9, "maxit_hom": 9, "maxit": 9, "ad": [9, 12, 13, 14, 15], "regard": [9, 10, 12, 14, 15, 18], "strongi": 9, "incompat": [9, 15], "being": [9, 14, 16], "fetch": 9, "desir": [9, 16], "ubuntu": 10, "18": 10, "04": [10, 22], "20": [10, 15, 18, 22], "22": [10, 22], "cento": 10, "7": [10, 14, 22], "straightforward": 10, "At": [10, 15], "assign": [10, 14, 15, 22], "highli": 10, "widest": 10, "movie_optical_align": 10, "volume_homogen": 10, "troubleshoot": [10, 11], "meet": 10, "fftw3": [10, 15], "kit": 10, "cross": [10, 14], "addition": [10, 15], "plan": [10, 14], "final": [10, 12, 16, 18, 22], "navig": 11, "thier": 11, "youdecid": 11, "decid": 11, "adjust": [12, 14, 22], "convert_pdb": 12, "cif": [12, 14], "particle_pick_automat": 12, "volume_local_adjust": 12, "occup": [12, 22], "extract_particl": 12, "sampl": [12, 13, 14, 18, 22], "rate": [12, 14], "movie_res": 12, "movi": [12, 14, 22], "resiz": [12, 13], "movie_gain": 12, "tilt_analysi": 12, "correctli": [12, 14], "ctf_consensu": 12, "preprocess_micrograph": 12, "preprocess": [12, 14], "deep_center_assign": 12, "center": [12, 14], "extract_particles_movi": 12, "coord": 12, "particle_pick_consensu": 12, "micspoint": 12, "trigger_data": 12, "updateoutput": 12, "correclti": 12, "deprec": [12, 14], "classification_gpucorr": 12, "classification_gpucorr_ful": 12, "classification_gpucorr_semi": 12, "dose": [12, 13, 14], "analysi": [12, 14, 22], "deep_cent": [12, 14], "deep_global_assign": [12, 14], "deep_center_predict": 12, "deep_global_assignment_predict": 12, "consensus_class": 12, "calcul": 12, "intersect": [12, 14], "gain": [12, 14], "_stepschecksec": 12, "inputmovi": 12, "np": 12, "asscalar": 12, "discontinu": 12, "dont": 12, "mrc": [12, 14], "thread": [12, 14], "instanti": 12, "create_mask3d": 12, "3dmask": 12, "consensus_local_ctf": 12, "defocu": [12, 14, 22], "proper": 12, "field": [12, 14, 22], "v": [12, 16, 22], "align_volum": 12, "label": [12, 14], "crop_res": 12, "mask": [12, 14], "subtract_project": [12, 14, 17], "volume_adjust_sub": 12, "possibleoutput": 12, "definin": 12, "volume_subtract": [12, 14], "compare_reproject": 12, "subtract": [12, 14, 22], "deep_micrograph_screen": 12, "prevent": [12, 15], "small": [12, 22], "apply_deformation_zernike3d": [12, 17], "classify_kmeans2d": [12, 17], "kmeans_clust": [12, 17], "particle_boxs": [12, 14, 17], "rotational_spectra": [12, 14, 17], "split_volume_hierarchical_clust": 12, "viewer": [12, 14, 18], "viewer_resolution_f": 12, "viewer_projmatch": 12, "viewer_metaprotocol_golden_highr": 12, "chimeraclientview": 12, "chimeraview": 12, "monores_view": 12, "histogram": 12, "viewer_structure_map": 12, "beta": [12, 14], "Will": 12, "left": [12, 16], "pannel": 12, "improv": [12, 13, 14, 22], "ciruclar": 12, "edg": [12, 14], "artifact": [12, 14], "decim": 12, "align_volume_and_particl": [12, 14], "aling": 12, "flexalign": [12, 14, 22], "tomographi": [12, 20, 22], "absenc": 12, "tomo": 12, "volume_consensu": [12, 14], "protocol_deep": 12, "_align": 12, "reconstruct_heterogen": [12, 17], "protocol_metaprotocol_create_output": 12, "protocol_metaprotocol_discrete_heterogeneity_schedul": 12, "exhaust": 12, "matric": [12, 16], "protocol_cl2d_align": 12, "protocol_local_ctf": 12, "maxdefocuschang": 12, "protocol_apply_zernike3d": 12, "setofvolum": 12, "coeffici": 12, "loop": [12, 16], "deform": 12, "protocol_postprocessing_deeppostprocess": 12, "protocol_resolution_deepr": [12, 14], "mandatori": 12, "gl2d": 12, "protocol_create_3d_mask": 12, "protocol_reconstruct_fouri": 12, "protocol_trigger_data": 12, "protocol_crop_res": 12, "crop": [12, 13], "boost": [12, 14], "wizard": [12, 18], "xmippparticlemaskradiuswizard": 12, "deep_hand": 12, "pick_nois": 12, "screen_deep_learn": 12, "resolution_b_factor": 12, "testhighr": 12, "rotate_volum": 12, "regress": 12, "poc": 12, "local_ctf": 12, "samedefocu": 12, "protocol_align_volum": 12, "fast": [12, 14, 22], "fourier": [12, 14, 22], "denoise_particl": 12, "setofaverag": 12, "stk": 12, "center_particl": 12, "cl2d": 12, "test_protocol_reconstruct_fouri": 12, "test_protocols_local_defocu": 12, "testxmippalignvolumeandparticl": 12, "testxmipprotatevolum": 12, "test_protocols_deepvolpostprocess": 12, "test_protocols_xmipp_3d": 12, "projsubtracion": 12, "exclud": 12, "test_protocols_zernike3d": 12, "test_protocols_metaprotocol_heterogen": 12, "protocol_core_analysi": [12, 14], "protocol_compare_angl": [12, 14], "compar": [12, 14], "protocol_center_particl": [12, 14], "simplifi": [12, 14], "setofcoordin": [12, 14], "protocol_ctf_consensu": [12, 14], "protocol_convert_pdb": [12, 14], "deactiv": [12, 14], "protocol_add_nois": [12, 14], "protocol_compare_reproject": [12, 14], "residu": [12, 14], "protocol_screen_deepconsensu": [12, 14], "batch": [12, 14], "traing": [12, 14], "mode": [12, 14, 15, 22], "protocol_shift_particl": [12, 14], "transform": [12, 14, 22], "chimerax": [12, 14], "micrographclean": [12, 14], "algorithm": [12, 14, 16, 22], "carbon": [12, 13, 14], "aggreg": [12, 14], "ic": [12, 14], "crystal": [12, 14], "contamin": [12, 14], "reproject": [12, 14], "split": [12, 14, 18], "frame": [12, 14, 15], "divid": [12, 14, 16], "odd": [12, 13, 14], "even": [12, 13, 14, 15, 16, 21], "heterogen": [12, 14], "spheric": [12, 14], "harmon": [12, 14], "architectur": [12, 14, 15], "train": [12, 14], "move": [12, 14], "continuousflex": [12, 14], "functional": [12, 14], "introduc": [12, 14, 22], "orient": [12, 13, 14, 16, 22], "stabil": [12, 14], "cluster": [12, 14, 22], "subtomogram": [12, 14, 22], "tomogram": [12, 13, 14, 22], "membran": [12, 14], "mask3d": [12, 14], "helic": [12, 14], "search": [12, 14, 15, 17], "enhanc": [12, 14, 22], "precis": [12, 14], "deeplearningtoolkit": [12, 14], "acceler": [12, 14], "primari": [12, 14], "secondari": [12, 14], "highr": [12, 14], "flip": [12, 14], "evalu": [12, 14], "qualiti": [12, 14, 22], "fit": [12, 14], "multi": [12, 14, 22], "monor": [12, 14, 22], "localdeblur": [12, 14], "random": [12, 14, 22], "migrat": [12, 14], "bionot": 12, "kmean": 12, "denois": 12, "elimin": [12, 22], "cell": [12, 16], "metaprotocol": 12, "heterogeneti": 12, "subset": 12, "max": 12, "boxsiz": 12, "signific": 12, "swarm": 12, "intial": 12, "direct": [12, 13, 14, 16, 22], "resdir": 12, "monotomo": [12, 13], "screen": 12, "hierarch": 12, "trigger": [12, 15], "applyalignmentt": 13, "extract_particlesstack": 13, "extract_subtomo": 13, "subtomo": 13, "project_subtomogram": 13, "deep_misalignment_detect": 13, "fiduci": 13, "subtraction_subtomo": 13, "md": [13, 14, 18], "cltomo": 13, "resolution_local_monotomo": 13, "protocl": 13, "extract_particlestack": 13, "recov": [13, 14, 17], "dose_filt": 13, "score_coordin": 13, "score": 13, "calculaterotationangleandshiftsfromtm": 13, "refactor": [13, 14], "sobtomogram": 13, "setoftiltseriesparticl": 13, "denoising_confid": 13, "tomograph": [13, 14, 22], "high": [13, 14, 22], "contrast": [13, 14, 22], "peak_high_contrast": 13, "project_top": 13, "projector": 13, "hdf": 13, "ignor": 13, "subtomo_map_back": 13, "mapback": 13, "scale": 13, "wait": 13, "txt": [13, 18], "protocol_extract_subtomo": 13, "local_volume_adjust": 14, "modifi": [14, 16], "intens": 14, "subtomo_subtract": 14, "tomo_extract_subtomogram": 14, "box": 14, "convert_from_pdb": 14, "phantom_movi": 14, "circl": 14, "angular_neighbourhood": 14, "best": [14, 22], "batch_deep_misalign": 14, "volume_from_pdb": 14, "orig": 14, "invert": 14, "tomo_extract_particl": 14, "image_convert": 14, "volume_substract": 14, "nan": 14, "divis": 14, "380mb": 14, "clarifi": 14, "robust": [14, 22], "collect": 14, "auto": 14, "libcifpp": 14, "toolkit": [14, 15], "whose": [14, 16], "atom": 14, "shorter": 14, "dangl": 14, "angulardist": 14, "image_peak_high_contrast": 14, "misaligment_detect": 14, "xmipp_angular_dist": 14, "angular_resolution_align": 14, "resolut": [14, 22], "angular_project_librari": 14, "determinist": 14, "volumen_subtract": 14, "classify_kmeans_2d": 14, "clearer": 14, "intuit": [14, 22], "facilit": 14, "half": 14, "preciss": 14, "suport": 14, "abil": 14, "modular": 14, "winner": 14, "filter": [14, 18], "decoupl": 14, "xmipptomo": [14, 20], "xmippspa": 14, "zernik": 14, "equat": 14, "occurr": 14, "tiff": [14, 15], "tomo_confidence_map": 14, "tomo_extract_particlestack": 14, "tomo_tiltseries_dose_filt": 14, "psd_estimat": 14, "angular_distribution_show": [14, 17], "apropo": [14, 17, 18], "ctf_correct_idr": [14, 17], "ctf_create_ctfdat": [14, 17], "ctf_show": [14, 17], "idr_xray_tomo": [14, 17], "image_common_lin": [14, 17], "metadata_convert_to_spid": [14, 17], "metadata_selfile_cr": [14, 17], "mlf_refine_3d": [14, 17], "ml_refine_3d": [14, 17], "ml_tomo": [14, 17], "mrc_create_metadata": [14, 17], "pdb_construct_dictionari": [14, 17], "pdb_restore_with_dictionari": [14, 17], "reconstruct_admn": [14, 17], "reconstruct_art_pseudo": [14, 17], "resolution_ibw": [14, 17], "resolution_ssnr": [14, 17], "score_micrograph": [14, 17], "reconstruct_fourier_starpu": [14, 17], "tomo_align_tilt_seri": [14, 17], "tomo_align_dual_tilt_seri": [14, 17], "tomo_align_refin": [14, 17], "tomo_extract_subvolum": [14, 17], "tomo_project_main": [14, 17], "tomo_remove_fluctu": [14, 17], "transform_range_adjust": 14, "validation_tilt_pair": 14, "volume_pca": 14, "volume_validate_pca": 14, "work_test": 14, "6f4d983": 14, "evaulate_coordin": 14, "extract_subset": 14, "image_separate_object": 14, "volume_enhance_contrast": 14, "volume_reslic": 14, "xray_import": 14, "xray_project": 14, "xray_psf_creat": [14, 18], "xray_reconstruct_art": 14, "gpu_correl": 14, "gpu_util": 14, "classify_signific": [14, 17], "deepalign": [14, 17], "overwritten": 14, "centerpdb": 14, "xmipp_phantom_movi": 14, "dark": 14, "simul": [14, 22], "astigmat": [14, 22], "xmipp_metadata_util": 14, "join": 14, "previous": 14, "xmipp_matrix_dimr": 14, "thrown": 14, "larger": [14, 16], "itemid": 14, "column": [14, 16], "readm": [14, 18], "matlab": [14, 18], "miss": 14, "alert": 14, "block": [14, 15], "31": 14, "mainten": 14, "xmipp_error": 14, "xmipp_image_bas": 14, "psd": 14, "cleandeprec": 14, "slice": 14, "were": [14, 16, 17], "badli": 14, "seed": 14, "pin": 14, "speed": [14, 17], "xmipp_ctf_group": 14, "xmipp_image_histogram": 14, "xmipp_mpi_angular_class_averag": 14, "xmipp_angular_estimate_tilt_axi": 14, "xmipp_ctf_create_ctfdat": 14, "xmipp_resolution_ssnr": 14, "zernike3d": 14, "rang": [14, 16], "angular_discrete_assign": 14, "uniniti": 14, "angular_dist": 14, "behind": 14, "pdb_reduce_pseudoatom": 14, "produc": 14, "xmipp_micrograph_automatic_pick": 14, "circular": 14, "hdf5": [14, 15, 20], "row": [14, 16], "pwutil": 14, "record": 14, "hetatm": 14, "atomtyp": 14, "charg": 14, "anartifact": 14, "symmetr": 14, "pitch": 14, "ident": [14, 16], "param": 14, "xmipp_image_oper": 14, "angular_continuous_assign2": 14, "angular_continuous_assign_2": 14, "578": 14, "cleanbin": 14, "clarif": 14, "opencv_vers": 14, "sinco": 14, "sin": [14, 16], "co": [14, 16, 22], "handl": 14, "nullptr": 14, "denot": [14, 16], "nvidiadriverv": 14, "troubleshot": 14, "get_model": 14, "happen": 14, "runjob": 14, "uniti": 14, "uniqu": 14, "anisotrop": 14, "sonarcloud": [14, 17], "constexpr": 14, "funtion": 14, "zero": 14, "shadow": 14, "throw": 14, "sonar": [14, 18], "cloud": 14, "pwem": 14, "nma_align": 14, "xmipp_angular_projection_match": 14, "invoc": 14, "resolutionssnr": 14, "reconstructartmpi": 14, "reconstructart": 14, "mlfrefine3dmpi": 14, "mlfrefine3d": 14, "mlrefine3dmpi": 14, "mlrefine3d": 14, "xmipp_test_pocs_main": 14, "corrupt": 14, "resolution_pdb_bfactor": 14, "chain": [14, 16], "level": [14, 18], "wavelet": 14, "starpu": 14, "xmipp_transform_dimr": 14, "mdl_dimr": 14, "check_cuda": 14, "out": [14, 15, 22], "exit": 14, "resolution_fso": 14, "bingham": 14, "opencv4": 14, "outdat": [14, 17], "libsvm": 14, "referenc": [14, 16], "create_mpi_metadata_program": 14, "python_const": [14, 18], "nmaeigenv": 14, "correlationafteralign": 14, "mdl_resolution_anisotropi": 14, "fftwt": 14, "rerun": 14, "phantom_cr": 14, "geometri": 14, "enterofmass": 14, "svm": 14, "volume_align": [14, 18], "wrap": 14, "sheet": 14, "xmipp_pdb_select": 14, "xmipp_pdb_cent": 14, "07": [15, 18, 22], "built": 15, "intend": 15, "mainli": [15, 20], "six": 15, "idea": [15, 16], "major": 15, "distro": 15, "bypass": 15, "agre": 15, "unattend": 15, "xmipp_noconfig": 15, "visibl": 15, "prior": 15, "linkerforprogram": 15, "tuneabl": 15, "icc": 15, "ccflag": 15, "c99": 15, "cxxflag": 15, "mtune": 15, "march": 15, "o3": 15, "incdirflag": 15, "libdirflag": 15, "linker": 15, "linkflag": 15, "python_lib": 15, "discov": 15, "5m": 15, "pythonincflag": 15, "david": [15, 22], "scipion3env": 15, "site": 15, "core": [15, 18], "sysconfig": 15, "get_path": 15, "moreov": 15, "intel": 15, "amd": 15, "mfma": 15, "mavx2": 15, "m3dnow": 15, "fomit": 15, "mpicxx": 15, "mpi_cc": 15, "mpi_cxx": 15, "mpi_linkerforprogram": 15, "mpirun": 15, "mpiexec": 15, "executor": 15, "mpi_run": 15, "mpi_bindir": 15, "mpi_libdir": 15, "mpi_includ": 15, "doc": [15, 16], "mpi2": 15, "mpi_cxxflag": 15, "mpi_linkflag": 15, "javac": 15, "jar": [15, 18], "jvm": 15, "still": [15, 22], "java_hom": 15, "my": 15, "loacat": 15, "dirnam": 15, "realpath": 15, "jre": 15, "java_bindir": 15, "java_bin": 15, "jni_cpppath": 15, "nvcc": 15, "correspond": 15, "cuda_bin": 15, "xmipp_cuda_bin": 15, "glob": 15, "expand": 15, "cuda_hom": 15, "eventu": 15, "assumpt": 15, "accordingli": 15, "By": 15, "real": 15, "cxx_cuda": 15, "wherea": 15, "nvcc_cxxflag": 15, "cu": 15, "d_force_inlin": 15, "fpic": 15, "ccbin": 15, "expt": 15, "extend": 15, "lambda": 15, "gencod": 15, "arch": 15, "compute_30": 15, "compute_35": 15, "compute_50": 15, "compute_60": 15, "compute_61": 15, "nvcc_linkflag": 15, "stub": 15, "libcudart": 15, "todo": 15, "mex": 15, "against": 15, "opencv2": 15, "hpp": 15, "opencv3": 15, "cv_major_vers": 15, "opencvsupportscuda": 15, "cudaoptflow": 15, "firstli": 15, "check_config": 15, "swap": 15, "twice": 15, "config_vers": 15, "rais": 15, "use_dl": 15, "azimuth": 16, "around": 16, "psi": 16, "measur": [16, 22], "hand": 16, "thumb": 16, "finger": 16, "approach": [16, 22], "practic": 16, "view": 16, "ax": 16, "had": [16, 17], "interchang": 16, "construct": 16, "paper": 16, "mark": 16, "bottom": 16, "sphere": 16, "opposit": 16, "side": 16, "eulerian": 16, "degre": 16, "toward": 16, "neg": 16, "point_of_view": 16, "plane_of_project": 16, "whole": 16, "90\u00ba": 16, "awai": 16, "simplif": 16, "turn": 16, "revers": 16, "respect": 16, "situat": 16, "90": 16, "counterclockwis": 16, "got": 16, "ellipsoid": 16, "cylind": 16, "rot": 16, "But": 16, "face": 16, "la": [16, 22], "taken": 16, "fashion": 16, "far": 16, "devis": 16, "intern": 16, "why": 16, "THE": 16, "matrix": 16, "exactli": 16, "euler_angles2matrix": 16, "rotz": 16, "roti": 16, "spatial": 16, "composit": 16, "phi": 16, "theta": 16, "3x3": 16, "r11": 16, "r12": 16, "r13": 16, "r21": 16, "r22": 16, "r23": 16, "r31": 16, "r32": 16, "r33": 16, "aposit": 16, "impli": 16, "clockwis": 16, "anti": 16, "compli": 16, "3dem": [16, 22], "ebi": 16, "ac": 16, "uk": [16, 22], "pdbe": 16, "test_imag": 16, "3dem_compli": 16, "think": 16, "xmp": 16, "g1ta000001": 16, "art000001": 16, "wbp000001": 16, "sirt000001": 16, "sel": 16, "g1t": 16, "ie": 16, "g1ta": 16, "000001": 16, "g1ta00001": 16, "bak": 16, "mantain": 16, "correl": 16, "compulsori": 16, "renam": 16, "multidimension": 16, "admit": 16, "physic": 16, "suppos": 16, "65x65": 16, "64": 16, "fraction": 16, "onesse": 16, "imageov": 16, "instanc": 16, "simpler": 16, "32": 16, "defint": 16, "matrix2d": 16, "occupi": 16, "startingi": 16, "startingx": 16, "65": [16, 22], "init_random": 16, "finishingi": 16, "finishingx": 16, "imgpixel": 16, "reli": 16, "matrix1d": 16, "matrix3d": 16, "startingz": 16, "finishingz": 16, "direct_imgpixel": 16, "volvoxel": 16, "direct_volvoxel": 16, "vec_elem": 16, "mat_elem": 16, "vol_elem": 16, "direct_vec_elem": 16, "direct_mat_elem": 16, "direct_vol_elem": 16, "outer": 16, "vari": 16, "increas": 16, "k": [16, 22], "special": 16, "ydim": 16, "xdim": 16, "chosen": 16, "rememb": [16, 19], "displac": 16, "diagram": 16, "legaci": 17, "did": 17, "uninterest": 17, "maintain": 17, "25": 17, "reduc": [17, 22], "smell": 17, "anyon": 17, "contact": [17, 22], "team": [17, 19], "clue": 17, "tests_programs_xmipp": 17, "listdeprecatedfil": 17, "tomo_align_tilt": 17, "deep_denoiss": 17, "mltomo": 17, "movie_averag": 17, "deep_align": 17, "metaprotocol_create_output": 17, "metaprotocol_discrete_heterogeneity_schedul": 17, "protocol_split_volume_hierarchical_clust": 17, "metaprotocol_create_subset": 17, "metaprotocol_golden_highr": 17, "solid_angl": 17, "split_volum": 17, "plu": 18, "four": [18, 19], "reconstract": 18, "wrote": 18, "low": [18, 22], "metadata_label": 18, "showj": 18, "picker": 18, "changelog": 18, "licens": 18, "properti": 18, "runnabl": 18, "pylib": 18, "var": 18, "basrc": 18, "xmippenv": 18, "json": 18, "fish": 18, "certain_directori": 18, "get_devel_sourc": 18, "runtim": 18, "install_cuda_travi": 18, "sh": 18, "subrepo": 18, "manifest": 18, "scipion_em_xmipp": 18, "egg": 18, "bibtex": 18, "constant": 18, "fuction": 18, "progrma": 18, "angular_accuracy_pca": 18, "lenguag": 18, "function_test": 18, "aft_test": 18, "test_funcs_main": 18, "xmipp_angular_accuracy_pca": 18, "xmipp_xray_psf_cr": 18, "mirt3d_mexinterp": 18, "xmipp_writ": 18, "xmipp_bas": 18, "xmipp_conda_env": 18, "xmippmodul": 18, "condor": 18, "cnlsolver": 18, "delaunai": [18, 22], "dcel": 18, "voronoi": 18, "sh_align": 18, "frm": 18, "swig_frm": 18, "autoconfig": 18, "__pycache__": 18, "libcufftadvisor": 18, "libxmippcuda": 18, "libxmippinterfacecuda": 18, "libxmippparallelcuda": 18, "libxmippparallel": 18, "libxmipp": 18, "_swig_frm": 18, "xmipplib": 18, "ahc_classifi": 18, "vector_op": 18, "aft": 18, "xmipp_polynomi": 18, "dimr": 18, "diffusionmap": 18, "transform_dimr": 18, "viru": [18, 22], "mpi_angular_accuracy_pca": 18, "xmipp_mpi": 18, "parallel_adapt_cuda": 18, "mpi_reconstruct_fourier_gpu": 18, "py_xmipp": 18, "coordinatestool": 18, "deepconsensuswork": 18, "deepdenois": 18, "deeplearningtoolkitutil": 18, "deepreslearn": 18, "example_module2": 18, "example_modul": 18, "aalign_signific": 18, "reconstruction_adapt_cuda": 18, "align_significant_gpu": 18, "xmipp_gpu_util": 18, "reconstruction_cuda": 18, "cuda_al": 18, "emx": 18, "polynomi": 18, "pythoninterfac": 18, "sconstruct": 18, "gold": 18, "tmplink": 18, "_test_intern": 18, "test_programs_xmipp": 18, "_test_pythoninferface_xmipp": 18, "python_imag": 18, "xmippmodulecor": 18, "alglib": 18, "alglibintern": 18, "stdafx": 18, "bilib": 18, "changebasi": 18, "window": 18, "gcc_version": 18, "xmipp_color": 18, "xvsmooth": 18, "libxmippcor": 18, "metadata_plot": 18, "xmipp_metadata_plot": 18, "xmipp_showj": 18, "xmipp_aux": 18, "xmipp_tiltpairalign": 18, "imagej": 18, "handleextrafiletyp": 18, "xmippview": 18, "jar_sourc": 18, "cli": 18, "libxmippjni": 18, "gif": 18, "zoom": 18, "xmipp_metadata": 18, "xmipppymodul": 18, "binocular": 18, "brush": 18, "happi": 19, "hear": 19, "hesit": 19, "answer": 19, "xmippvix": 19, "biocomput": 20, "madrid": [20, 22], "spain": 20, "spa": 20, "writen": 20, "attempt": 20, "life": 20, "gpl3": 21, "3rd": 21, "parti": 21, "observ": 21, "freeli": [21, 22], "academ": 21, "extrem": 21, "grant": 21, "usag": 21, "author": 22, "de": 22, "isidro": 22, "g\u00f3mez": 22, "vila": 22, "losana": 22, "carazo": 22, "sorzano": 22, "titl": 22, "journal": 22, "biologi": 22, "216": 22, "url": 22, "sciencedirect": 22, "scienc": 22, "articl": 22, "pii": 22, "s1047847723001193": 22, "issn": 22, "1047": 22, "8477": 22, "doi": 22, "org": 22, "1016": 22, "jsb": 22, "108056": 22, "st\u0159el\u00e1k": 22, "march\u00e1n": 22, "daniel": 22, "jos\u00e9": 22, "mar\u00eda": 22, "carlo": 22, "comparison": 22, "cryogen": 22, "micromachin": 22, "1835": 22, "mdpi": 22, "2072": 22, "666x": 22, "3390": 22, "mi14101835": 22, "weight": 22, "unwant": 22, "215": 22, "108024": 22, "s1047847723000874": 22, "fern\u00e1ndez": 22, "gim\u00e9nez": 22, "mart\u00ednez": 22, "marabini": 22, "strelak": 22, "s\u00e1nchez": 22, "garc\u00eda": 22, "108030": 22, "s104784772300093x": 22, "jl": 22, "tagar": 22, "hd": 22, "anisotropi": 22, "cryoem": 22, "press": 22, "fso": 22, "sanchez": 22, "garcia": 22, "ruben": 22, "gomez": 22, "blanco": 22, "josu": 22, "cuervo": 22, "ana": 22, "jose": 22, "maria": 22, "oscar": 22, "varga": 22, "javier": 22, "874": 22, "london": 22, "densiti": 22, "sharpen": 22, "gimenez": 22, "martinez": 22, "ramirez": 22, "aportela": 22, "conesa": 22, "jm": 22, "213": 22, "107780": 22, "elsevi": 22, "s104784772100085x": 22, "ram\u00edrez": 22, "jim\u00e9nez": 22, "moreno": 22, "amaya": 22, "ernei": 22, "maluenda": 22, "herrero": 22, "estrella": 22, "federico": 22, "horacek": 22, "jan": 22, "myska": 22, "martin": 22, "pablo": 22, "fonseca": 22, "reyna": 22, "yunior": 22, "jorg": 22, "marta": 22, "harastani": 22, "mohamad": 22, "joni\u0107": 22, "slavica": 22, "filipov": 22, "jiri": 22, "advanc": 22, "molecul": 22, "26": 22, "6224": 22, "1420": 22, "3049": 22, "pubmedid": 22, "34684805": 22, "molecules26206224": 22, "filipovi\u010d": 22, "ji\u0159\u00ed": 22, "\u00f3scar": 22, "1040": 22, "2079": 22, "9292": 22, "electronics9061040": 22, "et": 22, "al": 22, "337": 22, "344": 22, "str": 22, "2017": 22, "018": 22, "identif": 22, "triangul": 22, "nava": 22, "rosa": 22, "trevin": 22, "melero": 22, "peschiera": 22, "ferlenghi": 22, "cuenca": 22, "525": 22, "533": 22, "196": 22, "dx": 22, "007": 22, "s104784771630212x": 22, "structmap": 22, "elast": 22, "distanc": 22, "studi": 22, "conform": 22, "biophys": 22, "110": 22, "1753": 22, "1765": 22, "bpj": 22, "03": 22, "019": 22, "\u00e1lvarez": 22, "cabrera": 22, "kazemi": 22, "jonic": 22, "oton": 22, "alvarez": 22, "abrishami": 22, "sesmero": 22, "statist": 22, "189": 22, "219": 22, "01": 22, "009": 22, "devic": 22, "optic": 22, "163": 22, "176": 22, "02": 22, "001": 22, "s1047847715000313": 22, "vahid": 22, "xuem": 22, "li": 22, "yifan": 22, "cheng": 22, "beam": 22, "induc": 22, "motion": 22, "elucid": 22, "macromolecular": 22, "conic": 22, "revisit": 22, "alcorlo": 22, "trev\u00edn": 22, "foch": 22, "zald\u00edvar": 22, "peraza": 22, "del": 22, "cano": 22, "ot\u00f3n": 22, "scientif": 22, "14290": 22, "1038": 22, "srep14290": 22, "lucia": 22, "2891": 22, "2898": 22, "1093": 22, "bioinformat": 22, "btu404": 22, "abstract": 22, "motiv": 22, "insight": 22, "carri": 22, "biolog": 22, "approxim": 22, "challeng": 22, "reliabl": 22, "macromolecul": 22, "priori": 22, "knowledg": 22, "individu": 22, "unknown": 22, "transmiss": 22, "lineal": 22, "dimension": 22, "reduct": 22, "captur": 22, "guess": 22, "ransac": 22, "term": 22, "experiment": 22, "satisfactori": 22, "jvarga": 22, "essupplementari": 22, "supplementari": 22, "onlin": 22, "oxfordjourn": 22, "content": 22, "eprint": 22, "pdf": 22, "html": 22, "outlier": 22, "caffarena": 22, "proc": 22, "intl": 22, "confer": 22, "biomed": 22, "engin": 22, "iwbbio": 22, "950": 22, "biocomp": 22, "articulo": 22, "dynam": 22, "004": 22, "ncbi": 22, "nlm": 22, "nih": 22, "gov": 22, "pubm": 22, "24508340": 22, "jin": 22, "q": 22, "bilbao": 22, "castro": 22, "n\u00fa\u00f1ez": 22, "llorca": 22, "tama": 22, "nma": 22, "cryomicroscopi": 22, "srep21626": 22, "003": 22, "transfer": 22, "semiautomat": 22, "throughput": 22, "booktitl": 22, "nanoimag": 22, "isbn": 22, "978": 22, "62703": 22, "136": 22, "molecular": 22, "sousa": 22, "alioscka": 22, "kruhlak": 22, "michael": 22, "1007": 22, "137": 22, "0_11": 22, "humana": 22, "workflow": 22, "vega": 22, "quintana": 22, "171": 22, "193": 22, "fastdef": 22, "2012": 22, "006": 22, "181": 22, "148": 22, "feb": 22, "assess": 22, "techniqu": 22, "183": 22, "342": 22, "353": 22, "015": 22, "s1047847713001950": 22, "zaldivar": 22, "shkolniski": 22, "pattern": 22, "29": 22, "19": 22, "2460": 22, "2468": 22, "btt429": 22, "184": 22, "321": 22, "328": 22, "s1047847713002566": 22, "loup": 22, "nogal": 22, "cadena": 22, "arteni": 22, "taba": 22, "azquez": 22, "pascual": 22, "montano": 22, "nucleic": 22, "acid": 22, "oxford": 22, "univ": 22, "nar": 22, "gkt385": 22, "multirefer": 22, "197": 22, "206": 22, "011": 22, "s1047847710000882": 22, "xu": 22, "schere": 22, "sjor": 22, "maximum": 22, "likelihood": 22, "refin": 22, "acta": 22, "crystallogr": 22, "biol": 22, "672": 22, "678": 22, "pt": 22, "jul": 22, "1107": 22, "s0907444909012049": 22, "cryoelectron": 22, "escherichia": 22, "coli": 22, "chemistri": 22, "peptid": 22, "elong": 22, "ultrastructur": 22, "protein": 22, "tertiari": 22, "vall": 22, "mikel": 22, "1563": 22, "1572": 22, "dec": 22, "scheme": 22, "workshop": 22, "intellig": 22, "175": 22, "179": 22, "4244": 22, "5059": 22, "1109": 22, "wisp": 22, "5286563": 22, "ieeexplor": 22, "xpl": 22, "articledetail": 22, "jsp": 22, "arnumb": 22, "iriart": 22, "ruiz": 22, "nez": 22, "ram": 22, "irez": 22, "boisset": 22, "249": 22, "262": 22, "160": 22, "013": 22, "s104784770700202x": 22, "haixiao": 22, "gao": 22, "gabor": 22, "herman": 22, "paul": 22, "eggermont": 22, "disentangl": 22, "nmeth992": 22, "antigen": 22, "polyomaviru": 22, "assist": 22, "ribosom": 22, "sensit": 22, "simian": 22, "rafael": 22, "llorent": 22, "yacob": 22, "san": 22, "mart\u00edn": 22, "carmen": 22, "1167": 22, "1177": 22, "oct": 22, "archaeal": 22, "numer": 22, "dna": 22, "helicas": 22, "metabol": 22, "mol": 22, "348": 22, "139": 22, "149": 22, "0022": 22, "2836": 22, "jmb": 22, "031": 22, "s0022283605001932": 22, "suppl": 22, "ii243": 22, "ii244": 22, "sep": 22, "bti1140": 22, "reproduc": 22, "spline": 22, "registr": 22, "ultramicroscopi": 22, "103": 22, "303": 22, "317": 22, "0304": 22, "3991": 22, "ultram": 22, "002": 22, "s0304399105000173": 22, "thevenaz": 22, "el": 22, "bez": 22, "unser": 22, "multiresolut": 22, "146": 22, "381": 22, "392": 22, "s1047847704000073": 22, "quantit": 22, "138": 22, "114": 22, "122": 22, "s1047": 22, "00008": 22, "s1047847702000084": 22, "taylor": 22, "winkler": 22, "marqui": 22, "neural": 22, "kernel": 22, "actin": 22, "myosin": 22, "muscl": 22, "novel": 22, "133": 22, "233": 22, "245": 22, "1006": 22, "jsbi": 22, "4369": 22, "s1047847701943692": 22, "donat": 22, "b\u00e1rcena": 22, "fuzzi": 22, "84": 22, "85": 22, "99": 22, "s0304": 22, "00": 22, "00022": 22, "s030439910000022x": 22, "montserrat": 22, "merelo": 22, "logic": 22}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"checkout": 0, "specif": 0, "version": [0, 9], "code": [1, 2, 3], "document": [1, 20], "guidelin": 2, "program": [2, 4, 14, 17], "handl": 2, "imag": [2, 16], "c": [2, 6, 7, 15], "how": [3, 9], "releas": [3, 12, 13, 14], "make": 3, "branch": 3, "creat": 3, "xmipp": [3, 9, 11, 12, 14, 18, 20], "softwar": [3, 10], "bundl": 3, "test": [3, 6], "archiv": 3, "scipion": [3, 8, 9, 11, 12, 13, 14], "pypi": 3, "modul": 3, "git": 3, "tag": 3, "promot": 3, "master": 3, "xmipptomo": [3, 13], "want": 3, "final": 3, "consider": 3, "parallel": 4, "introduct": 4, "us": [4, 5], "thread": 4, "synchron": 4, "mpi": [4, 15], "trick": 5, "script": [5, 14], "rafa": 5, "": 5, "sjor": 5, "roberto": 5, "coss": 5, "carmen": 5, "googl": 6, "framework": 6, "summari": 6, "ad": 6, "an": 6, "exist": 6, "file": [6, 15], "unittest": 6, "check": 6, "workflow": 6, "set": [6, 9], "gold": 6, "standard": 6, "python": [7, 9], "bind": 7, "The": 7, "function": 7, "method": 7, "map": 7, "tabl": 7, "initi": 7, "all": 7, "togeth": 7, "pass": 7, "paramet": 7, "pyarg": 7, "_parsetupl": 7, "return": 7, "valu": 7, "call": 7, "numpi": 7, "from": 7, "instal": [8, 9, 11, 14], "note": 9, "ubuntu": 9, "22": [9, 12, 14], "04": [9, 12, 14], "requir": [9, 10], "depend": [9, 10], "option": 9, "20": [9, 12, 14], "18": 9, "cento": 9, "7": 9, "troubleshoot": 9, "cmake": [9, 10], "debian": 9, "older": 9, "0": [9, 12], "4": 9, "compil": [9, 10], "matlab": [9, 15], "previou": 9, "run": 9, "deeplearningtoolkit": 9, "list": [9, 10, 17, 22], "environ": 9, "libstd": 9, "link": [9, 11], "hdf5": [9, 10], "support": [10, 19], "o": 10, "hardwar": 10, "cuda": [10, 15], "opencv": [10, 15], "full": 10, "standalon": 11, "em": [12, 13, 14], "3": [12, 13, 14], "23": [12, 13, 14], "11": [12, 13, 14], "nereu": [12, 13, 14], "07": [12, 13, 14], "morpheu": [12, 13, 14], "03": [12, 14], "krato": [12, 14], "iri": [12, 14], "hot": 12, "fix": 12, "2": 12, "1": 12, "helio": [12, 14], "gaia": [12, 14], "01": [12, 14], "eri": [12, 14], "21": [12, 14], "06": [12, 14], "caeru": [12, 14], "borea": [12, 14], "19": 12, "user": 14, "guid": 14, "more": [14, 16], "other": [14, 15], "protocol": [14, 17], "configur": 15, "java": 15, "convent": 16, "project": 16, "euler": 16, "angl": 16, "move": 16, "plane": 16, "filenam": 16, "logic": 16, "access": 16, "center": 16, "deprec": 17, "structur": 18, "contact": 19, "u": 19, "mail": 19, "discord": 19, "channel": 19, "develop": 19, "welcom": 20, "get": 20, "start": 20, "licens": 21, "public": 22, "2024": 22, "deisidrogomez2024": 22, "2023": 22, "strelak2023": 22, "fernandez": 22, "gimenez2023a": 22, "gimenez2023b": 22, "vilas2023": 22, "2021": 22, "sanchez2021deepemhanc": 22, "fernandez2021cryo": 22, "gimenez2021": 22, "strelak2021": 22, "2020": 22, "strelak2020flexalign": 22, "2018": 22, "vilas2018": 22, "2016": 22, "vilas2016": 22, "sorzano2016": 22, "2015": 22, "sorzano2015": 22, "abrishami2015": 22, "sorzano2015b": 22, "2014": 22, "vargas2014": 22, "sorzano2014": 22, "jin2014": 22, "vargas2014a": 22, "marabini2014a": 22, "2013": 22, "sorzano2013": 22, "vargas2013a": 22, "vargas2013b": 22, "abrishami2013": 22, "delarosatrevin2013": 22, "nogales2013": 22, "2010": 22, "sorzano2010a": 22, "2009": 22, "scheres2009b": 22, "scheres2009c": 22, "sorzano2009d": 22, "2007": 22, "sorzano2007a": 22, "scheres2007a": 22, "scheres2007b": 22, "2005": 22, "scheres2005a": 22, "scheres2005b": 22, "jonic2005": 22, "2004": 22, "sorzano2004b": 22, "2002": 22, "pascualmontano2002": 22, "2001": 22, "pascualmontano2001": 22, "2000": 22, "pascual2000": 22}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinxcontrib.bibtex": 9, "sphinx": 60}, "alltitles": {"Checkout to a Specific Version": [[0, "checkout-to-a-specific-version"]], "Code documentation": [[1, "code-documentation"]], "Guidelines": [[2, "guidelines"]], "Programming - Handling images": [[2, "programming-handling-images"]], "Coding - C++ guidelines": [[2, "coding-c-guidelines"]], "How to release": [[3, "how-to-release"]], "Make release branches": [[3, "make-release-branches"]], "Creating the Xmipp software bundle": [[3, "creating-the-xmipp-software-bundle"]], "Test the archive in the Scipion": [[3, "test-the-archive-in-the-scipion"]], "Creating the PyPi module": [[3, "creating-the-pypi-module"]], "Making a git-TAG and promoting the code to MASTER": [[3, "making-a-git-tag-and-promoting-the-code-to-master"]], "XmippTomo wants a release": [[3, "xmipptomo-wants-a-release"]], "Final considerations": [[3, "final-considerations"]], "Parallel Programming": [[4, "parallel-programming"]], "Introduction": [[4, "introduction"]], "Using threads": [[4, "using-threads"]], "Synchronizing threads": [[4, "synchronizing-threads"]], "Programming with MPI": [[4, "programming-with-mpi"]], "Useful Tricks and Scripts": [[5, "useful-tricks-and-scripts"]], "Rafa\u2019s tricks": [[5, "rafas-tricks"]], "Sjors\u2019 tricks": [[5, "sjors-tricks"]], "Roberto\u2019s tricks": [[5, "robertos-tricks"]], "Coss\u2019 tricks": [[5, "coss-tricks"]], "Carmen\u2019s scripts": [[5, "carmens-scripts"]], "Google C++ Testing Framework": [[6, "google-c-testing-framework"]], "Summary": [[6, "summary"]], "Adding a test to an existing file": [[6, "adding-a-test-to-an-existing-file"]], "Unittest checking workflow": [[6, "unittest-checking-workflow"]], "Setting the gold standard": [[6, "setting-the-gold-standard"]], "Python Binding": [[7, "python-binding"]], "The C functions:": [[7, "the-c-functions"]], "The method mapping table": [[7, "the-method-mapping-table"]], "The initialization function": [[7, "the-initialization-function"]], "All together": [[7, "all-together"]], "Passing Function parameters": [[7, "passing-function-parameters"]], "The PyArg _ParseTuple Function": [[7, "the-pyarg-parsetuple-function"]], "Returning Values:": [[7, "returning-values"]], "Calling Python (+numpy) from C": [[7, "calling-python-numpy-from-c"]], "Installation with Scipion": [[8, "installation-with-scipion"]], "Installation Notes": [[9, "installation-notes"]], "Installing on Ubuntu 22.04": [[9, "installing-on-ubuntu-22-04"]], "Required dependencies": [[9, "required-dependencies"], [9, "id1"], [9, "id4"], [9, "id7"]], "Optional dependencies": [[9, "optional-dependencies"], [9, "id2"], [9, "id5"], [9, "id8"]], "Installation": [[9, "installation"], [9, "id3"], [9, "id6"], [9, "id9"]], "Installing on Ubuntu 20.04": [[9, "installing-on-ubuntu-20-04"]], "Installing on Ubuntu 18.04": [[9, "installing-on-ubuntu-18-04"]], "Installing on Centos-7": [[9, "installing-on-centos-7"]], "Troubleshooting": [[9, "troubleshooting"], [9, "id10"]], "Cmake": [[9, "cmake"], [9, "id11"], [10, "cmake"]], "Ubuntu and Debian": [[9, "ubuntu-and-debian"]], "Centos": [[9, "centos"]], "Older Ubuntu (18.0.4)": [[9, "older-ubuntu-18-0-4"]], "Compiler": [[9, "compiler"], [10, "compiler"]], "Compiling with Matlab": [[9, "compiling-with-matlab"]], "Previous requirements": [[9, "previous-requirements"]], "Settings": [[9, "settings"]], "Run": [[9, "run"]], "DeepLearningToolKit": [[9, "deeplearningtoolkit"]], "Requirements": [[9, "requirements"], [10, "requirements"]], "How to install": [[9, "how-to-install"]], "List environments": [[9, "list-environments"]], "libstd versions (compiler - python)": [[9, "libstd-versions-compiler-python"]], "DeepLearningToolkit": [[9, "id12"]], "Linking Xmipp to Scipion": [[9, "linking-xmipp-to-scipion"]], "HDF5": [[9, "hdf5"], [10, "hdf5"]], "Supported OS": [[10, "supported-os"]], "Hardware requirements": [[10, "hardware-requirements"]], "Software dependencies": [[10, "software-dependencies"]], "Cuda": [[10, "cuda"]], "OpenCV": [[10, "opencv"]], "Full list of dependencies": [[10, "full-list-of-dependencies"]], "Standalone installation": [[11, "standalone-installation"]], "Linking Xmipp standalone to Scipion": [[11, "linking-xmipp-standalone-to-scipion"]], "Releases scipion-em-xmipp": [[12, "releases-scipion-em-xmipp"]], "3.23.11 - Nereus": [[12, "nereus"], [14, "nereus"]], "3.23.07 - Morpheus": [[12, "morpheus"], [13, "morpheus"], [14, "morpheus"]], "3.23.03 - Kratos": [[12, "kratos"], [14, "kratos"]], "3.22.11 - Iris": [[12, "iris"], [14, "iris"]], "Hot fix 3.22.11.2": [[12, "hot-fix-3-22-11-2"]], "Hot fix 3.22.11.1": [[12, "hot-fix-3-22-11-1"]], "3.22.11.0": [[12, "id1"]], "3.22.07 - Helios": [[12, "helios"], [14, "helios"]], "3.22.04 - Gaia": [[12, "gaia"], [14, "gaia"]], "3.22.01 - Eris": [[12, "eris"], [14, "eris"]], "3.21.06 - Caerus": [[12, "caerus"], [14, "caerus"]], "3.20.07 - Boreas": [[12, "boreas"], [14, "boreas"]], "3.19.04": [[12, "id2"]], "Releases scipion-em-xmippTomo": [[13, "releases-scipion-em-xmipptomo"]], "3.23.11 Nereus": [[13, "nereus"]], "Releases xmipp program": [[14, "releases-xmipp-program"]], "Xmipp Programs": [[14, "xmipp-programs"], [14, "id1"], [14, "id4"], [14, "id6"]], "Installation and user guide": [[14, "installation-and-user-guide"], [14, "id2"], [14, "id5"], [14, "id7"], [14, "id9"], [14, "id11"]], "More Xmipp": [[14, "more-xmipp"], [14, "id3"]], "Others": [[14, "others"], [14, "id8"], [14, "id10"], [14, "id12"], [15, "others"]], "Scripts Xmipp": [[14, "scripts-xmipp"]], "Protocols scipion-em-xmipp": [[14, "protocols-scipion-em-xmipp"]], "Configuration file": [[15, "configuration-file"]], "C++ configuration": [[15, "c-configuration"]], "MPI configuration": [[15, "mpi-configuration"]], "Java configuration": [[15, "java-configuration"]], "Cuda configuration": [[15, "cuda-configuration"]], "Matlab configuration": [[15, "matlab-configuration"]], "OpenCV configuration": [[15, "opencv-configuration"]], "Conventions": [[16, "conventions"]], "Projections with Euler Angles": [[16, "projections-with-euler-angles"]], "Moving the projection plane": [[16, "moving-the-projection-plane"]], "More Euler Angles": [[16, "more-euler-angles"]], "Filenames": [[16, "filenames"]], "Logical access": [[16, "logical-access"]], "Image center": [[16, "image-center"]], "Programs deprecated": [[17, "programs-deprecated"]], "Deprecating programs": [[17, "deprecating-programs"]], "List of deprecated programs": [[17, "list-of-deprecated-programs"]], "List of deprecated protocols": [[17, "list-of-deprecated-protocols"]], "Xmipp structure": [[18, "xmipp-structure"]], "Contact us": [[19, "contact-us"]], "Mail": [[19, "mail"]], "Discord channel": [[19, "discord-channel"]], "Support for developers": [[19, "support-for-developers"]], "Welcome to Xmipp documentation!": [[20, "welcome-to-xmipp-documentation"]], "Getting started": [[20, "getting-started"]], "License": [[21, "license"]], "List of Publications": [[22, "list-of-publications"]], "2024": [[22, "id1"]], "DeIsidroGomez2024": [[22, "deisidrogomez2024"]], "2023": [[22, "id2"]], "Strelak2023": [[22, "strelak2023"]], "Fernandez-Gimenez2023a": [[22, "fernandez-gimenez2023a"]], "Fernandez-Gimenez2023b": [[22, "fernandez-gimenez2023b"]], "Vilas2023": [[22, "vilas2023"]], "2021": [[22, "id3"]], "sanchez2021deepemhancer": [[22, "sanchez2021deepemhancer"]], "fernandez2021cryo": [[22, "fernandez2021cryo"]], "Fernandez-Gimenez2021": [[22, "fernandez-gimenez2021"]], "Strelak2021": [[22, "strelak2021"]], "2020": [[22, "id4"]], "strelak2020flexalign": [[22, "strelak2020flexalign"]], "2018": [[22, "id5"]], "Vilas2018": [[22, "vilas2018"]], "2016": [[22, "id6"]], "Vilas2016": [[22, "vilas2016"]], "Sorzano2016": [[22, "sorzano2016"]], "2015": [[22, "id7"]], "Sorzano2015": [[22, "sorzano2015"]], "Abrishami2015": [[22, "abrishami2015"]], "Sorzano2015b": [[22, "sorzano2015b"]], "2014": [[22, "id8"]], "Vargas2014": [[22, "vargas2014"]], "Sorzano2014": [[22, "sorzano2014"]], "Jin2014": [[22, "jin2014"]], "Vargas2014a": [[22, "vargas2014a"]], "Marabini2014a": [[22, "marabini2014a"]], "2013": [[22, "id9"]], "Sorzano2013": [[22, "sorzano2013"]], "Vargas2013a": [[22, "vargas2013a"]], "Vargas2013b": [[22, "vargas2013b"]], "Abrishami2013": [[22, "abrishami2013"]], "delaRosaTrevin2013": [[22, "delarosatrevin2013"]], "Nogales2013": [[22, "nogales2013"]], "2010": [[22, "id10"]], "Sorzano2010a": [[22, "sorzano2010a"]], "2009": [[22, "id11"]], "Scheres2009b": [[22, "scheres2009b"]], "Scheres2009c": [[22, "scheres2009c"]], "Sorzano2009d": [[22, "sorzano2009d"]], "2007": [[22, "id12"]], "Sorzano2007a": [[22, "sorzano2007a"]], "Scheres2007a": [[22, "scheres2007a"]], "Scheres2007b": [[22, "scheres2007b"]], "2005": [[22, "id13"]], "Scheres2005a": [[22, "scheres2005a"]], "Scheres2005b": [[22, "scheres2005b"]], "Jonic2005": [[22, "jonic2005"]], "2004": [[22, "id14"]], "Sorzano2004b": [[22, "sorzano2004b"]], "2002": [[22, "id15"]], "PascualMontano2002": [[22, "pascualmontano2002"]], "2001": [[22, "id16"]], "PascualMontano2001": [[22, "pascualmontano2001"]], "2000": [[22, "id17"]], "Pascual2000": [[22, "pascual2000"]]}, "indexentries": {}}) \ No newline at end of file