From a47e3b0e6201c8f64a4c2309c90d82dddc2d5f9f Mon Sep 17 00:00:00 2001 From: github-actions Date: Sun, 19 Jan 2025 21:25:34 +0000 Subject: [PATCH] Update documentation --- specsanalyzer/latest | 1 + specsanalyzer/latest/objects.inv | Bin 2810 -> 0 bytes specsanalyzer/latest/searchindex.js | 1 - .../latest/tutorial/2_specsscan_example.html | 1187 ----------------- specsanalyzer/switcher.json | 9 +- .../{latest => v0.6.0a2}/_modules/index.html | 10 +- .../_modules/specsanalyzer/config.html | 147 +- .../_modules/specsanalyzer/convert.html | 17 +- .../_modules/specsanalyzer/core.html | 83 +- .../_modules/specsanalyzer/img_tools.html | 10 +- .../_modules/specsanalyzer/io.html | 10 +- .../_modules/specsscan/core.html | 115 +- .../_modules/specsscan/helpers.html | 148 +- .../_sources/getting_started.rst.txt | 0 .../_sources/index.rst.txt | 0 .../_sources/misc/maintain.rst.txt | 0 .../_sources/specsanalyzer/config.rst.txt | 4 +- .../_sources/specsanalyzer/convert.rst.txt | 0 .../_sources/specsanalyzer/core.rst.txt | 0 .../_sources/specsanalyzer/img_tools.rst.txt | 0 .../_sources/specsanalyzer/io.rst.txt | 0 .../_sources/specsscan/core.rst.txt | 0 .../_sources/specsscan/helpers.rst.txt | 0 ...pecsanalyzer_conversion_examples.ipynb.txt | 0 .../tutorial/2_specsscan_example.ipynb.txt | 0 .../3_specsscan_conversion_to_NeXus.ipynb.txt | 0 .../4_specsscan_load_sweep_scan.ipynb.txt | 0 .../{latest => v0.6.0a2}/_static/basic.css | 0 .../{latest => v0.6.0a2}/_static/doctools.js | 0 .../_static/documentation_options.js | 2 +- .../{latest => v0.6.0a2}/_static/file.png | Bin .../_static/language_data.js | 0 .../{latest => v0.6.0a2}/_static/minus.png | Bin .../_static/nbsphinx-broken-thumbnail.svg | 0 .../_static/nbsphinx-code-cells.css | 0 .../_static/nbsphinx-gallery.css | 0 .../_static/nbsphinx-no-thumbnail.svg | 0 .../{latest => v0.6.0a2}/_static/plus.png | Bin .../{latest => v0.6.0a2}/_static/pygments.css | 0 .../_static/scripts/bootstrap.js | 0 .../_static/scripts/bootstrap.js.LICENSE.txt | 0 .../_static/scripts/bootstrap.js.map | 0 .../_static/scripts/fontawesome.js | 0 .../scripts/fontawesome.js.LICENSE.txt | 0 .../_static/scripts/fontawesome.js.map | 0 .../_static/scripts/pydata-sphinx-theme.js | 0 .../scripts/pydata-sphinx-theme.js.map | 0 .../_static/searchtools.js | 0 .../_static/sphinx_highlight.js | 0 .../_static/styles/pydata-sphinx-theme.css | 0 .../styles/pydata-sphinx-theme.css.map | 0 .../_static/styles/theme.css | 0 .../fontawesome/webfonts/fa-brands-400.ttf | Bin .../fontawesome/webfonts/fa-brands-400.woff2 | Bin .../fontawesome/webfonts/fa-regular-400.ttf | Bin .../fontawesome/webfonts/fa-regular-400.woff2 | Bin .../fontawesome/webfonts/fa-solid-900.ttf | Bin .../fontawesome/webfonts/fa-solid-900.woff2 | Bin .../_static/webpack-macros.html | 0 .../{latest => v0.6.0a2}/genindex.html | 32 +- .../{latest => v0.6.0a2}/getting_started.html | 10 +- specsanalyzer/{latest => v0.6.0a2}/index.html | 10 +- .../{latest => v0.6.0a2}/misc/maintain.html | 10 +- specsanalyzer/v0.6.0a2/objects.inv | Bin 0 -> 2873 bytes .../{latest => v0.6.0a2}/py-modindex.html | 10 +- .../{latest => v0.6.0a2}/search.html | 10 +- specsanalyzer/v0.6.0a2/searchindex.js | 1 + .../specsanalyzer/config.html | 91 +- .../specsanalyzer/convert.html | 10 +- .../specsanalyzer/core.html | 15 +- .../specsanalyzer/img_tools.html | 10 +- .../specsanalyzer/io.html | 10 +- .../{latest => v0.6.0a2}/specsscan/core.html | 47 +- .../specsscan/helpers.html | 45 +- .../tests/data/config.yaml | 19 +- .../1_specsanalyzer_conversion_examples.html | 60 +- .../tutorial/2_specsscan_example.html | 1180 ++++++++++++++++ .../3_specsscan_conversion_to_NeXus.html | 36 +- .../tutorial/4_specsscan_load_sweep_scan.html | 66 +- 79 files changed, 1846 insertions(+), 1570 deletions(-) create mode 120000 specsanalyzer/latest delete mode 100644 specsanalyzer/latest/objects.inv delete mode 100644 specsanalyzer/latest/searchindex.js delete mode 100644 specsanalyzer/latest/tutorial/2_specsscan_example.html rename specsanalyzer/{latest => v0.6.0a2}/_modules/index.html (98%) rename specsanalyzer/{latest => v0.6.0a2}/_modules/specsanalyzer/config.html (72%) rename specsanalyzer/{latest => v0.6.0a2}/_modules/specsanalyzer/convert.html (98%) rename specsanalyzer/{latest => v0.6.0a2}/_modules/specsanalyzer/core.html (94%) rename specsanalyzer/{latest => v0.6.0a2}/_modules/specsanalyzer/img_tools.html (98%) rename specsanalyzer/{latest => v0.6.0a2}/_modules/specsanalyzer/io.html (99%) rename specsanalyzer/{latest => v0.6.0a2}/_modules/specsscan/core.html (88%) rename specsanalyzer/{latest => v0.6.0a2}/_modules/specsscan/helpers.html (83%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/getting_started.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/index.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/misc/maintain.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/specsanalyzer/config.rst.txt (78%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/specsanalyzer/convert.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/specsanalyzer/core.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/specsanalyzer/img_tools.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/specsanalyzer/io.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/specsscan/core.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/specsscan/helpers.rst.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/tutorial/1_specsanalyzer_conversion_examples.ipynb.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/tutorial/2_specsscan_example.ipynb.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/tutorial/3_specsscan_conversion_to_NeXus.ipynb.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_sources/tutorial/4_specsscan_load_sweep_scan.ipynb.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/basic.css (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/doctools.js (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/documentation_options.js (89%) rename specsanalyzer/{latest => v0.6.0a2}/_static/file.png (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/language_data.js (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/minus.png (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/nbsphinx-broken-thumbnail.svg (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/nbsphinx-code-cells.css (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/nbsphinx-gallery.css (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/nbsphinx-no-thumbnail.svg (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/plus.png (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/pygments.css (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/bootstrap.js (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/bootstrap.js.LICENSE.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/bootstrap.js.map (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/fontawesome.js (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/fontawesome.js.LICENSE.txt (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/fontawesome.js.map (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/pydata-sphinx-theme.js (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/scripts/pydata-sphinx-theme.js.map (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/searchtools.js (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/sphinx_highlight.js (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/styles/pydata-sphinx-theme.css (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/styles/pydata-sphinx-theme.css.map (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/styles/theme.css (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 (100%) rename specsanalyzer/{latest => v0.6.0a2}/_static/webpack-macros.html (100%) rename specsanalyzer/{latest => v0.6.0a2}/genindex.html (96%) rename specsanalyzer/{latest => v0.6.0a2}/getting_started.html (98%) rename specsanalyzer/{latest => v0.6.0a2}/index.html (98%) rename specsanalyzer/{latest => v0.6.0a2}/misc/maintain.html (98%) create mode 100644 specsanalyzer/v0.6.0a2/objects.inv rename specsanalyzer/{latest => v0.6.0a2}/py-modindex.html (98%) rename specsanalyzer/{latest => v0.6.0a2}/search.html (98%) create mode 100644 specsanalyzer/v0.6.0a2/searchindex.js rename specsanalyzer/{latest => v0.6.0a2}/specsanalyzer/config.html (88%) rename specsanalyzer/{latest => v0.6.0a2}/specsanalyzer/convert.html (99%) rename specsanalyzer/{latest => v0.6.0a2}/specsanalyzer/core.html (96%) rename specsanalyzer/{latest => v0.6.0a2}/specsanalyzer/img_tools.html (98%) rename specsanalyzer/{latest => v0.6.0a2}/specsanalyzer/io.html (99%) rename specsanalyzer/{latest => v0.6.0a2}/specsscan/core.html (89%) rename specsanalyzer/{latest => v0.6.0a2}/specsscan/helpers.html (93%) rename specsanalyzer/{latest => v0.6.0a2}/tests/data/config.yaml (71%) rename specsanalyzer/{latest => v0.6.0a2}/tutorial/1_specsanalyzer_conversion_examples.html (99%) create mode 100644 specsanalyzer/v0.6.0a2/tutorial/2_specsscan_example.html rename specsanalyzer/{latest => v0.6.0a2}/tutorial/3_specsscan_conversion_to_NeXus.html (97%) rename specsanalyzer/{latest => v0.6.0a2}/tutorial/4_specsscan_load_sweep_scan.html (94%) diff --git a/specsanalyzer/latest b/specsanalyzer/latest new file mode 120000 index 0000000..fa7cf94 --- /dev/null +++ b/specsanalyzer/latest @@ -0,0 +1 @@ +v0.6.0a2 \ No newline at end of file diff --git a/specsanalyzer/latest/objects.inv b/specsanalyzer/latest/objects.inv deleted file mode 100644 index e666e5695cfd6c2638c162802b0e8eac8eef0e5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2810 zcmVNERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGk&aAjk2 zVQyh;d3t4X3L_v^WpZ_Ab7^j8AbMyqPXf+)+!2-~hdscakyk4FpxR7js#N_~> z7gJUf2jBSt;zrM!>vvOl-D`fJ5ZgF9_-d*r8fqfP2R zSM?j_poo7?eTzBX?wcKNNQdY}k`L!j{jA;w*j{K$(0+TBSqAG7Wq36jL*LeceZ!Q8 z-+{D$ z7x=K zRfLKrOFGfdTf#7t6|e^MkEZMJiX<_v9S&tUii7=};%FxqCST;EkHaI$+qH->hnNuu z;oKT+xTmBS#kdqBr?GKGqO9O;b3!k=DltEjeK~dPGPGG7o068q+L(+;lPWD zJBsBvDN$l>L?;$$-hNzjdQoavpn*>|kyd`SQ`PnzQHsJ#i5WSBJdiVOL}xxUEf@bp zM(qUf3pz7aj3c4?Be9Ajx3XOA_S7)ebT6VAM_%cObh8){eN8g92SRnH`E znK5Zj9W5W(qlRi?+pq$bT4^5tRtVs+IUW)dPMKugBB+d%I-{ABNn?_ zo)~OUbm9jRUunbFAd0Fgd37Rthrgd$5h4B6vmNR@s{)x6SP@J)^`!7+r&s3IN??Wv z<-Oe<@$TPSHel@OB#Gml@{=h3*)j#=pCMBys#}-WjHr(tW^Bt|G45C3QOwRQFRf|$ z4V$Rrh+E-~d7A8y8fdknh1@PcRDMAdx_9=xCD2VeG~M+L6+^cC(&G}6oRkpV9mV)Y zyX%?t$5e}wqPo$OTGJg!Xu?gSwP&ti z2RQ0ZR4&W^uFn9DeTNJs1UaOQ`1*JiJz7FdE;?GFsB!l>x7z)i~oSW+!>$LW9`>??(uH5 zFM!jTz1=#+5R1Pr8@7I|n)5$#E9M1UaboBF3#;~IcRpbuSH6uu88GqAM6bn6wM>ql zTg-fXm+7N^q#CY%WU^nipqi7~5>&I=66Ey=1|$?+eBSNu#&@@@Pdi!F>u2&R!Q(>* zVsj*~Qsnq7hFsV$TsU{Z7h=78<-@q*=M3W#5I0&!se61tVr4aZTlN^pbkk>0-$~40 zw6Tq=EaPf4hL%IlIct_7#Iy9PWm&Rz{2j@&q?rdfov7iAA4Pwni1wl<3);D_5w8!& zrhdk>oi|;7i3+_u=Brxn9==p6dxd!Q>*vS%XO%rr`eE7ZI&^{- zErj^^^cZjsKH38+f%AZdsoKpG#1hRGCt{GQ(K?tc5ov>B7O67L6VDQr7AIoh(5TK> z;uFbq6jP07tm8_YRX;fodTs*FHpAcb1X+&e$_Y>un74}f*jX`Dbd(cLPnYO8fiBbP z0s;+7)GtrE*D8jCoSLJgV2(5PwMynfCud17oBw>jtY86dntfi8bW}lk5e7~;Jze5F zR-sJjf(Efl7ww3KDAVl%0u9sEFQYEX#5;H}yL9P8Y)6^i5fVtuRiKCzNGOa1FiO!H*oRBdX@?HQ z46^mzf+kF;&RgF!=`$?Q4fwW!%XWX@c)Fg^VLsh>g$NV;-Hpu>DQ2|$ZTiFURAnfE8pHP>nY1k(CbFAYWdqcfr$*Y zj*kONOvA2O9!NMIyci%_+$K-*GTg6RxPu9`%qzqgT39Z9B8AfzGD);|k)d0WzzVG) zH*WH#A^s*#0DdEYOjVHRN`N*HCT;^3=?vS<(&;9F%%E!hQK31C12nK{it<_TX|Cis zCT;^2IYzbSD4X(n5|T9V$Omy)1z&yyn@Lb5?)cgqRUQ(^464=&-^~$e145~ANuF5X zJb6AC)G}T6Ea13I_8bPagv!=Y%{dx}oX*Dy-gQuPrhp-{FC{@n_SiAy^&|`$uJNw! zRgN7G>)D5z!fS6_ROj~A5JlnKA)CeEhO=iWngs=4!!@E}ydmhmge3oFFnYEW3lg_U z6zJO~0*f=YhWzP?q5}I0U|sfJLeL~lU0~k;D$d?32w9{_y9W5@Ycm*8lQeaXdjt70 zT`;(9n(*O*LcZ7$5Kd1MrS3cAOVZgxsivGU#yc>nm|@`6XZ^#2uwuHbn-~DLKXb%s z^xg)kl&w{Cg*xHCts4m2&coPnRk8igjs}8DqNI#b0|-gMF^$BMLF&vlnj8)cbA2NPbuaS^S;>+&9|Pzqts2tQtrwM+Rg7y&-E``P3*v&% zUTU#8Bkec5uhkZ7X_-Dj{ag(zX;@8$)o55L!_v~8<*s~fn5u{l%*C&I*>#Hw9Cc-s zS=m-j+e-KGjAD=1B;MXTBb3=9m^Hn)4_6mfH#1%QsII6_S=TGe$6u9RqXL|d{o~!eu`M^KPu22pWlc3Pv5Ko{u+6Hazngi7 zAMiRFJ-;^mSTo$>9T#JEBL*g6X4|NZB`i_6~D&1;hfxaBRDx{k8;mwHUl*?!ai8y8(_BQ=uk z>B5hqX06-|%RQdidsNSKo-aE6Nrs8K-mh7}=*@6vM17Eub0u&Y+Zb|@6jAR9;qvp# zVi@O#rU5_DXfAvAd;v^7I9+TWxQWhP^OUu(iTyE~0-=f6={;|844vVeE=#9v$Q0pp MTsY(XA7$KQdOY@EUH||9 diff --git a/specsanalyzer/latest/searchindex.js b/specsanalyzer/latest/searchindex.js deleted file mode 100644 index aaf2318..0000000 --- a/specsanalyzer/latest/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"alltitles": {"API": [[3, "module-specsanalyzer.config"]], "Adjusting offsets and angle": [[10, "Adjusting-offsets-and-angle"]], "Config": [[3, null]], "Configuration and calib2d file": [[0, "configuration-and-calib2d-file"]], "Contributing": [[1, null]], "Conversion into spatially resolved modes": [[10, "Conversion-into-spatially-resolved-modes"]], "Conversion using conversion_parameters dict": [[10, "Conversion-using-conversion_parameters-dict"]], "Core functions (specsanalyzer.core)": [[5, null]], "Core functions (specsscan.core)": [[8, null]], "Cropping data": [[11, "Cropping-data"]], "Default specsanalyzer configuration settings": [[3, "default-specsanalyzer-configuration-settings"]], "Default specsscan configuration settings": [[3, "default-specsscan-configuration-settings"]], "Example 1: SpecsAnalyzer conversion": [[10, null]], "Example 2: SpecsScan loading": [[11, null]], "Example 3: Export to NeXus": [[12, null]], "Example 4: Sweep Scan loading": [[13, null]], "Example configuration file for the trARPES setup at FHI-Berlin": [[3, "example-configuration-file-for-the-trarpes-setup-at-fhi-berlin"]], "For Contributors": [[0, "for-contributors"]], "Getting Started": [[1, null]], "Helpers": [[9, null]], "How to maintain": [[2, null]], "Image conversion": [[10, "Image-conversion"]], "Indices and tables": [[1, "indices-and-tables"]], "Installation": [[0, "installation"]], "Loading data": [[11, "Loading-data"]], "Loading with selected iterations": [[11, "Loading-with-selected-iterations"]], "Pip (for users)": [[0, "pip-for-users"]], "Poetry (for maintainers)": [[0, "poetry-for-maintainers"]], "Removal of Mesh Artifact": [[11, "Removal-of-Mesh-Artifact"]], "Removal of mesh artefact": [[10, "Removal-of-mesh-artefact"]], "Saving": [[11, "Saving"]], "SpecsAnalyzer Core Modules": [[1, null]], "SpecsScan Core Modules": [[1, null]], "Welcome to specsanalyzer\u2019s documentation!": [[1, null]], "convert functions (specsanalyzer.convert)": [[4, null]], "image tool functions (specsanalyzer.img_tools)": [[6, null]], "io functions (specsanalyzer.io)": [[7, null]], "specsanalyzer": [[0, null]]}, "docnames": ["getting_started", "index", "misc/maintain", "specsanalyzer/config", "specsanalyzer/convert", "specsanalyzer/core", "specsanalyzer/img_tools", "specsanalyzer/io", "specsscan/core", "specsscan/helpers", "tutorial/1_specsanalyzer_conversion_examples", "tutorial/2_specsscan_example", "tutorial/3_specsscan_conversion_to_NeXus", "tutorial/4_specsscan_load_sweep_scan"], "envversion": {"nbsphinx": 4, "sphinx": 64, "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.todo": 2, "sphinx.ext.viewcode": 1}, "filenames": ["getting_started.rst", "index.rst", "misc/maintain.rst", "specsanalyzer/config.rst", "specsanalyzer/convert.rst", "specsanalyzer/core.rst", "specsanalyzer/img_tools.rst", "specsanalyzer/io.rst", "specsscan/core.rst", "specsscan/helpers.rst", "tutorial/1_specsanalyzer_conversion_examples.ipynb", "tutorial/2_specsscan_example.ipynb", "tutorial/3_specsscan_conversion_to_NeXus.ipynb", "tutorial/4_specsscan_load_sweep_scan.ipynb"], "indexentries": {"_fill_missing_dims() (in module specsanalyzer.io)": [[7, "specsanalyzer.io._fill_missing_dims", false]], "_sort_dims_for_imagej() (in module specsanalyzer.io)": [[7, "specsanalyzer.io._sort_dims_for_imagej", false]], "bisection() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.bisection", false]], "calculate_jacobian() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.calculate_jacobian", false]], "calculate_matrix_correction() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.calculate_matrix_correction", false]], "calculate_polynomial_coef_da() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.calculate_polynomial_coef_da", false]], "calib2d (specsanalyzer.core.specsanalyzer property)": [[5, "specsanalyzer.core.SpecsAnalyzer.calib2d", false]], "check_scan() (specsscan.core.specsscan method)": [[8, "specsscan.core.SpecsScan.check_scan", false]], "compare_coords() (in module specsscan.helpers)": [[9, "specsscan.helpers.compare_coords", false]], "complete_dictionary() (in module specsanalyzer.config)": [[3, "specsanalyzer.config.complete_dictionary", false]], "config (specsanalyzer.core.specsanalyzer property)": [[5, "specsanalyzer.core.SpecsAnalyzer.config", false]], "config (specsscan.core.specsscan property)": [[8, "specsscan.core.SpecsScan.config", false]], "convert_image() (specsanalyzer.core.specsanalyzer method)": [[5, "specsanalyzer.core.SpecsAnalyzer.convert_image", false]], "correction_matrix_dict (specsanalyzer.core.specsanalyzer property)": [[5, "specsanalyzer.core.SpecsAnalyzer.correction_matrix_dict", false]], "create_fft_params() (in module specsanalyzer.core)": [[5, "specsanalyzer.core.create_fft_params", false]], "crop_tool() (specsanalyzer.core.specsanalyzer method)": [[5, "specsanalyzer.core.SpecsAnalyzer.crop_tool", false]], "crop_tool() (specsscan.core.specsscan method)": [[8, "specsscan.core.SpecsScan.crop_tool", false]], "crop_xarray() (in module specsanalyzer.img_tools)": [[6, "specsanalyzer.img_tools.crop_xarray", false]], "fft_tool() (specsanalyzer.core.specsanalyzer method)": [[5, "specsanalyzer.core.SpecsAnalyzer.fft_tool", false]], "fft_tool() (specsscan.core.specsscan method)": [[8, "specsscan.core.SpecsScan.fft_tool", false]], "find_scan() (in module specsscan.helpers)": [[9, "specsscan.helpers.find_scan", false]], "find_scan_type() (in module specsscan.helpers)": [[9, "specsscan.helpers.find_scan_type", false]], "fourier_filter_2d() (in module specsanalyzer.img_tools)": [[6, "specsanalyzer.img_tools.fourier_filter_2d", false]], "gauss2d() (in module specsanalyzer.img_tools)": [[6, "specsanalyzer.img_tools.gauss2d", false]], "get_archiver_data() (in module specsscan.helpers)": [[9, "specsscan.helpers.get_archiver_data", false]], "get_coords() (in module specsscan.helpers)": [[9, "specsscan.helpers.get_coords", false]], "get_damatrix_from_calib2d() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.get_damatrix_from_calib2d", false]], "get_modes_from_calib_dict() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.get_modes_from_calib_dict", false]], "get_pair_from_list() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.get_pair_from_list", false]], "get_raw2d() (in module specsscan.helpers)": [[9, "specsscan.helpers.get_raw2d", false]], "get_rr_da() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.get_rr_da", false]], "get_scan_path() (in module specsscan.helpers)": [[9, "specsscan.helpers.get_scan_path", false]], "handle_meta() (in module specsscan.helpers)": [[9, "specsscan.helpers.handle_meta", false]], "load_config() (in module specsanalyzer.config)": [[3, "specsanalyzer.config.load_config", false]], "load_h5() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.load_h5", false]], "load_images() (in module specsscan.helpers)": [[9, "specsscan.helpers.load_images", false]], "load_scan() (specsscan.core.specsscan method)": [[8, "specsscan.core.SpecsScan.load_scan", false]], "load_tiff() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.load_tiff", false]], "mcp_position_mm() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.mcp_position_mm", false]], "module": [[3, "module-specsanalyzer.config", false], [4, "module-specsanalyzer.convert", false], [5, "module-specsanalyzer.core", false], [6, "module-specsanalyzer.img_tools", false], [7, "module-specsanalyzer.io", false], [8, "module-specsscan.core", false], [9, "module-specsscan.helpers", false]], "parse_calib2d_to_dict() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.parse_calib2d_to_dict", false]], "parse_config() (in module specsanalyzer.config)": [[3, "specsanalyzer.config.parse_config", false]], "parse_info_to_dict() (in module specsscan.helpers)": [[9, "specsscan.helpers.parse_info_to_dict", false]], "parse_lut_to_df() (in module specsscan.helpers)": [[9, "specsscan.helpers.parse_lut_to_df", false]], "physical_unit_data() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.physical_unit_data", false]], "process_sweep_scan() (specsscan.core.specsscan method)": [[8, "specsscan.core.SpecsScan.process_sweep_scan", false]], "read_calib2d() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.read_calib2d", false]], "recursive_parse_metadata() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.recursive_parse_metadata", false]], "recursive_write_metadata() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.recursive_write_metadata", false]], "result (specsscan.core.specsscan property)": [[8, "specsscan.core.SpecsScan.result", false]], "save() (specsscan.core.specsscan method)": [[8, "specsscan.core.SpecsScan.save", false]], "save_config() (in module specsanalyzer.config)": [[3, "specsanalyzer.config.save_config", false]], "second_closest_rr() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.second_closest_rr", false]], "specsanalyzer (class in specsanalyzer.core)": [[5, "specsanalyzer.core.SpecsAnalyzer", false]], "specsanalyzer.config": [[3, "module-specsanalyzer.config", false]], "specsanalyzer.convert": [[4, "module-specsanalyzer.convert", false]], "specsanalyzer.core": [[5, "module-specsanalyzer.core", false]], "specsanalyzer.img_tools": [[6, "module-specsanalyzer.img_tools", false]], "specsanalyzer.io": [[7, "module-specsanalyzer.io", false]], "specsscan (class in specsscan.core)": [[8, "specsscan.core.SpecsScan", false]], "specsscan.core": [[8, "module-specsscan.core", false]], "specsscan.helpers": [[9, "module-specsscan.helpers", false]], "to_h5() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.to_h5", false]], "to_nexus() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.to_nexus", false]], "to_tiff() (in module specsanalyzer.io)": [[7, "specsanalyzer.io.to_tiff", false]], "zinner() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.zinner", false]], "zinner_diff() (in module specsanalyzer.convert)": [[4, "specsanalyzer.convert.zinner_diff", false]]}, "objects": {"specsanalyzer": [[3, 0, 0, "-", "config"], [4, 0, 0, "-", "convert"], [5, 0, 0, "-", "core"], [6, 0, 0, "-", "img_tools"], [7, 0, 0, "-", "io"]], "specsanalyzer.config": [[3, 1, 1, "", "complete_dictionary"], [3, 1, 1, "", "load_config"], [3, 1, 1, "", "parse_config"], [3, 1, 1, "", "save_config"]], "specsanalyzer.convert": [[4, 1, 1, "", "bisection"], [4, 1, 1, "", "calculate_jacobian"], [4, 1, 1, "", "calculate_matrix_correction"], [4, 1, 1, "", "calculate_polynomial_coef_da"], [4, 1, 1, "", "get_damatrix_from_calib2d"], [4, 1, 1, "", "get_rr_da"], [4, 1, 1, "", "mcp_position_mm"], [4, 1, 1, "", "physical_unit_data"], [4, 1, 1, "", "second_closest_rr"], [4, 1, 1, "", "zinner"], [4, 1, 1, "", "zinner_diff"]], "specsanalyzer.core": [[5, 2, 1, "", "SpecsAnalyzer"], [5, 1, 1, "", "create_fft_params"]], "specsanalyzer.core.SpecsAnalyzer": [[5, 3, 1, "", "calib2d"], [5, 3, 1, "", "config"], [5, 4, 1, "", "convert_image"], [5, 3, 1, "", "correction_matrix_dict"], [5, 4, 1, "", "crop_tool"], [5, 4, 1, "", "fft_tool"]], "specsanalyzer.img_tools": [[6, 1, 1, "", "crop_xarray"], [6, 1, 1, "", "fourier_filter_2d"], [6, 1, 1, "", "gauss2d"]], "specsanalyzer.io": [[7, 1, 1, "", "_fill_missing_dims"], [7, 1, 1, "", "_sort_dims_for_imagej"], [7, 1, 1, "", "get_modes_from_calib_dict"], [7, 1, 1, "", "get_pair_from_list"], [7, 1, 1, "", "load_h5"], [7, 1, 1, "", "load_tiff"], [7, 1, 1, "", "parse_calib2d_to_dict"], [7, 1, 1, "", "read_calib2d"], [7, 1, 1, "", "recursive_parse_metadata"], [7, 1, 1, "", "recursive_write_metadata"], [7, 1, 1, "", "to_h5"], [7, 1, 1, "", "to_nexus"], [7, 1, 1, "", "to_tiff"]], "specsscan": [[8, 0, 0, "-", "core"], [9, 0, 0, "-", "helpers"]], "specsscan.core": [[8, 2, 1, "", "SpecsScan"]], "specsscan.core.SpecsScan": [[8, 4, 1, "", "check_scan"], [8, 3, 1, "", "config"], [8, 4, 1, "", "crop_tool"], [8, 4, 1, "", "fft_tool"], [8, 4, 1, "", "load_scan"], [8, 4, 1, "", "process_sweep_scan"], [8, 3, 1, "", "result"], [8, 4, 1, "", "save"]], "specsscan.helpers": [[9, 1, 1, "", "compare_coords"], [9, 1, 1, "", "find_scan"], [9, 1, 1, "", "find_scan_type"], [9, 1, 1, "", "get_archiver_data"], [9, 1, 1, "", "get_coords"], [9, 1, 1, "", "get_raw2d"], [9, 1, 1, "", "get_scan_path"], [9, 1, 1, "", "handle_meta"], [9, 1, 1, "", "load_images"], [9, 1, 1, "", "parse_info_to_dict"], [9, 1, 1, "", "parse_lut_to_df"]]}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "property", "Python property"], "4": ["py", "method", "Python method"]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:property", "4": "py:method"}, "terms": {"": [3, 7, 12], "0": [3, 5, 10, 11, 12, 13], "00": 12, "000000": 10, "0033": 10, "00645": 3, "01": 10, "02": [10, 12], "0258": 10, "03": [10, 12], "04": 10, "04428571e": 10, "05": 10, "066": 10, "07597844332538181": 12, "07597844332538357": 13, "08": [11, 12], "0x7f0d21c8c1f0": 11, "0x7f0d21d0a320": 11, "0x7f0d21d76ce0": 11, "0x7f0d21ea2ef0": 11, "0x7f0d29f53b20": 11, "0x7f2ecc39d960": 10, "0x7f2ecc4b5bd0": 10, "0x7f2ecc4ca2c0": 10, "0x7f2ece520ac0": 10, "0x7f2ece55c9d0": 10, "0x7f2ed072aa40": 10, "0x7f5e219b6290": 12, "0x7f5e251ff490": 12, "0x7fc754305120": 13, "1": [1, 3, 4, 6, 8, 9, 11, 12, 13], "10": [3, 8, 9, 10, 11, 12, 13], "1024": 3, "108": 3, "109": 3, "11": [10, 11, 12], "116": 11, "12": [10, 11], "120": 12, "13": [10, 11, 13], "1376": 3, "14": [10, 11], "14195": 12, "1496": 12, "15": [8, 9, 10, 11], "150": 12, "16": [3, 10, 11, 12, 13], "16453159041394336": 12, "16571429e": 10, "16732026143790849": 13, "17668": 3, "19828571e": 10, "19t10": 12, "2": [1, 6, 7, 9, 10, 12, 13], "20": 12, "2017": 12, "2020": 9, "20521429e": 10, "20f": 12, "21": 12, "224": 12, "23": 11, "2566412": 4, "270": 12, "2857142857142865": 10, "2d": [5, 6, 9], "3": [1, 3, 7, 8, 10, 11, 13], "30": 12, "300": 12, "34": 12, "34014286e": 10, "35": [10, 12], "36678571e": 10, "37997143e": 10, "39": [10, 11, 12], "3d": [9, 11], "4": [1, 3, 7, 10, 11, 12], "4450": 11, "4sigma": 12, "5": [3, 10, 11, 12], "500": 12, "53542857e": 10, "54": [3, 10], "55": 12, "59685714e": 10, "5e": 12, "6": [4, 10, 11, 12], "6455": 13, "7": [10, 11, 12], "70": 12, "7142857142857135": 10, "74571429e": 10, "78": 3, "79": 3, "8": [3, 10, 11, 12], "80": [3, 12], "800": 12, "800nm": 12, "81": 3, "82": [10, 11], "8449673202614381": 13, "85": 11, "85771429e": 10, "8771428571428571": 10, "88": 11, "8840087145969499": 12, "8965456312395133": 13, "9": [10, 11], "9117413199045858": 12, "95942857e": 10, "A": [0, 3, 4, 5, 8, 9, 12], "For": [3, 8, 9, 11], "If": [0, 7, 9, 10], "In": [3, 11], "It": 3, "Its": 8, "No": 10, "One": 11, "The": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "These": [3, 10, 12], "To": 0, "Will": 3, "__epicsarchiver_host__": 3, "_attr": 7, "_fill_missing_dim": 7, "_sort_dims_for_imagej": 7, "a_inn": [4, 10], "a_rang": [4, 10], "about": 6, "abov": 4, "access": [0, 11], "accessor": 11, "accord": 6, "acquir": 0, "activ": 0, "ad": [3, 7, 11], "add": 7, "addit": [3, 8, 9, 11, 13], "address": 12, "administr": 3, "affili": 12, "after": [4, 11, 12], "again": 11, "alia": 7, "alias": 8, "alias_dict": [7, 8], "all": [0, 3, 8, 9, 11, 13], "allusersprofil": 3, "along": [3, 4, 6, 11, 12], "alreadi": 11, "also": [3, 10, 11], "altern": [3, 10, 11], "amplitud": [3, 5, 6, 8, 11], "an": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "analyz": [0, 3, 4, 5, 8, 10], "analyzer_dispers": 3, "ang_range_max": [5, 11, 12, 13], "ang_range_min": [5, 11, 12, 13], "angl": [0, 3, 4, 5, 8, 11], "angle_axi": 4, "angle_offset_px": [3, 4, 10, 13], "angular": [0, 3, 4, 7, 11], "angular0": [3, 12], "angular1": [3, 12], "angular_correction_matrix": 4, "angular_resolut": 12, "ani": [3, 7, 9], "anoth": 11, "api": 0, "appear": [5, 8], "append": 8, "appli": [3, 5, 8, 10, 11], "applic": [3, 8], "apply_fft_filt": [3, 10, 11], "approach": 10, "ar": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13], "archiv": [3, 8, 9], "archiver_channel": 9, "archiver_url": [3, 9], "area": [4, 11], "argument": [3, 5, 7, 8, 10], "around": [4, 5, 8, 12], "arpescontrol": 8, "arrai": [4, 6, 7, 8, 9, 10], "arriv": 4, "artifact": [3, 6, 10], "associ": [4, 11], "assum": 7, "attr": [7, 10, 11], "attribut": [7, 10, 11], "attributeerror": 7, "automat": 7, "autoreload": [10, 11, 12, 13], "auxiliari": 4, "avail": [0, 10], "averag": [8, 9, 11], "average_pow": 12, "avg": 9, "ax": [3, 7, 12], "axi": [3, 4, 5, 7, 8, 9, 11, 12], "axis_data": 9, "axis_dict": 7, "azimuth": 3, "band": [11, 12], "bar": [3, 9], "base": [3, 4, 5, 8, 9], "base_dictionari": 3, "basepath": 9, "beam": 12, "been": 7, "befor": 11, "below": [0, 3, 4], "berlin": [8, 11, 12], "best": [4, 7], "between": [3, 4], "beyond": 11, "bin": [0, 3, 4, 10], "binarysearch": 4, "bisect": 4, "bool": [3, 5, 8, 9], "both": 9, "boundari": [4, 6, 11], "built": [5, 8], "c": 7, "calcul": [4, 6], "calculate_jacobian": 4, "calculate_matrix_correct": 4, "calculate_polynomial_coef_da": 4, "calib2": 10, "calib2d": [3, 4, 5, 7, 8, 10], "calib2d_dict": 4, "calib2d_fil": 3, "calib_dict": 7, "calibr": [0, 3, 7, 10], "camelcas": [5, 8], "camera": 5, "can": [0, 3, 7, 8, 9, 10, 11], "cannot": [3, 7, 9], "carv": [3, 12], "case": 11, "cd": 0, "center": [4, 6, 10], "certain": 4, "chang": [0, 3, 9, 11, 12], "channel": [3, 7, 9], "charact": 7, "check": [0, 5, 8], "check_scan": [8, 9, 11], "chemical_formula": 12, "chosen": 6, "class": [0, 5, 8, 9, 11, 12, 13], "clean": 7, "cleav": 12, "clone": 0, "closest": 4, "closest_rr_index": 4, "coeffici": 4, "collect": [3, 8, 9, 10, 11, 12, 13], "collect_metadata": [8, 9, 12], "column": 9, "com": [0, 4], "combin": 3, "come": 12, "command": 0, "common": 8, "compare_coord": 9, "comparison": 4, "compat": 7, "complet": [3, 7, 11], "complete_dictionari": 3, "concept": 1, "conda": 0, "config": [0, 1, 5, 8, 9, 10, 11, 12, 13], "config_dict": 3, "config_filteron": 10, "config_path": 3, "configur": [4, 7, 10, 11, 13], "consid": 7, "consist": [3, 8, 9], "constructor": 0, "contain": [0, 3, 4, 5, 6, 7, 8, 9, 11, 12], "content": [3, 9], "contribut": 0, "control": 3, "conveni": [7, 11], "convent": [5, 8], "convers": [0, 1, 3, 4, 5, 7, 8, 9, 11, 12, 13], "conversion_paramet": [5, 11], "convert": [0, 1, 5, 7, 8, 9, 10, 11, 12], "convert_imag": [5, 10], "coord": [7, 9], "coordin": [0, 4, 5, 6, 7, 8, 9, 11], "coordinate_depend": 3, "coordinate_map": 3, "copi": 10, "correct": [4, 5, 7], "correction_matrix_dict": 5, "correl": 6, "correspond": [0, 3, 4, 5, 6, 7, 9, 10, 11], "creat": [0, 3, 5, 7, 10, 11, 12, 13], "create_fft_param": 5, "crop": [3, 5, 6, 8, 12, 13], "crop_tool": [5, 8, 11], "crop_xarrai": 6, "crystal": 12, "cube": 12, "current": [3, 4, 7], "cut": 12, "d": [8, 9], "da": 4, "da1": 4, "da3": 4, "da7": 4, "da_matrix": [4, 10], "da_poly_matrix": 4, "dapolymatrix": 4, "data": [0, 3, 5, 6, 7, 8, 9, 10, 12, 13], "data9132_rawdata": 10, "data_arrai": 6, "data_path": [3, 8], "dataarrai": [5, 6, 7, 8], "databas": 4, "dataconvert": 7, "dataepfl": 10, "datafram": [9, 11, 12], "dataset": 7, "de": 12, "de1": [4, 10], "default": [5, 6, 7, 8, 9, 10, 11, 12, 13], "default_config": 3, "defin": [0, 3, 4, 5, 6, 10], "definit": [3, 7, 8, 12], "deg": 4, "degre": 3, "delai": [3, 8, 9, 11, 12], "delimit": 10, "demonstr": [10, 11], "depend": 0, "describ": 7, "descript": [1, 4, 12], "detail": 3, "detector": [0, 3, 4, 10, 11], "determin": [4, 5, 8], "dev": 0, "develop": 0, "deviat": 3, "df_lut": 9, "dict": [3, 4, 5, 6, 7, 8, 9], "dict_kei": 11, "dictionari": [3, 4, 5, 7, 8, 9, 13], "differ": [3, 9, 10, 11, 12, 13], "dim": [4, 6, 7, 9, 10, 11, 12], "dimens": [7, 8, 9, 10, 11], "dimension": [6, 7, 12], "direct": [3, 4, 6], "directli": [3, 5, 8, 11], "directori": [3, 9], "disabl": 3, "dispers": [3, 4, 11, 12], "distanc": 4, "divid": 7, "do": [4, 11], "doc": [0, 10, 11, 12, 13], "document": [0, 11], "doe": 7, "done": [0, 11, 12, 13], "drain_curr": 3, "drive": 11, "duplic": 7, "e": [0, 3, 4, 5, 6, 8, 9, 10, 11], "e_correct": 4, "e_rang": [4, 10], "e_shift": [4, 10], "each": [3, 4, 6, 8], "edg": 4, "edit": 0, "ef": 12, "either": [0, 8, 11], "ek_axi": 4, "ek_range_max": [5, 11, 12, 13], "ek_range_min": [5, 11, 12, 13], "ekin": [3, 8, 10, 11], "electron": [4, 8, 12], "electronanalys": [3, 12], "element": [6, 7], "eln": 3, "eln_data": 8, "email": 12, "emiss": [0, 4], "empti": [3, 8, 9], "enabl": [3, 9], "enable_nested_progress_bar": 3, "end": 9, "energi": [0, 3, 4, 5, 7, 8, 11, 12, 13], "energy_offset_px": [3, 4, 10], "energy_resolut": 12, "energydispers": 3, "engin": 3, "ensur": 0, "entri": [3, 6, 7, 11, 12], "entry_titl": 12, "environ": 0, "epfl": [0, 8], "epic": [3, 8, 9], "epics_channel": 3, "equidist": 13, "eshift": 4, "estim": 4, "etc": [0, 3, 9], "ev": 3, "even": 7, "ex": [8, 9], "exampl": [0, 1], "example_config_fhi": [12, 13], "example_data": 11, "exist": [3, 11], "experiment_summari": 12, "experiment_titl": 12, "explicitli": 10, "explor": 8, "export": 1, "express": 4, "extend": 7, "extens": 8, "extent": 12, "extract": 9, "f": [3, 12], "factor": [3, 4], "faddr": [7, 8], "fairmat": 12, "fals": [3, 5, 8, 9, 10, 11], "faradayweg": 12, "fast": 9, "fast_ax": 9, "featur": 6, "feel": 0, "fermi": 12, "fft": [5, 6, 8, 10, 11], "fft_filter_peak": [3, 5, 8, 10, 11], "fft_tool": [5, 8, 10, 11], "fhi": [0, 11, 12], "figur": [10, 11, 12, 13], "file": [5, 7, 8, 9, 10, 11, 12], "filenam": 8, "filenotfounderror": [3, 9], "filepath": 7, "fill": 12, "filter": [3, 5, 6, 8, 10, 11], "filtered_fft": 6, "find": 4, "find_scan": 9, "find_scan_typ": 9, "first": [0, 3, 6, 11, 12], "fit": 4, "fix": 11, "flag": [3, 6], "float": [4, 5, 6, 7, 8, 9], "fluenc": 12, "folder": [3, 8, 9, 10, 11], "folder_config": 3, "follow": [0, 3, 6, 7, 12], "format": [3, 7, 12], "found": [0, 3, 4, 7, 9, 10, 11, 12, 13], "fourier": [3, 5, 6, 8, 10], "fourier_filter_2d": 6, "fraction": 4, "frame": [8, 9], "free": 0, "frequenc": [5, 8, 12], "fritz": [3, 8, 12], "from": [0, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13], "front": 10, "fsmap": 12, "full": [6, 7], "fulli": 3, "function": [1, 3, 9, 10, 11], "further": [8, 9], "fwhm": 12, "g": [0, 3, 5, 6, 8, 9, 10, 11], "gamma": 12, "gather": [11, 12, 13], "gauss2d": 6, "gaussian": [3, 5, 6, 12], "gener": [8, 11, 12], "get": [4, 5, 8, 11], "get_archiver_data": 9, "get_coord": 9, "get_damatrix_from_calib2d": 4, "get_modes_from_calib_dict": 7, "get_pair_from_list": 7, "get_raw2d": 9, "get_rr_da": 4, "get_scan_path": 9, "getdata": 3, "git": 0, "github": [0, 2], "give": 3, "given": [3, 4, 6, 7, 8, 9, 11, 12], "grid": [3, 6, 8, 10, 11, 13], "group": 7, "gt": [10, 11, 12, 13], "guess": 7, "h5": [8, 11], "h5group": 7, "h5py": 7, "ha": [11, 12], "haber": [3, 8, 12], "handl": [0, 9], "handle_meta": 9, "have": [0, 7, 10], "hdf5": [7, 8, 11], "help": 0, "helper": 1, "here": [3, 11, 13], "hierarch": 3, "high": 4, "highmagnification2": 10, "home": [3, 10, 11, 12, 13], "horizont": [5, 8], "hostedtoolcach": [3, 10, 11, 12, 13], "how": 1, "http": [0, 3, 4], "i": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "ideal": 12, "identifi": 9, "ignor": 7, "igor": 4, "illumin": 11, "imag": [0, 1, 3, 4, 5, 7, 8, 9, 11, 13], "imagej": 7, "img_tool": 1, "import": [0, 10, 11, 12, 13], "importantli": 0, "incident_energi": 12, "incident_energy_spread": 12, "incident_polar": 12, "incident_wavelength": 12, "includ": [7, 11], "increas": 4, "independ": 6, "index": [1, 4, 8, 9, 11], "indexerror": 9, "indic": [4, 6, 8, 9], "individu": [3, 13], "infer": 7, "info": 9, "info_dict": 9, "inform": [6, 7, 11], "init": 0, "initi": 3, "inner": 4, "input": [3, 6, 7, 8, 9], "input_fil": [3, 7, 8], "instanc": [3, 9, 10, 11, 12, 13], "instead": 7, "institut": [3, 8, 12], "instrument": [3, 12], "int": [4, 8, 9], "integ": [4, 8, 9], "integr": 11, "intend": [0, 3], "intens": 6, "interact": [10, 11], "interest": [8, 9, 11], "interfac": [8, 9], "interpol": [4, 8, 10], "introduc": 10, "investig": 12, "io": 1, "ipykernel": 0, "ipython": 0, "item": 3, "iter": [3, 8, 9], "its": [11, 12], "j": 4, "jacobian": 4, "jacobian_determin": 4, "json": [3, 8, 12], "jupyt": 0, "k": 3, "keep": 3, "kei": [3, 7, 11], "kernel": 0, "keyerror": 4, "keyword": [5, 7, 8, 10, 11], "kinet": [4, 5, 8, 13], "kinetic_energi": [3, 4, 5, 8, 10], "kwd": [5, 7, 8, 10], "lab": [8, 12], "labview": 0, "later": [4, 11], "laurenz": 12, "lausann": 8, "len": [3, 4, 5, 7, 8], "lens_mod": [4, 5, 8, 10], "lib": [3, 10, 11, 12, 13], "librari": 3, "like": 7, "line": [4, 6, 7], "linear": 4, "linux": 3, "list": [0, 4, 5, 6, 7, 8, 9, 11], "list_lin": 7, "load": [0, 1, 3, 7, 8, 9, 10, 12], "load_config": 3, "load_ext": [10, 11, 12, 13], "load_h5": 7, "load_imag": 9, "load_scan": [8, 9, 11, 12, 13], "load_tiff": 7, "loader": [11, 12], "loadtxt": 10, "loc": [11, 12], "local": 0, "locat": [0, 9, 11, 12, 13], "look": 3, "low": 4, "lt": [10, 11, 12, 13], "lut": 9, "m": 0, "magnif": [3, 4, 10], "mai": 11, "maintain": 1, "make": [0, 11], "manipul": [6, 9], "manner": 3, "manual": [7, 12], "manufactur": 0, "map": 12, "map_coordin": 4, "mask": 6, "matplotlib": [10, 11, 12, 13], "matric": 4, "matrix": [4, 5], "max": 12, "maxim": 4, "maximum": [6, 9], "mcp": [0, 4, 10, 11], "mcp_position_mm": 4, "measur": [3, 12], "mechan": 3, "merg": [3, 13], "mesh": [5, 8], "meshgrid": [5, 8, 11], "metadata": [5, 7, 8, 9, 11, 12, 13], "method": [8, 9, 11, 12, 13], "might": 13, "millimet": [3, 4], "mimic": 4, "minim": 4, "minimum": 6, "mirror": [9, 11], "mirrori": 3, "mirrorx": [3, 11], "miss": 3, "mitig": 10, "mm": [3, 4], "mm_z": 4, "mode": [0, 4, 5, 7, 8, 11], "modif": 3, "modul": [0, 3, 4, 6, 7], "monoton": 4, "more": 7, "most": [0, 9], "mostli": 3, "mpe": [3, 12], "mpg": 12, "must": [4, 8], "mx": 6, "my": 6, "name": [0, 3, 5, 7, 8, 9, 12], "nameerror": 7, "nap32": 9, "ndarrai": [4, 5, 6, 7, 8, 9], "ndimag": 4, "nearest": 4, "necessari": 3, "need": [0, 4, 7, 8, 9, 12], "neither": [3, 9], "nest": [3, 7, 9], "new": [0, 11], "nexu": [1, 3, 7, 8, 9], "node": 7, "non": [4, 11, 13], "none": [3, 5, 7, 8, 9], "nor": [3, 9], "normal": [3, 4, 5, 8], "notebook": [0, 3, 8, 11, 12], "notimplementederror": 7, "now": 0, "np": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "number": [3, 4, 7, 8, 9, 11, 13], "numpi": [4, 5, 7, 8, 9, 10, 11, 12, 13], "nx": [8, 12], "nx_pixel": [3, 4], "nxmpes_arp": [3, 12], "nxmpes_arpes_config": [3, 12], "nxuser": 12, "ny_pixel": [3, 4], "o": 10, "object": [5, 7, 8, 9, 11], "obtain": 9, "offset": [3, 4], "omg": 3, "onc": 0, "one": [6, 7, 10, 11], "onli": [4, 7, 11], "onto": [8, 13], "open": 10, "opencomp": 0, "oper": [10, 11], "opt": [3, 10, 11, 12, 13], "optim": [5, 8, 10, 11], "option": [0, 3, 5, 6, 7, 8, 9, 11], "order": [3, 4, 7, 11], "org": 0, "other": [3, 5, 11], "otherwis": 7, "out": [0, 4, 5, 8], "output": [7, 12], "outsid": 4, "over": [3, 8, 9, 11], "overlap": [12, 13], "overwrit": [3, 5], "overwritten": 3, "p": 12, "p_rd": [3, 12], "pack": 4, "packag": [0, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13], "package_dir": 3, "page": 1, "pair": 7, "panda": 9, "paramet": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "pars": [7, 9], "parse_calib2d_to_dict": 7, "parse_config": [3, 5, 8], "parse_info_to_dict": 9, "parse_lut_to_df": 9, "parser": 7, "part": 0, "pass": [0, 3, 4, 5, 8, 10, 11], "pass_energi": [4, 5, 8, 10], "path": [3, 5, 7, 8, 9, 10, 11, 12, 13], "pattern": 6, "pd": 9, "peak": [3, 5, 6, 8, 10, 11], "per": [4, 11, 13], "perform": [4, 8, 9, 10, 13], "pesdata": 9, "phi": 3, "phoibo": [0, 5, 8, 10, 11], "phoibos150": [0, 3], "photoelectron": 4, "photoemiss": [4, 5], "physic": [0, 4, 5], "physical_unit_data": 4, "pixel": [3, 4], "pixel_s": [3, 4, 10], "place": [3, 5], "plai": [5, 8], "planck": 12, "plane": [3, 5, 8, 10], "pleas": 10, "plot": [10, 11, 12, 13], "plt": [10, 11, 12, 13], "point": [9, 11, 12], "pol": 12, "polar": 3, "polynomi": 4, "popul": 7, "pos_i": [3, 5, 6, 8, 11], "pos_x": [3, 5, 6, 8, 11], "posi": 7, "posit": [3, 4, 5, 6, 8, 10, 11], "poss": 4, "possibl": 6, "possibli": 3, "posx": 7, "pre": [3, 5], "prefer": 3, "preparation_d": 12, "preparation_descript": 12, "prerequisit": 0, "present": [3, 11], "preserv": 4, "press": 11, "pressur": 3, "pressureac": [3, 12], "previous": [8, 11], "princip": 12, "print": 9, "pro": 4, "probe": 12, "procedur": 0, "process": [8, 11], "process_sweep_scan": 8, "processor": 3, "produc": 13, "program": 4, "progress": [3, 9], "project": 9, "properti": [5, 8], "provid": [0, 3, 5, 6, 7, 8, 9, 10, 11, 13], "pull": 0, "pulse_dur": 12, "pulse_energi": 12, "pump": 12, "pv": 3, "pyenv": 0, "pynxtool": [7, 8, 12], "pypi": 0, "pyplot": [10, 11, 12, 13], "pyproject": 0, "python": [0, 3, 7, 10, 11, 12, 13], "python3": [3, 10, 11, 12, 13], "quadmesh": [10, 11, 12, 13], "queri": 9, "question": 4, "r": 7, "r9132": 10, "rais": [3, 4, 7, 8, 9], "rang": [4, 8, 9, 11, 12, 13], "ratio": 4, "raw": [4, 5, 8, 9], "raw_arrai": 9, "raw_data": 8, "raw_imag": 5, "raw_image_nam": 10, "raw_img": 5, "raw_list": 9, "rbv": 3, "read": [0, 7, 8, 9], "read_calib2d": 7, "reader": [3, 7, 8, 12], "real": 6, "record": 11, "recurs": [0, 7], "recursive_parse_metadata": 7, "recursive_write_metadata": 7, "refer": 2, "regular": 6, "rel": 11, "remov": [3, 6], "renam": 3, "report": 3, "repositori": 0, "repres": 7, "request": [0, 3, 4], "requir": [0, 11], "res_xarrai": [10, 11, 12, 13], "res_xarray_check": 11, "resolut": 12, "resolv": 4, "respect": [3, 4], "result": [3, 4, 8, 11, 12, 13], "ret": 6, "retain": 7, "retard": 4, "retardation_ratio": [4, 10], "retriev": 3, "rettig": 12, "return": [3, 4, 5, 6, 7, 8, 9, 13], "rewrit": 12, "right": 0, "rise": 7, "role": 12, "root": 13, "rotat": 10, "rotation_angl": [10, 13], "row": 4, "row0": 4, "row1": 4, "rr": 4, "rrvec": 4, "rudimentari": 9, "rule": 3, "run": 0, "runner": [10, 11, 12, 13], "s_": [8, 9, 11], "sai": 11, "sampl": [3, 12], "sample_azimuth": 3, "sample_histori": 12, "sample_polar": 3, "sample_tilt": 3, "save": [3, 7, 8, 12], "save_config": 3, "scale": 4, "scan": [0, 1, 4, 8, 9, 11, 12], "scan_info": [9, 11, 12], "scan_list": 9, "scan_path": 9, "scan_typ": 9, "scanvector": 9, "scipi": 4, "script": 9, "search": [1, 3, 8, 9], "second": [4, 6], "second_closest_rr": 4, "see": [0, 3, 11], "select": [5, 8], "sequenc": [6, 7, 8, 9], "server": 11, "set": [0, 4, 5, 8, 11, 12, 13], "sever": 0, "shell": 0, "shift": 4, "ship": 3, "should": [0, 3, 4, 7, 11, 12], "show": 11, "showcas": [10, 11, 12, 13], "sigma": [5, 6], "sigma_i": [3, 5, 6, 8, 11], "sigma_x": [3, 5, 6, 8, 11], "singl": [3, 7, 8, 9, 10, 12], "site": [3, 10, 11, 12, 13], "size": [3, 4, 9], "slice": [8, 9, 11, 12], "slow": 9, "slow_ax": 9, "so": 7, "societi": 12, "softwar": [0, 8, 11], "some": 10, "sort": 7, "sourc": [0, 3, 4, 5, 6, 7, 8, 9, 10], "sp": [11, 12, 13], "sp2": 10, "spa": 10, "spa_param": [3, 12, 13], "spatial": [3, 4, 5, 7, 8], "spatial0": 3, "spatial_resolut": 12, "spawn": 0, "spec": [0, 3, 4, 5, 8, 10], "specs_config": 3, "specs_kernel": 0, "specs_poetri": 0, "specsanalyz": [8, 11, 12, 13], "specsscan": [0, 9, 12, 13], "spectromet": 0, "split": 7, "src": [3, 12, 13], "stack": [7, 8], "stackoverflow": 4, "stamp": [9, 11, 12, 13], "standard": [3, 7], "start": [4, 9], "step": [0, 3, 8, 11, 13], "stoke": 12, "store": [3, 5, 7, 8, 10, 11], "str": [3, 4, 5, 6, 7, 8, 9], "string": [3, 4, 7, 8, 9, 11], "structur": 7, "subfunct": 7, "submit": 0, "submodul": 0, "subsequ": 3, "subtract": [3, 5, 8], "sum": [8, 11, 12, 13], "support": [3, 7, 8], "suppress": 6, "sure": 0, "surfac": 12, "sweep": [1, 8], "sx": 6, "sy": 6, "sync": 0, "system": [0, 3, 4], "system_config": [3, 11], "t": [7, 10, 12], "tabul": 4, "take": 3, "tbte3": 12, "temp_rbv": [3, 12], "tempa": 3, "temperatur": [3, 8, 9], "test": [0, 3, 10, 11, 12, 13], "text": 10, "th": [5, 8], "than": 7, "thei": 3, "them": 3, "therefor": [7, 11], "thi": [0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], "third": [8, 11], "through": 7, "tht": 3, "tif": 8, "tiff": [7, 8], "tilt": [3, 12], "time": [7, 9, 11, 12, 13], "to_h5": 7, "to_nexu": 7, "to_tiff": 7, "todo": 1, "togeth": [0, 3], "toml": 0, "tool": [1, 5, 8, 10, 11], "topfloor": 9, "total_iter": 9, "tqdm_enable_nest": 9, "trans_i": 3, "trans_x": 3, "trans_z": 3, "transform": [3, 4], "trarp": [9, 11, 12], "tri": 7, "true": [3, 10, 11, 12, 13], "trx": 3, "try": 3, "trz": 3, "ts_from": 9, "ts_to": 9, "tsv": 10, "tsv_data": 10, "tupl": [4, 7, 8, 9], "tutori": 0, "two": 0, "txt": 9, "type": [0, 3, 4, 5, 6, 7, 8, 9], "typeerror": [3, 7], "typic": 3, "tzcyx": 7, "uhv": 12, "under": [5, 8, 9], "union": 8, "unit": [3, 4, 5], "unless": 4, "up": [0, 4], "updat": 0, "url": [3, 9], "us": [0, 3, 4, 5, 7, 8, 9, 11, 12, 13], "usag": 0, "user": [3, 11, 12, 13], "user0": 12, "user_config": [3, 11, 12, 13], "v": [3, 5], "valid": [4, 8, 9, 10], "valu": [3, 4, 5, 6, 7, 8], "valueerror": [4, 7, 8, 9], "variabl": 6, "variou": 3, "vector": [4, 12], "venv": 0, "verbos": 3, "version": 0, "vertic": [5, 8], "virtual": 0, "visual": 10, "voltag": [3, 8], "w": [7, 8, 10], "wa": 8, "want": 6, "warn": [7, 11, 13], "we": 11, "well": [2, 11], "when": [7, 8, 9], "where": [3, 6, 7, 8, 11], "which": [6, 8, 9, 10, 11, 12], "while": 11, "wide": [0, 3], "wideanglemod": [5, 8, 10], "widget": [10, 11, 12, 13], "width": [3, 5, 8], "wiki": 2, "window": 3, "wish": 0, "within": 0, "withing": 4, "without": [6, 10], "work": [0, 3, 4, 5, 8, 10, 11, 12, 13], "work_funct": [4, 5, 8, 10], "workflow": 3, "would": [8, 9], "write": [7, 8], "writer": 8, "wrong": 13, "x": [3, 5, 6, 7], "x64": [3, 10, 11, 12, 13], "x_max": 6, "x_min": 6, "xarrai": [3, 5, 6, 7, 8, 10, 11, 12, 13], "xgs600": [3, 12], "xr": [5, 6, 7, 8], "xuv": 12, "y": [3, 5, 6, 7], "y_max": 6, "y_min": 6, "yaml": [3, 9, 10, 11, 12, 13], "year": 9, "yet": 11, "you": [0, 4, 6], "your": [0, 3, 10], "z": [3, 7], "zinner": 4, "zinner_diff": 4, "\u00b5j": 12}, "titles": ["specsanalyzer", "Welcome to specsanalyzer\u2019s documentation!", "1. How to maintain", "Config", "2. convert functions (specsanalyzer.convert)", "1. Core functions (specsanalyzer.core)", "3. image tool functions (specsanalyzer.img_tools)", "4. io functions (specsanalyzer.io)", "1. Core functions (specsscan.core)", "2. Helpers", "Example 1: SpecsAnalyzer conversion", "Example 2: SpecsScan loading", "Example 3: Export to NeXus", "Example 4: Sweep Scan loading"], "titleterms": {"": 1, "1": 10, "2": 11, "3": 12, "4": 13, "For": 0, "adjust": 10, "angl": 10, "api": 3, "artefact": 10, "artifact": 11, "berlin": 3, "calib2d": 0, "config": 3, "configur": [0, 3], "contribut": 1, "contributor": 0, "convers": 10, "conversion_paramet": 10, "convert": 4, "core": [1, 5, 8], "crop": 11, "data": 11, "default": 3, "dict": 10, "document": 1, "exampl": [3, 10, 11, 12, 13], "export": 12, "fhi": 3, "file": [0, 3], "function": [4, 5, 6, 7, 8], "get": 1, "helper": 9, "how": 2, "imag": [6, 10], "img_tool": 6, "indic": 1, "instal": 0, "io": 7, "iter": 11, "load": [11, 13], "maintain": [0, 2], "mesh": [10, 11], "mode": 10, "modul": 1, "nexu": 12, "offset": 10, "pip": 0, "poetri": 0, "remov": [10, 11], "resolv": 10, "save": 11, "scan": 13, "select": 11, "set": 3, "setup": 3, "spatial": 10, "specsanalyz": [0, 1, 3, 4, 5, 6, 7, 10], "specsscan": [1, 3, 8, 11], "start": 1, "sweep": 13, "tabl": 1, "tool": 6, "trarp": 3, "us": 10, "user": 0, "welcom": 1}}) \ No newline at end of file diff --git a/specsanalyzer/latest/tutorial/2_specsscan_example.html b/specsanalyzer/latest/tutorial/2_specsscan_example.html deleted file mode 100644 index dc59b29..0000000 --- a/specsanalyzer/latest/tutorial/2_specsscan_example.html +++ /dev/null @@ -1,1187 +0,0 @@ - - - - - - - - - - - Example 2: SpecsScan loading — specsanalyzer 0.5.2.dev2+gd6a55dd documentation - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - -
- -
- - - - - -
-
- - - - -
- - - - - - - - - - - -
- -
- - -
-
- -
-
- -
- -
- - -
- -
- - -
-
- - - - - -
- -
-

Example 2: SpecsScan loading#

-

This is an example showcasing the loading of trARPES data as collected using the Phoibos detector at FHI Berlin.

-

The band dispersion is loaded as a xarray dataframe demonstrating different modes of operation

-

First, the SpecsScan class is imported which has the scan loader as its class method.

-
-
[1]:
-
-
-
%load_ext autoreload
-%autoreload 2
-from specsscan import SpecsScan
-import matplotlib.pyplot as plt
-import numpy as np
-%matplotlib widget
-
-
-
-

Here, a SpecsScan class instance is created as per the configuration provided in config.yaml. The user may set the entries in config.yaml file, for example, the data path and conversion parameters as per the requirements before creating this instance.

-

In addition to the provided config files, config files from different locations are optionally included as well (see documentation).

-
-
[2]:
-
-
-
sps = SpecsScan(config="../tests/data/config.yaml", user_config={}, system_config={})
-
-
-
-
-
-
-
-
-Configuration loaded from: [/home/runner/work/specsanalyzer/specsanalyzer/docs/tests/data/config.yaml]
-Default config loaded from: [/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/specsscan/config/default.yaml]
-Default config loaded from: [/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/specsanalyzer/config/default.yaml]
-
-
-
-

Loading data#

-

The load_scan method loads the scan as an xarray of the data converted into angular/energy coordinates along with the metadata of the scan.

-
-
[3]:
-
-
-
path = "../tests/data/" # Path to the test data set
-# The path may be changed to point to the scan folder of the data of interest (for example, on a server drive)
-res_xarray = sps.load_scan(
-    scan=4450, # Scan number for an example mirror scan
-    path = path,
-)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Gathering metadata from different locations
-Collecting time stamps...
-Done!
-
-
-

The data are from a mirror scan, showing the mirror position as third dimension:

-
-
[4]:
-
-
-
res_xarray.dims
-
-
-
-
-
[4]:
-
-
-
-
-('Angle', 'Ekin', 'mirrorX')
-
-
-

We can plot, e.g., selected steps of the scan:

-
-
[5]:
-
-
-
plt.figure()
-res_xarray[:,:,0].plot()
-
-
-
-
-
[5]:
-
-
-
-
-<matplotlib.collections.QuadMesh at 0x7f0d29f53b20>
-
-
-
-
-
-
-
-
-
-
-

Cropping data#

-

The image contains data beyond the boundaries given by the illuminated area of the MCP, which should be removed. For this, the crop option of the converter can be used:

-
-
[6]:
-
-
-
res_xarray = sps.load_scan(
-    scan=4450, # Scan number for an example mirror scan
-    path = path,
-    crop=True,
-)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Warning: Cropping parameters not found, use method crop_tool() after loading.
-Gathering metadata from different locations
-Collecting time stamps...
-Done!
-
-
-

The loader has given a warning saying that the cropping parameters do not exist yet. Therefore, an interactive cropping tool can be used to crop the data while also saving the crop ranges into a class attribute for later scans. Pressing crop applies the cropping to the test image, and stores the cropping information in the class.

-

One can provide relative cropping ranges either as keyword parameters, or in the config file, and optionally directly apply the settings to make the tool non-interactive.

-
-
[7]:
-
-
-
sps.crop_tool(
-    ek_range_min=0.08,
-    ek_range_max=0.88,
-    ang_range_min=0.15,
-    ang_range_max=0.85,
-    apply=True,
-)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

Load the scan again to apply it to all images:

-
-
[8]:
-
-
-
res_xarray = sps.load_scan(
-    scan=4450, # Scan number for an example mirror scan
-    path = path,
-)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Using saved crop parameters...
-Gathering metadata from different locations
-Collecting time stamps...
-Done!
-
-
-
-
-

Removal of Mesh Artifact#

-

In order to remove the meshgrid artifact present in the data, an fft filtering is applied already in the data loaded previously. For this, parameters of the fft peaks corresponding to the grid are required which can be provided in the config file. Alternatively, one can also interactively optimize the parameters using the fft tool

-
-
[9]:
-
-
-
sps.fft_tool(
-    amplitude=1,
-    pos_x=82,
-    pos_y=116,
-    sigma_x=15,
-    sigma_y=23,
-    apply=True  # Use apply=False for interactive mode
-)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

Load the scan again for the new changes to apply to all the images

-
-
[10]:
-
-
-
res_xarray = sps.load_scan(
-    scan=4450,
-    path=path,
-    apply_fft_filter=True
-)
-
-plt.figure()
-res_xarray[:,:,0].plot()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Using saved crop parameters...
-Gathering metadata from different locations
-Collecting time stamps...
-Done!
-
-
-
-
[10]:
-
-
-
-
-<matplotlib.collections.QuadMesh at 0x7f0d21ea2ef0>
-
-
-
-
-
-
-
-
-

We can e.g. also get a plot along the third dimension, by integrating along the first.

-

One can also access the conversion result from a class accessor:

-
-
[11]:
-
-
-
plt.figure()
-sps.result.loc[{"Angle": slice(-5, 5)}].sum(axis=0).plot()
-
-
-
-
-
[11]:
-
-
-
-
-<matplotlib.collections.QuadMesh at 0x7f0d21d76ce0>
-
-
-
-
-
-
-
-
-

The metadata associated with the scan is added as an attribute to the xarray

-
-
[12]:
-
-
-
sps.result.attrs["metadata"].keys()
-
-
-
-
-
[12]:
-
-
-
-
-dict_keys(['scan_info', 'timing', 'loader', 'conversion_parameters'])
-
-
-
-
-

Loading with selected iterations#

-

3D scans, where the images are recorded as a function of a third parameter (generally delay or in this case, mirrorX), can also be loaded with an option to average only the given iterations passed as a list or slice object.

-
-
[13]:
-
-
-
plt.figure()
-sps.load_scan(
-    scan=4450,
-    path=path,
-    iterations=np.s_[0, 1:2],
-).sum(axis=2).plot()
-
-
-
-
-
-
-
-
-Averaging over iterations...
-
-
-
-
-
-
-
-
-
-
-
-
-
-Using saved crop parameters...
-Gathering metadata from different locations
-Collecting time stamps...
-Done!
-
-
-
-
[13]:
-
-
-
-
-<matplotlib.collections.QuadMesh at 0x7f0d21c8c1f0>
-
-
-
-
-
-
-
-
-

Another useful functionality is to load a 3D scan as a function of iterations averaged over the scan parameter (in this case, mirrorX). This is done using the check_scan method

-
-
[14]:
-
-
-
res_xarray_check = sps.check_scan(
-    scan=4450,
-    delays=0, # for a fixed delay of index, 1
-    path=path,
-)
-plt.figure()
-res_xarray_check.loc[{"Angle": slice(-5, 5)}].sum(axis=(0)).plot()
-
-
-
-
-
-
-
-
-Averaging over delays...
-
-
-
-
-
-
-
-
-
-
-
-
-
-Using saved crop parameters...
-Gathering metadata from different locations
-Collecting time stamps...
-Done!
-
-
-
-
[14]:
-
-
-
-
-<matplotlib.collections.QuadMesh at 0x7f0d21d0a320>
-
-
-
-
-
-
-
-
-
-
-

Saving#

-

Data can be saved, e.g., as hdf5 files including metadata for convenient processing in other notebooks or software.

-
-
[15]:
-
-
-
sps.load_scan(
-    scan=4450, # Scan number for an example mirror scan
-    path = path,
-)
-sps.save("example_data.h5")
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Using saved crop parameters...
-Gathering metadata from different locations
-Collecting time stamps...
-Done!
-saving data to example_data.h5
-Saved iterations as string.
-Saved fft_filter_peaks as string.
-Saving complete!
-
-
-
-
[ ]:
-
-
-

-
-
-
-
-
- - -
- - - - - - - -
- - - - -
- - -
-
- -
- -
-
-
- - - - - -
- - -
- - \ No newline at end of file diff --git a/specsanalyzer/switcher.json b/specsanalyzer/switcher.json index fdfcf16..09cd733 100644 --- a/specsanalyzer/switcher.json +++ b/specsanalyzer/switcher.json @@ -6,8 +6,8 @@ }, { "name": "stable", - "version": "0.5.1", - "url": "https://opencompes.github.io/docs/specsanalyzer/v0.5.1", + "version": "0.6.0a2", + "url": "https://opencompes.github.io/docs/specsanalyzer/v0.6.0a2", "preferred": "true" }, { @@ -34,5 +34,10 @@ "name": "v0.5.1", "version": "0.5.1", "url": "https://opencompes.github.io/docs/specsanalyzer/v0.5.1" + }, + { + "name": "v0.6.0a2", + "version": "0.6.0a2", + "url": "https://opencompes.github.io/docs/specsanalyzer/v0.6.0a2" } ] \ No newline at end of file diff --git a/specsanalyzer/latest/_modules/index.html b/specsanalyzer/v0.6.0a2/_modules/index.html similarity index 98% rename from specsanalyzer/latest/_modules/index.html rename to specsanalyzer/v0.6.0a2/_modules/index.html index 6b6aea1..2d500dd 100644 --- a/specsanalyzer/latest/_modules/index.html +++ b/specsanalyzer/v0.6.0a2/_modules/index.html @@ -7,7 +7,7 @@ - Overview: module code — specsanalyzer 0.5.2.dev2+gd6a55dd documentation + Overview: module code — specsanalyzer 0.6.0a2 documentation @@ -37,7 +37,7 @@ - + @@ -46,7 +46,7 @@ @@ -54,7 +54,7 @@ - + @@ -116,7 +116,7 @@ -

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

diff --git a/specsanalyzer/latest/_modules/specsanalyzer/config.html b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/config.html similarity index 72% rename from specsanalyzer/latest/_modules/specsanalyzer/config.html rename to specsanalyzer/v0.6.0a2/_modules/specsanalyzer/config.html index 10fdc21..8717db9 100644 --- a/specsanalyzer/latest/_modules/specsanalyzer/config.html +++ b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/config.html @@ -7,7 +7,7 @@ - specsanalyzer.config — specsanalyzer 0.5.2.dev2+gd6a55dd documentation + specsanalyzer.config — specsanalyzer 0.6.0a2 documentation @@ -37,7 +37,7 @@ - + @@ -46,7 +46,7 @@ @@ -54,7 +54,7 @@ - + @@ -116,7 +116,7 @@ -

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

@@ -560,9 +560,26 @@

Source code for specsanalyzer.config

 from pathlib import Path
 
 import yaml
+from platformdirs import user_config_path
+
+from specsanalyzer.logging import setup_logging
 
 package_dir = os.path.dirname(find_spec("specsanalyzer").origin)
 
+USER_CONFIG_PATH = user_config_path(
+    appname="specsanalyzer",
+    appauthor="OpenCOMPES",
+    ensure_exists=True,
+)
+SYSTEM_CONFIG_PATH = (
+    Path(os.environ["ALLUSERSPROFILE"]).joinpath("specsanalyzer")
+    if platform.system() == "Windows"
+    else Path("/etc/").joinpath("specsanalyzer")
+)
+
+# Configure logging
+logger = setup_logging("config")
+
 
 
[docs] @@ -590,12 +607,13 @@

Source code for specsanalyzer.config

         user_config (dict | str, optional): user-based config dictionary
             or file path. The loaded dictionary is completed with the user-based values,
             taking preference over system and default values.
-            Defaults to the file ".specsanalyzer/config.yaml" in the current user's home directory.
+            Defaults to the file ".config/specsanalyzer/config_v1.yaml" in the current user's home
+            directory.
         system_config (dict | str, optional): system-wide config dictionary
             or file path. The loaded dictionary is completed with the system-wide values,
             taking preference over default values.
-            Defaults to the file "/etc/specsanalyzer/config.yaml" on linux,
-            and "%ALLUSERSPROFILE%/specsanalyzer/config.yaml" on windows.
+            Defaults to the file "/etc/specsanalyzer/config_v1.yaml" on linux,
+            and "%ALLUSERSPROFILE%/specsanalyzer/config_v1.yaml" on windows.
         default_config (dict | str, optional): default config dictionary
             or file path. The loaded dictionary is completed with the default values.
             Defaults to *package_dir*/config/default.yaml".
@@ -615,7 +633,7 @@ 

Source code for specsanalyzer.config

     else:
         config_dict = load_config(config)
         if verbose:
-            print(f"Configuration loaded from: [{str(Path(config).resolve())}]")
+            logger.info(f"Configuration loaded from: [{str(Path(config).resolve())}]")
 
     folder_dict: dict = None
     if isinstance(folder_config, dict):
@@ -626,47 +644,36 @@ 

Source code for specsanalyzer.config

         if Path(folder_config).exists():
             folder_dict = load_config(folder_config)
             if verbose:
-                print(f"Folder config loaded from: [{str(Path(folder_config).resolve())}]")
+                logger.info(f"Folder config loaded from: [{str(Path(folder_config).resolve())}]")
 
     user_dict: dict = None
     if isinstance(user_config, dict):
         user_dict = user_config
     else:
         if user_config is None:
-            user_config = str(
-                Path.home().joinpath(".specsanalyzer").joinpath("config.yaml"),
-            )
+            user_config = str(USER_CONFIG_PATH.joinpath("config_v1.yaml"))
         if Path(user_config).exists():
             user_dict = load_config(user_config)
             if verbose:
-                print(f"User config loaded from: [{str(Path(user_config).resolve())}]")
+                logger.info(f"User config loaded from: [{str(Path(user_config).resolve())}]")
 
     system_dict: dict = None
     if isinstance(system_config, dict):
         system_dict = system_config
     else:
         if system_config is None:
-            if platform.system() in ["Linux", "Darwin"]:
-                system_config = str(
-                    Path("/etc/").joinpath("specsanalyzer").joinpath("config.yaml"),
-                )
-            elif platform.system() == "Windows":
-                system_config = str(
-                    Path(os.environ["ALLUSERSPROFILE"])
-                    .joinpath("specsanalyzer")
-                    .joinpath("config.yaml"),
-                )
+            system_config = str(SYSTEM_CONFIG_PATH.joinpath("config_v1.yaml"))
         if Path(system_config).exists():
             system_dict = load_config(system_config)
             if verbose:
-                print(f"System config loaded from: [{str(Path(system_config).resolve())}]")
+                logger.info(f"System config loaded from: [{str(Path(system_config).resolve())}]")
 
     if isinstance(default_config, dict):
         default_dict = default_config
     else:
         default_dict = load_config(default_config)
         if verbose:
-            print(f"Default config loaded from: [{str(Path(default_config).resolve())}]")
+            logger.info(f"Default config loaded from: [{str(Path(default_config).resolve())}]")
 
     if folder_dict is not None:
         config_dict = complete_dictionary(
@@ -790,6 +797,94 @@ 

Source code for specsanalyzer.config

 
     return dictionary
+ + +def _parse_env_file(file_path: Path) -> dict: + """Helper function to parse a .env file into a dictionary. + + Args: + file_path (Path): Path to the .env file + + Returns: + dict: Dictionary of environment variables from the file + """ + env_content = {} + if file_path.exists(): + with open(file_path) as f: + for line in f: + line = line.strip() + if line and "=" in line: + key, val = line.split("=", 1) + env_content[key.strip()] = val.strip() + return env_content + + +
+[docs] +def read_env_var(var_name: str) -> str | None: + """Read an environment variable from multiple locations in order: + 1. OS environment variables + 2. .env file in current directory + 3. .env file in user config directory + 4. .env file in system config directory + + Args: + var_name (str): Name of the environment variable to read + + Returns: + str | None: Value of the environment variable or None if not found + """ + # 1. check OS environment variables + value = os.getenv(var_name) + if value is not None: + logger.debug(f"Found {var_name} in OS environment variables") + return value + + # 2. check .env in current directory + local_vars = _parse_env_file(Path(".env")) + if var_name in local_vars: + logger.debug(f"Found {var_name} in ./.env file") + return local_vars[var_name] + + # 3. check .env in user config directory + user_vars = _parse_env_file(USER_CONFIG_PATH / ".env") + if var_name in user_vars: + logger.debug(f"Found {var_name} in user config .env file") + return user_vars[var_name] + + # 4. check .env in system config directory + system_vars = _parse_env_file(SYSTEM_CONFIG_PATH / ".env") + if var_name in system_vars: + logger.debug(f"Found {var_name} in system config .env file") + return system_vars[var_name] + + logger.debug(f"Environment variable {var_name} not found in any location") + return None
+ + + +
+[docs] +def save_env_var(var_name: str, value: str) -> None: + """Save an environment variable to the .env file in the user config directory. + If the file exists, preserves other variables. If not, creates a new file. + + Args: + var_name (str): Name of the environment variable to save + value (str): Value to save for the environment variable + """ + env_path = USER_CONFIG_PATH / ".env" + env_content = _parse_env_file(env_path) + + # Update or add new variable + env_content[var_name] = value + + # Write all variables back to file + with open(env_path, "w") as f: + for key, val in env_content.items(): + f.write(f"{key}={val}\n") + logger.debug(f"Environment variable {var_name} saved to .env file")
+
diff --git a/specsanalyzer/latest/_modules/specsanalyzer/convert.html b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/convert.html similarity index 98% rename from specsanalyzer/latest/_modules/specsanalyzer/convert.html rename to specsanalyzer/v0.6.0a2/_modules/specsanalyzer/convert.html index 68308ad..f8d13a4 100644 --- a/specsanalyzer/latest/_modules/specsanalyzer/convert.html +++ b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/convert.html @@ -7,7 +7,7 @@ - specsanalyzer.convert — specsanalyzer 0.5.2.dev2+gd6a55dd documentation + specsanalyzer.convert — specsanalyzer 0.6.0a2 documentation @@ -37,7 +37,7 @@ - + @@ -46,7 +46,7 @@ @@ -54,7 +54,7 @@ - + @@ -116,7 +116,7 @@ -

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

@@ -553,9 +553,14 @@

Source code for specsanalyzer.convert

 """Specsanalyzer image conversion module"""
 from __future__ import annotations
 
+import logging
+
 import numpy as np
 from scipy.ndimage import map_coordinates
 
+# Configure logging
+logger = logging.getLogger("specsanalyzer.specsscan")
+
 
 
[docs] @@ -636,7 +641,7 @@

Source code for specsanalyzer.convert

 
     elif lens_mode in supported_space_modes:
         # use the mode defaults
-        print("This is a spatial mode, using default " + lens_mode + " config")
+        logger.info("This is a spatial mode, using default " + lens_mode + " config")
         rr_vec, da_matrix_full = get_rr_da(lens_mode, calib2d_dict)
         a_inner = da_matrix_full[0][0]
         da_matrix = da_matrix_full[1:][:]
diff --git a/specsanalyzer/latest/_modules/specsanalyzer/core.html b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/core.html
similarity index 94%
rename from specsanalyzer/latest/_modules/specsanalyzer/core.html
rename to specsanalyzer/v0.6.0a2/_modules/specsanalyzer/core.html
index 9bf85ea..7dafb8d 100644
--- a/specsanalyzer/latest/_modules/specsanalyzer/core.html
+++ b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/core.html
@@ -7,7 +7,7 @@
   
     
     
-    specsanalyzer.core — specsanalyzer 0.5.2.dev2+gd6a55dd documentation
+    specsanalyzer.core — specsanalyzer 0.6.0a2 documentation
   
   
   
@@ -37,7 +37,7 @@
   
 
 
-    
+    
     
     
     
@@ -46,7 +46,7 @@
     
@@ -54,7 +54,7 @@
     
   
   
-  
+  
   
   
   
@@ -116,7 +116,7 @@
   
   
   
-    

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

@@ -555,7 +555,6 @@

Source code for specsanalyzer.core

 
 import os
 from typing import Any
-from typing import Generator
 
 import imutils
 import ipywidgets as ipw
@@ -573,9 +572,14 @@ 

Source code for specsanalyzer.core

 from specsanalyzer.convert import physical_unit_data
 from specsanalyzer.img_tools import crop_xarray
 from specsanalyzer.img_tools import fourier_filter_2d
+from specsanalyzer.logging import set_verbosity
+from specsanalyzer.logging import setup_logging
 
 package_dir = os.path.dirname(__file__)
 
+# Configure logging
+logger = setup_logging("specsanalyzer")
+
 
 
[docs] @@ -593,6 +597,7 @@

Source code for specsanalyzer.core

         self,
         metadata: dict[Any, Any] = {},
         config: dict[Any, Any] | str = {},
+        verbose: bool = True,
         **kwds,
     ):
         """SpecsAnalyzer constructor.
@@ -600,12 +605,14 @@ 

Source code for specsanalyzer.core

         Args:
             metadata (dict, optional): Metadata dictionary. Defaults to {}.
             config (dict | str, optional): Metadata dictionary or file path. Defaults to {}.
+            verbose (bool, optional): Disable info logs if set to False.
             **kwds: Keyword arguments passed to ``parse_config``.
         """
         self._config = parse_config(
             config,
             **kwds,
         )
+        set_verbosity(logger, verbose)
         self.metadata = metadata
         self._data_array = None
         self.print_msg = True
@@ -843,7 +850,7 @@ 

Source code for specsanalyzer.core

                 ek_min = range_dict["ek_min"]
                 ek_max = range_dict["ek_max"]
                 if self.print_msg:
-                    print("Using saved crop parameters...")
+                    logger.info("Using saved crop parameters...")
                 data_array = crop_xarray(data_array, ang_min, ang_max, ek_min, ek_max)
             except KeyError:
                 try:
@@ -900,11 +907,13 @@ 

Source code for specsanalyzer.core

                         + data_array.coords[data_array.dims[1]][0]
                     )
                     if self.print_msg:
-                        print("Cropping parameters not found, using cropping ranges from config...")
+                        logger.info(
+                            "Cropping parameters not found, using cropping ranges from config...",
+                        )
                     data_array = crop_xarray(data_array, ang_min, ang_max, ek_min, ek_max)
                 except KeyError:
                     if self.print_msg:
-                        print(
+                        logger.warning(
                             "Warning: Cropping parameters not found, "
                             "use method crop_tool() after loading.",
                         )
@@ -941,6 +950,8 @@ 

Source code for specsanalyzer.core

                 - ek_range_max
                 - ang_range_min
                 - ang_range_max
+                - angle_offset_px
+                - rotation_angle
 
                 Other parameters are passed to ``convert_image()``.
         """
@@ -960,7 +971,7 @@ 

Source code for specsanalyzer.core

         try:
             mesh_obj = data_array.plot(ax=ax)
         except AttributeError:
-            print("Load the scan first!")
+            logger.info("Load the scan first!")
             raise
 
         lineh1 = ax.axhline(y=data_array.Angle[0])
@@ -1032,6 +1043,15 @@ 

Source code for specsanalyzer.core

         vline_range = [ek_min, ek_max]
         hline_range = [ang_min, ang_max]
 
+        angle_offset_px = kwds.get("angle_offset_px", self._config.get("angle_offset_px", 0))
+        rotation_angle = kwds.get("rotation_angle", self._config.get("rotation_angle", 0))
+
+        clim_slider = ipw.FloatRangeSlider(
+            description="colorbar limits",
+            value=[data_array.data.min(), data_array.data.max()],
+            min=data_array.data.min(),
+            max=data_array.data.max(),
+        )
         vline_slider = ipw.FloatRangeSlider(
             description="Ekin",
             value=vline_range,
@@ -1046,14 +1066,33 @@ 

Source code for specsanalyzer.core

             max=data_array.Angle[-1],
             step=0.1,
         )
-        clim_slider = ipw.FloatRangeSlider(
-            description="colorbar limits",
-            value=[data_array.data.min(), data_array.data.max()],
-            min=data_array.data.min(),
-            max=data_array.data.max(),
+        ang_offset_slider = ipw.FloatSlider(
+            description="Angle offset",
+            value=angle_offset_px,
+            min=-20,
+            max=20,
+            step=1,
+        )
+        rotation_slider = ipw.FloatSlider(
+            description="Rotation angle",
+            value=rotation_angle,
+            min=-5,
+            max=5,
+            step=0.1,
         )
 
-        def update(hline, vline, v_vals):
+        def update(hline, vline, v_vals, angle_offset_px, rotation_angle):
+            data_array = self.convert_image(
+                raw_img=raw_img,
+                lens_mode=lens_mode,
+                kinetic_energy=kinetic_energy,
+                pass_energy=pass_energy,
+                work_function=work_function,
+                crop=False,
+                angle_offset_px=angle_offset_px,
+                rotation_angle=rotation_angle,
+            )
+            mesh_obj.update({"array": data_array.data})
             lineh1.set_ydata([hline[0]])
             lineh2.set_ydata([hline[1]])
             linev1.set_xdata([vline[0]])
@@ -1066,9 +1105,11 @@ 

Source code for specsanalyzer.core

             hline=hline_slider,
             vline=vline_slider,
             v_vals=clim_slider,
+            angle_offset_px=ang_offset_slider,
+            rotation_angle=rotation_slider,
         )
 
-        def cropit(val):  # pylint: disable=unused-argument
+        def cropit(val):  # noqa: ARG001
             ang_min = min(hline_slider.value)
             ang_max = max(hline_slider.value)
             ek_min = min(vline_slider.value)
@@ -1111,6 +1152,8 @@ 

Source code for specsanalyzer.core

                 )
             ).item()
             self._config["crop"] = True
+            self._config["angle_offset_px"] = ang_offset_slider.value
+            self._config["rotation_angle"] = rotation_slider.value
 
             ax.cla()
             self._data_array.plot(ax=ax, add_colorbar=False)
@@ -1120,6 +1163,8 @@ 

Source code for specsanalyzer.core

             hline_slider.close()
             clim_slider.close()
             apply_button.close()
+            ang_offset_slider.close()
+            rotation_slider.close()
 
         apply_button = ipw.Button(description="Crop")
         display(apply_button)
@@ -1177,7 +1222,7 @@ 

Source code for specsanalyzer.core

 
             filtered = fourier_filter_2d(raw_image, peaks=fft_filter_peaks, ret="filtered")
         except IndexError:
-            print("Load the scan first!")
+            logger.warning("Load the scan first!")
             raise
 
         fig = plt.figure()
@@ -1289,7 +1334,7 @@ 

Source code for specsanalyzer.core

             v_vals=clim_slider,
         )
 
-        def apply_fft(apply: bool):  # pylint: disable=unused-argument
+        def apply_fft(apply: bool):  # noqa: ARG001
             amplitude = amplitude_slider.value
             pos_x = pos_x_slider.value
             pos_y = pos_y_slider.value
diff --git a/specsanalyzer/latest/_modules/specsanalyzer/img_tools.html b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/img_tools.html
similarity index 98%
rename from specsanalyzer/latest/_modules/specsanalyzer/img_tools.html
rename to specsanalyzer/v0.6.0a2/_modules/specsanalyzer/img_tools.html
index 5e4ab02..a7cd68b 100644
--- a/specsanalyzer/latest/_modules/specsanalyzer/img_tools.html
+++ b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/img_tools.html
@@ -7,7 +7,7 @@
   
     
     
-    specsanalyzer.img_tools — specsanalyzer 0.5.2.dev2+gd6a55dd documentation
+    specsanalyzer.img_tools — specsanalyzer 0.6.0a2 documentation
   
   
   
@@ -37,7 +37,7 @@
   
 
 
-    
+    
     
     
     
@@ -46,7 +46,7 @@
     
@@ -54,7 +54,7 @@
     
   
   
-  
+  
   
   
   
@@ -116,7 +116,7 @@
   
   
   
-    

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

diff --git a/specsanalyzer/latest/_modules/specsanalyzer/io.html b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/io.html similarity index 99% rename from specsanalyzer/latest/_modules/specsanalyzer/io.html rename to specsanalyzer/v0.6.0a2/_modules/specsanalyzer/io.html index f8f834b..3f52970 100644 --- a/specsanalyzer/latest/_modules/specsanalyzer/io.html +++ b/specsanalyzer/v0.6.0a2/_modules/specsanalyzer/io.html @@ -7,7 +7,7 @@ - specsanalyzer.io — specsanalyzer 0.5.2.dev2+gd6a55dd documentation + specsanalyzer.io — specsanalyzer 0.6.0a2 documentation @@ -37,7 +37,7 @@ - + @@ -46,7 +46,7 @@ @@ -54,7 +54,7 @@ - + @@ -116,7 +116,7 @@ -

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

diff --git a/specsanalyzer/latest/_modules/specsscan/core.html b/specsanalyzer/v0.6.0a2/_modules/specsscan/core.html similarity index 88% rename from specsanalyzer/latest/_modules/specsscan/core.html rename to specsanalyzer/v0.6.0a2/_modules/specsscan/core.html index 674b4b0..f04f870 100644 --- a/specsanalyzer/latest/_modules/specsscan/core.html +++ b/specsanalyzer/v0.6.0a2/_modules/specsscan/core.html @@ -7,7 +7,7 @@ - specsscan.core — specsanalyzer 0.5.2.dev2+gd6a55dd documentation + specsscan.core — specsanalyzer 0.6.0a2 documentation @@ -37,7 +37,7 @@ - + @@ -46,7 +46,7 @@ @@ -54,7 +54,7 @@ - + @@ -116,7 +116,7 @@ -

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

@@ -569,9 +569,12 @@

Source code for specsscan.core

 
 from specsanalyzer import SpecsAnalyzer
 from specsanalyzer.config import parse_config
+from specsanalyzer.config import save_config
 from specsanalyzer.io import to_h5
 from specsanalyzer.io import to_nexus
 from specsanalyzer.io import to_tiff
+from specsanalyzer.logging import set_verbosity
+from specsanalyzer.logging import setup_logging
 from specsscan.helpers import get_coords
 from specsscan.helpers import get_scan_path
 from specsscan.helpers import handle_meta
@@ -582,6 +585,9 @@ 

Source code for specsscan.core

 
 package_dir = os.path.dirname(find_spec("specsscan").origin)
 
+# Configure logging
+logger = setup_logging("specsscan")
+
 
 
[docs] @@ -599,6 +605,7 @@

Source code for specsscan.core

         self,
         metadata: dict = {},
         config: dict | str = {},
+        verbose: bool = True,
         **kwds,
     ):
         """SpecsScan constructor.
@@ -606,6 +613,7 @@ 

Source code for specsscan.core

         Args:
             metadata (dict, optional): Metadata dictionary. Defaults to {}.
             config (Union[dict, str], optional): Metadata dictionary or file path. Defaults to {}.
+            verbose (bool, optional): Disable info logs if set to False.
             **kwds: Keyword arguments passed to ``parse_config``.
         """
         self._config = parse_config(
@@ -614,6 +622,8 @@ 

Source code for specsscan.core

             **kwds,
         )
 
+        set_verbosity(logger, verbose)
+
         self.metadata = metadata
 
         self._scan_info: dict[Any, Any] = {}
@@ -624,12 +634,14 @@ 

Source code for specsscan.core

                 folder_config={},
                 user_config={},
                 system_config={},
+                verbose=verbose,
             )
         except KeyError:
             self.spa = SpecsAnalyzer(
                 folder_config={},
                 user_config={},
                 system_config={},
+                verbose=verbose,
             )
 
         self._result: xr.DataArray = None
@@ -700,6 +712,7 @@ 

Source code for specsscan.core

             xr.DataArray: xarray DataArray object with kinetic energy, angle/position and
             optionally a third scanned axis (for ex., delay, temperature) as coordinates.
         """
+        token = kwds.pop("token", None)
         scan_path = get_scan_path(path, scan, self._config["data_path"])
         df_lut = parse_lut_to_df(scan_path)
 
@@ -792,10 +805,11 @@ 

Source code for specsscan.core

             k: coordinate_mapping[k] for k in coordinate_mapping.keys() if k in res_xarray.dims
         }
         depends_dict = {
-            rename_dict[k]: coordinate_depends[k]
+            rename_dict.get(k, k): coordinate_depends[k]
             for k in coordinate_depends.keys()
             if k in res_xarray.dims
         }
+
         res_xarray = res_xarray.rename(rename_dict)
         for k, v in coordinate_mapping.items():
             if k in fast_axes:
@@ -810,6 +824,7 @@ 

Source code for specsscan.core

             "/entry/sample/transformations/sample_polar": "Polar",
             "/entry/sample/transformations/sample_tilt": "Tilt",
             "/entry/sample/transformations/sample_azimuth": "Azimuth",
+            "/entry/instrument/beam_pump/pulse_delay": "delay",
         }
 
         # store data for resolved axis coordinates
@@ -825,14 +840,16 @@ 

Source code for specsscan.core

 
         self.metadata.update(
             **handle_meta(
-                df_lut,
-                self._scan_info,
-                self.config,
+                df_lut=df_lut,
+                scan_info=self._scan_info,
+                config=self.config.get("metadata", {}),
+                scan=scan,
                 fast_axes=list(fast_axes),  # type: ignore
                 slow_axes=list(slow_axes),
                 projection=projection,
                 metadata=copy.deepcopy(metadata),
                 collect_metadata=collect_metadata,
+                token=token,
             ),
             **{"loader": loader_dict},
             **{"conversion_parameters": conversion_metadata},
@@ -883,6 +900,41 @@ 

Source code for specsscan.core

         )
+
+[docs] + def save_crop_params( + self, + filename: str = None, + overwrite: bool = False, + ): + """Save the generated crop parameters to the folder config file. + + Args: + filename (str, optional): Filename of the config dictionary to save to. + Defaults to "specs_config.yaml" in the current folder. + overwrite (bool, optional): Option to overwrite the present dictionary. + Defaults to False. + """ + if filename is None: + filename = "specs_config.yaml" + if "ek_range_min" not in self.spa.config: + raise ValueError("No crop parameters to save!") + + config = { + "spa_params": { + "crop": self.spa.config["crop"], + "ek_range_min": self.spa.config["ek_range_min"], + "ek_range_max": self.spa.config["ek_range_max"], + "ang_range_min": self.spa.config["ang_range_min"], + "ang_range_max": self.spa.config["ang_range_max"], + "angle_offset_px": self.spa.config["angle_offset_px"], + "rotation_angle": self.spa.config["rotation_angle"], + }, + } + save_config(config, filename, overwrite) + logger.info(f'Saved crop parameters to "{filename}".')
+ +
[docs] def fft_tool(self, scan: int = None, path: Path | str = "", **kwds): @@ -923,6 +975,36 @@

Source code for specsscan.core

         )
+
+[docs] + def save_fft_params( + self, + filename: str = None, + overwrite: bool = False, + ): + """Save the generated fft filter parameters to the folder config file. + + Args: + filename (str, optional): Filename of the config dictionary to save to. + Defaults to "specs_config.yaml" in the current folder. + overwrite (bool, optional): Option to overwrite the present dictionary. + Defaults to False. + """ + if filename is None: + filename = "specs_config.yaml" + if len(self.spa.config["fft_filter_peaks"]) == 0: + raise ValueError("No fft parameters to save!") + + config = { + "spa_params": { + "fft_filter_peaks": self.spa.config["fft_filter_peaks"], + "apply_fft_filter": self.spa.config["apply_fft_filter"], + }, + } + save_config(config, filename, overwrite) + logger.info(f'Saved fft parameters to "{filename}".')
+ +
[docs] def check_scan( @@ -955,6 +1037,7 @@

Source code for specsscan.core

         Returns:
             xr.DataArray: 3-D xarray of dimensions (Ekin, Angle, Iterations)
         """
+        token = kwds.pop("token", None)
         scan_path = get_scan_path(path, scan, self._config["data_path"])
         df_lut = parse_lut_to_df(scan_path)
 
@@ -1002,7 +1085,7 @@ 

Source code for specsscan.core

 
         conversion_metadata = xr_list[0].attrs["conversion_parameters"]
 
-        dims = get_coords(
+        dims = get_coords(  # noqa: F841
             scan_path=scan_path,
             scan_type=scan_type,
             scan_info=self._scan_info,
@@ -1030,14 +1113,16 @@ 

Source code for specsscan.core

 
         self.metadata.update(
             **handle_meta(
-                df_lut,
-                self._scan_info,
-                self.config,
+                df_lut=df_lut,
+                scan_info=self._scan_info,
+                config=self.config.get("metadata", {}),
+                scan=scan,
                 fast_axes=list(fast_axes),  # type: ignore
                 slow_axes=list(slow_axes),
                 projection=projection,
-                metadata=metadata,
+                metadata=copy.deepcopy(metadata),
                 collect_metadata=collect_metadata,
+                token=token,
             ),
             **{"loader": loader_dict},
             **{"conversion_parameters": conversion_metadata},
@@ -1187,7 +1272,7 @@ 

Source code for specsscan.core

             )
             or not self.spa.config["crop"]
         ):
-            warn("No valid cropping parameters found, consider using crop_tool() to set.")
+            logger.warning("No valid cropping parameters found, consider using crop_tool() to set.")
 
         e_step = converted.Ekin[1] - converted.Ekin[0]
         e0 = converted.Ekin[-1] - ekin_step
diff --git a/specsanalyzer/latest/_modules/specsscan/helpers.html b/specsanalyzer/v0.6.0a2/_modules/specsscan/helpers.html
similarity index 83%
rename from specsanalyzer/latest/_modules/specsscan/helpers.html
rename to specsanalyzer/v0.6.0a2/_modules/specsscan/helpers.html
index b4d3392..7130824 100644
--- a/specsanalyzer/latest/_modules/specsscan/helpers.html
+++ b/specsanalyzer/v0.6.0a2/_modules/specsscan/helpers.html
@@ -7,7 +7,7 @@
   
     
     
-    specsscan.helpers — specsanalyzer 0.5.2.dev2+gd6a55dd documentation
+    specsscan.helpers — specsanalyzer 0.6.0a2 documentation
   
   
   
@@ -37,7 +37,7 @@
   
 
 
-    
+    
     
     
     
@@ -46,7 +46,7 @@
     
@@ -54,7 +54,7 @@
     
   
   
-  
+  
   
   
   
@@ -116,7 +116,7 @@
   
   
   
-    

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

@@ -554,19 +554,20 @@

Source code for specsscan.helpers

 from __future__ import annotations
 
 import datetime as dt
-import json
+import logging
 from pathlib import Path
 from typing import Any
 from typing import Sequence
-from urllib.error import HTTPError
-from urllib.error import URLError
-from urllib.request import urlopen
 
 import numpy as np
 import pandas as pd
 from tqdm.auto import tqdm
 
 from specsanalyzer.config import complete_dictionary
+from specsscan.metadata import MetadataRetriever
+
+# Configure logging
+logger = logging.getLogger("specsanalyzer.specsscan")
 
 
 
@@ -683,7 +684,7 @@

Source code for specsscan.helpers

                 "load_scan method.",
             ) from exc
 
-        print(f"Averaging over {avg_dim}...")
+        logger.info(f"Averaging over {avg_dim}...")
         for dim in tqdm(raw_2d_sliced):
             avg_list = []
             for image in tqdm(dim, leave=False, disable=not tqdm_enable_nested):
@@ -776,14 +777,14 @@ 

Source code for specsscan.helpers

         df_lut.reset_index(inplace=True)
 
         new_cols = df_lut.columns.to_list()[1:]
-        new_cols[new_cols.index("delaystage")] = "Delay"
+        new_cols[new_cols.index("delaystage")] = "DelayStage"
         new_cols.insert(3, "delay (fs)")  # Create label to drop the column later
 
         df_lut = df_lut.set_axis(new_cols, axis="columns")
         df_lut.drop(columns="delay (fs)", inplace=True)
 
     except FileNotFoundError:
-        print(
+        logger.info(
             "LUT.txt not found. Storing metadata from info.txt",
         )
         return None
@@ -834,7 +835,7 @@ 

Source code for specsscan.helpers

             return (np.array([]), "")
 
         if df_lut is not None:
-            print("scanvector.txt not found. Obtaining coordinates from LUT")
+            logger.info("scanvector.txt not found. Obtaining coordinates from LUT")
 
             df_new: pd.DataFrame = df_lut.loc[:, df_lut.columns[2:]]
 
@@ -845,14 +846,22 @@ 

Source code for specsscan.helpers

             raise FileNotFoundError("scanvector.txt file not found!") from exc
 
     if scan_type == "delay":
-        t_0 = scan_info["TimeZero"]
-        coords -= t_0
-        coords *= 2 / 3e11 * 1e15
+        t0 = scan_info["TimeZero"]
+        coords = mm_to_fs(coords, t0)
 
     return coords, dim
+
+[docs] +def mm_to_fs(delaystage, t0): + delay = delaystage - t0 + delay *= 2 / 2.99792458e11 * 1e15 + return delay
+ + +
[docs] def compare_coords(axis_data: np.ndarray) -> tuple[np.ndarray, int]: @@ -913,6 +922,9 @@

Source code for specsscan.helpers

     except FileNotFoundError as exc:
         raise FileNotFoundError("info.txt file not found.") from exc
 
+    if "DelayStage" in info_dict and "TimeZero" in info_dict:
+        info_dict["delay"] = mm_to_fs(info_dict["DelayStage"], info_dict["TimeZero"])
+
     return info_dict
@@ -923,11 +935,13 @@

Source code for specsscan.helpers

     df_lut: pd.DataFrame,
     scan_info: dict,
     config: dict,
+    scan: int,
     fast_axes: list[str],
     slow_axes: list[str],
     projection: str,
     metadata: dict = None,
     collect_metadata: bool = False,
+    token: str = None,
 ) -> dict:
     """Helper function for the handling metadata from different files
 
@@ -936,22 +950,24 @@ 

Source code for specsscan.helpers

             from ``parse_lut_to_df()``
         scan_info (dict): scan_info class dict containing containing the contents of info.txt file
         config (dict): config dictionary containing the contents of config.yaml file
+        scan (int): Scan number
         fast_axes (list[str]): The fast-axis dimensions of the scan
         slow_axes (list[str]): The slow-axis dimensions of the scan
         metadata (dict, optional): Metadata dictionary with additional metadata for the scan.
             Defaults to empty dictionary.
         collect_metadata (bool, optional): Option to collect further metadata e.g. from EPICS
             archiver needed for NeXus conversion. Defaults to False.
+        token (str, optional):: The elabFTW api token to use for fetching metadata
 
     Returns:
         dict: metadata dictionary containing additional metadata from the EPICS
-        archive.
+        archive and elabFTW.
     """
 
     if metadata is None:
         metadata = {}
 
-    print("Gathering metadata from different locations")
+    logger.info("Gathering metadata from different locations")
     # get metadata from LUT dataframe
     lut_meta = {}
     energy_scan_mode = "snapshot"
@@ -969,10 +985,10 @@ 

Source code for specsscan.helpers

 
     metadata["scan_info"] = complete_dictionary(
         metadata.get("scan_info", {}),
-        complete_dictionary(lut_meta, scan_info),
+        complete_dictionary(scan_info, lut_meta),
     )  # merging dictionaries
 
-    print("Collecting time stamps...")
+    logger.info("Collecting time stamps...")
     if "time" in metadata["scan_info"]:
         time_list = [metadata["scan_info"]["time"][0], metadata["scan_info"]["time"][-1]]
     elif "StartTime" in metadata["scan_info"]:
@@ -996,53 +1012,18 @@ 

Source code for specsscan.helpers

     }
 
     if collect_metadata:
-        # Get metadata from Epics archive if not present already
-        start = dt.datetime.utcfromtimestamp(ts_from).isoformat()
+        metadata_retriever = MetadataRetriever(config, token)
 
-        # replace metadata names by epics channels
-        try:
-            replace_dict = config["epics_channels"]
-            for key in list(metadata["scan_info"]):
-                if key.lower() in replace_dict:
-                    metadata["scan_info"][replace_dict[key.lower()]] = metadata["scan_info"][key]
-                    metadata["scan_info"].pop(key)
-            epics_channels = replace_dict.values()
-        except KeyError:
-            epics_channels = []
-
-        channels_missing = set(epics_channels) - set(metadata["scan_info"].keys())
-        if channels_missing:
-            print("Collecting data from the EPICS archive...")
-            for channel in channels_missing:
-                try:
-                    _, vals = get_archiver_data(
-                        archiver_url=config.get("archiver_url"),
-                        archiver_channel=channel,
-                        ts_from=ts_from,
-                        ts_to=ts_to,
-                    )
-                    metadata["scan_info"][f"{channel}"] = np.mean(vals)
+        metadata = metadata_retriever.fetch_epics_metadata(
+            ts_from=ts_from,
+            ts_to=ts_to,
+            metadata=metadata,
+        )
 
-                except IndexError:
-                    metadata["scan_info"][f"{channel}"] = np.nan
-                    print(
-                        f"Data for channel {channel} doesn't exist for time {start}",
-                    )
-                except HTTPError as exc:
-                    print(
-                        f"Incorrect URL for the archive channel {channel}. "
-                        "Make sure that the channel name and file start and end times are "
-                        "correct.",
-                    )
-                    print("Error code: ", exc)
-                except URLError as exc:
-                    print(
-                        f"Cannot access the archive URL for channel {channel}. "
-                        f"Make sure that you are within the FHI network."
-                        f"Skipping over channels {channels_missing}.",
-                    )
-                    print("Error code: ", exc)
-                    break
+        metadata = metadata_retriever.fetch_elab_metadata(
+            scan=scan,
+            metadata=metadata,
+        )
 
     metadata["scan_info"]["energy_scan_mode"] = energy_scan_mode
 
@@ -1054,43 +1035,10 @@ 

Source code for specsscan.helpers

     metadata["scan_info"]["slow_axes"] = slow_axes
     metadata["scan_info"]["fast_axes"] = fast_axes
 
-    print("Done!")
-
     return metadata
-
-[docs] -def get_archiver_data( - archiver_url: str, - archiver_channel: str, - ts_from: float, - ts_to: float, -) -> tuple[np.ndarray, np.ndarray]: - """Extract time stamps and corresponding data from and EPICS archiver instance - - Args: - archiver_url (str): URL of the archiver data extraction interface - archiver_channel (str): EPICS channel to extract data for - ts_from (float): starting time stamp of the range of interest - ts_to (float): ending time stamp of the range of interest - - Returns: - tuple[List, List]: The extracted time stamps and corresponding data - """ - iso_from = dt.datetime.utcfromtimestamp(ts_from).isoformat() - iso_to = dt.datetime.utcfromtimestamp(ts_to).isoformat() - req_str = archiver_url + archiver_channel + "&from=" + iso_from + "Z&to=" + iso_to + "Z" - with urlopen(req_str) as req: - data = json.load(req) - secs = [x["secs"] + x["nanos"] * 1e-9 for x in data[0]["data"]] - vals = [x["val"] for x in data[0]["data"]] - - return (np.asarray(secs), np.asarray(vals))
- - -
[docs] def find_scan(path: Path, scan: int) -> list[Path]: @@ -1103,7 +1051,7 @@

Source code for specsscan.helpers

     Returns:
         List[Path]: scan_path: Path object pointing to the scan folder
     """
-    print("Scan path not provided, searching directories...")
+    logger.info("Scan path not provided, searching directories...")
     for file in path.iterdir():
         if file.is_dir():
             try:
@@ -1117,7 +1065,7 @@ 

Source code for specsscan.helpers

                     file.glob(f"*/*/Raw Data/{scan}"),
                 )
                 if scan_path:
-                    print("Scan found at path:", scan_path[0])
+                    logger.info(f"Scan found at path: {scan_path[0]}")
                     break
     else:
         scan_path = []
diff --git a/specsanalyzer/latest/_sources/getting_started.rst.txt b/specsanalyzer/v0.6.0a2/_sources/getting_started.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/getting_started.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/getting_started.rst.txt
diff --git a/specsanalyzer/latest/_sources/index.rst.txt b/specsanalyzer/v0.6.0a2/_sources/index.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/index.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/index.rst.txt
diff --git a/specsanalyzer/latest/_sources/misc/maintain.rst.txt b/specsanalyzer/v0.6.0a2/_sources/misc/maintain.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/misc/maintain.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/misc/maintain.rst.txt
diff --git a/specsanalyzer/latest/_sources/specsanalyzer/config.rst.txt b/specsanalyzer/v0.6.0a2/_sources/specsanalyzer/config.rst.txt
similarity index 78%
rename from specsanalyzer/latest/_sources/specsanalyzer/config.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/specsanalyzer/config.rst.txt
index 4165f69..34ce2f1 100644
--- a/specsanalyzer/latest/_sources/specsanalyzer/config.rst.txt
+++ b/specsanalyzer/v0.6.0a2/_sources/specsanalyzer/config.rst.txt
@@ -4,8 +4,8 @@ The config module contains a mechanics to collect configuration parameters from
 It will load an (optional) provided config file, or alternatively use a passed python dictionary as initial config dictionary, and subsequently look for the following additional config files to load:
 
 * ``folder_config``: A config file of name :file:`specs_config.yaml` in the current working directory. This is mostly intended to pass calibration parameters of the workflow between different notebook instances.
-* ``user_config``: A config file provided by the user, stored as :file:`.specsanalyzer/config.yaml` in the current user's home directly. This is intended to give a user the option for individual configuration modifications of system settings.
-* ``system_config``: A config file provided by the system administrator, stored as :file:`/etc/specsanalyzer/config.yaml` on Linux-based systems, and :file:`%ALLUSERSPROFILE%/specsanalyzer/config.yaml` on Windows. This should provide all necessary default parameters for using the specsanalyzer processor with a given setup. For an example for the setup at the Fritz Haber Institute setup, see :ref:`example_config`
+* ``user_config``: A config file provided by the user, stored as :file:`.config/specsanalyzer/config_v1.yaml` in the current user's home directly. This is intended to give a user the option for individual configuration modifications of system settings.
+* ``system_config``: A config file provided by the system administrator, stored as :file:`/etc/specsanalyzer/config_v1.yaml` on Linux-based systems, and :file:`%ALLUSERSPROFILE%/specsanalyzer/config_v1.yaml` on Windows. This should provide all necessary default parameters for using the specsanalyzer processor with a given setup. For an example for the setup at the Fritz Haber Institute setup, see :ref:`example_config`
 * ``default_config``: The default configuration shipped with the package. Typically, all parameters here should be overwritten by any of the other configuration files.
 
 The config mechanism returns the combined dictionary, and reports the loaded configuration files. In order to disable or overwrite any of the configuration files, they can be also given as optional parameters (path to a file, or python dictionary).
diff --git a/specsanalyzer/latest/_sources/specsanalyzer/convert.rst.txt b/specsanalyzer/v0.6.0a2/_sources/specsanalyzer/convert.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/specsanalyzer/convert.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/specsanalyzer/convert.rst.txt
diff --git a/specsanalyzer/latest/_sources/specsanalyzer/core.rst.txt b/specsanalyzer/v0.6.0a2/_sources/specsanalyzer/core.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/specsanalyzer/core.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/specsanalyzer/core.rst.txt
diff --git a/specsanalyzer/latest/_sources/specsanalyzer/img_tools.rst.txt b/specsanalyzer/v0.6.0a2/_sources/specsanalyzer/img_tools.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/specsanalyzer/img_tools.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/specsanalyzer/img_tools.rst.txt
diff --git a/specsanalyzer/latest/_sources/specsanalyzer/io.rst.txt b/specsanalyzer/v0.6.0a2/_sources/specsanalyzer/io.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/specsanalyzer/io.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/specsanalyzer/io.rst.txt
diff --git a/specsanalyzer/latest/_sources/specsscan/core.rst.txt b/specsanalyzer/v0.6.0a2/_sources/specsscan/core.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/specsscan/core.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/specsscan/core.rst.txt
diff --git a/specsanalyzer/latest/_sources/specsscan/helpers.rst.txt b/specsanalyzer/v0.6.0a2/_sources/specsscan/helpers.rst.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/specsscan/helpers.rst.txt
rename to specsanalyzer/v0.6.0a2/_sources/specsscan/helpers.rst.txt
diff --git a/specsanalyzer/latest/_sources/tutorial/1_specsanalyzer_conversion_examples.ipynb.txt b/specsanalyzer/v0.6.0a2/_sources/tutorial/1_specsanalyzer_conversion_examples.ipynb.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/tutorial/1_specsanalyzer_conversion_examples.ipynb.txt
rename to specsanalyzer/v0.6.0a2/_sources/tutorial/1_specsanalyzer_conversion_examples.ipynb.txt
diff --git a/specsanalyzer/latest/_sources/tutorial/2_specsscan_example.ipynb.txt b/specsanalyzer/v0.6.0a2/_sources/tutorial/2_specsscan_example.ipynb.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/tutorial/2_specsscan_example.ipynb.txt
rename to specsanalyzer/v0.6.0a2/_sources/tutorial/2_specsscan_example.ipynb.txt
diff --git a/specsanalyzer/latest/_sources/tutorial/3_specsscan_conversion_to_NeXus.ipynb.txt b/specsanalyzer/v0.6.0a2/_sources/tutorial/3_specsscan_conversion_to_NeXus.ipynb.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/tutorial/3_specsscan_conversion_to_NeXus.ipynb.txt
rename to specsanalyzer/v0.6.0a2/_sources/tutorial/3_specsscan_conversion_to_NeXus.ipynb.txt
diff --git a/specsanalyzer/latest/_sources/tutorial/4_specsscan_load_sweep_scan.ipynb.txt b/specsanalyzer/v0.6.0a2/_sources/tutorial/4_specsscan_load_sweep_scan.ipynb.txt
similarity index 100%
rename from specsanalyzer/latest/_sources/tutorial/4_specsscan_load_sweep_scan.ipynb.txt
rename to specsanalyzer/v0.6.0a2/_sources/tutorial/4_specsscan_load_sweep_scan.ipynb.txt
diff --git a/specsanalyzer/latest/_static/basic.css b/specsanalyzer/v0.6.0a2/_static/basic.css
similarity index 100%
rename from specsanalyzer/latest/_static/basic.css
rename to specsanalyzer/v0.6.0a2/_static/basic.css
diff --git a/specsanalyzer/latest/_static/doctools.js b/specsanalyzer/v0.6.0a2/_static/doctools.js
similarity index 100%
rename from specsanalyzer/latest/_static/doctools.js
rename to specsanalyzer/v0.6.0a2/_static/doctools.js
diff --git a/specsanalyzer/latest/_static/documentation_options.js b/specsanalyzer/v0.6.0a2/_static/documentation_options.js
similarity index 89%
rename from specsanalyzer/latest/_static/documentation_options.js
rename to specsanalyzer/v0.6.0a2/_static/documentation_options.js
index 0287497..0fe88c8 100644
--- a/specsanalyzer/latest/_static/documentation_options.js
+++ b/specsanalyzer/v0.6.0a2/_static/documentation_options.js
@@ -1,5 +1,5 @@
 const DOCUMENTATION_OPTIONS = {
-    VERSION: '0.5.2.dev2+gd6a55dd',
+    VERSION: '0.6.0a2',
     LANGUAGE: 'en',
     COLLAPSE_INDEX: false,
     BUILDER: 'html',
diff --git a/specsanalyzer/latest/_static/file.png b/specsanalyzer/v0.6.0a2/_static/file.png
similarity index 100%
rename from specsanalyzer/latest/_static/file.png
rename to specsanalyzer/v0.6.0a2/_static/file.png
diff --git a/specsanalyzer/latest/_static/language_data.js b/specsanalyzer/v0.6.0a2/_static/language_data.js
similarity index 100%
rename from specsanalyzer/latest/_static/language_data.js
rename to specsanalyzer/v0.6.0a2/_static/language_data.js
diff --git a/specsanalyzer/latest/_static/minus.png b/specsanalyzer/v0.6.0a2/_static/minus.png
similarity index 100%
rename from specsanalyzer/latest/_static/minus.png
rename to specsanalyzer/v0.6.0a2/_static/minus.png
diff --git a/specsanalyzer/latest/_static/nbsphinx-broken-thumbnail.svg b/specsanalyzer/v0.6.0a2/_static/nbsphinx-broken-thumbnail.svg
similarity index 100%
rename from specsanalyzer/latest/_static/nbsphinx-broken-thumbnail.svg
rename to specsanalyzer/v0.6.0a2/_static/nbsphinx-broken-thumbnail.svg
diff --git a/specsanalyzer/latest/_static/nbsphinx-code-cells.css b/specsanalyzer/v0.6.0a2/_static/nbsphinx-code-cells.css
similarity index 100%
rename from specsanalyzer/latest/_static/nbsphinx-code-cells.css
rename to specsanalyzer/v0.6.0a2/_static/nbsphinx-code-cells.css
diff --git a/specsanalyzer/latest/_static/nbsphinx-gallery.css b/specsanalyzer/v0.6.0a2/_static/nbsphinx-gallery.css
similarity index 100%
rename from specsanalyzer/latest/_static/nbsphinx-gallery.css
rename to specsanalyzer/v0.6.0a2/_static/nbsphinx-gallery.css
diff --git a/specsanalyzer/latest/_static/nbsphinx-no-thumbnail.svg b/specsanalyzer/v0.6.0a2/_static/nbsphinx-no-thumbnail.svg
similarity index 100%
rename from specsanalyzer/latest/_static/nbsphinx-no-thumbnail.svg
rename to specsanalyzer/v0.6.0a2/_static/nbsphinx-no-thumbnail.svg
diff --git a/specsanalyzer/latest/_static/plus.png b/specsanalyzer/v0.6.0a2/_static/plus.png
similarity index 100%
rename from specsanalyzer/latest/_static/plus.png
rename to specsanalyzer/v0.6.0a2/_static/plus.png
diff --git a/specsanalyzer/latest/_static/pygments.css b/specsanalyzer/v0.6.0a2/_static/pygments.css
similarity index 100%
rename from specsanalyzer/latest/_static/pygments.css
rename to specsanalyzer/v0.6.0a2/_static/pygments.css
diff --git a/specsanalyzer/latest/_static/scripts/bootstrap.js b/specsanalyzer/v0.6.0a2/_static/scripts/bootstrap.js
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/bootstrap.js
rename to specsanalyzer/v0.6.0a2/_static/scripts/bootstrap.js
diff --git a/specsanalyzer/latest/_static/scripts/bootstrap.js.LICENSE.txt b/specsanalyzer/v0.6.0a2/_static/scripts/bootstrap.js.LICENSE.txt
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/bootstrap.js.LICENSE.txt
rename to specsanalyzer/v0.6.0a2/_static/scripts/bootstrap.js.LICENSE.txt
diff --git a/specsanalyzer/latest/_static/scripts/bootstrap.js.map b/specsanalyzer/v0.6.0a2/_static/scripts/bootstrap.js.map
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/bootstrap.js.map
rename to specsanalyzer/v0.6.0a2/_static/scripts/bootstrap.js.map
diff --git a/specsanalyzer/latest/_static/scripts/fontawesome.js b/specsanalyzer/v0.6.0a2/_static/scripts/fontawesome.js
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/fontawesome.js
rename to specsanalyzer/v0.6.0a2/_static/scripts/fontawesome.js
diff --git a/specsanalyzer/latest/_static/scripts/fontawesome.js.LICENSE.txt b/specsanalyzer/v0.6.0a2/_static/scripts/fontawesome.js.LICENSE.txt
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/fontawesome.js.LICENSE.txt
rename to specsanalyzer/v0.6.0a2/_static/scripts/fontawesome.js.LICENSE.txt
diff --git a/specsanalyzer/latest/_static/scripts/fontawesome.js.map b/specsanalyzer/v0.6.0a2/_static/scripts/fontawesome.js.map
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/fontawesome.js.map
rename to specsanalyzer/v0.6.0a2/_static/scripts/fontawesome.js.map
diff --git a/specsanalyzer/latest/_static/scripts/pydata-sphinx-theme.js b/specsanalyzer/v0.6.0a2/_static/scripts/pydata-sphinx-theme.js
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/pydata-sphinx-theme.js
rename to specsanalyzer/v0.6.0a2/_static/scripts/pydata-sphinx-theme.js
diff --git a/specsanalyzer/latest/_static/scripts/pydata-sphinx-theme.js.map b/specsanalyzer/v0.6.0a2/_static/scripts/pydata-sphinx-theme.js.map
similarity index 100%
rename from specsanalyzer/latest/_static/scripts/pydata-sphinx-theme.js.map
rename to specsanalyzer/v0.6.0a2/_static/scripts/pydata-sphinx-theme.js.map
diff --git a/specsanalyzer/latest/_static/searchtools.js b/specsanalyzer/v0.6.0a2/_static/searchtools.js
similarity index 100%
rename from specsanalyzer/latest/_static/searchtools.js
rename to specsanalyzer/v0.6.0a2/_static/searchtools.js
diff --git a/specsanalyzer/latest/_static/sphinx_highlight.js b/specsanalyzer/v0.6.0a2/_static/sphinx_highlight.js
similarity index 100%
rename from specsanalyzer/latest/_static/sphinx_highlight.js
rename to specsanalyzer/v0.6.0a2/_static/sphinx_highlight.js
diff --git a/specsanalyzer/latest/_static/styles/pydata-sphinx-theme.css b/specsanalyzer/v0.6.0a2/_static/styles/pydata-sphinx-theme.css
similarity index 100%
rename from specsanalyzer/latest/_static/styles/pydata-sphinx-theme.css
rename to specsanalyzer/v0.6.0a2/_static/styles/pydata-sphinx-theme.css
diff --git a/specsanalyzer/latest/_static/styles/pydata-sphinx-theme.css.map b/specsanalyzer/v0.6.0a2/_static/styles/pydata-sphinx-theme.css.map
similarity index 100%
rename from specsanalyzer/latest/_static/styles/pydata-sphinx-theme.css.map
rename to specsanalyzer/v0.6.0a2/_static/styles/pydata-sphinx-theme.css.map
diff --git a/specsanalyzer/latest/_static/styles/theme.css b/specsanalyzer/v0.6.0a2/_static/styles/theme.css
similarity index 100%
rename from specsanalyzer/latest/_static/styles/theme.css
rename to specsanalyzer/v0.6.0a2/_static/styles/theme.css
diff --git a/specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf b/specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf
similarity index 100%
rename from specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf
rename to specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-brands-400.ttf
diff --git a/specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 b/specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2
similarity index 100%
rename from specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2
rename to specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2
diff --git a/specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf b/specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf
similarity index 100%
rename from specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf
rename to specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-regular-400.ttf
diff --git a/specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 b/specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2
similarity index 100%
rename from specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2
rename to specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2
diff --git a/specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf b/specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf
similarity index 100%
rename from specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf
rename to specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-solid-900.ttf
diff --git a/specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 b/specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2
similarity index 100%
rename from specsanalyzer/latest/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2
rename to specsanalyzer/v0.6.0a2/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2
diff --git a/specsanalyzer/latest/_static/webpack-macros.html b/specsanalyzer/v0.6.0a2/_static/webpack-macros.html
similarity index 100%
rename from specsanalyzer/latest/_static/webpack-macros.html
rename to specsanalyzer/v0.6.0a2/_static/webpack-macros.html
diff --git a/specsanalyzer/latest/genindex.html b/specsanalyzer/v0.6.0a2/genindex.html
similarity index 96%
rename from specsanalyzer/latest/genindex.html
rename to specsanalyzer/v0.6.0a2/genindex.html
index e2c77db..64fa64e 100644
--- a/specsanalyzer/latest/genindex.html
+++ b/specsanalyzer/v0.6.0a2/genindex.html
@@ -7,7 +7,7 @@
   
     
     
-    Index — specsanalyzer 0.5.2.dev2+gd6a55dd documentation
+    Index — specsanalyzer 0.6.0a2 documentation
   
   
   
@@ -37,7 +37,7 @@
   
 
 
-    
+    
     
     
     
@@ -46,7 +46,7 @@
     
@@ -54,7 +54,7 @@
     
   
   
-  
+  
   
   
   
@@ -116,7 +116,7 @@
   
   
   
-    

specsanalyzer 0.5.2.dev2+gd6a55dd documentation

+

specsanalyzer 0.6.0a2 documentation

@@ -627,17 +627,15 @@

G

- +