Add the doc folder with all *.rst files
This is used to create the pdf manual and html website
|
@ -0,0 +1,193 @@
|
|||
# Makefile for Sphinx documentation
|
||||
#
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = python -m sphinx
|
||||
PAPER =
|
||||
BUILDDIR = build
|
||||
|
||||
# Internal variables.
|
||||
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||
PAPEROPT_letter = -D latex_paper_size=letter
|
||||
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||
# the i18n builder cannot share the environment and doctrees with the others
|
||||
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
|
||||
|
||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||
|
||||
help:
|
||||
@echo "Please use \`make <target>' where <target> is one of"
|
||||
@echo " html to make standalone HTML files"
|
||||
@echo " dirhtml to make HTML files named index.html in directories"
|
||||
@echo " singlehtml to make a single large HTML file"
|
||||
@echo " pickle to make pickle files"
|
||||
@echo " json to make JSON files"
|
||||
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||
@echo " qthelp to make HTML files and a qthelp project"
|
||||
@echo " devhelp to make HTML files and a Devhelp project"
|
||||
@echo " epub to make an epub"
|
||||
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||
@echo " text to make text files"
|
||||
@echo " man to make manual pages"
|
||||
@echo " texinfo to make Texinfo files"
|
||||
@echo " info to make Texinfo files and run them through makeinfo"
|
||||
@echo " gettext to make PO message catalogs"
|
||||
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||
@echo " linkcheck to check all external links for integrity"
|
||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||
|
||||
clean:
|
||||
@rm -rf $(BUILDDIR)/*
|
||||
@rm -rf $(PNGs)
|
||||
@rm -f source/spectroscopies/common_parameters.inc
|
||||
@rm -f source/spectroscopies/ped/ped_parameters.inc
|
||||
@rm -f source/spectroscopies/eig/eig_parameters.inc
|
||||
@rm -f source/downloads.rst
|
||||
|
||||
|
||||
|
||||
PNGs = $(shell find source/ -type f -name '*.svg'|sed s/\.svg/\.png/)
|
||||
PNGs += $(shell find source/ -type f -name '*.gif'|sed s/\.gif/\.png/)
|
||||
|
||||
foo:
|
||||
@echo ${PNGs}
|
||||
|
||||
|
||||
%.png: %.svg
|
||||
@echo converting $< to PNG
|
||||
@convert -background none -density 150 $< $@
|
||||
|
||||
%.png: %.gif
|
||||
@echo converting $< to PNG
|
||||
@convert -background none -density 150 $<[0] $@
|
||||
|
||||
|
||||
$(BUILDDIR)/html/sitemap.xml: $(BUILDDIR)/html/index.html
|
||||
@echo "Generating sitemap file..."
|
||||
@python source/sitemap-generate.py --url https://msspec.cnrs.fr --path $(BUILDDIR)/html $@
|
||||
|
||||
ownership: source/google*.html
|
||||
@echo "Copying the ownership file for Google."
|
||||
@cp $< $(BUILDDIR)/html
|
||||
|
||||
images: $(PNGs)
|
||||
|
||||
banner:
|
||||
@echo "Creating banner..."
|
||||
@cd source && python -c "import custom; custom.modify_banner()"
|
||||
|
||||
html0: banner images
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
|
||||
html: html0 ownership $(BUILDDIR)/html/sitemap.xml
|
||||
@echo
|
||||
|
||||
dirhtml:
|
||||
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||
|
||||
singlehtml:
|
||||
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||
@echo
|
||||
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||
|
||||
pickle:
|
||||
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||
@echo
|
||||
@echo "Build finished; now you can process the pickle files."
|
||||
|
||||
json:
|
||||
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||
@echo
|
||||
@echo "Build finished; now you can process the JSON files."
|
||||
|
||||
htmlhelp:
|
||||
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||
|
||||
qthelp:
|
||||
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||
@echo
|
||||
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/MsSpec-ASE.qhcp"
|
||||
@echo "To view the help file:"
|
||||
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/MsSpec-ASE.qhc"
|
||||
|
||||
devhelp:
|
||||
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||
@echo
|
||||
@echo "Build finished."
|
||||
@echo "To view the help file:"
|
||||
@echo "# mkdir -p $$HOME/.local/share/devhelp/MsSpec-ASE"
|
||||
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/MsSpec-ASE"
|
||||
@echo "# devhelp"
|
||||
|
||||
epub:
|
||||
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex:
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf: banner images
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||
|
||||
text:
|
||||
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||
@echo
|
||||
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||
|
||||
man:
|
||||
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||
@echo
|
||||
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||
|
||||
texinfo:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo
|
||||
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||
"(use \`make info' here to do that automatically)."
|
||||
|
||||
info:
|
||||
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||
@echo "Running Texinfo files through makeinfo..."
|
||||
make -C $(BUILDDIR)/texinfo info
|
||||
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||
|
||||
gettext:
|
||||
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||
@echo
|
||||
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||
|
||||
changes:
|
||||
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||
@echo
|
||||
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||
|
||||
linkcheck:
|
||||
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||
@echo
|
||||
@echo "Link check complete; look for any errors in the above output " \
|
||||
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||
|
||||
doctest:
|
||||
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||
@echo "Testing of doctests in the sources finished, look at the " \
|
||||
"results in $(BUILDDIR)/doctest/output.txt."
|
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 73 KiB |
|
@ -0,0 +1,267 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# MsSpec-ASE documentation build configuration file, created by
|
||||
# sphinx-quickstart on Mon Jan 18 10:59:09 2016.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys, os
|
||||
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
sys.path.insert(0, os.path.abspath('.'))
|
||||
sys.path.insert(0, os.path.abspath('../../src'))
|
||||
sys.path.insert(0, os.path.abspath('../../src/msspec'))
|
||||
#sys.path.insert(0, os.path.abspath('../'))
|
||||
|
||||
|
||||
import custom
|
||||
|
||||
|
||||
|
||||
# -- General configuration -----------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be extensions
|
||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage',
|
||||
'sphinx.ext.viewcode', 'sphinx.ext.mathjax']
|
||||
#extensions += ['sphinx-prompt']
|
||||
todo_include_todos = True
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'MsSpec-python'
|
||||
copyright = u'2016, Rennes Institute of Physics'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version, dev_version = custom.get_package_version()
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
#release = custom.get_package_version()
|
||||
release = '{}.post{}'.format(version, dev_version).strip('.post')
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = []
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
|
||||
rst_prolog = """
|
||||
.. |kalpha| replace:: :math:`K_\\alpha`
|
||||
"""
|
||||
|
||||
|
||||
|
||||
# -- Options for HTML output ---------------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'pyramid'
|
||||
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
#html_theme_path = ['./mytheme/']
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
#html_static_path = ['_static']
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
#html_file_suffix = None
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'MsSpec-doc'
|
||||
|
||||
|
||||
# -- Options for LaTeX output --------------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#'preamble': '',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||
latex_documents = [
|
||||
('index', 'MsSpec-python.tex', u'MsSpec-python Documentation',
|
||||
u'D. Sebilleau, S. Tricot', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output --------------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
('index', 'msspec', u'MsSpec-python Documentation',
|
||||
[u'D. Sebilleau, S. Tricot'], 1)
|
||||
]
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
|
||||
|
||||
# -- Options for Texinfo output ------------------------------------------------
|
||||
|
||||
# Grouping the document tree into Texinfo files. List of tuples
|
||||
# (source start file, target name, title, author,
|
||||
# dir menu entry, description, category)
|
||||
texinfo_documents = [
|
||||
('index', 'MsSpec-ASE', u'MsSpec-ASE Documentation',
|
||||
u'D. Sebilleau', 'MsSpec-ASE', 'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#texinfo_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#texinfo_domain_indices = True
|
||||
|
||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||
#texinfo_show_urls = 'footnote'
|
||||
|
||||
custom.generate_download_page()
|
||||
custom.generate_parameters()
|
||||
custom.generate_parameters(spectroscopy='PED')
|
||||
custom.generate_parameters(spectroscopy='EIG')
|
|
@ -0,0 +1,81 @@
|
|||
############
|
||||
Contributors
|
||||
############
|
||||
|
||||
|
||||
MsSpec has benefited from the help of many people. Its core results from the long-term
|
||||
collaboration of D. Sébilleau (Université de Rennes-1, France) with C. R. Natoli (LNFINFN,
|
||||
Italy). More specifically, cluster gen.f and the various versions of spec.f have been
|
||||
written by D. Sébilleau1 while phagen scf.f is due to C. R. Natoli. Other contributions have
|
||||
been made possible through several joint CNRS/Chinese Academy of Sciences projects with Z.-
|
||||
Y. Wu's group at the Beijing Synchrotron Radiation Facility and at the National Synchrotron
|
||||
Radiation Laboratory in Hefei (China). MsSpec has also benefited from the post-doctoral grant
|
||||
awarded to K. Hatada by the Région Bretagne, and from the four year LighTnet European
|
||||
network. Currently, MsSpec is part of the FP7-funded European network MSNano and of the
|
||||
COST-funded European action EUSpec.
|
||||
|
||||
The other contributors are:
|
||||
|
||||
* D. Agliz (Université Ibnou-Zohr, Agadir, Morocco): contribution to the
|
||||
implementation of the Rehr-Albers method
|
||||
* M. Gavaza (City University, Hong Kong): symmetrized form of the multiple
|
||||
scattering series
|
||||
* F. Da Pieve (Università di Roma 3): implementation of the Auger case into
|
||||
phagen scf.f and contribution to the implementation of the APECS cross-section
|
||||
* K. Hatada (LNF-INFN, Italy): help to write up the makefile that generates the
|
||||
spec.f code and implementation of the parallel version. Implementation of the
|
||||
non muffin-tin routines into phagen scf.f and into spec.f.
|
||||
* H.F. Zhao (BSRF, Beijing, China and Université de Rennes-1, France): correlation
|
||||
expansion.
|
||||
* J.-Y. Wang (BSRF, Beijing, China): Graphical User Interface.
|
||||
* E.-R. Li (BSRF, Beijing, China): Graphical User Interface.
|
||||
* L. Frein (Université de Rennes-1, France): artwork for the Graphical User
|
||||
Interface.
|
||||
* A. Carré (Université de Rennes-1, France):
|
||||
previous Website
|
||||
* P. Le Meur (Université de Rennes-1, France):
|
||||
Python interface
|
||||
* S. Tricot (Université de Rennes-1, France): Python interface, website,
|
||||
online tutorials and documentation
|
||||
* P. Schieffer (Université de Rennes-1, France): XPD related
|
||||
improvements
|
||||
|
||||
The package has also benefited from many users and colleagues who pointed out bugs or
|
||||
suggested improvements or new features. Among them, S. Ababou-Girard, B. Lépine, Y. Lu,
|
||||
T. Jaouen and P. Schieffer (Université de Rennes-1, France), F. Scheurer (Université Louis
|
||||
Pasteur, Strasbourg, France), P. Wetzel (Université de Haute-Alsace, Mulhouse, France), R.
|
||||
Belkhou (SOLEIL, France), M. Zanouni (Université de Tanger, Maroc), A. Souissi (Université
|
||||
de Bizerte, Tunisie), R. Gunnella (Università di Camerino, Italy) and J. Osterwalder (Université
|
||||
de Zürich, Switzerland).
|
||||
The empty sphere features have been tested with the help of K. Kuroda and S. Tadano
|
||||
(Chiba university, Japan).
|
||||
|
||||
Work on the next version (version 2.0) is currently under development by:
|
||||
|
||||
* D. Sébilleau (Université de Rennes-1, France):
|
||||
lead development
|
||||
* C. R. Natoli (LNF-INFN, Italy): new features in phagen scf.f (scalar-relativistic, impact
|
||||
parameter representation, EELS and (e,2e) radial integrals, ...) and interface with
|
||||
VASP electronic structure code
|
||||
* K. Hatada (Université de Rennes-1, France): BEEM spectroscopy, interface with VASP
|
||||
electronic structure code
|
||||
* H.-F. Zhao (BSRF, Beijing, China): REXS
|
||||
spectroscopy
|
||||
* J.-Q. Xu (NSRL, Hefei, China): EELS spectroscopy, interface with VASP electronic
|
||||
structure code
|
||||
* W.-S. Chu (NSRL, Hefei, China): portage to Windows operating system
|
||||
(through Cygwin)
|
||||
* R. Choubisa (BITS, Pilani, India): (e,2e)
|
||||
spectroscopy
|
||||
* P. Krüger (Chiba university, Japan): interface with VASP electronic
|
||||
structure code
|
||||
* A. Calvez (Université de Rennes-1, France):
|
||||
optimization loop
|
||||
* T. Balège and L. Strafella (Université de Rennes-1, France):
|
||||
portage to Fortran 90
|
||||
* S. Tricot (Université de Rennes-1, France): Python interface, website, online
|
||||
tutorials and documentation, graphical user interface
|
||||
* P. Schieffer (Université de Rennes-1, France): XPD related
|
||||
improvements
|
||||
* G. Raffy ( Université de Rennes-1, France): Graphical user
|
||||
interface
|
|
@ -0,0 +1,118 @@
|
|||
# coding: utf8
|
||||
# vim: set et ts=4 sw=4 sts mouse=a fdm=indent:
|
||||
|
||||
import os
|
||||
import sys
|
||||
import subprocess
|
||||
import re
|
||||
import numpy as np
|
||||
from lxml import etree
|
||||
|
||||
|
||||
def get_package_version():
|
||||
p = subprocess.run(["git describe|sed 's/-/.post/'|cut -d'-' -f1"], shell=True, stdout=subprocess.PIPE)
|
||||
full_version = p.stdout.decode('utf-8').strip()
|
||||
versions = full_version.split('.post')
|
||||
version = versions[0]
|
||||
dev_version = ""
|
||||
if len(versions) > 1:
|
||||
dev_version = versions[1]
|
||||
return version, dev_version
|
||||
|
||||
def generate_download_page():
|
||||
full_version = '.post'.join(get_package_version()).strip('.post')
|
||||
setupfile_path = '../../package/MsSpec-{}.setup'.format(full_version)
|
||||
docfile_path = '../../package/MsSpec-{}.pdf'.format(full_version)
|
||||
|
||||
with open('downloads.rst', 'w') as fd:
|
||||
content="""
|
||||
##########################
|
||||
Download and install notes
|
||||
##########################
|
||||
|
||||
click :download:`here <{}>` to download the last version of MsSpec and
|
||||
:download:`here <{}>` for this website as a single pdf file
|
||||
|
||||
|
||||
.. include:: install_notes.inc
|
||||
""".format(setupfile_path, docfile_path)
|
||||
fd.write(content)
|
||||
|
||||
def modify_banner():
|
||||
version, dev_version = get_package_version()
|
||||
xml = etree.parse('./title.svg')
|
||||
old_content = etree.tostring(xml)
|
||||
svg = xml.getroot()
|
||||
elements = svg.findall(".//{http://www.w3.org/2000/svg}tspan")
|
||||
|
||||
for element in elements:
|
||||
tid = element.get('id')
|
||||
if tid.startswith('msspec_version'):
|
||||
element.text = version
|
||||
if tid.startswith('dev_version'):
|
||||
if dev_version:
|
||||
element.text = "post release: " + dev_version
|
||||
else:
|
||||
element.text = ""
|
||||
|
||||
new_content = etree.tostring(xml).decode('utf-8')
|
||||
if new_content != old_content:
|
||||
with open('./title.svg', 'w') as fd:
|
||||
fd.write(new_content)
|
||||
|
||||
def generate_parameters(spectroscopy=None):
|
||||
def get_content(all_parameters):
|
||||
content = ""
|
||||
for p in all_parameters:
|
||||
content += ".. _{0}-{1}:\n\n".format(group.lower(), p.name)
|
||||
content += "{0}\n{1}\n\n".format(p.name, "-"*len(p.name))
|
||||
content += ".. admonition:: details\n\n"
|
||||
|
||||
table = ("\n.. csv-table::\n"
|
||||
"\t:widths: 100, 100\n\n")
|
||||
table += "\t\"*Types*\", \"{}\"\n".format(', '.join([_.__name__ for _ in p.allowed_types]))
|
||||
table += "\t\"*Limits*\", \"{} <= value <= {}\"\n".format(str(p.low_limit), str(p.high_limit))
|
||||
table += "\t\"*Unit*\", \"{}\"\n".format(str(p.unit))
|
||||
if type(p.allowed_values) in (tuple, list, np.ndarray):
|
||||
table += "\t\"*Allowed values*\", \"{}\"\n".format(', '.join([str(_) for _ in p.allowed_values]))
|
||||
else:
|
||||
table += "\t\"*Allowed values*\", \"{}\"\n".format(str(p.allowed_values))
|
||||
table += "\t\"*Default*\", \"{}\"\n".format(str(p.default))
|
||||
table += "\n\n\n\n"
|
||||
|
||||
content += table.replace('\n', '\n\t')
|
||||
content += "{}\n\n\n\n".format(p.docstring)
|
||||
return content
|
||||
|
||||
content = ""
|
||||
from msspec.calculator import MSSPEC
|
||||
c = MSSPEC(spectroscopy='PED' if spectroscopy==None else spectroscopy)
|
||||
c.shutdown()
|
||||
|
||||
allp = {}
|
||||
for p in c.get_parameters():
|
||||
if p.group not in allp.keys():
|
||||
allp[p.group] = []
|
||||
if not(p.private):
|
||||
allp[p.group].append(p)
|
||||
|
||||
|
||||
common_groups = ("GlobalParameters", "MuffintinParameters", "TMatrixParameters", "SourceParameters",
|
||||
"DetectorParameters", "ScanParameters", "CalculationParameters")
|
||||
|
||||
if spectroscopy == None:
|
||||
groups = common_groups
|
||||
fn = 'spectroscopies/common_parameters.inc'
|
||||
for group in groups:
|
||||
title = "{}".format(group)
|
||||
content += "{1}\n{0}\n\n".format("=" * len(title), title)
|
||||
content += get_content(allp[group])
|
||||
else:
|
||||
group = spectroscopy + 'Parameters'
|
||||
fn = 'spectroscopies/{0}/{0}_parameters.inc'.format(spectroscopy.lower())
|
||||
title = "{}".format(group)
|
||||
content += "{1}\n{0}\n\n".format("=" * len(title), title)
|
||||
content += get_content(allp[group])
|
||||
|
||||
with open(fn, 'w') as fd:
|
||||
fd.write(content)
|
|
@ -0,0 +1,217 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="23.31222mm"
|
||||
height="23.357077mm"
|
||||
viewBox="0 0 23.312219 23.357077"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
sodipodi:docname="download_btn.svg"
|
||||
style="enable-background:new"
|
||||
inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5962">
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.85714287"
|
||||
offset="0"
|
||||
id="stop5958" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:0.31122449"
|
||||
offset="1"
|
||||
id="stop5960" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient5835">
|
||||
<stop
|
||||
style="stop-color:#004371;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop5831" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop5833" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
id="linearGradient4564-7">
|
||||
<stop
|
||||
style="stop-color:#8e8e8e;stop-opacity:1"
|
||||
offset="0"
|
||||
id="stop4560" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1"
|
||||
offset="1"
|
||||
id="stop4562" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
inkscape:label="Apparition"
|
||||
inkscape:menu="Blurs"
|
||||
inkscape:menu-tooltip="Edges are partly feathered out"
|
||||
style="color-interpolation-filters:sRGB"
|
||||
id="filter4611">
|
||||
<feMorphology
|
||||
radius="4"
|
||||
in="SourceGraphic"
|
||||
result="result0"
|
||||
id="feMorphology4605" />
|
||||
<feGaussianBlur
|
||||
in="result0"
|
||||
stdDeviation="8"
|
||||
result="result91"
|
||||
id="feGaussianBlur4607" />
|
||||
<feComposite
|
||||
operator="in"
|
||||
in="SourceGraphic"
|
||||
in2="result91"
|
||||
id="feComposite4609" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient4564-7"
|
||||
id="linearGradient5733"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(70.929414,60.911197)"
|
||||
x1="58.972996"
|
||||
y1="49.015751"
|
||||
x2="59.154068"
|
||||
y2="26.337181" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5835"
|
||||
id="linearGradient5837"
|
||||
x1="200.18488"
|
||||
y1="228.84627"
|
||||
x2="200.45215"
|
||||
y2="96.280594"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.52096691,-3.2072347,41.946135)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5962"
|
||||
id="linearGradient5964"
|
||||
x1="261.8537"
|
||||
y1="157.31599"
|
||||
x2="239.34149"
|
||||
y2="134.75891"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5962"
|
||||
id="linearGradient5975"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="261.8537"
|
||||
y1="157.31599"
|
||||
x2="239.34149"
|
||||
y2="134.75891" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#000000"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="5.6"
|
||||
inkscape:cx="45.698481"
|
||||
inkscape:cy="21.89266"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="g5973"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-149.4062,-115.78368)">
|
||||
<g
|
||||
id="g6009">
|
||||
<g
|
||||
id="g6037">
|
||||
<a
|
||||
id="a6041"
|
||||
xlink:href=""
|
||||
transform="translate(-97.553378,-15.768902)">
|
||||
<g
|
||||
transform="translate(8.0180859,-2.80633)"
|
||||
id="g5973">
|
||||
<g
|
||||
id="g4564">
|
||||
<rect
|
||||
ry="3.8530018"
|
||||
y="134.75891"
|
||||
x="239.34149"
|
||||
height="22.557077"
|
||||
width="22.51222"
|
||||
id="rect5956"
|
||||
style="opacity:1;fill:url(#linearGradient5975);fill-opacity:1;stroke:#ffffff;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1"
|
||||
transform="matrix(0.8462876,0,0,0.8462876,244.67359,136.37159)"
|
||||
id="Page-1">
|
||||
<g
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="Core"
|
||||
transform="translate(-383,-213)">
|
||||
<g
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
id="file-download"
|
||||
transform="translate(383,213.5)">
|
||||
<path
|
||||
style="fill:#ffffff;fill-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
d="M 14,6 H 10 V 0 H 4 V 6 H 0 l 7,7 z M 0,15 v 2 h 14 v -2 z"
|
||||
id="Shape" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
id="text5954"
|
||||
y="154.58842"
|
||||
x="242.02277"
|
||||
style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.26458332"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.82222223px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#ffffff;fill-opacity:1;stroke-width:0.26458332"
|
||||
y="154.58842"
|
||||
x="242.02277"
|
||||
id="tspan5952"
|
||||
sodipodi:role="line">DOWNLOAD</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</a>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 908 KiB |
After Width: | Height: | Size: 368 KiB |
|
@ -0,0 +1,74 @@
|
|||
.. _hemispherical_cluster_faq:
|
||||
|
||||
|
||||
The hemispherical_cluster function
|
||||
----------------------------------
|
||||
|
||||
A the :py:func:`hemispherical_cluster` takes one mandatory argument and 4 keyword arguments.
|
||||
The first required argument is an ASE Atoms object. This object will be the base pattern used to create a cluster.
|
||||
It is usually a primitive cell of a structure. The 4 keywords arguments describe the dimensions of the cluster and
|
||||
the location of the emitter atom:
|
||||
|
||||
- emitter_tag: is an integer which is the tag of the emitter atom
|
||||
- emitter_plane: is an integer to tell in which plane to put the emitter
|
||||
- diameter: is the diameter of the hemispherically shaped cluster (in angströms)
|
||||
- planes: is the total number of planes
|
||||
|
||||
Three simple example are shown in the figure 1 below. These are cut view in the (xOz) plane of the clusters. the
|
||||
clusters were created with those commands:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from msspec.utils import hemispherical_cluster
|
||||
from ase.build import bulk
|
||||
|
||||
iron = bulk('Fe', cubic=True) # The base cell to be repeated to shape a cluster
|
||||
# The cluster 1a, with an emitter on the surface
|
||||
cluster1a = hemispherical_cluster(iron, diameter=25, emitter_plane=0)
|
||||
# The cluster 1c, with an emitter in the second plane
|
||||
cluster1b = hemispherical_cluster(iron, diameter=25, emitter_plane=1)
|
||||
# The cluster 1c, with an emitter in the third plane and with just one plane below
|
||||
# the emitter
|
||||
cluster1c = hemispherical_cluster(iron, diameter=25, emitter_plane=2, planes=4)
|
||||
|
||||
|
||||
.. figure:: Fe_clusters.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Figure 1.
|
||||
|
||||
The *emitter_tag* keyword is used to specify the emitter in a multielemental structure or if two atoms of the same
|
||||
kind exist in the primitive cell with different chemical or geometrical environment. For example, the CsCl structure
|
||||
is also *bcc* like the iron above, but the chlorine atom is at the center of a cube with 4 Caesium atoms on the apex.
|
||||
To get a Cl emitter in the desired plane, we should first tag it in the cell:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
from msspec.utils import hemispherical_cluster
|
||||
from ase.spacegroup import crystal
|
||||
|
||||
# Definition of this cubic cell
|
||||
a0 = 2.05
|
||||
a = b = c = a0
|
||||
alpha = beta = gamma = 90
|
||||
cellpar = [a, b, c, alpha, beta, gamma]
|
||||
# Create the CsCl structure with the crystal function
|
||||
CsCl = crystal(['Cs', 'Cl'], basis=[(0,0,0),(0.5,0.5,0.5)], spacegroup=221, cellpar=cellpar)
|
||||
# by default, all atoms tags are 0
|
||||
# set the Cl tag to 1
|
||||
CsCl[1].tag = 1
|
||||
# Create a cluster with the Cl emitter
|
||||
cluster = hemispherical_cluster(CsCl, emitter_tag=1, emitter_plane=3, diameter=25)
|
||||
|
||||
The resulting cluster is shown in the figure 2 below
|
||||
|
||||
.. figure:: CsCl_cluster.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Figure 2. A cut view in the (xOz) plane of a CsCl cluster with a Cl emitter atom in the third plane
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
.. _faq:
|
||||
|
||||
###
|
||||
FAQ
|
||||
###
|
||||
|
||||
.. toctree::
|
||||
|
||||
hemispherical_cluster/hemispherical_cluster
|
After Width: | Height: | Size: 121 KiB |
|
@ -0,0 +1 @@
|
|||
google-site-verification: google2c86b0817b98582b.html
|
|
@ -0,0 +1,159 @@
|
|||
.. MsSpec-ASE documentation master file, created by
|
||||
sphinx-quickstart on Mon Jan 18 10:59:09 2016.
|
||||
You can adapt this file completely to your liking, but it should at least
|
||||
contain the root `toctree` directive.
|
||||
|
||||
|
||||
.. image:: download_btn.png
|
||||
:scale: 0%
|
||||
|
||||
.. image:: title.png
|
||||
:scale: 0%
|
||||
|
||||
|
||||
|
||||
.. raw:: html
|
||||
|
||||
<style>
|
||||
div#mybanner {
|
||||
position:relative;
|
||||
width:100%;
|
||||
height:400px;
|
||||
background:linear-gradient(to top, #004371 0%, #ffffff 100%);}
|
||||
div#myfooter {
|
||||
width:100%;
|
||||
height:20px;
|
||||
color:white;
|
||||
text-align:right;
|
||||
font-size:12px;
|
||||
background:black;}
|
||||
div#myfooter a:link, div#myfooter a:visited{
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
div#myfooter a:hover, div#myfooter a:active{
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
background-color: underline;
|
||||
}
|
||||
div#mybutton {
|
||||
width:96px;
|
||||
position: absolute;
|
||||
right: 32px;
|
||||
bottom: 20px}
|
||||
div#mytitle {
|
||||
position: absolute;
|
||||
width: 740px;
|
||||
left: 40px;
|
||||
bottom: 20px;
|
||||
}
|
||||
div#mycontacts {
|
||||
border-left: thin solid #ffffff8e;
|
||||
padding-left: 10px;
|
||||
width:200px;
|
||||
height:50px;
|
||||
color:black;
|
||||
text-align:left;
|
||||
font-size:14px;
|
||||
line-height: 1.5em;
|
||||
background:none;
|
||||
position: absolute;
|
||||
left: 30px;
|
||||
bottom: 40px;}
|
||||
div#mycontacts a:link, div#mycontacts a:hover, div#mycontacts a:active{
|
||||
color: white;
|
||||
font-style: italic;
|
||||
text-decoration: none;
|
||||
}
|
||||
div#mycontacts a:hover, div#mycontacts a:active{
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="mybanner">
|
||||
<div id="mytitle">
|
||||
<img src="./_images/title.png" alt="MsSpec">
|
||||
</div>
|
||||
<div id="mybutton">
|
||||
<a href="javascript:DownloadAndRedirect()">
|
||||
<img src="./_images/download_btn.png" alt="Download">
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div id="mycontacts">
|
||||
<a href="mailto:didier.sebilleau@univ-rennes1.fr">
|
||||
Didier Sébilleau
|
||||
</a>
|
||||
</br>
|
||||
<a href="mailto:sylvain.tricot@univ-rennes1.fr">
|
||||
Sylvain Tricot
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div id="myfooter">
|
||||
<a href="https://www.ipr.univ-rennes1.fr">
|
||||
Rennes Institute of Physics, France
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
function DownloadAndRedirect()
|
||||
{
|
||||
var DownloadURL = "./downloads.html";
|
||||
var RedirectURL = "./downloads.html";
|
||||
var RedirectPauseSeconds = 1;
|
||||
location.href = DownloadURL;
|
||||
setTimeout("DoTheRedirect('"+RedirectURL+"')",parseInt(RedirectPauseSeconds*1000));
|
||||
}
|
||||
function DoTheRedirect(url) { window.location=url; }
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
#################
|
||||
Table of Contents
|
||||
#################
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
intro
|
||||
downloads
|
||||
spectroscopies/spectro
|
||||
parameters
|
||||
tutorials/index
|
||||
contributors
|
||||
faq/index
|
||||
todo
|
||||
|
||||
|
||||
|
||||
|
||||
.. only:: html
|
||||
|
||||
##################
|
||||
Indices and tables
|
||||
##################
|
||||
|
||||
* :ref:`genindex`
|
||||
* :ref:`modindex`
|
||||
* :ref:`search`
|
||||
|
||||
|
||||
.. only:: latex
|
||||
|
||||
#################################
|
||||
Application Programming Interface
|
||||
#################################
|
||||
|
||||
.. toctree::
|
||||
:glob:
|
||||
|
||||
modules/*
|
|
@ -0,0 +1,124 @@
|
|||
************
|
||||
Installation
|
||||
************
|
||||
|
||||
.. |logowin| image:: windows_icon.png
|
||||
:height: 96px
|
||||
:target: `win10_install_notes`_
|
||||
|
||||
.. |logolinux| image:: linux_icon.png
|
||||
:height: 96px
|
||||
:target: `linux_install_notes`_
|
||||
|
||||
.. |logomac| image:: apple_icon.png
|
||||
:height: 96px
|
||||
:target: `mac_install_notes`_
|
||||
|
||||
|
||||
|
||||
.. admonition:: Select your Operating System to view specific installation instructions
|
||||
|
||||
|logowin| |logolinux| |logomac|
|
||||
|
||||
|
||||
.. _common_install_notes:
|
||||
|
||||
In a terminal window, execute the setup program you've just downloaded.
|
||||
|
||||
.. code-block:: console
|
||||
|
||||
$ sh ./MsSpec-version.setup
|
||||
|
||||
Once the install process has competed, you can launch the MsSpec environnement by typing::
|
||||
|
||||
msspec
|
||||
|
||||
|
||||
|
||||
|
||||
.. _win10_install_notes:
|
||||
|
||||
For Windows 10
|
||||
==============
|
||||
|
||||
Windows users can install MsSpec through the Windows Subsystem for Linux
|
||||
(also known as bash Ubuntu).
|
||||
|
||||
Below is a short description of the steps to enable this feature. You can
|
||||
have more details `here <https://docs.microsoft.com/en-us/windows/wsl/install-win10>`_.
|
||||
|
||||
Install the Windows Subsystem for Linux
|
||||
---------------------------------------
|
||||
|
||||
1. Turn on Developer Mode
|
||||
Open **Settings -> Update and Security -> For developers**
|
||||
|
||||
.. figure:: win_step1.png
|
||||
:align: center
|
||||
:width: 70%
|
||||
|
||||
Select the Developer Mode radio button
|
||||
|
||||
2. Open a command prompt. Run::
|
||||
|
||||
bash
|
||||
|
||||
.. figure:: win_step2.png
|
||||
:align: center
|
||||
:width: 70%
|
||||
|
||||
Type "y" to accept the license. An Ubuntu system will be installed.
|
||||
|
||||
|
||||
3. Launch a new Ubuntu shell by running *bash* from the command prompt.
|
||||
If this is the first time that the Windows Subsystem for Linux is installed,
|
||||
you will be prompted to create a UNIX user. Simply follow the instructions.
|
||||
This UNIX username and password may be different from your Windows username
|
||||
and password.
|
||||
|
||||
Install an X server
|
||||
-------------------
|
||||
|
||||
To allow graphical windows to popup in this Linux environnement, you need to install
|
||||
an X server. **Xming** is a good choice. Go to `this website <http://www.straightrunning.com/XmingNotes/>`_
|
||||
and download and install the public version 6.9.0.31.
|
||||
|
||||
Don't forget to start the server after the install. You can configure it to always run automatically at
|
||||
the startup.
|
||||
|
||||
Install MsSpec
|
||||
--------------
|
||||
|
||||
Open a Windows command prompt and launch *bash*. For the Xming server to work, you need to modify
|
||||
the DISPLAY environnement variable. Enter this command::
|
||||
|
||||
echo "export DISPLAY=:0" >> ~/.bashrc && source ~/.bashrc
|
||||
|
||||
Then you can launch the setup program::
|
||||
|
||||
cd /where/the/setup/program/was/downloaded
|
||||
sh ./MsSpec-version.setup
|
||||
|
||||
where *version* is the actual version number
|
||||
|
||||
|
||||
|
||||
.. _linux_install_notes:
|
||||
|
||||
For Linux
|
||||
=========
|
||||
|
||||
Ubuntu and Mageia based dstributions are supported by the installer, but any Linux
|
||||
flavour should be able to run MsSpec as long as you have permissions to install
|
||||
all requirements.
|
||||
|
||||
You just need to open a terminal window and execute the setup program.
|
||||
|
||||
|
||||
.. _mac_install_notes:
|
||||
|
||||
For Mac 0S
|
||||
==========
|
||||
|
||||
.. note::
|
||||
to be written...
|
|
@ -0,0 +1,99 @@
|
|||
############
|
||||
Introduction
|
||||
############
|
||||
|
||||
Spectroscopies are among the most widely used techniques to study the physical
|
||||
and chemical properties of materials. They are now extensively present in many
|
||||
fields of science such as physics, chemistry or biology. The term
|
||||
“spectroscopy” which was still characterizing the study of light by means of a
|
||||
prism in the 19th century, has now, since the advent of quantum theory, a much
|
||||
wider meaning. Indeed, according to the 15th edition of The New Encyclopaedia
|
||||
Britannica, “spectroscopy is the study of the absorption and emission of light
|
||||
and other radiation, as related to the wavelength of the radiation”. If we add
|
||||
scattering to the two previous physical processes, the quantum nature of
|
||||
particles makes this definition cover most types of experiment that can be
|
||||
performed nowadays. Such a typical experiment is sketched below. It should
|
||||
be noted that the incoming and outgoing particles are not necessarily the same.
|
||||
When they are of an identical nature, the corresponding technique can be
|
||||
performed either in the reflection or in the transmission mode.
|
||||
|
||||
.. figure:: intro_fig1.png
|
||||
:align: center
|
||||
:width: 50%
|
||||
|
||||
Typical spectroscopic experiment
|
||||
|
||||
The idea behind these spectroscopies is that information about the sample can
|
||||
be obtained from the analysis of the outgoing particles. Depending on the type
|
||||
of spectroscopy, this information can be related to the crystallographic
|
||||
structure, to the electronic structure or to the magnetic structure of the
|
||||
sample. Or it can be about a reaction that takes place within the sample. With
|
||||
this in mind, the type and energy of the detected particles will directly
|
||||
determine the region of the sample from which this information can be traced
|
||||
back, and therefore the sensitivity of the technique to the bulk or the
|
||||
surface. For instance, low-energy electrons or ions will not travel much more
|
||||
than ten interatomic distances in a solid while electromagnetic radiations will
|
||||
be able to emerge from much deeper layers. In diffraction techniques using
|
||||
significantly penetrating particles, surface sensitivity can nevertheless be
|
||||
achieved with grazing incidence angles. Note also that the counterpart to
|
||||
detecting particles with a small mean free path is the necessity to work under
|
||||
ultra high vacuum conditions so that the outgoing particles can effectively
|
||||
reach the detector. The figure below gives the variation of the electron mean free path
|
||||
:math:`\lambda_e` in solids as a function of the electron kinetic energy. We see
|
||||
clearly here that in the range 10–1000 eV, electrons coming from within a
|
||||
sample do not originate from much deeper than 5 to 20 Angströms.
|
||||
As a consequence, spectroscopies detecting
|
||||
electrons in this energy range will be essentially sensitive to the surface structure
|
||||
as the particle detected will carry information from the very topmost
|
||||
layers.
|
||||
|
||||
.. figure:: intro_fig2.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
The electron mean free path as a function of the energy
|
||||
|
||||
Although, as we have just seen, many techniques can provide information
|
||||
on a sample and its surface (if any), we will mainly restrict ourselves here
|
||||
to some of them specifically related to synchrotron radiation: x-ray spectroscopies.
|
||||
X-ray spectroscopies are characterized by the fact that the incoming
|
||||
beam is composed of photons in the range of about 100 eV to 10 keV. Higher
|
||||
energies, in the :math:`\gamma`-ray region, will not be considered here as in this latter range
|
||||
photons will be scattered significantly not only by the electrons but also by
|
||||
the nuclei [2] giving rise to entirely different spectroscopies such as Mössbauer
|
||||
spectroscopy. The next, taken from [3], gives a sketch of the electromagnetic
|
||||
spectrum with some common photon sources and the spectroscopies corresponding
|
||||
to the various energy ranges.
|
||||
|
||||
.. figure:: intro_fig3.png
|
||||
:align: center
|
||||
:width: 70%
|
||||
|
||||
The electromagnetic spectrum, along with the common photon sources and
|
||||
some spectroscopies based on photons.
|
||||
|
||||
|
||||
.. seealso::
|
||||
|
||||
*This introduction is taken from:*
|
||||
|
||||
X-ray and Electron Spectroscopies: An Introduction
|
||||
Didier Sébilleau, Lect. Notes Phys. **697**, p15–57 (2006)
|
||||
`[doi] <http://link.springer.com/chapter/10.1007/3-540-33242-1_2>`__
|
||||
|
||||
*For a more complete theoretical background about multiple scattering, see (and references herein):*
|
||||
|
||||
Multiple-scattering approach with complex potential in the interpretation of electron and photon spectroscopies
|
||||
D. Sebilleau, R. Gunnella, Z-Y Wu, S Di Matteo and C. R. Natoli,
|
||||
J. Phys.: Condens. Matter **18**, R175-228 (2006)
|
||||
`[doi] <https://doi.org/10.1088/0953-8984/18/9/R01>`__
|
||||
|
||||
*For a description of the MsSpec code package, see:*
|
||||
|
||||
MsSpec-1.0: A multiple scattering package for electron spectroscopies in material science
|
||||
D. Sébilleau, C. R. Natoli, G. M.Gavaza, H. Zhao, F. Da Pieve and K. Hatada,
|
||||
Comput. Phys. Commun., **182** (12), p2567-2579 (2011)
|
||||
`[doi] <https://doi.org/10.1016/j.cpc.2011.07.012>`__
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 13 KiB |
|
@ -0,0 +1,6 @@
|
|||
.. .. :orphan:
|
||||
|
||||
.. automodule:: calcio
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,5 @@
|
|||
:orphan:
|
||||
|
||||
.. automodule:: calculator
|
||||
:members: MSSPEC, _MSCALCULATOR, _PED, _EIG
|
||||
:show-inheritance:
|
|
@ -0,0 +1,6 @@
|
|||
:orphan:
|
||||
|
||||
.. automodule:: config
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,6 @@
|
|||
:orphan:
|
||||
|
||||
.. automodule:: data.electron_be
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,6 @@
|
|||
:orphan:
|
||||
|
||||
.. automodule:: iodata
|
||||
:members: Data, DataSet, _DataSetView
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,6 @@
|
|||
:orphan:
|
||||
|
||||
.. automodule:: misc
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,6 @@
|
|||
:orphan:
|
||||
|
||||
.. automodule:: parameters
|
||||
:members:
|
||||
:undoc-members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,5 @@
|
|||
:orphan:
|
||||
|
||||
.. automodule:: utils
|
||||
:members:
|
||||
:show-inheritance:
|
|
@ -0,0 +1,23 @@
|
|||
.. _allparameters:
|
||||
|
||||
#############################
|
||||
All the simulation parameters
|
||||
#############################
|
||||
|
||||
|
||||
.. contents:: Contents
|
||||
:depth: 2
|
||||
:local:
|
||||
|
||||
Common parameters
|
||||
*****************
|
||||
|
||||
.. include:: spectroscopies/common_parameters.inc
|
||||
|
||||
Spectroscopy parameters
|
||||
***********************
|
||||
|
||||
|
||||
.. include:: spectroscopies/ped/ped_parameters.inc
|
||||
|
||||
.. include:: spectroscopies/eig/eig_parameters.inc
|
|
@ -0,0 +1,73 @@
|
|||
# coding: utf8
|
||||
|
||||
import os, fnmatch
|
||||
from datetime import datetime
|
||||
from pytz import timezone
|
||||
import re
|
||||
from lxml import etree
|
||||
import argparse
|
||||
|
||||
|
||||
opt_defaults = {'include': ".*\.html|.*\.pdf",
|
||||
'exclude': "google.*\.html",
|
||||
'timezone': 'Europe/Paris'}
|
||||
|
||||
|
||||
parser = argparse.ArgumentParser(description="Create an XML sitemap file from a source html folder.")
|
||||
parser.add_argument("--url", help="The website address.")
|
||||
parser.add_argument("--path", help="The root folder to explore.")
|
||||
parser.add_argument("--include", help="The include regexp pattern.", default=opt_defaults['include'])
|
||||
parser.add_argument("--exclude", help="The exclude regexp pattern.", default=opt_defaults['exclude'])
|
||||
parser.add_argument("--timezone", help="The time zone.", default=opt_defaults['timezone'])
|
||||
parser.add_argument("--priority", help="The page priority.", type=float, default=.8)
|
||||
parser.add_argument("--changefreq", help="How often the page is likely to change.", default="monthly",
|
||||
choices=["always", "hourly", "daily", "weekly", "monthly", "yearly", "never"])
|
||||
parser.add_argument("output", help="The output file name.")
|
||||
|
||||
opts = parser.parse_args()
|
||||
|
||||
defaults = {'loc': '', 'lastmod': '', 'priority': "{:.1f}".format(opts.priority), 'changefreq': opts.changefreq}
|
||||
results = []
|
||||
|
||||
for root, dirs, files in os.walk(opts.path):
|
||||
for fn in files:
|
||||
if re.match(opts.include, fn) and not re.match(opts.exclude, fn):
|
||||
fullfn = os.path.join(root, fn)
|
||||
loc = os.path.join(opts.url, fn)
|
||||
dt = datetime.fromtimestamp(os.stat(fullfn).st_ctime, tz=timezone(opts.timezone))
|
||||
tzd = dt.strftime("%z")
|
||||
tzd = tzd[:-2] + ":" + tzd[-2:]
|
||||
lastmod = dt.strftime("%Y-%m-%dT%H:%M") + tzd
|
||||
|
||||
data = defaults.copy()
|
||||
data.update(loc=loc, lastmod=lastmod)
|
||||
|
||||
results.append(data)
|
||||
|
||||
|
||||
# convert to xml
|
||||
class NameSpace:
|
||||
xsi = "http://www.w3.org/2001/XMLSchema-instance"
|
||||
|
||||
|
||||
root = etree.Element("urlset", xmlns="http://www.sitemaps.org/schemas/sitemap/0.9", nsmap={'xsi': NameSpace.xsi})
|
||||
root.attrib[etree.QName(NameSpace.xsi, 'schemaLocation')]= ("http://www.sitemaps.org/schemas/sitemap/0.9 "
|
||||
"http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd")
|
||||
|
||||
|
||||
comment = etree.Comment("Auto-generated on {}".format(datetime.now().ctime()))
|
||||
root.insert(1, comment)
|
||||
|
||||
for data in results:
|
||||
url_el = etree.SubElement(root, "url")
|
||||
loc_el = etree.SubElement(url_el, "loc")
|
||||
lastmod_el = etree.SubElement(url_el, "lastmod")
|
||||
changefreq_el = etree.SubElement(url_el, "changefreq")
|
||||
priority_el = etree.SubElement(url_el, "priority")
|
||||
loc_el.text = data['loc']
|
||||
lastmod_el.text = data['lastmod']
|
||||
priority_el.text = data['priority']
|
||||
changefreq_el.text = data['changefreq']
|
||||
|
||||
with open(opts.output, 'w') as fd:
|
||||
fd.write(etree.tostring(root, encoding='UTF-8', xml_declaration=True, pretty_print=True).decode('utf8'))
|
|
@ -0,0 +1,222 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset
|
||||
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
|
||||
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
||||
<!-- created with Free Online Sitemap Generator www.xml-sitemaps.com -->
|
||||
|
||||
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>1.00</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/genindex.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/py-modindex.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/intro.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/downloads.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/spectroscopies/spectro.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/parameters.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/tutorials/index.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/contributors.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/faq/index.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/todo.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/search.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.80</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/index.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/iodata.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/calculator.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/parameters.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/misc.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/calcio.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/utils.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/config.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/modules/electron_be.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_downloads/MsSpec-1.2rc3.post154.pdf</loc>
|
||||
<lastmod>2018-12-29T10:38:59+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/spectroscopies/ped/ped.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/spectroscopies/aed/aed.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/spectroscopies/apecs/apecs.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/spectroscopies/exafs/exafs.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/spectroscopies/leed/leed.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/spectroscopies/eig/eig.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/tutorials/copper/tuto_ped_copper.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/tutorials/nickel_chain/tuto_ped_nickel_chain.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/tutorials/RhO/tuto_ped_RhO.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/tutorials/temperature/tuto_ped_temperature.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/tutorials/AlN/tuto_cluster.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/faq/hemispherical_cluster/hemispherical_cluster.html</loc>
|
||||
<lastmod>2018-12-29T10:40:37+00:00</lastmod>
|
||||
<priority>0.64</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/iodata.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.51</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/calculator.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.51</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/parameters.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.51</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/misc.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.51</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/calcio.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.51</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/utils.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.51</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/config.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.51</priority>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://msspec.cnrs.fr/_modules/index.html</loc>
|
||||
<lastmod>2018-12-29T10:40:38+00:00</lastmod>
|
||||
<priority>0.41</priority>
|
||||
</url>
|
||||
|
||||
|
||||
</urlset>
|
|
@ -0,0 +1,5 @@
|
|||
********************************
|
||||
Auger Electron Diffraction (AED)
|
||||
********************************
|
||||
|
||||
.. include:: ../not_available.rst
|
|
@ -0,0 +1,5 @@
|
|||
******************************************************
|
||||
Auger Photo-Electron Conincidence Spectroscopy (APECS)
|
||||
******************************************************
|
||||
|
||||
.. include:: ../not_available.rst
|
|
@ -0,0 +1,5 @@
|
|||
******************************
|
||||
Eigen values calculation (EIG)
|
||||
******************************
|
||||
|
||||
.. include:: ../not_available.rst
|
|
@ -0,0 +1,5 @@
|
|||
************************************************
|
||||
Extended X-Ray Absorption Fine Structure (EXAFS)
|
||||
************************************************
|
||||
|
||||
.. include:: ../not_available.rst
|
|
@ -0,0 +1,5 @@
|
|||
**************************************
|
||||
Low-Energy Electron Diffraction (LEED)
|
||||
**************************************
|
||||
|
||||
.. include:: ../not_available.rst
|
|
@ -0,0 +1,6 @@
|
|||
.. warning::
|
||||
|
||||
For the moment, this spectroscopy mode is not available with the Python interface.
|
||||
|
||||
You have to run the classical version of MsSpec to perform such a calculation.
|
||||
Please see ??? for the details on how to run MsSpec like this.
|
After Width: | Height: | Size: 2.3 MiB |
|
@ -0,0 +1,24 @@
|
|||
# coding: utf8
|
||||
|
||||
from ase.build import bulk
|
||||
from msspec.utils import *
|
||||
|
||||
a = 4.21 # The lattice parameter
|
||||
epsilon = 0.01 # a small usefull value
|
||||
MgO = bulk('MgO', a=a, crystalstructure='rocksalt', cubic=True) # ASE magic here
|
||||
|
||||
# shaping the cluster in half sphere
|
||||
MgO = MgO.repeat((10, 10, 10))
|
||||
center_cluster(MgO)
|
||||
MgO = cut_plane(MgO, z=epsilon)
|
||||
MgO = cut_sphere(MgO, radius=3.*a + epsilon)
|
||||
|
||||
print len(MgO)
|
||||
raise
|
||||
|
||||
from ase.io import write
|
||||
MgO.rotate(-65, 'x')
|
||||
for a in range(0, 360, 5):
|
||||
write('img_{:03d}.pov'.format(a), MgO, camera_type='perspective', display=False, rotation='{:d}y'.format(a),
|
||||
transparent=True)
|
||||
|
|
@ -0,0 +1,197 @@
|
|||
********************************
|
||||
Photo-Electron Diffraction (PED)
|
||||
********************************
|
||||
|
||||
Introduction
|
||||
============
|
||||
In PhotoElectron Diffraction, an incoming photon, with an energy in the X-ray range is absorbed by
|
||||
an atom of the sample. A core electron of the absorbing atom is emitted and will eventually escape
|
||||
from the sample after many scattering events toward a detector. This photo-electron is detected at
|
||||
a given kinetic energy and for a given position (polar angle and azimutal angle) of the detector with
|
||||
respect to the sample (see figure below). The distribution of electrons as a function of the sample
|
||||
polar or azimutal angles contains chemically resolved informations about the crystallography in the
|
||||
immediate proximity of the surface sample. This spectroscopy can also be done on Auger electrons. In
|
||||
this case, the technique is named Auger Electron Diffraction.
|
||||
|
||||
.. _ped_full_picture:
|
||||
|
||||
.. figure:: ../../full_picture.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
The Full picture of a photoelectron diffraction process. a) The geometry of
|
||||
the experiment. b) A view of the multiple scattering process and c) Atomic
|
||||
energy level sketch of the normal and Auger photoemission process.
|
||||
|
||||
|
||||
Quick reference
|
||||
===============
|
||||
|
||||
To quickly start with MsSpec and Python, the easiest way is to read the :ref:`tutorials` section.
|
||||
Here we summurize all the steps to perform a PED simulation:
|
||||
|
||||
1. :ref:`Build your cluster <step1>` (thanks to the ASE python package)
|
||||
2. :ref:`Create a calculator <step2>` with :py:func:`MSSPEC`
|
||||
3. :ref:`Set the parameters <step3>` of your calculation.
|
||||
4. :ref:`Attach <step4>` your cluster to the calculator
|
||||
5. :ref:`Choose the absorber <step5>`
|
||||
6. :ref:`Compute <step6>` a scan
|
||||
7. :ref:`Plot <step7>` the results
|
||||
|
||||
|
||||
.. _step1:
|
||||
|
||||
Build your cluster
|
||||
------------------
|
||||
|
||||
Building a cluster means creating a list of atoms with their given positions in x, y, z coordinates.
|
||||
It is easily done thanks to the `ase Python package <https://wiki.fysik.dtu.dk/ase/index.html>`_.
|
||||
|
||||
Because most of spectroscopies have a source and a detector in the same hemispherical space, a cluster
|
||||
is often shaped as an half sphere. To create such atomic arrangements, special helper functions are provided
|
||||
in the :py:mod:`utils` module.
|
||||
|
||||
For example to create an MgO cluster:
|
||||
|
||||
.. literalinclude:: MgO.py
|
||||
:linenos:
|
||||
:lines: 1-15
|
||||
|
||||
.. only:: html
|
||||
|
||||
will produce a cluster of 519 atoms like this:
|
||||
|
||||
.. figure:: MgO.gif
|
||||
:align: center
|
||||
:width: 60%
|
||||
|
||||
The shape of a typical (yet quite large) cluster used for a calculation (519 atoms of MgO).
|
||||
|
||||
|
||||
.. only:: latex
|
||||
|
||||
will produce a cluster of 519 atoms like this:
|
||||
|
||||
.. figure:: MgO.png
|
||||
:align: center
|
||||
:width: 60%
|
||||
|
||||
The shape of a typical (yet quite large) cluster used for a calculation (519 atoms of MgO).
|
||||
|
||||
|
||||
.. _step2:
|
||||
|
||||
Create a calculator
|
||||
-------------------
|
||||
|
||||
To create a claculator, you will use the :py:func:`calculator.MSSPEC` function. This function takes 4
|
||||
keyword arguments:
|
||||
|
||||
- **spectroscopy**, to specify the kind of spectroscopy. This is a string and
|
||||
can be one of 'PED' for PhotoElectron Diffraction, 'AED' for Auger Electron
|
||||
Diffraction, 'APECS' for Auger PhotoElectron Coincidence Spectroscopy or
|
||||
'EXAFS' for Extended X-Ray Absorption Fine Structure.
|
||||
- **algorithm**, to choose between the matrix inversion method with the string
|
||||
'inversion' (best suited for lower kinetic energies < 100 eV), or the series
|
||||
expansion technique with 'expansion' or the correlation-expansion with
|
||||
'correlation'.
|
||||
- **polarization** to specify the light polarization. 'linear_qOz' or 'linear_xOy'
|
||||
for a linearly polarized light with the polarization vector in the :math:`(\vec{q}Oz)`
|
||||
or in the :math:`(xOy)` plane respectively. Finally choose 'circular' for circularly
|
||||
polarized light.
|
||||
- **folder**. Enter here the name of the folder used for temporary files.
|
||||
|
||||
The function returns a calculator object, so for example. To create a calculator for PhotoElectron
|
||||
Diffraction with the matrix inversion method:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
calc = MSSPEC(spectroscopy = 'PED', algorithm = 'inversion')
|
||||
|
||||
|
||||
.. _step3:
|
||||
|
||||
Set the parameters
|
||||
------------------
|
||||
|
||||
A calculator has many parameters. They fall into 4 categories:
|
||||
|
||||
* Muffin-tin parameters, to tweak the potential used for the phase shifts calculation
|
||||
* T-Matrix parameters, to control the T-matrix calculation
|
||||
* Calculation parameters, to tune the multiple scattering calculation: add atomic vibrations,
|
||||
add some filters to speed up the process, control the parameters of the series expansion method...
|
||||
* Spectroscopy dependent parameters. These parameters control -- for example -- the light source,
|
||||
the detector...
|
||||
|
||||
Each set of parameters is accessible through properties of the calculator object. For example, to tweak
|
||||
the interstitial value of the Muffin Tin potential, use:
|
||||
|
||||
>>> calc.muffintin_parameters.interstitial_potential = 12.1
|
||||
|
||||
To change the source energy, use:
|
||||
|
||||
>>> calc.source_parameters.energy = 1253.0
|
||||
|
||||
All options are detailed in :ref:`this section <allparameters>`
|
||||
|
||||
|
||||
.. _step4:
|
||||
|
||||
Attach your cluster
|
||||
-------------------
|
||||
|
||||
Very easy! Juste use the :py:func:`set_atoms` function like this:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
calc.set_atoms(cluster)
|
||||
|
||||
.. _step5:
|
||||
|
||||
Choose the absorber
|
||||
-------------------
|
||||
|
||||
Set the absorber attribute of your cluster to the index of the atom you want it to be the absorber.
|
||||
For example if the first atom of your cluster is the absorber
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
cluster.absorber = 0
|
||||
|
||||
The best way is to use a function to find the index based on the xyz coordinates of the atom. For
|
||||
example to choose the closest atom of the origin:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
cluster.absorber = get_atom_index(cluster, 0, 0, 0)
|
||||
|
||||
:py:func:`get_atom_index` is in the :py:mod:`utils` package so do not forget to import it. The
|
||||
first argument is the cluster you will look for and the 3 next parameters are the x, y and z
|
||||
coordinates.
|
||||
|
||||
.. _step6:
|
||||
|
||||
Compute
|
||||
-------
|
||||
|
||||
You can compute 5 kinds of scans in PED spectroscopy:
|
||||
|
||||
* A polar scan, with the :py:func:`get_theta_scan` method of the calculator object
|
||||
* An azimutal scan, with the :py:func:`MSSPEC.get_phi_scan` method
|
||||
* A stereographic scan, with the :py:func:`MSSPEC.get_theta_phi_scan` method
|
||||
* An energy scan, with the :py:func:`MSSPEC.get_energy_scan` method
|
||||
* The scattering factor, with the :py:func:`MSSPEC.get_scattering_factors` method
|
||||
|
||||
All these functions are used and detailed in the :ref:`tutorials <tutorials>`.
|
||||
|
||||
.. _step7:
|
||||
|
||||
Plot the results
|
||||
----------------
|
||||
|
||||
Normally, the output of the previous functions is a :py:class:`iodata.Data` object. You can see
|
||||
the results by typing:
|
||||
|
||||
>>> data = calc.get_theta_scan(...) # a polar scan for example
|
||||
>>> data.view() # will popup a graphical window
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
##############
|
||||
Spectroscopies
|
||||
##############
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
ped/ped
|
||||
aed/aed
|
||||
apecs/apecs
|
||||
exafs/exafs
|
||||
leed/leed
|
||||
eig/eig
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,219 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) --><svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="301.37326mm" height="150.32599mm" viewBox="0 0 301.37326 150.32598" version="1.1" id="svg8" sodipodi:docname="title.svg" style="enable-background:new" inkscape:version="0.92.2 (5c3e80d, 2017-08-06)">
|
||||
<defs id="defs2">
|
||||
<linearGradient inkscape:collect="always" id="linearGradient5962">
|
||||
<stop style="stop-color:#ffffff;stop-opacity:0.85714287" offset="0" id="stop5958"/>
|
||||
<stop style="stop-color:#ffffff;stop-opacity:0.31122449" offset="1" id="stop5960"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient5835">
|
||||
<stop style="stop-color:#004371;stop-opacity:1;" offset="0" id="stop5831"/>
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop5833"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient4564-7">
|
||||
<stop style="stop-color:#8e8e8e;stop-opacity:1" offset="0" id="stop4560"/>
|
||||
<stop style="stop-color:#ffffff;stop-opacity:1" offset="1" id="stop4562"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4564-7" id="linearGradient4514" x1="58.972996" y1="49.015751" x2="59.154068" y2="26.337181" gradientUnits="userSpaceOnUse" gradientTransform="translate(10.381061,80.870041)"/>
|
||||
<filter inkscape:label="Apparition" inkscape:menu="Blurs" inkscape:menu-tooltip="Edges are partly feathered out" style="color-interpolation-filters:sRGB" id="filter4611">
|
||||
<feMorphology radius="4" in="SourceGraphic" result="result0" id="feMorphology4605"/>
|
||||
<feGaussianBlur in="result0" stdDeviation="8" result="result91" id="feGaussianBlur4607"/>
|
||||
<feComposite operator="in" in="SourceGraphic" in2="result91" id="feComposite4609"/>
|
||||
</filter>
|
||||
<filter inkscape:collect="always" style="color-interpolation-filters:sRGB" id="filter5665" x="-0.029506898" width="1.0590138" y="-0.1285961" height="1.2571923">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="1.1495044" id="feGaussianBlur5667"/>
|
||||
<feBlend inkscape:collect="always" mode="overlay" in2="BackgroundImage" id="feBlend5669"/>
|
||||
</filter>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4564-7" id="linearGradient5733" gradientUnits="userSpaceOnUse" gradientTransform="translate(70.929414,60.911197)" x1="58.972996" y1="49.015751" x2="59.154068" y2="26.337181"/>
|
||||
<filter inkscape:collect="always" style="color-interpolation-filters:sRGB" id="filter5792" x="-0.035265453" width="1.0705309" y="-0.075129762" height="1.1502595">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="0.53456858" id="feGaussianBlur5794"/>
|
||||
</filter>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4564-7" id="linearGradient5812" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.5580433,0,0,1.5580433,130.60604,76.559167)" x1="58.972996" y1="49.015751" x2="59.154068" y2="26.337181"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient5835" id="linearGradient5837" x1="200.18488" y1="228.84627" x2="200.45215" y2="96.280594" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1,0,0,0.52096691,-3.2072347,41.946135)"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient5962" id="linearGradient5964" x1="261.8537" y1="157.31599" x2="239.34149" y2="134.75891" gradientUnits="userSpaceOnUse"/>
|
||||
<radialGradient r="220.91101" fy="444.57248" fx="205.52562" cy="444.57248" cx="205.52562" spreadMethod="pad" gradientTransform="matrix(0.854086,0.989918,-0.732768,0.632222,355.7578,-40.26915)" gradientUnits="userSpaceOnUse" id="radialGradient18134" xlink:href="#linearGradient2505" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient2505">
|
||||
<stop id="stop2499" offset="0" style="stop-color:#f9f9f9;stop-opacity:1"/>
|
||||
<stop style="stop-color:#ffffff;stop-opacity:0.990991" offset="0.59999979" id="stop2501"/>
|
||||
<stop id="stop2503" offset="1" style="stop-color:#ffffff;stop-opacity:0.0045045"/>
|
||||
</linearGradient>
|
||||
<filter id="filter11536" inkscape:collect="always">
|
||||
<feGaussianBlur id="feGaussianBlur11538" stdDeviation="2.2348973" inkscape:collect="always"/>
|
||||
</filter>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18138" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.08675742,0,0,0.08675742,265.38358,83.762581)"/>
|
||||
<linearGradient id="linearGradient17684">
|
||||
<stop style="stop-color:white;stop-opacity:1;" offset="0" id="stop17678"/>
|
||||
<stop id="stop17680" offset="0.61656123" style="stop-color:#ff5451;stop-opacity:1"/>
|
||||
<stop style="stop-color:#801d08;stop-opacity:1" offset="1" id="stop17682"/>
|
||||
</linearGradient>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18140" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10045591,0,0,0.10045591,258.98855,82.874188)"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.08468443,-0.01655451,0.01655451,0.08468443,271.58716,83.508144)" gradientUnits="userSpaceOnUse" id="radialGradient18142" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient17668">
|
||||
<stop style="stop-color:#dde3f8;stop-opacity:1;" offset="0" id="stop17662"/>
|
||||
<stop id="stop17664" offset="0.59999979" style="stop-color:#094976;stop-opacity:1"/>
|
||||
<stop style="stop-color:#000000;stop-opacity:1" offset="1" id="stop17666"/>
|
||||
</linearGradient>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09554143,-0.01867689,0.01867689,0.09554143,267.11146,82.729168)" gradientUnits="userSpaceOnUse" id="radialGradient18144" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18146" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.1141544,0,0,0.1141544,267.06598,81.914853)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18148" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.1278529,0,0,0.1278529,261.8788,82.163376)"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09554143,-0.01867689,0.01867689,0.09554143,280.03303,83.478259)" gradientUnits="userSpaceOnUse" id="radialGradient18150" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09280101,-0.01814118,0.01814118,0.09280101,280.44294,84.300477)" gradientUnits="userSpaceOnUse" id="radialGradient18152" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09077573,0.02432333,-0.02432333,0.09077573,214.12277,199.41908)" gradientUnits="userSpaceOnUse" id="radialGradient6861" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09817741,-0.01919218,0.01919218,0.09817741,277.91766,85.314089)" gradientUnits="userSpaceOnUse" id="radialGradient18156" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.08468443,-0.01655451,0.01655451,0.08468443,295.09495,84.468901)" gradientUnits="userSpaceOnUse" id="radialGradient18158" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09554143,-0.01867689,0.01867689,0.09554143,292.96014,83.877207)" gradientUnits="userSpaceOnUse" id="radialGradient18160" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.08909124,-0.01741598,0.01741598,0.08909124,275.20286,92.594803)" gradientUnits="userSpaceOnUse" id="radialGradient18162" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09676828,-0.01891672,0.01891672,0.09676828,272.42859,92.633423)" gradientUnits="userSpaceOnUse" id="radialGradient18164" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10606921,-0.02073491,0.02073491,0.10606921,268.76784,92.871496)" gradientUnits="userSpaceOnUse" id="radialGradient18166" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.08602034,-0.01681566,0.01681566,0.08602034,288.35381,93.968209)" gradientUnits="userSpaceOnUse" id="radialGradient18168" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09830364,-0.01921686,0.01921686,0.09830364,285.18851,93.665759)" gradientUnits="userSpaceOnUse" id="radialGradient18170" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.11058681,-0.02161803,0.02161803,0.11058681,282.02322,93.769791)" gradientUnits="userSpaceOnUse" id="radialGradient18172" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.08909124,-0.01741598,0.01741598,0.08909124,300.30251,93.930093)" gradientUnits="userSpaceOnUse" id="radialGradient18174" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10137442,-0.01981715,0.01981715,0.10137442,298.26078,93.972699)" gradientUnits="userSpaceOnUse" id="radialGradient18176" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.11058681,-0.02161803,0.02161803,0.11058681,297.01031,94.449636)" gradientUnits="userSpaceOnUse" id="radialGradient18178" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.11058681,-0.02161803,0.02161803,0.11058681,297.94664,95.76052)" gradientUnits="userSpaceOnUse" id="radialGradient18180" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18182" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,251.44648,90.65954)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18184" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,249.94829,91.783147)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18186" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,247.98199,93.187673)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18188" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.09745658,0,0,0.09745658,266.84457,92.50844)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18190" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,263.80622,92.906748)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18192" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.09745658,0,0,0.09745658,279.57888,93.351101)"/>
|
||||
<radialGradient inkscape:collect="always" xlink:href="#linearGradient17684" id="radialGradient17686" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.10391418,0,0,0.10391418,277.75773,94.030354)" cx="378" cy="105.86218" fx="378" fy="105.86218" r="14.8125"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18196" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,278.41318,95.622163)"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09216196,-0.01801626,0.01801626,0.09216196,266.82712,101.14959)" gradientUnits="userSpaceOnUse" id="radialGradient18198" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09830364,-0.01921686,0.01921686,0.09830364,263.37175,102.62251)" gradientUnits="userSpaceOnUse" id="radialGradient18200" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.08909124,-0.01741598,0.01741598,0.08909124,280.54008,102.52007)" gradientUnits="userSpaceOnUse" id="radialGradient18202" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.09830364,-0.01921686,0.01921686,0.09830364,277.60417,103.65246)" gradientUnits="userSpaceOnUse" id="radialGradient18204" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.08909124,-0.01741598,0.01741598,0.08909124,293.18071,103.36277)" gradientUnits="userSpaceOnUse" id="radialGradient18206" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10137442,-0.01981715,0.01981715,0.10137442,290.76444,104.52894)" gradientUnits="userSpaceOnUse" id="radialGradient18208" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10444526,-0.02041745,0.02041745,0.10444526,268.90536,110.93033)" gradientUnits="userSpaceOnUse" id="radialGradient18210" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="59" fy="467.86218" fx="409.5" cy="467.86218" cx="409.5" spreadMethod="reflect" gradientTransform="matrix(0.04961795,-2.2553614e-8,2.0674133e-8,0.04548308,192.20499,231.05852)" gradientUnits="userSpaceOnUse" id="radialGradient18218" xlink:href="#linearGradient13688" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient13688">
|
||||
<stop id="stop13690" offset="0" style="stop-color:#46fef2;stop-opacity:1;"/>
|
||||
<stop style="stop-color:#468bf2;stop-opacity:0.2767857;" offset="0.13" id="stop13694"/>
|
||||
<stop id="stop13692" offset="1" style="stop-color:#97fe46;stop-opacity:0.3392857;"/>
|
||||
</linearGradient>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18214" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,269.98608,102.36387)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18212" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,256.59636,101.33388)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18220" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,263.05712,94.311277)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18222" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,255.28548,103.3002)"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18224" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,269.89242,104.51744)"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.11058681,-0.02161803,0.02161803,0.11058681,266.15492,93.81931)" gradientUnits="userSpaceOnUse" id="radialGradient18226" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10444526,-0.02041745,0.02041745,0.10444526,260.10372,104.00136)" gradientUnits="userSpaceOnUse" id="radialGradient18228" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.11058681,-0.02161803,0.02161803,0.11058681,282.02322,95.080643)" gradientUnits="userSpaceOnUse" id="radialGradient18230" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10444526,-0.02041745,0.02041745,0.10444526,290.54044,105.71114)" gradientUnits="userSpaceOnUse" id="radialGradient18232" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10444526,-0.02041745,0.02041745,0.10444526,275.36612,105.12495)" gradientUnits="userSpaceOnUse" id="radialGradient18234" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10444526,-0.02041745,0.02041745,0.10444526,282.20697,111.42289)" gradientUnits="userSpaceOnUse" id="radialGradient18236" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="14.8125" fy="105.86218" fx="378" cy="105.86218" cx="378" gradientUnits="userSpaceOnUse" id="radialGradient18136" xlink:href="#linearGradient17684" inkscape:collect="always" gradientTransform="matrix(0.10391418,0,0,0.10391418,262.21442,112.47637)"/>
|
||||
<radialGradient r="38.57143" fy="145.05405" fx="213.50658" cy="145.05405" cx="213.50658" gradientTransform="matrix(0.10444526,-0.02041745,0.02041745,0.10444526,267.6881,113.73935)" gradientUnits="userSpaceOnUse" id="radialGradient18240" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<radialGradient r="24" fy="443.86218" fx="199" cy="443.86218" cx="199" gradientUnits="userSpaceOnUse" id="radialGradient18216" xlink:href="#linearGradient17692" inkscape:collect="always" gradientTransform="matrix(0.28222222,0,0,0.28222222,153.36192,126.15072)"/>
|
||||
<linearGradient id="linearGradient17692" inkscape:collect="always">
|
||||
<stop id="stop17688" offset="0" style="stop-color:#fffef7;stop-opacity:1"/>
|
||||
<stop id="stop17690" offset="1" style="stop-color:#ffffff;stop-opacity:1"/>
|
||||
</linearGradient>
|
||||
<filter inkscape:collect="always" style="color-interpolation-filters:sRGB" id="filter17830" x="-0.2832" width="1.5664001" y="-0.2832" height="1.5664001">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="1.5985066" id="feGaussianBlur17832"/>
|
||||
</filter>
|
||||
<linearGradient y2="441.14627" x2="195.45956" y1="373.93774" x1="252.95045" gradientTransform="matrix(0.05607647,-0.31558843,0.5072045,0.22442376,-26.904282,211.18477)" gradientUnits="userSpaceOnUse" id="linearGradient6803" xlink:href="#linearGradient17840" inkscape:collect="always"/>
|
||||
<linearGradient id="linearGradient17840">
|
||||
<stop style="stop-color:white;stop-opacity:1;" offset="0" id="stop17834"/>
|
||||
<stop id="stop17836" offset="0.69984996" style="stop-color:#ff7300;stop-opacity:1;"/>
|
||||
<stop style="stop-color:#8e300f;stop-opacity:1;" offset="1" id="stop17838"/>
|
||||
</linearGradient>
|
||||
<filter inkscape:collect="always" style="color-interpolation-filters:sRGB" id="filter17947" x="-0.061849739" width="1.1236995" y="-0.058257688" height="1.1165154">
|
||||
<feGaussianBlur inkscape:collect="always" stdDeviation="0.85470564" id="feGaussianBlur17949"/>
|
||||
</filter>
|
||||
<radialGradient r="38.57143" fy="303.04279" fx="-508.9473" cy="303.04279" cx="-508.9473" gradientTransform="matrix(0.1368295,0,0,0.1368295,281.44244,209.12522)" gradientUnits="userSpaceOnUse" id="radialGradient6882" xlink:href="#linearGradient17668" inkscape:collect="always"/>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient1718" id="linearGradient1720" x1="31.096609" y1="86.542191" x2="49.898396" y2="86.410202" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.33684722,0,0,0.33684722,2.8306206,150.92387)"/>
|
||||
<linearGradient inkscape:collect="always" id="linearGradient1718">
|
||||
<stop style="stop-color:#9d9d9d;stop-opacity:1" offset="0" id="stop1714"/>
|
||||
<stop style="stop-color:#ffffff;stop-opacity:0" offset="1" id="stop1716"/>
|
||||
</linearGradient>
|
||||
<linearGradient inkscape:collect="always" xlink:href="#linearGradient1718" id="linearGradient1734" x1="31.096609" y1="86.542191" x2="50.592659" y2="87.203644" gradientUnits="userSpaceOnUse" gradientTransform="translate(24.568452,0.09449405)"/>
|
||||
</defs>
|
||||
<sodipodi:namedview id="base" pagecolor="#959595" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:zoom="2.8" inkscape:cx="129.70963" inkscape:cy="92.284662" inkscape:document-units="mm" inkscape:current-layer="g917" showgrid="false" inkscape:window-width="1920" inkscape:window-height="1011" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1" fit-margin-top="-10" fit-margin-left="5" fit-margin-right="20" fit-margin-bottom="-10"/>
|
||||
<metadata id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
||||
<dc:title/>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g inkscape:label="Calque 1" inkscape:groupmode="layer" id="layer1" transform="translate(-8.198192,-44.935399)">
|
||||
<g id="g6009">
|
||||
<g id="g6037">
|
||||
<g id="g917">
|
||||
<g style="enable-background:new" id="g18066" transform="matrix(1.1123424,0,0,1.1123424,-37.778328,-164.08274)">
|
||||
<path inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="matrix(0.28222222,0,0,-0.28222222,156.95402,384.80912)" d="m 442.23856,475.68707 c 3.69807,93.00673 -44.94791,8.37415 -99.09062,66.82346 -63.184,68.20976 67.60457,52.79282 -25.76264,115.13117 -80.00685,53.41806 -40.17787,-84.77986 -130.96015,-62.96894 -105.942031,25.45314 41.85222,133.43307 -33.581,69.93131 C 88.205025,610.18908 187.99601,586.06215 139.34105,504.36586 82.56119,409.02711 56.851973,534.24581 11.125915,435.62659 -28.056988,351.11926 52.177009,459.13583 90.169541,368.93941 134.50645,263.68108 53.865597,322.83199 135.88564,245.82164 c 70.28342,-65.99058 -61.578998,130.39917 21.72259,103.4766 97.21212,-31.41837 36.42972,-60.11355 141.32214,-54.29896 89.88287,4.98255 -51.91444,60.38777 15.00099,114.16005 78.08965,62.7517 123.99159,-42.01019 128.3072,66.52774 z" inkscape:randomized="0.227" inkscape:rounded="0.85" inkscape:flatsided="false" sodipodi:arg2="0.4041197" sodipodi:arg1="-0.039978687" sodipodi:r2="122.6253" sodipodi:r1="200.15993" sodipodi:cy="449.36218" sodipodi:cx="210" sodipodi:sides="6" id="path16774" style="opacity:0.5;fill:url(#radialGradient18134);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter11536)" sodipodi:type="star"/>
|
||||
<circle r="1.2579826" cy="93.510834" cx="298.65506" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" id="path16778" style="fill:url(#radialGradient18138);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.05422339;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" transform="rotate(26.06101)"/>
|
||||
<circle r="1.4566108" cy="94.161636" cx="297.5134" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" id="path16780" style="fill:url(#radialGradient18140);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06278495;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" transform="rotate(26.06099)"/>
|
||||
<circle r="2.5821714" cy="92.897217" cx="293.40952" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060938)" id="path16782" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18142);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="2.9132197" cy="93.321968" cx="291.7316" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060921)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18144);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16784"/>
|
||||
<circle r="1.6552389" cy="94.741493" cx="310.84421" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060981)" id="path16786" style="fill:url(#radialGradient18146);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07134651;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="1.8538671" cy="96.529205" cx="310.91037" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060973)" style="fill:url(#radialGradient18148);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.07990807;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16788"/>
|
||||
<circle r="2.9132197" cy="94.07106" cx="304.65317" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060921)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18150);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16790"/>
|
||||
<circle r="2.8296597" cy="94.589439" cx="304.3569" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060893)" id="path16792" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18152);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<path inkscape:connector-curvature="0" id="path16794" d="m 233.50751,220.28247 c -0.68202,1.39456 -2.36735,1.97286 -3.76191,1.29085 -1.39456,-0.68201 -1.97286,-2.36735 -1.29085,-3.76191 0.68201,-1.39456 2.36734,-1.97286 3.7619,-1.29085 1.39456,0.68201 1.97287,2.36735 1.29086,3.76191 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient6861);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.58140689;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"/>
|
||||
<circle r="2.9935954" cy="96.199142" cx="303.21707" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060934)" id="path16796" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18156);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="2.5821714" cy="93.857971" cx="316.91733" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060938)" id="path16798" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18158);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="2.9132197" cy="94.470009" cx="317.58026" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060921)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18160);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16800"/>
|
||||
<circle r="2.7165425" cy="102.47246" cx="298.16086" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060977)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18162);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16802"/>
|
||||
<circle r="2.9506285" cy="103.36224" cx="297.36487" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060914)" id="path16804" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18164);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="3.2342293" cy="104.63152" cx="296.10089" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060964)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18166);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16806"/>
|
||||
<circle r="2.6229055" cy="103.50539" cx="310.52045" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060932)" id="path16808" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18168);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="2.9974439" cy="104.56481" cx="310.52042" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060918)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18170);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16810"/>
|
||||
<circle r="3.3719788" cy="106.03069" cx="310.52039" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060938)" id="path16812" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18172);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="2.7165425" cy="103.80775" cx="323.2605" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060977)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18174);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16814"/>
|
||||
<circle r="3.0910773" cy="105.21221" cx="324.384" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060991)" id="path16816" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18176);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="3.3719788" cy="106.71053" cx="325.50748" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060938)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18178);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16818"/>
|
||||
<circle r="3.3719788" cy="108.02142" cx="326.44382" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060938)" id="path16820" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18180);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="1.5067556" cy="102.33556" cx="291.29758" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" style="fill:url(#radialGradient18182);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16822"/>
|
||||
<circle r="1.5067556" cy="103.45917" cx="289.79938" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" id="path16824" style="fill:url(#radialGradient18184);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="1.5067556" cy="104.8637" cx="287.83307" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" style="fill:url(#radialGradient18186);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16826"/>
|
||||
<circle r="1.4131204" cy="103.45888" cx="304.21918" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.06099)" id="path16828" style="fill:url(#radialGradient18188);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06091036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="1.5067556" cy="104.58277" cx="303.65732" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" style="fill:url(#radialGradient18190);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16830"/>
|
||||
<circle r="1.4131204" cy="104.30154" cx="316.95349" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.06099)" style="fill:url(#radialGradient18192);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06091036;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16832"/>
|
||||
<circle r="1.5067556" cy="105.70638" cx="317.60883" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" id="path16834" style="fill:url(#radialGradient17686);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="1.5067556" cy="107.29819" cx="318.26428" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" style="fill:url(#radialGradient18196);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16836"/>
|
||||
<circle r="2.810174" cy="111.36771" cx="290.57639" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060978)" id="path16838" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18198);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="2.9974439" cy="113.52155" cx="288.70367" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060918)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18200);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16840"/>
|
||||
<circle r="2.7165425" cy="112.39772" cx="303.49808" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060977)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18202);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16842"/>
|
||||
<circle r="2.9974439" cy="114.55151" cx="302.9361" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060918)" id="path16844" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18204);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="2.7165425" cy="113.24043" cx="316.1387" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060977)" id="path16846" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18206);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="3.0910773" cy="115.76846" cx="316.8877" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060991)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18208);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16848"/>
|
||||
<circle r="3.1847124" cy="122.51031" cx="295.81995" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060962)" id="path16850" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18210);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<rect inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" id="rect16858" y="237.69038" x="204.96828" height="20.158731" width="21.771429" style="fill:none;stroke:none;stroke-width:0.28222221"/>
|
||||
<rect inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" id="rect16860" y="240.64302" x="188.25761" height="1.3827661" width="1.9307468" style="fill:none;stroke:none;stroke-width:0.28222221"/>
|
||||
<circle r="28.786657" cy="252.33842" cx="212.52354" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" inkscape:transform-center-y="-14.6952" inkscape:transform-center-x="28.525713" id="path16864" style="opacity:0.49816853;fill:url(#radialGradient18218);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.19516377;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/>
|
||||
<circle r="1.5067556" cy="114.03989" cx="309.83716" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" style="fill:url(#radialGradient18214);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16856"/>
|
||||
<circle r="1.5067556" cy="113.0099" cx="296.44745" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" style="fill:url(#radialGradient18212);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path16854"/>
|
||||
<circle r="1.5067556" cy="105.9873" cx="302.9082" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" id="path16866" style="fill:url(#radialGradient18220);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="1.5067556" cy="114.97623" cx="295.13657" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" id="path16868" style="fill:url(#radialGradient18222);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="1.5067556" cy="116.19346" cx="309.7435" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" id="path16870" style="fill:url(#radialGradient18224);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="3.3719788" cy="106.08021" cx="294.6521" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060938)" id="path16872" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18226);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="3.1847124" cy="115.58134" cx="287.01831" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060962)" id="path16874" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18228);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="3.3719788" cy="107.34155" cx="310.52039" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060938)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18230);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956269;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16876"/>
|
||||
<circle r="3.1847124" cy="117.29111" cx="317.45502" mask="none" clip-path="none" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060962)" id="path16878" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18232);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="3.1847124" cy="116.70493" cx="302.2807" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060962)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18234);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16880"/>
|
||||
<circle r="3.1847124" cy="123.00287" cx="309.12155" mask="none" clip-path="none" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060962)" id="path16882" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18236);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate"/>
|
||||
<circle r="1.5067556" cy="124.1524" cx="302.06552" mask="none" clip-path="none" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060928)" id="path16776" style="fill:url(#radialGradient18136);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.06494636;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
|
||||
<circle r="3.1847124" cy="125.31933" cx="294.60269" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" transform="rotate(26.060962)" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient18240);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.39956272;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none;enable-background:accumulate" id="path16884"/>
|
||||
<circle r="6.7733331" cy="251.4185" cx="209.52415" mask="none" clip-path="none" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" id="path16862" style="opacity:0.54578756;fill:url(#radialGradient18216);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.11288889;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter17830)"/>
|
||||
<path sodipodi:nodetypes="zcz" inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="D:\Mes Docs\EQUIPE Surfaces\LUDO\msspec0.1\splash-final 0.2.png" d="m 178.99298,217.43862 c 12.65005,-11.86647 30.85932,33.22099 30.85932,33.22099 0,0 -43.50935,-21.35453 -30.85932,-33.22099 z" style="fill:url(#linearGradient6803);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.14339972;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter17947)" id="path16886"/>
|
||||
<circle r="4.3069592" cy="252.26474" cx="212.84364" mask="none" clip-path="none" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#radialGradient6882);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.44664761;marker:none;enable-background:accumulate" id="path4831"/>
|
||||
</g>
|
||||
<g id="g19727" transform="translate(1.1339286,4.5357143)">
|
||||
<text id="msspec_version_shadow00" y="104.80697" x="85.896515" style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:0.7;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5792)" xml:space="preserve" transform="matrix(1.5580433,0,0,1.5580433,20.094975,-18.343115)"><tspan style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:16.30249977px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" y="104.80697" x="85.896515" id="msspec_version_shadow" sodipodi:role="line">1.6</tspan></text>
|
||||
<text id="msspec_version00" y="144.95068" x="153.92554" style="font-style:normal;font-weight:normal;font-size:16.48929024px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:url(#linearGradient5812);fill-opacity:1;stroke:#000000;stroke-width:1.24643469;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" xml:space="preserve"><tspan style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:25.39999962px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:url(#linearGradient5812);fill-opacity:1;stroke:#000000;stroke-width:1.24643469;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" y="144.95068" x="153.92554" id="msspec_version" sodipodi:role="line">1.6</tspan></text>
|
||||
</g>
|
||||
<g transform="translate(10.205357,-1.3229167)" id="g5847">
|
||||
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:0.7;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter5665)" x="25.310356" y="126.42889" id="text3701-0"><tspan sodipodi:role="line" id="tspan3699-4" x="25.310356" y="126.42889" style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.57777786px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">MsSpec</tspan></text>
|
||||
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;opacity:1;fill:url(#linearGradient4514);fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" x="25.348156" y="124.76579" id="text3701"><tspan sodipodi:role="line" id="tspan3699" x="25.348156" y="124.76579" style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:22.57777786px;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:url(#linearGradient4514);fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">MsSpec</tspan></text>
|
||||
</g>
|
||||
<text id="text5853" y="137.12766" x="133.93088" style="font-style:normal;font-weight:normal;font-size:10.58333302px;line-height:0.5;font-family:sans-serif;text-align:end;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" xml:space="preserve"><tspan id="tspan5859" style="font-size:4.93888903px;line-height:0.5;text-align:end;text-anchor:end;fill:#ffffff;stroke-width:0.26458332" y="137.12766" x="133.93088" sodipodi:role="line">A multiple scattering package for spectroscopies</tspan><tspan id="tspan5863" style="font-size:4.93888903px;line-height:0.5;text-align:end;text-anchor:end;fill:#ffffff;stroke-width:0.26458332" y="142.47444" x="133.93088" sodipodi:role="line">using electrons to probe materials</tspan></text>
|
||||
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:10.53155231px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#626262;fill-opacity:1;stroke:none;stroke-width:0.2632888;" x="10.515821" y="52.373512" id="____dev_version" inkscape:label="#text995"><tspan sodipodi:role="line" id="dev_version" x="10.515821" y="52.373512" style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:5.64444447px;font-family:sans-serif;-inkscape-font-specification:sans-serif;fill:#626262;stroke-width:0.2632888;fill-opacity:1;">post release: 11</tspan></text>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 61 KiB |
|
@ -0,0 +1,5 @@
|
|||
####
|
||||
TODO
|
||||
####
|
||||
|
||||
.. todolist::
|
|
@ -0,0 +1,181 @@
|
|||
# coding: utf-8
|
||||
|
||||
from msspec.utils import *
|
||||
from ase.build import bulk
|
||||
from ase.visualize import view
|
||||
import numpy as np
|
||||
from msspec.calculator import MSSPEC, XRaySource
|
||||
from msspec.iodata import Data
|
||||
from itertools import product
|
||||
|
||||
DATA = None
|
||||
|
||||
def AlN_cluster(emitter_tag, emitter_plane, diameter=0, planes=0, term_anion=True, tetra_down=True):
|
||||
"""
|
||||
This function is a kind of overload of the hemispherical_cluster function with specific attributes
|
||||
to the AlN structure
|
||||
|
||||
:param emitter_tag: An integer that allows to identify the kind of atom to use as the emitter
|
||||
:param emitter_plane: The plane where the emitter is. 0 means the surface.
|
||||
:param diameter: The diameter of the cluster (in Angstroms).
|
||||
:param planes: The total number of planes.
|
||||
:param term_anion: True if the surface plane is anion terminated, False otherwise
|
||||
:param tetra_down: The orientation of the tetrahedral
|
||||
:return:
|
||||
"""
|
||||
|
||||
# create the initial cluster of AlN
|
||||
cluster = bulk('AlN', crystalstructure='wurtzite', a=3.11, c=4.975)
|
||||
|
||||
# tag each atom in the unit cell because they are all in a different chemical/geometrical environment
|
||||
# (0 and 2 for Aluminum's atoms and 1 and 3 for Nitride's atoms)
|
||||
[atom.set('tag', i) for i, atom in enumerate(cluster)]
|
||||
|
||||
# change the orientation of the tetrahedron
|
||||
if not tetra_down:
|
||||
cluster.rotate(180, 'y')
|
||||
|
||||
# From this base pattern, creat an hemispherically shaped cluster
|
||||
cluster = hemispherical_cluster(cluster, emitter_tag=emitter_tag, emitter_plane=emitter_plane, diameter=diameter,
|
||||
planes=planes)
|
||||
|
||||
# Depending on the number of planes above the emitter, the termination may not be the one you wish,
|
||||
# we test this and raise an exception in such a case
|
||||
|
||||
# Get the termination by finding the kind of one atom located at the topmost z coordinate
|
||||
termination = cluster[np.argsort(cluster.get_positions()[:, 2])[-1]].symbol
|
||||
|
||||
# test if the combination of parameters is possible
|
||||
assert (termination == 'N' and term_anion) or (termination == 'Al' and not term_anion), (
|
||||
"This termination isn't compatible with your others parameters, you must change the tag of "
|
||||
"your emitter, the plane of your emitter or your termination")
|
||||
|
||||
return cluster
|
||||
|
||||
def create_clusters(side='Al', emitter='Al', diameter=15, planes=6):
|
||||
clusters = []
|
||||
if side == 'Al':
|
||||
term_anion = tetra_down = False
|
||||
elif side == 'N':
|
||||
term_anion = tetra_down = True
|
||||
|
||||
if emitter == 'Al':
|
||||
tags = (0, 2)
|
||||
level = '2p'
|
||||
ke = 1407.
|
||||
elif emitter == 'N':
|
||||
tags = (1, 3)
|
||||
level = '1s'
|
||||
ke = 1083.
|
||||
|
||||
for emitter_tag, emitter_plane in product(tags, range(0, planes)):
|
||||
nplanes = emitter_plane + 2
|
||||
try:
|
||||
cluster = AlN_cluster(emitter_tag, emitter_plane, diameter=diameter, planes=nplanes, term_anion=term_anion,
|
||||
tetra_down=tetra_down)
|
||||
except AssertionError:
|
||||
continue
|
||||
cluster.absorber = get_atom_index(cluster, 0, 0, 0)
|
||||
cluster.info.update({'emitter_plane': emitter_plane,
|
||||
'emitter_tag': emitter_tag,
|
||||
'emitter': emitter,
|
||||
'side': side,
|
||||
'level': level,
|
||||
'ke': ke})
|
||||
clusters.append(cluster)
|
||||
|
||||
return clusters
|
||||
|
||||
def compute_polar_scans(clusters, theta=np.arange(-20., 80., 1.), phi=0., data=DATA):
|
||||
for ic, cluster in enumerate(clusters):
|
||||
# select the spectroscopy of the calculation and create a new folder for each calculation
|
||||
side, emitter, tag, plane, level, ke = [cluster.info[k] for k in ('side', 'emitter', 'emitter_tag',
|
||||
'emitter_plane', 'level', 'ke')]
|
||||
calc = MSSPEC(spectroscopy='PED', folder='calc{:0>3d}_S{}_E{}_T{:d}_P{:d}'.format(ic, side, emitter, tag,
|
||||
plane))
|
||||
calc.calculation_parameters.scattering_order = max(1, min(4, plane))
|
||||
calc.source_parameters.energy = XRaySource.AL_KALPHA
|
||||
calc.source_parameters.theta = -35
|
||||
calc.detector_parameters.angular_acceptance = 4.
|
||||
calc.detector_parameters.average_sampling = 'medium'
|
||||
calc.calculation_parameters.path_filtering = 'forward_scattering'
|
||||
calc.calculation_parameters.off_cone_events = 1
|
||||
[a.set('forward_angle', 30.) for a in cluster]
|
||||
calc.calculation_parameters.vibrational_damping = 'averaged_tl'
|
||||
[a.set('mean_square_vibration', 0.006) for a in cluster]
|
||||
calc.set_atoms(cluster)
|
||||
|
||||
data = calc.get_theta_scan(level=level, theta=theta, phi=phi, kinetic_energy=ke, data=data)
|
||||
dset = data[-1]
|
||||
dset.title = 'Polar scan {emitter:s}({level:s} tag {tag:d}) in plane #{plane:d}'.format(emitter=emitter,
|
||||
level=level, tag=tag,
|
||||
plane=plane)
|
||||
for name, value in cluster.info.items():
|
||||
dset.add_parameter(group='AlnTuto', name=name, value=str(value), unit="")
|
||||
#data.save('all_polar_scans.hdf5', append=True)
|
||||
data.save('all_polar_scans.hdf5')
|
||||
|
||||
def analysis(filename='all_polar_scans.hdf5'):
|
||||
data=Data.load(filename)
|
||||
# create datasets to store the sum of all emitter
|
||||
tmp_data = {}
|
||||
for dset in data:
|
||||
# retrieve some info
|
||||
side = dset.get_parameter(group='AlnTuto', name='side')['value']
|
||||
emitter = dset.get_parameter(group='AlnTuto', name='emitter')['value']
|
||||
try:
|
||||
key = '{}_{}'.format(side, emitter)
|
||||
tmp_data[key] += dset.cross_section
|
||||
except KeyError:
|
||||
tmp_data[key] = dset.cross_section.copy()
|
||||
|
||||
# get the index of theta = 0;
|
||||
it0 = np.where(dset.theta == 0)[0][0]
|
||||
for key, cs in tmp_data.items():
|
||||
tmp_data[key + '_norm'] = cs / cs[it0]
|
||||
|
||||
tmp_data['Al_side'] = tmp_data['Al_Al_norm'] / tmp_data['Al_N_norm']
|
||||
tmp_data['N_side'] = tmp_data['N_Al_norm'] / tmp_data['N_N_norm']
|
||||
|
||||
# now add all columns
|
||||
substrate_dset = data.add_dset('Total substrate signal')
|
||||
substrate_dset.add_columns(theta=dset.theta.copy())
|
||||
substrate_dset.add_columns(**tmp_data)
|
||||
|
||||
view = substrate_dset.add_view('Al side',
|
||||
title=r'AlN Polar scan in the (10$\bar{1}$0) azimuthal plane - Al side polarity',
|
||||
xlabel=r'$\Theta (\degree$)',
|
||||
ylabel='Signal (a.u.)')
|
||||
view.select('theta', 'Al_Al_norm', legend='Al 2p')
|
||||
view.select('theta', 'Al_N_norm', legend='N 1s')
|
||||
view.set_plot_options(autoscale=True)
|
||||
|
||||
view = substrate_dset.add_view('N side',
|
||||
title=r'AlN Polar scan in the (10$\bar{1}$0) azimuthal plane - N side polarity',
|
||||
xlabel=r'$\Theta (\degree$)',
|
||||
ylabel='Signal (a.u.)')
|
||||
view.select('theta', 'N_Al_norm', legend='Al 2p')
|
||||
view.select('theta', 'N_N_norm', legend='N 1s')
|
||||
view.set_plot_options(autoscale=True)
|
||||
|
||||
view = substrate_dset.add_view('Ratios',
|
||||
title=r'Al(2p)/N(1s) ratios on both polar sides of AlN in the (10$\bar{1}$0) '
|
||||
r'azimuthal plane',
|
||||
xlabel=r'$\Theta (\degree$)',
|
||||
ylabel='Intenisty ratio')
|
||||
view.select('theta', 'Al_side', legend='Al side', where="theta >= 0 and theta <=70")
|
||||
view.select('theta', 'N_side', legend='N side', where="theta >= 0 and theta <=70")
|
||||
view.set_plot_options(autoscale=True)
|
||||
|
||||
data.save('analysis.hdf5')
|
||||
data.view()
|
||||
|
||||
|
||||
DIAMETER = 10
|
||||
PLANES = 4
|
||||
clusters = create_clusters(side='Al', emitter='Al', diameter=DIAMETER, planes=PLANES) + \
|
||||
create_clusters(side='Al', emitter='N', diameter=DIAMETER, planes=PLANES) + \
|
||||
create_clusters(side='N', emitter='Al', diameter=DIAMETER, planes=PLANES) + \
|
||||
create_clusters(side='N', emitter='N', diameter=DIAMETER, planes=PLANES)
|
||||
compute_polar_scans(clusters, phi=0.)
|
||||
analysis()
|
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 892 KiB |
After Width: | Height: | Size: 201 KiB |
After Width: | Height: | Size: 288 KiB |
After Width: | Height: | Size: 48 KiB |
After Width: | Height: | Size: 50 KiB |
After Width: | Height: | Size: 171 KiB |
|
@ -0,0 +1,81 @@
|
|||
Computing a substrate XPD signal: the AlN polarity example
|
||||
==========================================================
|
||||
|
||||
.. |AlN4| replace:: AlN\ :sub:`4`
|
||||
|
||||
|
||||
In this tutorial, we will see how to compute the full XPD signal of a substrate. In a photoelectron diffraction
|
||||
experiment, the collected electrons come from a lot of emitters that are located in different planes of the structure
|
||||
at different depths.
|
||||
|
||||
Simply put, getting the total signal from a substrate from a given type of emitter is computing the signal for the
|
||||
emitter at the surface, at the subsurface, in the 3rd plane... etc, and summing all together.
|
||||
|
||||
This task can be tedious since it requires to create as many clusters as needed by the number of planes to compute.
|
||||
Clusters may be different from one to another because you do not need all the planes if the emitter is at the surface
|
||||
for example and also because the emitter has to be located at the center of the surface to preserve as much as possible
|
||||
the symmetry.
|
||||
|
||||
A function called :py:func:`hemispherical_cluster` is very handy for that purpose. Before diving into a the more
|
||||
realistic example of aluminium nitride, you may read more about how to use this function in the FAQ section
|
||||
:ref:`hemispherical_cluster_faq`.
|
||||
|
||||
In a work published in 1999, Lebedev *et al.* demonstrated that Photoelectron diffraction can be used as a non
|
||||
invasive tool to unambiguously state the polarity of an AlN surface. Aluminium nitride cristallizes in an hexagonal
|
||||
cell and the authors experimentally showed that the polarity of the surface can be controlled by the annealing
|
||||
temperature during the growth. Both polarities are sketched in the figure 1 below.
|
||||
|
||||
.. figure:: figures/AlN_3D.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Figure 1. AlN hexagonal lattice in the left) N polarity with nitrogen terminated surface and |AlN4|
|
||||
tetrahedrons pointing downward and right) Al polarity with aluminium terminated surface and |AlN4|
|
||||
|
||||
|
||||
In this work, the authors studied the Al(2p) and N(1s) diffraction patterns for both polarities and they demonstrated
|
||||
that the Al(2p)/N(1s) ratio exhibits 2 clear peaks at 32° and 59° polar angle in the (10-10) azimuthal plane only for
|
||||
the aluminium side.
|
||||
|
||||
We will attempt to reproduce these results in the multiple scattering approach. In the AlN cell there are 2 Al atoms
|
||||
and 2 Nitrogen atoms that are non equivalent. To compute the polar scan of a bulk AlN with those 2 variants, we need
|
||||
to create one cluster for each non equivalent emitter in each plane. We chose to work with 8 planes, so we have to
|
||||
compute the polar scan for 32 AlN clusters. The total signal for a polar scan will be the sum of all the scans with
|
||||
the same kind of emitter in each plane.
|
||||
|
||||
The code is splitted in different functions. The function :py:func:`AlN_cluster` allows to create an AlN cluster
|
||||
through the use of the :py:func:`hemispherical_cluster` function by specifing the surface termination and the
|
||||
direction of the |AlN4| tetrahedrons. This function is used by the second function called :py:func:`create_clusters`
|
||||
which returns a list of clusters to use for the calculation of a substrate with the desired polarity and emitter
|
||||
chemical symbol. The function :py:func:`compute_polar_scans` does the calculation of a polar scan for a list of
|
||||
clusters and save all results in a file called all_polar_scans.hdf5. Finally, the :py:func:`analysis` function performs
|
||||
the sum of all the data and add a new dataset with the 3 figures reported in figures 2 and 3 below.
|
||||
|
||||
.. figure:: figures/AlN_polar_scans.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Figure 2. Polar scans in the (10-10) azimuthal plane of AlN for Al polarity (left) and N polarity (right).
|
||||
|
||||
|
||||
.. figure:: figures/ratios.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Figure 3. Al(2p)/N(1s) intensity ratio for both polarities.
|
||||
|
||||
As can be seen in figure 3, the peaks at 32° and 58.5° are well reproduced by the calculation for an Al polarity.
|
||||
Some discreapancies arise between the experimental work and this simulation especially for large polar angles. This
|
||||
may be due to the use of a too small cluster in diameter for the deeper emitters.
|
||||
|
||||
The full code of this tutorial can be downloaded :download:`here<AlN.py>`
|
||||
|
||||
|
||||
|
||||
.. seealso::
|
||||
|
||||
The polarity of AlN films grown on Si(111)
|
||||
V. Lebedev, B. Schröter, G. Kipshidze & W Richter, J. Cryst. Growth **207** p266 (1999)
|
||||
`[doi] <https://doi.org/10.1016/S0022-0248(99)00375-9>`__
|
||||
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
# vim: set fdm=indent ts=4 sw=4 sts=4 et ai tw=80 cc=+0 mouse=a nu : #
|
||||
|
||||
from msspec.calculators import PED, XRaySource
|
||||
from msspec.utils import *
|
||||
|
||||
from ase.build import bulk
|
||||
from ase.build import fcc111, add_adsorbate
|
||||
from ase.visualize import view
|
||||
from ase.data import reference_states, atomic_numbers
|
||||
|
||||
from matplotlib import pyplot as plt
|
||||
import numpy as np
|
||||
import sys
|
||||
|
||||
|
||||
n = 1
|
||||
symbol = 'Ge'
|
||||
cluster = bulk(symbol, cubic = True)
|
||||
cluster = cluster.repeat((10, 10, 10))
|
||||
center_cluster(cluster)
|
||||
a0 = reference_states[atomic_numbers[symbol]]['a']
|
||||
cluster = cut_sphere(cluster, radius = a0 * (n+ .01))
|
||||
cluster = cut_plane(cluster, z = 0.1)
|
||||
view(cluster)
|
||||
#sys.exit(0)
|
||||
#cluster.absorber = 12
|
||||
#cluster.absorber = get_atom_index(cluster, 0,0,-1*n*a0)
|
||||
|
||||
|
||||
calc = PED(folder = './Ge')
|
||||
calc.set_atoms(cluster)
|
||||
|
||||
calc.set_calculation_parameters(scattering_order = 3,RA_cut_off = 1,
|
||||
mean_square_vibration = 0.0)
|
||||
#calc.set_source_parameters(theta = -55., phi = 0.)
|
||||
|
||||
calc.set_source_parameters(energy = 100.)
|
||||
calc.set_muffintin_parameters(interstitial_potential = 0)
|
||||
|
||||
|
||||
if False:
|
||||
level = '3d'
|
||||
all_be = np.linspace(27., 32., 5)
|
||||
all_theta = 76.
|
||||
data = []
|
||||
|
||||
for be in all_be:
|
||||
theta, Xsec, dirsig = calc.get_theta_scan(theta = 76., level = level,
|
||||
binding_energy = be)
|
||||
print '<'*80
|
||||
print Xsec
|
||||
data.append(Xsec - dirsig)
|
||||
|
||||
data = np.array(data).flatten()
|
||||
print data
|
||||
ax = plt.subplot(111)
|
||||
ax.plot(all_be, data)
|
||||
plt.show()
|
||||
|
||||
if True:
|
||||
ax = plt.subplot(111)
|
||||
for V in [0., 15.]:
|
||||
level = '3d'
|
||||
all_theta = np.arange(0., 80., 1.)
|
||||
phi = 0.
|
||||
|
||||
calc.set_muffintin_parameters(interstitial_potential = V)
|
||||
|
||||
cluster.absorber = 18
|
||||
surface_data = calc.get_theta_scan(theta = all_theta, level = level,
|
||||
phi = phi)#, plane = -1)
|
||||
|
||||
cluster.absorber = 12
|
||||
bulk_data = calc.get_theta_scan(theta = all_theta, level = level,
|
||||
phi = phi)#, plane = -1)
|
||||
|
||||
theta0, Xsec0, dirsig0 = surface_data
|
||||
theta1, Xsec1, dirsig1 = bulk_data
|
||||
#plt.plot(theta0, Xsec0, label = 'surface')
|
||||
#plt.plot(theta1, Xsec1, label = 'bulk')
|
||||
plt.plot(theta1, Xsec0/Xsec1, label = 'Vint = {:.2f} eV'.format(V))
|
||||
|
||||
plt.ylim(None, 8)
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
|
||||
if False:
|
||||
# compute
|
||||
level = '2s'
|
||||
ke = 156.5
|
||||
|
||||
all_theta = np.arange(0.,91.)
|
||||
theta, phi, Xsec, dirsig = calc.get_stereo_scan(theta = all_theta, level = level,
|
||||
kinetic_energy = ke)
|
||||
|
||||
|
||||
|
||||
# plot
|
||||
X, Y = np.meshgrid(np.radians(phi), theta)
|
||||
ax = plt.subplot(111, projection = 'polar')
|
||||
ax.pcolormesh(X, Y, Xsec, cmap='gray')
|
||||
#plt.title(r'z_0 = %.3f $\AA$' % z0)
|
||||
|
||||
plt.show()
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
# coding: utf-8
|
||||
|
||||
from msspec.calculators import PED
|
||||
from msspec.utils import *
|
||||
|
||||
from ase.build import bulk
|
||||
from ase.visualize import view
|
||||
|
||||
from matplotlib import pyplot as plt
|
||||
import sys
|
||||
|
||||
a0 = 4.21 # The lattice parameter in angstroms
|
||||
n = 2 # An integer useful to tweak the size of
|
||||
# the cluster
|
||||
|
||||
#all_n = (1., 1.5, 2.)
|
||||
all_n = (1., 1.5)
|
||||
level = '2p3/2'
|
||||
|
||||
if False:
|
||||
for n_idx, n in enumerate(all_n):
|
||||
# Create the copper cubic cell
|
||||
cluster = bulk('MgO', crystalstructure = 'rocksalt', a = a0, cubic = True)
|
||||
# Repeat the cell many times along x, y and z
|
||||
x = int(4*n)
|
||||
cluster = cluster.repeat((x, x, x))
|
||||
# Put the center of the structure at the origin
|
||||
center_cluster(cluster)
|
||||
# Keep atoms inside a given radius
|
||||
cluster = cut_sphere(cluster, radius = n*a0 + .01)
|
||||
# Keep only atoms below the plane z <= 0
|
||||
cluster = cut_plane(cluster, z = 0.1)
|
||||
|
||||
# Set the absorber (for example the deeper atom in z,
|
||||
# centered in the x-y plane)
|
||||
cluster.absorber = get_atom_index(cluster, 0,0,-a0)
|
||||
#view(cluster)
|
||||
#continue
|
||||
# Create a calculator for the PhotoElectron Diffration
|
||||
calc = PED(folder = 'calc' + str(n_idx))
|
||||
# Set the cluster to use for the calculation
|
||||
calc.set_atoms(cluster)
|
||||
|
||||
# Run the calculation
|
||||
calc.get_theta_scan(level = level)
|
||||
|
||||
calc.save('data%s.msp' % str(n_idx))
|
||||
|
||||
|
||||
#import sys
|
||||
#sys.exit()
|
||||
|
||||
calc = PED()
|
||||
ax = plt.subplot(111)
|
||||
|
||||
for i, n in enumerate(all_n):
|
||||
calc.load('data{:d}.msp'.format(i))
|
||||
x, y, _ = calc.get_results()
|
||||
#y = y/max(y)
|
||||
ax.plot(x, y, label = '{:d} atoms (n = {:.1f})'.format(len(calc.get_atoms()), n) )
|
||||
|
||||
ax.legend()
|
||||
ax.grid(True)
|
||||
ax.set_xlabel(r'$\theta$ ($\degree$)')
|
||||
ax.set_ylabel(r'Normalized intensity')
|
||||
ax.set_title(r'Polar scan of Mg({}) @ {:.2f} eV'.format(level, calc.parameters['kinetic_energy'][0]))
|
||||
plt.show()
|
||||
|
After Width: | Height: | Size: 125 KiB |
After Width: | Height: | Size: 616 KiB |
After Width: | Height: | Size: 56 KiB |
|
@ -0,0 +1,54 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
# vim: set fdm=indent ts=4 sw=4 sts=4 et ai tw=80 cc=+0 mouse=a nu : #
|
||||
|
||||
from msspec.calculator import MSSPEC, XRaySource
|
||||
from msspec.utils import *
|
||||
|
||||
from ase.build import fcc111, add_adsorbate
|
||||
from ase.visualize import view
|
||||
from msspec.iodata import cols2matrix
|
||||
|
||||
from matplotlib import pyplot as plt
|
||||
import numpy as np
|
||||
import sys
|
||||
|
||||
data = None
|
||||
all_z = np.arange(1.10, 1.50, 0.02)
|
||||
all_z=(1.1,)
|
||||
for zi, z0 in enumerate(all_z):
|
||||
# construct the cluster
|
||||
cluster = fcc111('Rh', size = (2,2,1))
|
||||
add_adsorbate(cluster, 'O', z0, position = 'fcc')
|
||||
cluster.pop(3)
|
||||
#cluster.rotate('z',np.pi/3.)
|
||||
#view(cluster)
|
||||
|
||||
cluster.absorber = len(cluster) - 1
|
||||
|
||||
calc = MSSPEC(spectroscopy = 'PED', folder = './RhO_z')
|
||||
calc.set_atoms(cluster)
|
||||
calc.calculation_parameters.scattering_order = 3
|
||||
calc.calculation_parameters.RA_cutoff = 1
|
||||
calc.source_parameters.energy = XRaySource.AL_KALPHA
|
||||
|
||||
# compute
|
||||
level = '1s'
|
||||
ke = 723.
|
||||
|
||||
|
||||
data = calc.get_theta_phi_scan(level=level, kinetic_energy=ke, data=data)
|
||||
|
||||
# OPTIONAL, this will create an image of the data that you can combine
|
||||
# in an animated gif
|
||||
dset = data[-1]
|
||||
theta, phi, Xsec = cols2matrix(dset.theta, dset.phi, dset.cross_section)
|
||||
X, Y = np.meshgrid(np.radians(phi), 2*np.tan(np.radians(theta/2.)))
|
||||
fig = plt.figure()
|
||||
ax = fig.add_subplot(111, projection='polar')
|
||||
im = ax.pcolormesh(X, Y, Xsec)
|
||||
theta_ticks = np.arange(0, 91, 15)
|
||||
plt.yticks(2 * np.tan(np.radians(theta_ticks/2.)), theta_ticks)
|
||||
plt.title(r"$z_0 = {:.2f} \AA$".format(z0))
|
||||
plt.savefig('image{:03d}.png'.format(zi))
|
||||
|
||||
data.view()
|
After Width: | Height: | Size: 194 KiB |
After Width: | Height: | Size: 127 KiB |
After Width: | Height: | Size: 274 KiB |
After Width: | Height: | Size: 2.3 MiB |
|
@ -0,0 +1,31 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
# vim: set fdm=indent ts=4 sw=4 sts=4 et ai tw=80 cc=+0 mouse=a nu : #
|
||||
|
||||
from msspec.calculator import MSSPEC, XRaySource
|
||||
from msspec.utils import *
|
||||
|
||||
from ase import Atoms
|
||||
|
||||
import numpy as np
|
||||
|
||||
# Defining global variables
|
||||
a0 = 6.0
|
||||
symbols = ('Rh', 'O')
|
||||
ke = 723.
|
||||
level = '1s'
|
||||
|
||||
data = None
|
||||
for symbol in symbols:
|
||||
cluster = Atoms(symbol*2, positions = [(0,0,0), (0,0,a0)])
|
||||
[a.set('mt_radius', 1.5) for a in cluster]
|
||||
|
||||
# Create the calculator
|
||||
calc = MSSPEC(spectroscopy = 'PED')
|
||||
calc.source_parameters.energy = XRaySource.AL_KALPHA
|
||||
calc.set_atoms(cluster)
|
||||
cluster.absorber = 0
|
||||
|
||||
# compute
|
||||
data = calc.get_scattering_factors(level=level, kinetic_energy=ke, data=data)
|
||||
|
||||
data.view()
|
|
@ -0,0 +1,98 @@
|
|||
Playing with the scattering factor
|
||||
----------------------------------
|
||||
|
||||
In this tutorial we will play with an important parameter of any multiple
|
||||
scattering calculation: the *scattering factor*. When a electron wave is
|
||||
scattered by an atom, the electron trajectory is modified after this event. The
|
||||
particle will most likely continue its trajectory in the same direction
|
||||
(forward scattering), but, to a lesser extent and depending on the atom and on
|
||||
the electron energy, the direction of the scattered electron can change. The
|
||||
electron can even be backscattered. The angular distribution of the electron
|
||||
direction after the scattering event is the scattering factor.
|
||||
|
||||
In a paper published in 1998, T. Gerber *et al.* used the quite high
|
||||
backscattering factor of Rhodium atoms to probe the distance of Oxygen atoms
|
||||
adsorbed on a Rhodium surface. Some electrons coming from Oxygen atoms are
|
||||
ejected toward the Rhodium surface. They are then backscattered and interfere
|
||||
with the direct signal comming from Oxygen atoms (see the figure below). They
|
||||
demonstrated both experimentally and numerically with a sinle scattering
|
||||
computation that this lead to a very accurate probe of adsorbed species that
|
||||
can be sensitive to bond length changes of the order of :math:`\pm 0.02 \mathring{A}`.
|
||||
|
||||
.. figure:: RhO_fig0.png
|
||||
:align: center
|
||||
:width: 30%
|
||||
|
||||
Interferences produced by the backscattering effect.
|
||||
|
||||
|
||||
First, compute the scattering factor of both chemical species, Rh and O.
|
||||
|
||||
.. literalinclude:: sf.py
|
||||
:linenos:
|
||||
|
||||
Running the above script should produce this polar plot. You can see that for Rhodium,
|
||||
the backscattering coefficient is still significant even at quite high kinetic energy
|
||||
(here 723 eV).
|
||||
|
||||
.. figure:: RhO_fig1.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Polar representation of the scattering factor
|
||||
|
||||
Let an Oxygen atom being adsorbed at a distance :math:`z_0` of an fcc site of
|
||||
the (111) Rh surface. and compute the :math:`\theta-\phi` scan for different
|
||||
values of :math:`z_0`. You can see on the stereographic projection 3 bright
|
||||
circles representing fringes of constructive interference between the direct
|
||||
O(1s) photoelectron wave and that backscattered by the Rhodium atoms. The
|
||||
center of these annular shapes changes from bright to dark due to the variation
|
||||
of the Oxygen atom height above the surface which changes the path difference.
|
||||
|
||||
.. image:: RhO_fig2a.png
|
||||
:align: center
|
||||
:height: 200px
|
||||
|
||||
|
||||
.. only:: html
|
||||
|
||||
.. figure:: RhO_fig2b.gif
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Stereographic projections of O(1s) emission at :math:`E_k` = 723 eV for an
|
||||
oxygen atom on top of a fcc site of 3 Rh atoms at various altitudes
|
||||
:math:`z_0`
|
||||
|
||||
.. only:: latex
|
||||
|
||||
.. figure:: RhO_fig2b.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Stereographic projections of O(1s) emission at :math:`E_k` = 723 eV for an
|
||||
oxygen atom on top of a fcc site of 3 Rh atoms at various altitudes
|
||||
:math:`z_0`
|
||||
|
||||
|
||||
|
||||
|
||||
Here is the script for the computation. (:download:`download <RhO.py>`)
|
||||
|
||||
.. literalinclude:: RhO.py
|
||||
:linenos:
|
||||
|
||||
.. note::
|
||||
After runing this script, you will get 20 images in your folder. You can merge them in one animated gif image
|
||||
like this:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
convert -delay 50 -loop 0 image*.png animation.gif
|
||||
|
||||
.. seealso::
|
||||
|
||||
X-Ray Photoelectron Diffraction in the Backscattering Geometry: A Key to Adsorption Sites and Bond Lengths at Surfaces
|
||||
T. Gerber, J. Wider, E. Welti & J. Osterwalder, Phys. Rev. Lett. **81** (8) p1654 (1998)
|
||||
`[doi] <https://doi.org/10.1103/PhysRevLett.81.1654>`__
|
||||
|
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 541 KiB |
After Width: | Height: | Size: 55 KiB |
|
@ -0,0 +1,34 @@
|
|||
# coding: utf-8
|
||||
|
||||
from msspec.calculator import MSSPEC
|
||||
from msspec.utils import *
|
||||
|
||||
from ase.build import bulk
|
||||
from ase.visualize import view
|
||||
|
||||
a0 = 3.6 # The lattice parameter in angstroms
|
||||
|
||||
# Create the copper cubic cell
|
||||
cluster = bulk('Cu', a=a0, cubic=True)
|
||||
# Repeat the cell many times along x, y and z
|
||||
cluster = cluster.repeat((4, 4, 4))
|
||||
# Put the center of the structure at the origin
|
||||
center_cluster(cluster)
|
||||
# Keep atoms inside a given radius
|
||||
cluster = cut_sphere(cluster, radius=a0 + .01)
|
||||
# Keep only atoms below the plane z <= 0
|
||||
cluster = cut_plane(cluster, z=0.1)
|
||||
|
||||
# Set the absorber (the deepest atom centered in the xy-plane)
|
||||
cluster.absorber = get_atom_index(cluster, 0, 0, -a0)
|
||||
# Create a calculator for the PhotoElectron Diffration
|
||||
calc = MSSPEC(spectroscopy='PED')
|
||||
# Set the cluster to use for the calculation
|
||||
calc.set_atoms(cluster)
|
||||
|
||||
# Run the calculation
|
||||
data = calc.get_theta_scan(level='2p3/2')
|
||||
|
||||
# Show the results
|
||||
data.view()
|
||||
#calc.shutdown()
|
|
@ -0,0 +1,302 @@
|
|||
INFO:msspec:Getting the TMatrix...
|
||||
_________________________________________________________________
|
||||
|
||||
PHAGEN
|
||||
_________________________________________________________________
|
||||
|
||||
parameters for this xpd calculation:
|
||||
-----------------------------------------------------------------
|
||||
edge= k
|
||||
potype= hedin norman= stdcrm absorber= 1
|
||||
coor= angs emin= 13.52 Ry emax= 13.52 Ry
|
||||
delta= 0.300 Ry gamma= 0.03 Ry eftri= 0.000 Ry
|
||||
ionization state : neutral
|
||||
final state potential generated internally
|
||||
|
||||
|
||||
Computes the T-matrix and radial matrix elements
|
||||
|
||||
|
||||
coordinates in angstroms Radii
|
||||
-----------------------------------------------------------------
|
||||
Cu 29 0.0000 0.0000 -3.6000 0.0000 0.0000
|
||||
Cu 29 -1.8000 -1.8000 0.0000 0.0000 0.0000
|
||||
Cu 29 -1.8000 0.0000 -1.8000 0.0000 0.0000
|
||||
Cu 29 -3.6000 0.0000 0.0000 0.0000 0.0000
|
||||
Cu 29 -1.8000 1.8000 0.0000 0.0000 0.0000
|
||||
Cu 29 0.0000 -1.8000 -1.8000 0.0000 0.0000
|
||||
Cu 29 0.0000 -3.6000 0.0000 0.0000 0.0000
|
||||
Cu 29 1.8000 -1.8000 0.0000 0.0000 0.0000
|
||||
Cu 29 0.0000 1.8000 -1.8000 0.0000 0.0000
|
||||
Cu 29 1.8000 0.0000 -1.8000 0.0000 0.0000
|
||||
Cu 29 0.0000 0.0000 0.0000 0.0000 0.0000
|
||||
Cu 29 1.8000 1.8000 0.0000 0.0000 0.0000
|
||||
Cu 29 0.0000 3.6000 0.0000 0.0000 0.0000
|
||||
Cu 29 3.6000 0.0000 0.0000 0.0000 0.0000
|
||||
-----------------------------------------------------------------
|
||||
|
||||
|
||||
** enter calphas **
|
||||
---
|
||||
total energy for atom in ground state
|
||||
total energy for atom with a hole in k edge
|
||||
calculated ionization energy for edge k = 8994.86914 eV
|
||||
---
|
||||
calculated ionization potential (ryd) = 661.387451
|
||||
---
|
||||
|
||||
|
||||
symmetrizing coordinates...
|
||||
|
||||
|
||||
symmetrized atomic coordinates of cluster
|
||||
|
||||
position
|
||||
atom no. x y z eq
|
||||
|
||||
1 osph 0 0.0000 0.0000 0.0000 0
|
||||
2 Cu 29 0.0000 0.0000 -5.3452 0
|
||||
3 Cu 29 -3.4015 -3.4015 1.4578 0
|
||||
4 Cu 29 -3.4015 0.0000 -1.9437 0
|
||||
5 Cu 29 -6.8030 0.0000 1.4578 0
|
||||
6 Cu 29 0.0000 0.0000 1.4578 0
|
||||
7 Cu 29 -3.4015 3.4015 1.4578 3
|
||||
8 Cu 29 3.4015 -3.4015 1.4578 3
|
||||
9 Cu 29 3.4015 3.4015 1.4578 3
|
||||
10 Cu 29 0.0000 -3.4015 -1.9437 4
|
||||
11 Cu 29 0.0000 3.4015 -1.9437 4
|
||||
12 Cu 29 3.4015 0.0000 -1.9437 4
|
||||
13 Cu 29 0.0000 -6.8030 1.4578 5
|
||||
14 Cu 29 0.0000 6.8030 1.4578 5
|
||||
15 Cu 29 6.8030 0.0000 1.4578 5
|
||||
|
||||
computing muffin tin potential and phase shifts
|
||||
generating core state wavefunction
|
||||
generating final potential (complex hedin-lundqvist exchange)
|
||||
MT radii for Hydrogen atoms determined by stdcrm unless other options are specified
|
||||
|
||||
-----------------------------------------------------------------
|
||||
i rs(i) i=1,natoms
|
||||
1 9.28 2 2.50 3 2.46 4 2.35 5 2.48 6 2.33 7 2.46 8 2.46
|
||||
9 2.46 10 2.35 11 2.35 12 2.35 13 2.48 14 2.48 15 2.48
|
||||
N.B.: Order of atoms as reshuffled by symmetry routines
|
||||
-----------------------------------------------------------------
|
||||
|
||||
input value for coulomb interst. potential = -0.699999988
|
||||
and interstitial rs = 3.00000000
|
||||
lower bound for coulomb interst. potential = -0.290025890
|
||||
and for interst. rs = 2.54297900
|
||||
|
||||
lmax assignment based on l_max = r_mt * k_e + 2
|
||||
where e is the running energy
|
||||
optimal lmax chosen according to the running energy e for each atom
|
||||
|
||||
|
||||
number of centers= 14
|
||||
|
||||
starting potentials and/or charge densities written to file 13
|
||||
symmetry information generated internally
|
||||
symmetry information written to file 14
|
||||
|
||||
|
||||
core initial state of type: 1s1/2
|
||||
|
||||
fermi level = -0.17690
|
||||
|
||||
generating t_l (for030) and atomic cross section (for050)
|
||||
|
||||
gamma = 0.030000 rsint = 3.944844
|
||||
|
||||
check in subroutine cont
|
||||
order of neighb. -- symb. -- dist. from absorber
|
||||
|
||||
3 Cu 4.81045771
|
||||
5 Cu 6.80301476
|
||||
2 Cu 8.33195782
|
||||
4 Cu 9.62091541
|
||||
-----------------------------------------------------------------
|
||||
1 Cu 0.000000
|
||||
3 Cu 4.810458
|
||||
5 Cu 6.803015
|
||||
2 Cu 8.331958
|
||||
4 Cu 9.620915
|
||||
1 Cu 0.000000
|
||||
3 Cu 4.810458
|
||||
5 Cu 6.803015
|
||||
2 Cu 8.331958
|
||||
4 Cu 9.620915
|
||||
|
||||
irho = 2 entering vxc to calculate energy dependent exchange
|
||||
energy dependent vcon = (-0.181322575,0.183172509) at energy 13.5235996
|
||||
calculating atomic t-matrix elements atm(n)
|
||||
check orthogonality between core and continuum state
|
||||
scalar product between core and continuum state = (0.215178907,-7.336383685E-03)
|
||||
sqrt(xe/pi) = (1.08555424,-3.627028549E-03)
|
||||
check ionization potential: 661.387451
|
||||
|
||||
|
||||
value of the mean free path:
|
||||
-----------------------------------------------------------------
|
||||
average mean free path due to finite gamma: mfp = 8.81667 angstrom at energy 13.52360
|
||||
|
||||
average mean free path in the cluster : mfp = 8.71420 angstrom at energy 13.52360
|
||||
|
||||
total mean free path due to Im V and gamma: mfp = 4.38257 angstrom at energy 13.52360
|
||||
-----------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
** phagen terminated normally **
|
||||
|
||||
|
||||
INFO:msspec:Getting the TMatrix...
|
||||
_________________________________________________________________
|
||||
|
||||
PHAGEN
|
||||
_________________________________________________________________
|
||||
|
||||
parameters for this xpd calculation:
|
||||
-----------------------------------------------------------------
|
||||
edge= k
|
||||
potype= hedin norman= stdcrm absorber= 1
|
||||
coor= angs emin= 13.52 Ry emax= 13.52 Ry
|
||||
delta= 0.300 Ry gamma= 0.03 Ry eftri= 0.000 Ry
|
||||
ionization state : neutral
|
||||
final state potential generated internally
|
||||
|
||||
|
||||
Computes the T-matrix and radial matrix elements
|
||||
|
||||
|
||||
coordinates in angstroms Radii
|
||||
-----------------------------------------------------------------
|
||||
Cu 29 0.0000 0.0000 -3.8000 0.0000 0.0000
|
||||
Cu 29 -1.9000 -1.9000 0.0000 0.0000 0.0000
|
||||
Cu 29 -1.9000 0.0000 -1.9000 0.0000 0.0000
|
||||
Cu 29 -3.8000 0.0000 0.0000 0.0000 0.0000
|
||||
Cu 29 -1.9000 1.9000 0.0000 0.0000 0.0000
|
||||
Cu 29 0.0000 -1.9000 -1.9000 0.0000 0.0000
|
||||
Cu 29 0.0000 -3.8000 0.0000 0.0000 0.0000
|
||||
Cu 29 1.9000 -1.9000 0.0000 0.0000 0.0000
|
||||
Cu 29 0.0000 1.9000 -1.9000 0.0000 0.0000
|
||||
Cu 29 1.9000 0.0000 -1.9000 0.0000 0.0000
|
||||
Cu 29 0.0000 0.0000 0.0000 0.0000 0.0000
|
||||
Cu 29 1.9000 1.9000 0.0000 0.0000 0.0000
|
||||
Cu 29 0.0000 3.8000 0.0000 0.0000 0.0000
|
||||
Cu 29 3.8000 0.0000 0.0000 0.0000 0.0000
|
||||
-----------------------------------------------------------------
|
||||
|
||||
|
||||
** enter calphas **
|
||||
---
|
||||
total energy for atom in ground state
|
||||
total energy for atom with a hole in k edge
|
||||
calculated ionization energy for edge k = 8994.86914 eV
|
||||
---
|
||||
calculated ionization potential (ryd) = 661.387451
|
||||
---
|
||||
|
||||
|
||||
symmetrizing coordinates...
|
||||
|
||||
|
||||
symmetrized atomic coordinates of cluster
|
||||
|
||||
position
|
||||
atom no. x y z eq
|
||||
|
||||
1 osph 0 0.0000 0.0000 0.0000 0
|
||||
2 Cu 29 0.0000 0.0000 -5.6422 0
|
||||
3 Cu 29 -3.5905 -3.5905 1.5388 0
|
||||
4 Cu 29 -3.5905 0.0000 -2.0517 0
|
||||
5 Cu 29 -7.1810 0.0000 1.5388 0
|
||||
6 Cu 29 0.0000 0.0000 1.5388 0
|
||||
7 Cu 29 -3.5905 3.5905 1.5388 3
|
||||
8 Cu 29 3.5905 -3.5905 1.5388 3
|
||||
9 Cu 29 3.5905 3.5905 1.5388 3
|
||||
10 Cu 29 0.0000 -3.5905 -2.0517 4
|
||||
11 Cu 29 0.0000 3.5905 -2.0517 4
|
||||
12 Cu 29 3.5905 0.0000 -2.0517 4
|
||||
13 Cu 29 0.0000 -7.1810 1.5388 5
|
||||
14 Cu 29 0.0000 7.1810 1.5388 5
|
||||
15 Cu 29 7.1810 0.0000 1.5388 5
|
||||
|
||||
computing muffin tin potential and phase shifts
|
||||
generating core state wavefunction
|
||||
generating final potential (complex hedin-lundqvist exchange)
|
||||
MT radii for Hydrogen atoms determined by stdcrm unless other options are specified
|
||||
|
||||
-----------------------------------------------------------------
|
||||
i rs(i) i=1,natoms
|
||||
1 9.80 2 2.64 3 2.60 4 2.44 5 2.61 6 2.46 7 2.60 8 2.60
|
||||
9 2.60 10 2.44 11 2.44 12 2.44 13 2.61 14 2.61 15 2.61
|
||||
N.B.: Order of atoms as reshuffled by symmetry routines
|
||||
-----------------------------------------------------------------
|
||||
|
||||
input value for coulomb interst. potential = -0.699999988
|
||||
and interstitial rs = 3.00000000
|
||||
lower bound for coulomb interst. potential = -0.232031077
|
||||
and for interst. rs = 2.76609278
|
||||
|
||||
lmax assignment based on l_max = r_mt * k_e + 2
|
||||
where e is the running energy
|
||||
optimal lmax chosen according to the running energy e for each atom
|
||||
|
||||
|
||||
number of centers= 14
|
||||
|
||||
starting potentials and/or charge densities written to file 13
|
||||
symmetry information generated internally
|
||||
symmetry information written to file 14
|
||||
|
||||
|
||||
core initial state of type: 1s1/2
|
||||
|
||||
fermi level = -0.16924
|
||||
|
||||
generating t_l (for030) and atomic cross section (for050)
|
||||
|
||||
gamma = 0.030000 rsint = 4.292365
|
||||
|
||||
check in subroutine cont
|
||||
order of neighb. -- symb. -- dist. from absorber
|
||||
|
||||
3 Cu 5.07770586
|
||||
5 Cu 7.18096018
|
||||
2 Cu 8.79484367
|
||||
4 Cu 10.1554117
|
||||
-----------------------------------------------------------------
|
||||
1 Cu 0.000000
|
||||
3 Cu 5.077706
|
||||
5 Cu 7.180960
|
||||
2 Cu 8.794844
|
||||
4 Cu 10.155412
|
||||
1 Cu 0.000000
|
||||
3 Cu 5.077706
|
||||
5 Cu 7.180960
|
||||
2 Cu 8.794844
|
||||
4 Cu 10.155412
|
||||
|
||||
irho = 2 entering vxc to calculate energy dependent exchange
|
||||
energy dependent vcon = (-0.151319593,0.168841615) at energy 13.5235996
|
||||
calculating atomic t-matrix elements atm(n)
|
||||
check orthogonality between core and continuum state
|
||||
scalar product between core and continuum state = (0.217915282,-9.193832986E-03)
|
||||
sqrt(xe/pi) = (1.08495688,-3.348779166E-03)
|
||||
check ionization potential: 661.387451
|
||||
|
||||
|
||||
value of the mean free path:
|
||||
-----------------------------------------------------------------
|
||||
average mean free path due to finite gamma: mfp = 8.81667 angstrom at energy 13.52360
|
||||
|
||||
average mean free path in the cluster : mfp = 9.13179 angstrom at energy 13.52360
|
||||
|
||||
total mean free path due to Im V and gamma: mfp = 4.48573 angstrom at energy 13.52360
|
||||
-----------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
** phagen terminated normally **
|
||||
|
||||
|
|
@ -0,0 +1,227 @@
|
|||
Your first XPD pattern
|
||||
----------------------
|
||||
In this small example, you will learn how to produce a polar scan, *ie* you
|
||||
will plot the number of photo-electrons as a function of the :math:`\theta`
|
||||
angle. We will do this calculation for a bulk copper (001) surface.
|
||||
|
||||
This is a small script of roughly 15 lines (without comments) just to show you
|
||||
how to start with the msspec package. For this purpose we will detail all steps
|
||||
of this first hands on as much as possible.
|
||||
|
||||
Start your favorite text editor to write this Python script.
|
||||
|
||||
Begin by typing:
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
:lineno-start: 1
|
||||
|
||||
# coding: utf-8
|
||||
|
||||
from msspec.calculator import MSSPEC
|
||||
from msspec.utils import *
|
||||
|
||||
|
||||
Every line starting by a '#' sign is considered as a comment in Python and thus
|
||||
is ignored... except the first line with the word 'coding' right after the '#'
|
||||
symbol. It allows you to specify the encoding of your text file. It is not
|
||||
mandatory but highly recommended. You will most likeley use an utf-8 encoding
|
||||
as in this example.
|
||||
|
||||
For an MsSpec calculation using ASE, msspec modules must be imported first.
|
||||
Thus, line 3 you import the MSSPEC calculator from the *calculator* module of the
|
||||
*msspec* package. MSSPEC is a class.
|
||||
|
||||
We will also need some extra stuff that we load from the *utils* module (line
|
||||
4).
|
||||
|
||||
We need to create a bulk crystal of copper atoms. We call this a *cluster*.
|
||||
This is the job of the *ase* module, so load the module
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
:lineno-start: 6
|
||||
|
||||
from ase.build import bulk
|
||||
from ase.visualize import view
|
||||
|
||||
a0 = 3.6
|
||||
cluster = bulk('Cu', a = a0, cubic = True)
|
||||
view(cluster)
|
||||
|
||||
In line 6 we load the :py:func:`bulk` function to create our atomic object and,
|
||||
in line 7, we load the :py:func:`view` function to actually view our cluster.
|
||||
|
||||
The creation of the cluster is done line 10. The :py:func:`bulk` needs one
|
||||
argument which are the chemical species ('Cu' in our example). We also pass 2
|
||||
keyword (optional) arguments here:
|
||||
|
||||
* The lattice parameter *a* in units of angströms.
|
||||
* The *cubic* keyword, to obtain a cubic cell rather than the fully
|
||||
reduced one which is not cubic
|
||||
|
||||
From now on, you can save your script as 'Cu.py' and open a terminal window in
|
||||
the same directory as this file. Launch your script using python:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
python2 Cu.py
|
||||
|
||||
and a graphical window (the ase-gui) should open with a cubic cell of copper
|
||||
like this one:
|
||||
|
||||
.. figure:: Cu_fig1.png
|
||||
:align: center
|
||||
:width: 40%
|
||||
|
||||
Figure 1.
|
||||
|
||||
|
||||
Obviously, multiple scattering calculations need more atoms to be accurate. Due
|
||||
to the forward focusing effect in photo-electron diffraction, the best suited
|
||||
geometry for the cluster is hemispherical. Obtaining such a cluster is a
|
||||
straightforward process:
|
||||
|
||||
1. Repeat the previous cell in all 3 directions
|
||||
2. center the structure
|
||||
3. Keep only atoms within a given radius from center
|
||||
4. Keep only atoms within one halh of the sphere.
|
||||
|
||||
Modify your script like this and run it again.
|
||||
|
||||
.. literalinclude:: Cu_simple.py
|
||||
:linenos:
|
||||
:lineno-start: 1
|
||||
:lines: 1-21
|
||||
|
||||
|
||||
Don't forget to add the line to view the cluster at the end of the script and run
|
||||
the script again.
|
||||
|
||||
.. figure:: Cu_fig2.png
|
||||
:align: center
|
||||
:width: 60%
|
||||
|
||||
Figure 2. The different steps to output a cluster.
|
||||
a) After repeat, b) after cut_sphere, c) after cut_plane
|
||||
|
||||
|
||||
Once you a cluster is built the next step is to define which atom in the cluster
|
||||
will absorbe the light. This atom is called the *absorber*.
|
||||
|
||||
To specify which atom is the absorber, you need to understand that the cluster
|
||||
object is like a list of atoms. Each member of this list is an atom with its
|
||||
own position. You need to locate the index of the atom in the list that you want
|
||||
it to be the absorber. Then, put that number in the *cluster.absorber* attribute
|
||||
|
||||
For example, suppose that you want the first atom of the list to be the
|
||||
absorber. You should write:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
cluster.absorber = 0
|
||||
|
||||
To find what is the index of the atom you'd like to be the absorber, you can
|
||||
either get it while you are visualizing the structure within the ase-gui
|
||||
program. Or, you can use :py:func:`get_atom_index` function. This function takes
|
||||
4 arguments: the cluster to look the index for, and the x, y and z coordinates.
|
||||
It will return the index of the closest atom to these coordinates. In our
|
||||
example, to get the deepest atom centered in the xy-plane, we write:
|
||||
|
||||
.. literalinclude:: Cu_simple.py
|
||||
:linenos:
|
||||
:lineno-start: 22
|
||||
:lines: 22-23
|
||||
|
||||
|
||||
That's all for the cluster part. We now need to create a calculator for that
|
||||
object. This is a 2 lines procedure:
|
||||
|
||||
.. literalinclude:: Cu_simple.py
|
||||
:linenos:
|
||||
:lineno-start: 24
|
||||
:lines: 24-28
|
||||
|
||||
When creating a new calculator, you must choose the kind of spectroscopy you
|
||||
will work with. In this example we choose 'PED' for *PhotoElectron Diffraction*.
|
||||
Other types of spectroscopies are:
|
||||
|
||||
- 'AED' for *Auger Electron Spectroscopy*
|
||||
- 'APECS' for *Auger PhotoElectron Coincidence Spectroscopy*
|
||||
- 'EXAFS' for *Extended X-Ray Absorption Fine Structure*
|
||||
- 'LEED' for *Low Energy Electron Diffraction*
|
||||
|
||||
|
||||
|
||||
Now that everything is ready you can actually perform a calculation. The 2 lines
|
||||
below will produce a polar scan of the Cu(2p3/2) level with default parameters,
|
||||
store the results in the data object and display it in a graphical window.
|
||||
|
||||
.. literalinclude:: Cu_simple.py
|
||||
:linenos:
|
||||
:lineno-start: 29
|
||||
:lines: 29-33
|
||||
|
||||
running this script will produce the following output
|
||||
|
||||
.. figure:: Cu_fig3.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Figure 3. Polar scan of copper (2p3/2)
|
||||
|
||||
You can clearly see the modulations of the signal and the peak at :math:`\theta
|
||||
= 0°` and :math:`\theta = 45°`, which are dense directions of the crystal.
|
||||
|
||||
By default, the program computes for :math:`\theta` angles in the -70°..+70°
|
||||
range. This can be changed by using the *angles* keyword.
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
#For a polar scan between 0° and 60° with 100 points
|
||||
import numpy as np
|
||||
data = calc.get_theta_scan(level = '2p3/2', theta = np.linspace(0,60,100))
|
||||
|
||||
# For only 0° and 45°
|
||||
data = calc.get_theta_scan(level = '2p3/2', theta = [0, 45])
|
||||
|
||||
|
||||
You probably also noticed that we did not specify any kinetic energy for our
|
||||
photoelectron in this example. By default, the programm tries to find the binding
|
||||
energy (:math:`E_b`) of the choosen level in a database and assume a
|
||||
kinetic energy (:math:`E_k`) of
|
||||
|
||||
.. math::
|
||||
E_k = \hbar\omega - E_b - \Phi_{WF}
|
||||
|
||||
where :math:`\hbar\omega` is the photon energy, an :math:`\Phi_{WF}` is the
|
||||
work function of the sample, arbitrary set to 4.5 eV.
|
||||
|
||||
Of course, you can choose any kinetic energy you'd like:
|
||||
|
||||
.. code-block:: python
|
||||
:linenos:
|
||||
|
||||
# To set the kinetic energy...
|
||||
data = calc.get_theta_scan(level = '2p3/2', kinetic_energy = 300)
|
||||
|
||||
|
||||
|
||||
Below is the full code of this example. You can download it :download:`here
|
||||
<Cu_simple.py>`
|
||||
|
||||
.. literalinclude:: Cu_simple.py
|
||||
:linenos:
|
||||
|
||||
.. seealso::
|
||||
|
||||
Atomic Simulation Environnment
|
||||
`Documentation <https://wiki.fysik.dtu.dk/ase/python.html>`_
|
||||
of the ASE module to create your clusters much more.
|
||||
X-Ray data booklet
|
||||
`Electron binding energies <http://xdb.lbl.gov/>`_ are
|
||||
taken from here.
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
.. _tutorials:
|
||||
|
||||
####################
|
||||
Learn from tutorials
|
||||
####################
|
||||
|
||||
...About Photodiffraction
|
||||
=========================
|
||||
|
||||
.. toctree::
|
||||
|
||||
copper/tuto_ped_copper
|
||||
nickel_chain/tuto_ped_nickel_chain
|
||||
RhO/tuto_ped_RhO
|
||||
temperature/tuto_ped_temperature
|
||||
AlN/tuto_cluster
|
|
@ -0,0 +1,77 @@
|
|||
# coding: utf-8
|
||||
|
||||
# import all we need and start by msspec
|
||||
from msspec.calculator import MSSPEC
|
||||
|
||||
# we will build a simple atomic chain
|
||||
from ase import Atom, Atoms
|
||||
|
||||
# we need some numpy functions
|
||||
import numpy as np
|
||||
|
||||
|
||||
symbol = 'Ni' # The kind of atom for the chain
|
||||
orders = (1, 5) # We will run the calculation for single scattering
|
||||
# and multiple scattering (5th diffusion order)
|
||||
chain_lengths = (2,3,5) # We will run the calculation for differnt lengths
|
||||
# of the atomic chain
|
||||
a = 3.5 # The distance bewteen 2 atoms
|
||||
|
||||
# Define an empty variable to store all the results
|
||||
all_data = None
|
||||
|
||||
# 2 for nested loops over the chain length and the order of diffusion
|
||||
for chain_length in chain_lengths:
|
||||
for order in orders:
|
||||
# We build the atomic chain by
|
||||
# 1- stacking each atom one by one along the z axis
|
||||
chain = Atoms([Atom(symbol, position = (0., 0., i*a)) for i in
|
||||
range(chain_length)])
|
||||
# 2- rotating the chain by 45 degrees with respect to the y axis
|
||||
chain.rotate('y', np.radians(45.))
|
||||
# 3- setting a custom Muffin-tin radius of 1.5 angstroms for all
|
||||
# atoms (needed if you want to enlarge the distance between
|
||||
# the atoms while keeping the radius constant)
|
||||
[atom.set('mt_radius', 1.5) for atom in chain]
|
||||
# 4- defining the absorber to be the first atom in the chain at
|
||||
# x = y = z = 0
|
||||
chain.absorber = 0
|
||||
|
||||
# We define a new PED calculator
|
||||
calc = MSSPEC(spectroscopy = 'PED')
|
||||
calc.set_atoms(chain)
|
||||
# Here is how to tweak the scattering order
|
||||
calc.calculation_parameters.scattering_order = order
|
||||
# This line below is where we actually run the calculation
|
||||
all_data = calc.get_theta_scan(level='3s', kinetic_energy=1000.,
|
||||
theta=np.arange(0., 80.), data=all_data)
|
||||
|
||||
# OPTIONAL, to improve the display of the data we will change the dataset
|
||||
# default title as well as the plot title
|
||||
t = "order {:d}, n = {:d}".format(order, chain_length) # A useful title
|
||||
dset = all_data[-1] # get the last dataset
|
||||
dset.title = t # change its title
|
||||
# get its last view (there is only one defined for each dataset)
|
||||
v = dset.views()[-1]
|
||||
v.set_plot_options(title=t) # change the title of the figure
|
||||
|
||||
|
||||
|
||||
# OPTIONAL, set the same scale for all plots
|
||||
# 1. iterate over all computed cross_sections to find the absolute minimum and
|
||||
# maximum of the data
|
||||
min_cs = max_cs = 0
|
||||
for dset in all_data:
|
||||
min_cs = min(min_cs, np.min(dset.cross_section))
|
||||
max_cs = max(max_cs, np.max(dset.cross_section))
|
||||
|
||||
# 2. for each view in each dataset, change the scale accordingly
|
||||
for dset in all_data:
|
||||
v = dset.views()[-1]
|
||||
v.set_plot_options(ylim=[min_cs, max_cs])
|
||||
|
||||
# Pop up the graphical window
|
||||
all_data.view()
|
||||
# You can end your script with the line below to remove the temporary
|
||||
# folder needed for the calculation
|
||||
calc.shutdown()
|
After Width: | Height: | Size: 232 KiB |
|
@ -0,0 +1,44 @@
|
|||
From single scattering to multiple scattering effects
|
||||
-----------------------------------------------------
|
||||
|
||||
In this tutorial we will observe one of the main difference between a single
|
||||
and a multiple scatteirng process: the *defocusing effect*.
|
||||
|
||||
We will reproduce a calculation performed by M.-L Xu, J.J. Barton and M.A. Van Hove
|
||||
in their paper of 1989 (see :ref:`below <refTuto2>` )
|
||||
In the spirit of figure 3 of their paper, We create 3 atomic chains of Ni
|
||||
atoms (2, 3 and 5 atoms) tilted by 45° and we compare the intensity of the forward scattering
|
||||
peak as a function of the scattering order: for single scattering and for a multiple
|
||||
scattering at the 5th order.
|
||||
|
||||
Below is a commented version of this example. You can download it :download:`here
|
||||
<Ni_chain.py>`
|
||||
|
||||
.. literalinclude:: Ni_chain.py
|
||||
:linenos:
|
||||
|
||||
|
||||
The resulting ouput is reported below. We added a sketch of the atomic chains
|
||||
on the left hand side of the figure. You can see that for the single scattering
|
||||
computation (left column), the forward peak is growing with increasing the
|
||||
number of atoms in the chain, while it is clearly damped when using the
|
||||
multiple scattering approach. Electrons are focused by the second atom in the
|
||||
chain and *over* focused again by the third atom leading to a diverging
|
||||
trajectory for this electron which in turn lowers the signal.
|
||||
|
||||
.. figure:: Ni_fig1.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Figure 4. Polar scan of a Ni chain of 2-5 atoms for single and mutliple (5th order)
|
||||
scattering.
|
||||
|
||||
|
||||
.. _refTuto2:
|
||||
|
||||
.. seealso::
|
||||
|
||||
Electron scattering by atomic chains: Multiple-scattering effects
|
||||
M.-L Xu, J.J. Barton & M.A. Van Hove, Phys. Rev. B **39** (12) p8275 (1989)
|
||||
`[doi] <https://doi.org/10.1103/PhysRevB.39.8275>`__
|
||||
|
|
@ -0,0 +1,153 @@
|
|||
# coding: utf-8
|
||||
|
||||
from msspec.calculator import MSSPEC, XRaySource
|
||||
from msspec.utils import *
|
||||
from msspec.iodata import Data
|
||||
from ase.build import bulk
|
||||
|
||||
import numpy as np
|
||||
import sys
|
||||
|
||||
a0 = 3.6 # The lattice parameter in angstroms
|
||||
phi = np.arange(0, 100) # An array of phi angles
|
||||
all_T = np.arange(300, 1000, 100) # All temperatures used for the calculation
|
||||
all_theta = np.array([45, 83]) # 2 polar angles, 83° is grazing detection
|
||||
eps = 0.01 # a useful small value
|
||||
|
||||
DATA_FNAME = 'all_data.hdf5' # Where to store all the data
|
||||
ANALYSIS_FNAME = 'analysis.hdf5'
|
||||
|
||||
|
||||
def compute(filename):
|
||||
"""Will compute a phi scan for an emitter in the first, second and third plane
|
||||
of a copper substrate for various polar angles and temperatures.
|
||||
In a second step (outside this function), intensities from all these emitters
|
||||
are added to get the signal of a substrate."""
|
||||
calc = MSSPEC(spectroscopy='PED')
|
||||
calc.source_parameters.energy = XRaySource.AL_KALPHA
|
||||
calc.muffintin_parameters.interstitial_potential = 14.1
|
||||
|
||||
calc.calculation_parameters.vibrational_damping = 'averaged_tl'
|
||||
calc.calculation_parameters.use_debye_model = True
|
||||
calc.calculation_parameters.debye_temperature = 343
|
||||
calc.calculation_parameters.vibration_scaling = 1.2
|
||||
|
||||
calc.detector_parameters.average_sampling = 'high'
|
||||
calc.detector_parameters.angular_acceptance = 5.7
|
||||
|
||||
filters = ['forward_scattering', 'backward_scattering']
|
||||
calc.calculation_parameters.path_filtering = filters
|
||||
|
||||
calc.calculation_parameters.RA_cutoff = 3
|
||||
|
||||
# You can also choose a real potential and manually define the
|
||||
# electron mean free path
|
||||
#
|
||||
# calc.tmatrix_parameters.exchange_correlation = 'hedin_lundqvist_real'
|
||||
# calc.calculation_parameters.mean_free_path = 10.
|
||||
|
||||
data = None # init an empty data object
|
||||
for temperature in all_T:
|
||||
for plane in range(3):
|
||||
# We create a cylindrical cluster here with one plane below the emitter
|
||||
# and 0, 1 or to planes above the emitter
|
||||
cluster = bulk('Cu', a=a0, cubic=True)
|
||||
cluster = cluster.repeat((20, 20, 8))
|
||||
center_cluster(cluster)
|
||||
cluster = cut_cylinder(cluster, radius=1.5 * a0 + eps)
|
||||
cluster = cut_plane(cluster, z=-( a0/2 + eps))
|
||||
cluster = cut_plane(cluster, z=(plane) * a0 / 2 + eps)
|
||||
cluster.absorber = get_atom_index(cluster, 0, 0, 0)
|
||||
|
||||
calc.calculation_parameters.temperature = temperature
|
||||
# the scattering order depends on the number of planes above
|
||||
# the emitter to speed up calculations
|
||||
calc.calculation_parameters.scattering_order = 1 + plane
|
||||
|
||||
calc.set_atoms(cluster)
|
||||
# Here starts the calculation
|
||||
data = calc.get_phi_scan(level='2p3/2', theta=all_theta, phi=phi,
|
||||
kinetic_energy=560, data=data)
|
||||
|
||||
data.save(filename)
|
||||
|
||||
def process_data(datafile, outputfile):
|
||||
"""Will create another Data file with some phi-scans corresponding to 3
|
||||
planes at different temperatures and the anisotropy curve for 45° and
|
||||
grazing detection.
|
||||
"""
|
||||
def get_signal(datafile, T=300, theta=45):
|
||||
data = Data.load(datafile)
|
||||
total = None
|
||||
for dset in data:
|
||||
p = {_['group'] + '.' + _['name']: _['value'] for _ in dset.parameters()}
|
||||
temperature = np.float(p['CalculationParameters.temperature'])
|
||||
if temperature != T: continue
|
||||
i = np.where(dset.plane == -1)
|
||||
j = np.where(dset.theta[i] == theta)
|
||||
signal = dset.cross_section[i][j]
|
||||
try:
|
||||
total += signal
|
||||
except:
|
||||
total = signal
|
||||
phi = dset.phi[i][j]
|
||||
return phi, total
|
||||
|
||||
analysis = Data('Temperature tutorial')
|
||||
scans_dset = analysis.add_dset('Phi scans')
|
||||
scans_view = scans_dset.add_view('Figure 1',
|
||||
title=r'Cu(2p) Azimuthal scan for $\theta = 83\degree$',
|
||||
xlabel=r'$\Phi (\degree$)',
|
||||
ylabel='Signal (a.u.)')
|
||||
anisotropy_dset = analysis.add_dset('Anisotropies')
|
||||
anisotropy_view = anisotropy_dset.add_view('Figure 2',
|
||||
title='Relative anisotropies for Cu(2p)',
|
||||
marker='o',
|
||||
xlabel='T (K)',
|
||||
ylabel=r'$\frac{\Delta I / I_{max}(T)}{\Delta I_{300} / I_{max}(300)} (\%)$')
|
||||
for theta in all_theta:
|
||||
for T in all_T:
|
||||
PHI, SIGNAL = get_signal(datafile, T=T, theta=theta)
|
||||
for phi, signal in zip(PHI, SIGNAL):
|
||||
scans_dset.add_row(phi=phi, signal=signal, theta=theta, temperature=T)
|
||||
|
||||
middleT = all_T[np.abs(all_T - np.mean(all_T)).argmin()]
|
||||
if theta == 83 and T in [np.min(all_T), middleT, np.max(all_T)]:
|
||||
scans_view.select('phi', 'signal',
|
||||
where='temperature == {:f} and theta == {:f}'.format(T, theta),
|
||||
legend='{:.0f} K'.format(T))
|
||||
|
||||
PHI, SIGNAL0 = get_signal(datafile, T=np.min(all_T), theta=theta)
|
||||
Imax = np.max(SIGNAL)
|
||||
Imax0 = np.max(SIGNAL0)
|
||||
dI = Imax - np.min(SIGNAL)
|
||||
dI0 = Imax0 - np.min(SIGNAL0)
|
||||
ani = (dI / Imax) / (dI0 / Imax0)
|
||||
anisotropy_dset.add_row(temperature=T, anisotropy=ani, theta=theta)
|
||||
|
||||
anisotropy_view.select('temperature', 'anisotropy',
|
||||
where='theta == {:f}'.format(theta),
|
||||
legend=r'$\theta = {:.0f} \degree$'.format(theta))
|
||||
|
||||
analysis.save(outputfile)
|
||||
|
||||
|
||||
# A convenient way to run the script, just specify one or more of these calc, analyse or
|
||||
# view keywords as arguments
|
||||
# ... to calculate all the data, analyse the data and view the results, run
|
||||
# python Cu_temperature.py calc analyse view
|
||||
# ... to just view the results, simply run
|
||||
# python Cu_temperature.py view
|
||||
|
||||
if 'calc' in sys.argv:
|
||||
compute(DATA_FNAME)
|
||||
if 'analyse' in sys.argv:
|
||||
process_data(DATA_FNAME, ANALYSIS_FNAME)
|
||||
if 'view' in sys.argv:
|
||||
data = Data.load(ANALYSIS_FNAME)
|
||||
data.view()
|
||||
|
||||
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 50 KiB |
|
@ -0,0 +1,54 @@
|
|||
Let's raise the temperature
|
||||
---------------------------
|
||||
|
||||
In this tutorial we will learn how to introduce lattice vibrations in the calculation. Indeed, vibrational
|
||||
damping can greatly change the result of a calculation since it adds incoherence that will damp the modulations
|
||||
of the signal.
|
||||
|
||||
This was experimentally shown back to 1986 for example by R. Trehan and S. Fadley (see reference below). In their
|
||||
work, they performed azimutal scans of a copper(001) surface at 2 different polar angles: one at grazing incidence
|
||||
and one at 45° for incresing temperatures from 298K to roughly 1000K.
|
||||
|
||||
For each azimutal scan, they looked at the *anisotropy* of the signal, that is:
|
||||
|
||||
:math:`\frac{\Delta I}{I_{max}}`
|
||||
|
||||
This value is representative of how clear are the modulations of the signal. As it was shown by their
|
||||
experiments, this anisotropy decreases when the temperature is increased due to the increased disorder
|
||||
in the structure coming from thermal agitation. They also showed that this variation in anisotropy is more
|
||||
pronounced for grazing incidence angles. This is related to the fact that surface atoms are expected to
|
||||
vibrate more than bulk ones. They also proposed single scattering calculations that reproduced well these
|
||||
results.
|
||||
|
||||
We propose here to reproduce this kind of calculation to introduce the parameters that control the
|
||||
vibrational damping.
|
||||
|
||||
|
||||
.. figure:: fig1.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Azimutal scans for Cu(2p) at grazing incidence and at 45°.
|
||||
|
||||
|
||||
|
||||
.. figure:: fig2.png
|
||||
:align: center
|
||||
:width: 80%
|
||||
|
||||
Variation of anisotropy as a function of temperature and polar angle.
|
||||
|
||||
|
||||
|
||||
.. literalinclude:: Cu_temperature.py
|
||||
:linenos:
|
||||
|
||||
|
||||
Here is the full script used to generate those data (:download:`download <Cu_temperature.py>`)
|
||||
|
||||
.. seealso::
|
||||
|
||||
Temperature dependence x-ray photoelectron diffraction from copper: Surface and bulk effects
|
||||
R. Trehan & C. S. Fadley, Phys. Rev. B **34** (10) p1654 (1986)
|
||||
`[doi] <https://doi.org/10.1103/PhysRevB.34.6784>`__
|
||||
|
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 14 KiB |