Imported Upstream version 1.0.2
Eugen Wintersberger
10 years ago
0 | v1.0.2, 2013-09-17 | |
1 | ||
2 | * add documentation source to tarball | |
3 | * generate info file from documentation | |
4 | * make c extension work with python3, and in general make XU more python3 | |
5 | friendly | |
6 | * fix bug in SiGe materials lattice_const_AB function | |
7 | ||
0 | 8 | v1.0.1, 2013-09-14 |
1 | 9 | |
2 | 10 | * new way of parsing motor positions and counter values from EDF files |
0 | 0 | Metadata-Version: 1.1 |
1 | 1 | Name: xrayutilities |
2 | Version: 1.0.1 | |
2 | Version: 1.0.2 | |
3 | 3 | Summary: package for x-ray diffraction data evaluation |
4 | 4 | Home-page: http://xrayutilities.sourceforge.net |
5 | 5 | Author: Dominik Kriegner |
63 | 63 | refer to your operating system documentation to find out how to install |
64 | 64 | those packages. On Microsoft Windows refer to the Documentation for the |
65 | 65 | easiest way of the installation (python(x,y)). |
66 | ||
67 | On Microsoft Windows with python(x,y) it is furthermore necessary to manually | |
68 | specify the C compiler used for building the extension modules using | |
69 | ||
70 | $> python setup.py build -c mingw32 | |
71 | ||
72 | before the installation can be performed as described above. | |
73 | ||
74 | Installation for Python-3.X | |
75 | =========================== | |
76 | ||
77 | The current developement is still focues mainly on Python-2.7, however | |
78 | xrayutilies can be used with Python-3.X versions when the 2to3 tool is used to | |
79 | patch the Python sources. We suggest to use | |
80 | ||
81 | $> 2to3 -p xrayutilities >> xrayutilities-python3.patch | |
82 | ||
83 | to create the necessary patch. or | |
84 | ||
85 | $> 2to3 -p -w xrayutilities | |
86 | ||
87 | to change the source tree directly for use with Python3.X. | |
66 | 88 | |
67 | 89 | The python package configuration |
68 | 90 | ================================ |
141 | 163 | |
142 | 164 | in any web-browser, after the installation is finished. |
143 | 165 | |
166 | To build the PDF documentation from the sources use sphinx: | |
167 | ||
168 | sphinx-build -b latex doc/source doc/latex | |
169 | cd doc/latex; make | |
170 | ||
171 | or generate a texinfo file using | |
172 | ||
173 | sphinx-build -b texinfo doc/source doc/texinfo | |
174 | cd doc/texinfo; make | |
175 | ||
144 | 176 | |
145 | 177 | PACKAGING |
146 | 178 | ========= |
55 | 55 | refer to your operating system documentation to find out how to install |
56 | 56 | those packages. On Microsoft Windows refer to the Documentation for the |
57 | 57 | easiest way of the installation (python(x,y)). |
58 | ||
59 | On Microsoft Windows with python(x,y) it is furthermore necessary to manually | |
60 | specify the C compiler used for building the extension modules using | |
61 | ||
62 | $> python setup.py build -c mingw32 | |
63 | ||
64 | before the installation can be performed as described above. | |
65 | ||
66 | Installation for Python-3.X | |
67 | =========================== | |
68 | ||
69 | The current developement is still focues mainly on Python-2.7, however | |
70 | xrayutilies can be used with Python-3.X versions when the 2to3 tool is used to | |
71 | patch the Python sources. We suggest to use | |
72 | ||
73 | $> 2to3 -p xrayutilities >> xrayutilities-python3.patch | |
74 | ||
75 | to create the necessary patch. or | |
76 | ||
77 | $> 2to3 -p -w xrayutilities | |
78 | ||
79 | to change the source tree directly for use with Python3.X. | |
58 | 80 | |
59 | 81 | The python package configuration |
60 | 82 | ================================ |
133 | 155 | |
134 | 156 | in any web-browser, after the installation is finished. |
135 | 157 | |
158 | To build the PDF documentation from the sources use sphinx: | |
159 | ||
160 | sphinx-build -b latex doc/source doc/latex | |
161 | cd doc/latex; make | |
162 | ||
163 | or generate a texinfo file using | |
164 | ||
165 | sphinx-build -b texinfo doc/source doc/texinfo | |
166 | cd doc/texinfo; make | |
167 | ||
136 | 168 | |
137 | 169 | PACKAGING |
138 | 170 | ========= |
Binary diff not shown
0 | # -*- coding: utf-8 -*- | |
1 | # | |
2 | # xrayutilities documentation build configuration file, created by | |
3 | # sphinx-quickstart on Sat Mar 2 11:39:01 2013. | |
4 | # | |
5 | # This file is execfile()d with the current directory set to its containing dir. | |
6 | # | |
7 | # Note that not all possible configuration values are present in this | |
8 | # autogenerated file. | |
9 | # | |
10 | # All configuration values have a default; values that are commented out | |
11 | # serve to show the default. | |
12 | ||
13 | import sys, os | |
14 | ||
15 | # If extensions (or modules to document with autodoc) are in another directory, | |
16 | # add these directories to sys.path here. If the directory is relative to the | |
17 | # documentation root, use os.path.abspath to make it absolute, like shown here. | |
18 | #sys.path.insert(0, os.path.abspath('.')) | |
19 | ||
20 | # -- General configuration ----------------------------------------------------- | |
21 | ||
22 | # If your documentation needs a minimal Sphinx version, state it here. | |
23 | #needs_sphinx = '1.0' | |
24 | ||
25 | # Add any Sphinx extension module names here, as strings. They can be extensions | |
26 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. | |
27 | extensions = ['sphinx.ext.autodoc', 'sphinx.ext.todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.mathjax', 'sphinx.ext.viewcode'] | |
28 | ||
29 | # Add any paths that contain templates here, relative to this directory. | |
30 | templates_path = ['_templates'] | |
31 | ||
32 | # The suffix of source filenames. | |
33 | source_suffix = '.rst' | |
34 | ||
35 | # The encoding of source files. | |
36 | #source_encoding = 'utf-8-sig' | |
37 | ||
38 | # The master toctree document. | |
39 | master_doc = 'index' | |
40 | ||
41 | # General information about the project. | |
42 | project = u'xrayutilities' | |
43 | copyright = u'2013, Dominik Kriegner, Eugen Wintersberger' | |
44 | ||
45 | # The version info for the project you're documenting, acts as replacement for | |
46 | # |version| and |release|, also used in various other places throughout the | |
47 | # built documents. | |
48 | # | |
49 | # The short X.Y version. | |
50 | version = '1.0' | |
51 | # The full version, including alpha/beta/rc tags. | |
52 | release = '1.0.2' | |
53 | ||
54 | # The language for content autogenerated by Sphinx. Refer to documentation | |
55 | # for a list of supported languages. | |
56 | #language = None | |
57 | ||
58 | # There are two options for replacing |today|: either, you set today to some | |
59 | # non-false value, then it is used: | |
60 | #today = '' | |
61 | # Else, today_fmt is used as the format for a strftime call. | |
62 | #today_fmt = '%B %d, %Y' | |
63 | ||
64 | # List of patterns, relative to source directory, that match files and | |
65 | # directories to ignore when looking for source files. | |
66 | exclude_patterns = [] | |
67 | ||
68 | # The reST default role (used for this markup: `text`) to use for all documents. | |
69 | #default_role = None | |
70 | ||
71 | # If true, '()' will be appended to :func: etc. cross-reference text. | |
72 | #add_function_parentheses = True | |
73 | ||
74 | # If true, the current module name will be prepended to all description | |
75 | # unit titles (such as .. function::). | |
76 | #add_module_names = True | |
77 | ||
78 | # If true, sectionauthor and moduleauthor directives will be shown in the | |
79 | # output. They are ignored by default. | |
80 | #show_authors = False | |
81 | ||
82 | # The name of the Pygments (syntax highlighting) style to use. | |
83 | pygments_style = 'sphinx' | |
84 | ||
85 | # A list of ignored prefixes for module index sorting. | |
86 | #modindex_common_prefix = [] | |
87 | ||
88 | ||
89 | # -- Options for HTML output --------------------------------------------------- | |
90 | ||
91 | # The theme to use for HTML and HTML Help pages. See the documentation for | |
92 | # a list of builtin themes. | |
93 | html_theme = 'nature' | |
94 | ||
95 | # Theme options are theme-specific and customize the look and feel of a theme | |
96 | # further. For a list of options available for each theme, see the | |
97 | # documentation. | |
98 | html_theme_options = {'sidebarwidth':280} | |
99 | ||
100 | # Add any paths that contain custom themes here, relative to this directory. | |
101 | #html_theme_path = [] | |
102 | ||
103 | # The name for this set of Sphinx documents. If None, it defaults to | |
104 | # "<project> v<release> documentation". | |
105 | #html_title = None | |
106 | ||
107 | # A shorter title for the navigation bar. Default is the same as html_title. | |
108 | #html_short_title = None | |
109 | ||
110 | # The name of an image file (relative to this directory) to place at the top | |
111 | # of the sidebar. | |
112 | html_logo = 'pics/xray-logo.png' | |
113 | ||
114 | # The name of an image file (within the static path) to use as favicon of the | |
115 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 | |
116 | # pixels large. | |
117 | html_favicon = 'favicon.ico' | |
118 | ||
119 | # Add any paths that contain custom static files (such as style sheets) here, | |
120 | # relative to this directory. They are copied after the builtin static files, | |
121 | # so a file named "default.css" will overwrite the builtin "default.css". | |
122 | html_static_path = ['_static'] | |
123 | ||
124 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, | |
125 | # using the given strftime format. | |
126 | #html_last_updated_fmt = '%b %d, %Y' | |
127 | ||
128 | # If true, SmartyPants will be used to convert quotes and dashes to | |
129 | # typographically correct entities. | |
130 | #html_use_smartypants = True | |
131 | ||
132 | # Custom sidebar templates, maps document names to template names. | |
133 | #html_sidebars = {} | |
134 | ||
135 | # Additional templates that should be rendered to pages, maps page names to | |
136 | # template names. | |
137 | #html_additional_pages = {} | |
138 | ||
139 | # If false, no module index is generated. | |
140 | #html_domain_indices = True | |
141 | ||
142 | # If false, no index is generated. | |
143 | #html_use_index = True | |
144 | ||
145 | # If true, the index is split into individual pages for each letter. | |
146 | #html_split_index = False | |
147 | ||
148 | # If true, links to the reST sources are added to the pages. | |
149 | #html_show_sourcelink = True | |
150 | ||
151 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. | |
152 | #html_show_sphinx = True | |
153 | ||
154 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. | |
155 | #html_show_copyright = True | |
156 | ||
157 | # If true, an OpenSearch description file will be output, and all pages will | |
158 | # contain a <link> tag referring to it. The value of this option must be the | |
159 | # base URL from which the finished HTML is served. | |
160 | #html_use_opensearch = '' | |
161 | ||
162 | # This is the file name suffix for HTML files (e.g. ".xhtml"). | |
163 | #html_file_suffix = None | |
164 | ||
165 | # Output file base name for HTML help builder. | |
166 | htmlhelp_basename = 'xrayutilitiesdoc' | |
167 | ||
168 | ||
169 | # -- Options for LaTeX output -------------------------------------------------- | |
170 | ||
171 | latex_elements = { | |
172 | # The paper size ('letterpaper' or 'a4paper'). | |
173 | 'papersize': 'a4paper', | |
174 | ||
175 | # The font size ('10pt', '11pt' or '12pt'). | |
176 | #'pointsize': '10pt', | |
177 | ||
178 | # Additional stuff for the LaTeX preamble. | |
179 | 'preamble': '\\usepackage{enumitem}\n\setlistdepth{15}', | |
180 | } | |
181 | ||
182 | # Grouping the document tree into LaTeX files. List of tuples | |
183 | # (source start file, target name, title, author, documentclass [howto/manual]). | |
184 | latex_documents = [ | |
185 | ('index', 'xrayutilities.tex', u'xrayutilities Documentation', | |
186 | u'Dominik Kriegner \\and Eugen Wintersberger', 'manual'), | |
187 | ] | |
188 | ||
189 | # The name of an image file (relative to this directory) to place at the top of | |
190 | # the title page. | |
191 | #latex_logo = None | |
192 | ||
193 | # For "manual" documents, if this is true, then toplevel headings are parts, | |
194 | # not chapters. | |
195 | #latex_use_parts = False | |
196 | ||
197 | # If true, show page references after internal links. | |
198 | #latex_show_pagerefs = False | |
199 | ||
200 | # If true, show URL addresses after external links. | |
201 | #latex_show_urls = False | |
202 | ||
203 | # Documents to append as an appendix to all manuals. | |
204 | #latex_appendices = [] | |
205 | ||
206 | # If false, no module index is generated. | |
207 | #latex_domain_indices = True | |
208 | ||
209 | ||
210 | # -- Options for manual page output -------------------------------------------- | |
211 | ||
212 | # One entry per manual page. List of tuples | |
213 | # (source start file, name, description, authors, manual section). | |
214 | man_pages = [ | |
215 | ('index', 'xrayutilities', u'xrayutilities Documentation', | |
216 | [u'Dominik Kriegner, Eugen Wintersberger'], 1) | |
217 | ] | |
218 | ||
219 | # If true, show URL addresses after external links. | |
220 | #man_show_urls = False | |
221 | ||
222 | ||
223 | # -- Options for Texinfo output ------------------------------------------------ | |
224 | ||
225 | # Grouping the document tree into Texinfo files. List of tuples | |
226 | # (source start file, target name, title, author, | |
227 | # dir menu entry, description, category) | |
228 | texinfo_documents = [ | |
229 | ('index', 'xrayutilities', u'xrayutilities Documentation', | |
230 | u'Dominik Kriegner, Eugen Wintersberger', 'xrayutilities', 'a Python package for diffraction physicists', | |
231 | 'Miscellaneous'), | |
232 | ] | |
233 | ||
234 | # Documents to append as an appendix to all manuals. | |
235 | #texinfo_appendices = [] | |
236 | ||
237 | # If false, no module index is generated. | |
238 | #texinfo_domain_indices = True | |
239 | ||
240 | # How to display URL addresses: 'footnote', 'no', or 'inline'. | |
241 | #texinfo_show_urls = 'footnote' | |
242 | ||
243 | ||
244 | # my additions for pre-processing the docstring | |
245 | # parameter list of functions should be found and changed to be properly formated in the output | |
246 | import re | |
247 | def process_docstring(app, what, name, obj, options, lines): | |
248 | # highlight parameters names | |
249 | # insert section highlighting | |
250 | for i in xrange(len(lines)): | |
251 | # replace/protect * character | |
252 | lines[i] = re.sub(r'\*',r'\\*',lines[i]) | |
253 | # insert note block | |
254 | lines[i] = re.sub(r'^\s*Note:',r'.. note:: Note:',lines[i]) | |
255 | # parameter names | |
256 | lines[i] = re.sub(r'^(\s*)([\w,()]+)(\s*:|\s{2,}|\s\.{1,}\s)',r'\1:\2: ',lines[i]) | |
257 | # section names (multiline matching) | |
258 | if re.match('^\s*-{3,}\s*$',lines[i]): | |
259 | try: | |
260 | lines[i] = re.sub(r'^([a-zA-Z0-9_,:\s]*)',r'\1:',lines[i-1]) | |
261 | lines[i] = ' ' | |
262 | except: pass | |
263 | ||
264 | def setup(app): | |
265 | app.connect('autodoc-process-docstring', process_docstring) | |
266 | ||
267 |
0 | """ | |
1 | example script to show the detector parameter determination for area detectors from images recorded in the primary beam | |
2 | """ | |
3 | ||
4 | import xrayutilities as xu | |
5 | import os | |
6 | ||
7 | en=10300.0 #eV | |
8 | datadir = os.path.join("data","wire_") # data path for CCD files | |
9 | filetmp = os.path.join(datadir,"wire_12_%05d.edf.gz") # template for the CCD file names | |
10 | ||
11 | ## manually selected images | |
12 | # select images which have the primary beam fully on the CCD | |
13 | imagenrs = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33] | |
14 | ||
15 | images = [] | |
16 | ang1 = [] | |
17 | ang2 = [] | |
18 | ||
19 | # read images and angular positions from the data file | |
20 | # this might differ for data taken at different beamlines since | |
21 | # they way how motor positions are stored is not always consistent | |
22 | for imgnr in imagenrs: | |
23 | filename = filetmp%imgnr | |
24 | edf = xu.io.EDFFile(filename) | |
25 | images.append(edf.data) | |
26 | ang1.append(float(edf.header['ESRF_ID01_PSIC_NANO_NU'])) | |
27 | ang2.append(float(edf.header['ESRF_ID01_PSIC_NANO_DEL'])) | |
28 | ||
29 | ||
30 | # call the fit for the detector parameters | |
31 | # detector arm rotations and primary beam direction need to be given | |
32 | # in total 8 parameters are fitted, however the 4 misalignment parameters can be fixed | |
33 | # they are the detector tilt azimuth, the detector tilt angle, the detector rotation around the primary beam and the outer angle offset | |
34 | param,eps = xu.analysis.sample_align.area_detector_calib(ang1,ang2,images,['z+','y-'],'x+',start=(45,0,-0.7,0),fix=(False,False,False,False),wl=xu.lam2en(en)) | |
35 |
0 | """ | |
1 | example script to show the detector parameter determination for area detectors from images recorded in the primary beam | |
2 | and at known symmetric coplanar Bragg reflections of a reference crystal | |
3 | """ | |
4 | ||
5 | import xrayutilities as xu | |
6 | import os | |
7 | import numpy | |
8 | ||
9 | Si = xu.materials.Si | |
10 | ||
11 | datadir = 'data' | |
12 | specfile = "si_align.spec" | |
13 | ||
14 | en=15000 #eV | |
15 | wl = xu.lam2en(en) | |
16 | imgdir = os.path.join(datadir,"si_align_") # data path for CCD files | |
17 | filetmp = "si_align_12_%04d.edf.gz" | |
18 | ||
19 | qconv = xu.QConversion(['z+','y-'],['z+','y-'],[1,0,0]) | |
20 | hxrd = xu.HXRD(Si.Q(1,1,-2),Si.Q(1,1,1),wl=wl,qconv=qconv) | |
21 | ||
22 | ## manually selected images | |
23 | ||
24 | s = xu.io.SPECFile(specfile,path=datadir) | |
25 | for num in [61,62,63,20,21,26,27,28]: | |
26 | s[num].ReadData() | |
27 | try: | |
28 | imagenrs = numpy.append(imagenrs,s[num].data['ccd_n']) | |
29 | except: | |
30 | imagenrs = s[num].data['ccd_n'] | |
31 | ||
32 | # avoid images which do not have to full beam on the detector as well as other which show signal due to cosmic radiation | |
33 | avoid_images = [37,57,62,63,65,87,99,106,110,111,126,130,175,181,183,185,204,206,207,208,211,212,233,237,261,275,290] | |
34 | ||
35 | images = [] | |
36 | ang1 = [] # outer detector angle | |
37 | ang2 = [] # inner detector angle | |
38 | sang = [] # sample rocking angle | |
39 | hkls = [] # Miller indices of the reference reflections | |
40 | ||
41 | def hotpixelkill(ccd): | |
42 | """ | |
43 | function to remove hot pixels from CCD frames | |
44 | ADD REMOVE VALUES IF NEEDED! | |
45 | """ | |
46 | ccd[304,97] = 0 | |
47 | ccd[303,96] = 0 | |
48 | return ccd | |
49 | ||
50 | # read images and angular positions from the data file | |
51 | # this might differ for data taken at different beamlines since | |
52 | # they way how motor positions are stored is not always consistent | |
53 | for imgnr in numpy.sort(list(set(imagenrs)-set(avoid_images))[::4]): | |
54 | filename = os.path.join(imgdir,filetmp%imgnr) | |
55 | edf = xu.io.EDFFile(filename) | |
56 | ccd = hotpixelkill(edf.data) | |
57 | images.append(ccd) | |
58 | ang1.append(float(edf.header['motor_pos'].split()[4])) | |
59 | ang2.append(float(edf.header['motor_pos'].split()[3])) | |
60 | sang.append(float(edf.header['motor_pos'].split()[1])) | |
61 | if imgnr > 1293.: | |
62 | hkls.append((0,0,0)) | |
63 | elif imgnr < 139: | |
64 | hkls.append((0,0,numpy.sqrt(27))) #(3,3,3)) | |
65 | else: | |
66 | hkls.append((0,0,numpy.sqrt(75))) #(5,5,5)) | |
67 | ||
68 | # call the fit for the detector parameters | |
69 | # detector arm rotations and primary beam direction need to be given | |
70 | # in total 8 detector parameters + 2 additional parameters for the reference crystal orientation and the wavelength are fitted, | |
71 | # however the 4 misalignment parameters of the detector and the 3 other parameters can be fixed | |
72 | # the fixable parameters are detector tilt azimuth, the detector tilt angle, the detector rotation around the primary beam, the outer angle offset | |
73 | # sample tilt, sample tilt azimuth and the x-ray wavelength | |
74 | param,eps = xu.analysis.area_detector_calib_hkl(sang,ang1,ang2,images,hkls,hxrd,Si,['z+','y-'],'x+',start=(45,1.69,-0.55,-1.0,1.3,60.,wl),fix=(False,False,False,False,False,False,False),plot=True) | |
75 | ||
76 | # Following is an example of the output of the summary of the area_detector_calib_hkl function | |
77 | #total time needed for fit: 624.51sec | |
78 | #fitted parameters: epsilon: 9.9159e-08 (2,['Parameter convergence']) | |
79 | #param: (cch1,cch2,pwidth1,pwidth2,tiltazimuth,tilt,detrot,outerangle_offset,sampletilt,stazimuth,wavelength) | |
80 | #param: 367.12 349.27 6.8187e-05 6.8405e-05 131.4 2.87 -0.390 -0.061 1.201 318.44 0.8254 | |
81 | #please check the resulting data (consider setting plot=True) | |
82 | #detector rotation axis / primary beam direction (given by user): ['z+', 'y-'] / x+ | |
83 | #detector pixel directions / distance: z- y+ / 1 | |
84 | # detector initialization with: init_area('z-','y+',cch1=367.12,cch2=349.27,Nch1=516,Nch2=516, pwidth1=6.8187e-05,pwidth2=6.8405e-05,distance=1.,detrot=-0.390,tiltazimuth=131.4,tilt=2.867) | |
85 | #AND ALWAYS USE an (additional) OFFSET of -0.0611deg in the OUTER DETECTOR ANGLE! | |
86 | ||
87 | #param,eps = xu.analysis.area_detector_calib(ang1,ang2,images,['z+','y-'],'x+',start=(45,0,0,0),fix=(False,False,False,False),plot=True,wl=wl) | |
88 |
0 | """ | |
1 | example script to show how the detector parameters | |
2 | such as pixel width, center channel and detector tilt | |
3 | can be determined for a linear detector. | |
4 | """ | |
5 | ||
6 | import xrayutilities as xu | |
7 | import os | |
8 | ||
9 | # load any data file with with the detector spectra of a reference scan | |
10 | # in the primary beam, here I use spectra measured with a Seifert XRD | |
11 | # diffractometer | |
12 | dfile = os.path.join("data","primarybeam_alignment20130403_2_dis350.nja") | |
13 | s = xu.io.SeifertScan(dfile) | |
14 | ||
15 | ang = s.axispos["T"] # detector angles during the scan | |
16 | spectra = s.data[:,:,1] # detector spectra aquired | |
17 | ||
18 | # determine detector parameters | |
19 | # this function accepts some optional arguments to describe the goniometer | |
20 | # see the API documentation | |
21 | pwidth,cch,tilt = xu.analysis.linear_detector_calib(ang,spectra,usetilt=True) | |
22 |
0 | """ | |
1 | Example script to show how to use xrayutilities to read and plot | |
2 | reciprocal space map scans from a spec file created at the ESRF/ID10B | |
3 | ||
4 | for details about the measurement see: | |
5 | D Kriegner et al. Nanotechnology 22 425704 (2011) | |
6 | http://dx.doi.org/10.1088/0957-4484/22/42/425704 | |
7 | """ | |
8 | ||
9 | import numpy | |
10 | import matplotlib.pyplot as plt | |
11 | import xrayutilities as xu | |
12 | import os | |
13 | ||
14 | # global setting for the experiment | |
15 | sample = "test" # sample name used also as file name for the data file | |
16 | energy = 8042.5 # x-ray energy in eV | |
17 | center_ch = 715.9 # center channel of the linear detector | |
18 | chpdeg = 345.28 # channels per degree of the linear detector | |
19 | roi=[100,1340] # region of interest of the detector | |
20 | nchannel = 1500 # number of channels of the detector | |
21 | ||
22 | # intensity normalizer function responsible for count time and absorber correction | |
23 | absfun = lambda d: d["detcorr"]/d["psd2"].astype(numpy.float) | |
24 | normalizer_detcorr = xu.IntensityNormalizer("MCA",mon="Monitor",time="Seconds",absfun=absfun) | |
25 | ||
26 | # substrate material used for Bragg peak calculation to correct for experimental offsets | |
27 | InP = xu.materials.InP | |
28 | ||
29 | # initialize experimental class to specify the reference directions of your crystal | |
30 | # 11-2: inplane reference | |
31 | # 111: surface normal | |
32 | hxrd = xu.HXRD(InP.Q(1,1,-2),InP.Q(1,1,1),en=energy) | |
33 | ||
34 | # configure linear detector | |
35 | # detector direction + parameters need to be given | |
36 | # mounted along z direction, which corresponds to twotheta | |
37 | hxrd.Ang2Q.init_linear('z-',center_ch,nchannel,chpdeg=chpdeg,roi=roi) | |
38 | ||
39 | # read spec file and save to HDF5-file | |
40 | # since reading is much faster from HDF5 once the data are transformed | |
41 | h5file = os.path.join("data",sample+".h5") | |
42 | try: s # try if spec file object already exist ("run -i" in ipython) | |
43 | except NameError: s = xu.io.SPECFile(sample+".spec",path="data") | |
44 | else: s.Update() | |
45 | s.Save2HDF5(h5file) | |
46 | ||
47 | ################################# | |
48 | # InP (333) reciprocal space map | |
49 | omalign = 43.0529 # experimental aligned values | |
50 | ttalign = 86.0733 | |
51 | [omnominal,dummy,dummy,ttnominal] = hxrd.Q2Ang(InP.Q(3,3,3)) # nominal values of the substrate peak | |
52 | ||
53 | # read the data from the HDF5 file | |
54 | #(scan number:36, names of motors in spec file: omega= sample rocking, gamma = twotheta) | |
55 | [om,tt],MAP = xu.io.geth5_scan(h5file,36,'omega','gamma') | |
56 | # normalize the intensity values (absorber and count time corrections) | |
57 | psdraw = normalizer_detcorr(MAP) | |
58 | # remove unusable detector channels/regions (no averaging of detector channels) | |
59 | psd = xu.blockAveragePSD(psdraw, 1, roi=roi) | |
60 | ||
61 | # convert angular coordinates to reciprocal space + correct for offsets | |
62 | [qx,qy,qz] = hxrd.Ang2Q.linear(om,tt,delta=[omalign-omnominal, ttalign-ttnominal]) | |
63 | ||
64 | # calculate data on a regular grid of 200x201 points | |
65 | gridder = xu.Gridder2D(200,201) | |
66 | gridder(qy,qz,psd) | |
67 | # maplog function limits the shown dynamic range to 8 orders of magnitude from the maxium | |
68 | INT = xu.maplog(gridder.gdata.transpose(),8.,0) | |
69 | ||
70 | # plot the intensity as contour plot using matplotlib | |
71 | plt.figure() | |
72 | cf = plt.contourf(gridder.xaxis, gridder.yaxis,INT,100,extend='min') | |
73 | plt.xlabel(r'$Q_{[11\bar2]}$ ($\AA^{-1}$)') | |
74 | plt.ylabel(r'$Q_{[\bar1\bar1\bar1]}$ ($\AA^{-1}$)') | |
75 | cb = plt.colorbar(cf) | |
76 | cb.set_label(r"$\log($Int$)$ (cps)") |
0 | .. highlight:: python | |
1 | :linenothreshold: 5 | |
2 | ||
3 | .. _examplespage: | |
4 | ||
5 | Examples | |
6 | ======== | |
7 | ||
8 | In the following a few code-snippets are shown which should help you getting started with *xrayutilities*. Not all of the codes shown in the following will be run-able as stand-alone script. For fully running scripts look in the ``examples`` directory in the download found `here <https://sourceforge.net/projects/xrayutilities>`_. | |
9 | ||
10 | ||
11 | Reading data from data files | |
12 | ---------------------------- | |
13 | ||
14 | The ``io`` submodule provides classes for reading x-ray diffraction data in | |
15 | various formats. In the following few examples are given. | |
16 | ||
17 | Reading SPEC files | |
18 | ^^^^^^^^^^^^^^^^^^ | |
19 | ||
20 | Working with spec files in *xrayutilities* can be done in two distinct ways. | |
21 | 1. parsing the spec file for scan headers; and parsing the data only when needed | |
22 | 2. parsing the spec file for scan headers; parsing all data and dump them to an HDF5 file; reading the data from the HDF5 file. | |
23 | ||
24 | Both methods have their pros and cons. For example when you parse the spec-files over a network connection you need to re-read the data again over the network if using method 1) whereas you can dump them to a local file with method 2). But you will parse data of the complete file while dumping it to the HDF5 file. | |
25 | ||
26 | Both methods work incremental, so they do not start at the beginning of the file when you reread it, but start from the last position they were reading and work with files including data from linear detectors. | |
27 | ||
28 | An working example for both methods is given in the following.:: | |
29 | ||
30 | import tables | |
31 | import xrayutilities as xu | |
32 | import os | |
33 | ||
34 | # open spec file or use open SPECfile instance | |
35 | try: s | |
36 | except NameError: | |
37 | s = xu.io.SPECFile("sample_name.spec",path="./specdir") | |
38 | ||
39 | # method (1) | |
40 | scan10 = s[9] # Returns a SPECScan class, note 9 because the list starts at 0 | |
41 | scan10.ReadData() | |
42 | scan10data = scan10.data | |
43 | ||
44 | # method (2) | |
45 | h5file = os.path.join("h5dir","h5file.h5") | |
46 | s.Save2HDF5(h5file) # save content of SPEC file to HDF5 file | |
47 | # read data from HDF5 file | |
48 | [angle1,angle2],scan10data = xu.io.geth5_scan(h5file,[10], "motorname1", "motorname2") | |
49 | ||
50 | ||
51 | .. seealso:: | |
52 | the fully working example :ref:`helloworld` | |
53 | ||
54 | In the following it is shown how to re-parsing the SPEC file for new scans and reread the scans (1) or update the HDF5 file(2) | |
55 | ||
56 | :: | |
57 | ||
58 | s.Update() # reparse for new scans in open SPECFile instance | |
59 | ||
60 | # reread data method (1) | |
61 | scan10 = s[9] # Returns a SPECScan class | |
62 | scan10.ReadData() | |
63 | scan10data = scan10.data | |
64 | ||
65 | # reread data method (2) | |
66 | s.Save2HDF5(h5) # save content of SPEC file to HDF5 file | |
67 | # read data from HDF5 file | |
68 | [angle1,angle2],scan10data = xu.io.geth5_scan(h5file,[10], "motorname1", "motorname2") | |
69 | ||
70 | ||
71 | Reading EDF files | |
72 | ^^^^^^^^^^^^^^^^^ | |
73 | ||
74 | EDF files are mostly used to store CCD frames at ESRF recorded from various different detectors. This format is therefore used in combination with SPEC files. In an example the EDFFile class is used to parse the data from EDF files and store them to an HDF5 file. HDF5 if perfectly suited because it can handle large amount of data and compression.:: | |
75 | ||
76 | import tables | |
77 | import xrayutilities as xu | |
78 | import numpy | |
79 | ||
80 | specfile = "specfile.spec" | |
81 | h5file = "h5file.h5" | |
82 | h5 = tables.openFile(h5file,mode='a') | |
83 | ||
84 | s = xu.io.SPECFile(specfile,path=specdir) | |
85 | s.Save2HDF5(h5) # save to hdf5 file | |
86 | ||
87 | # read ccd frames from EDF files | |
88 | for i in range(1,1000,1): | |
89 | efile = "edfdir/sample_%04d.edf" %i | |
90 | e = xu.io.edf.EDFFile(efile,path=specdir) | |
91 | e.ReadData() | |
92 | g5 = h5.createGroup(h5.root,"frelon_%04d" %i) | |
93 | e.Save2HDF5(h5,group=g5) | |
94 | ||
95 | h5.close() | |
96 | ||
97 | .. seealso:: | |
98 | the fully working example provided in the ``examples`` directory perfectly suited for reading data from beamline ID01 | |
99 | ||
100 | ||
101 | Other formats | |
102 | ^^^^^^^^^^^^^ | |
103 | ||
104 | Other formats which can be read include | |
105 | ||
106 | * files recorded from `Panalytical <http://www.panalytical.com>`_ diffractometers in the ``.xrdml`` format. | |
107 | * files produces by the experimental control software at Hasylab/Desy (spectra). | |
108 | * ccd images in the tiff file format produced by RoperScientific CCD cameras and Perkin Elmer detectors. | |
109 | * files from recorded by Seifert diffractometer control software (``.nja``) | |
110 | * basic support is also provided for reading of ``cif`` files from structure database to extract unit cell parameters | |
111 | ||
112 | See the ``examples`` directory for more information and working example scripts. | |
113 | ||
114 | Angle calculation using ``experiment`` and ``material`` classes | |
115 | --------------------------------------------------------------- | |
116 | ||
117 | Methods for high angle x-ray diffraction experiments. Mostly for experiments performed in coplanar scattering geometry. An example will be given for the calculation of the position of Bragg reflections. | |
118 | ||
119 | :: | |
120 | ||
121 | import xrayutilities as xu | |
122 | Si = xu.materials.Si # load material from materials submodule | |
123 | ||
124 | # initialize experimental class with directions from experiment | |
125 | hxrd = xu.HXRD(Si.Q(1,1,-2),Si.Q(1,1,1)) | |
126 | # calculate angles of Bragg reflections and print them to the screen | |
127 | om,chi,phi,tt = hxrd.Q2Ang(Si.Q(1,1,1)) | |
128 | print("Si (111)") | |
129 | print("om,tt: %8.3f %8.3f" %(om,tt)) | |
130 | om,chi,phi,tt = hxrd.Q2Ang(Si.Q(2,2,4)) | |
131 | print("Si (224)") | |
132 | print("om,tt: %8.3f %8.3f" %(om,tt)) | |
133 | ||
134 | Note that on line 5 the ``HXRD`` class is initialized without specifying the energy used in the experiment. It will use the default energy stored in the configuration file, which defaults to CuK :math:`\alpha_1`. | |
135 | ||
136 | One could also call:: | |
137 | ||
138 | hxrd = xu.HXRD(Si.Q(1,1,-2),Si.Q(1,1,1),en=10000) # energy in eV | |
139 | ||
140 | to specify the energy explicitly. | |
141 | The ``HXRD`` class by default describes a four-circle goniometer as described in more detail `here <http://www.certif.com/spec_manual/fourc_4_1.html>`_. | |
142 | ||
143 | Similar functions exist for other experimental geometries. For grazing incidence diffraction one might use:: | |
144 | ||
145 | gid = xu.GID(Si.Q(1,-1,0),Si.Q(0,0,1)) | |
146 | # calculate angles and print them to the screen | |
147 | (alphai,azimuth,tt,beta) = gid.Q2Ang(Si.Q(2,-2,0)) | |
148 | print("azimuth,tt: %8.3f %8.3f" %(azimuth,tt)) | |
149 | ||
150 | There are two implementations for GID experiments. Both describe 2S+2D diffractometers. | |
151 | They differ by the order of the detector circles. One describes a setup as available at ID10B/ESRF. | |
152 | ||
153 | There exists also a powder diffraction class, which is able to convert powder scans from angular to reciprocal space and furthermore powder scans of materials can be simulated in a very primitive way, which should only be used to get an idea of the peak positions expected from a certain material. | |
154 | ||
155 | :: | |
156 | ||
157 | import xrayutilities as xu | |
158 | import matplotlib.pyplot as plt | |
159 | ||
160 | energy = (2*8048 + 8028)/3. # copper k alpha 1,2 | |
161 | ||
162 | # creating Indium powder | |
163 | In_powder = xu.Powder(xu.materials.In,en=energy) | |
164 | # calculating the reflection strength for the powder | |
165 | In_powder.PowderIntensity() | |
166 | ||
167 | # convoluting the peaks with a gaussian in q-space | |
168 | peak_width = 0.01 # in q-space | |
169 | resolution = 0.0005 # resolution in q-space | |
170 | In_th,In_int = In_powder.Convolute(resolution,peak_width) | |
171 | ||
172 | plt.figure() | |
173 | plt.xlabel(r"2Theta (deg)"); plt.ylabel(r"Intensity") | |
174 | # plot the convoluted signal | |
175 | plt.plot(In_th*2,In_int/In_int.max(),'k-',label="Indium powder convolution") | |
176 | # plot each peak in a bar plot | |
177 | plt.bar(In_powder.ang*2, In_powder.data/In_powder.data.max(), width=0.3, bottom=0, | |
178 | linewidth=0, color='r',align='center', orientation='vertical',label="Indium bar plot") | |
179 | ||
180 | plt.legend(); plt.set_xlim(15,100); plt.grid() | |
181 | ||
182 | One can also print the peak positions and other informations of a powder by | |
183 | ||
184 | >>> print In_powder | |
185 | Powder diffraction object | |
186 | ------------------------- | |
187 | Material: In | |
188 | Lattice: | |
189 | a1 = (3.252300 0.000000 0.000000), 3.252300 | |
190 | a2 = (0.000000 3.252300 0.000000), 3.252300 | |
191 | a3 = (0.000000 0.000000 4.946100), 4.946100 | |
192 | alpha = 90.000000, beta = 90.000000, gamma = 90.000000 | |
193 | Lattice base: | |
194 | Base point 0: In (49) (0.000000 0.000000 0.000000) occ=1.00 b=0.00 | |
195 | Base point 1: In (49) (0.500000 0.500000 0.500000) occ=1.00 b=0.00 | |
196 | Reflections: | |
197 | -------------- | |
198 | h k l | tth | |Q| | Int | Int (%) | |
199 | --------------------------------------------------------------- | |
200 | [-1, 0, -1] 32.9611 2.312 217.75 100.00 | |
201 | [0, 0, -2] 36.3267 2.541 41.80 19.20 | |
202 | [-1, -1, 0] 39.1721 2.732 67.72 31.10 | |
203 | [-1, -1, -2] 54.4859 3.731 50.75 23.31 | |
204 | .... | |
205 | ||
206 | ||
207 | Using the ``material`` class | |
208 | ---------------------------- | |
209 | ||
210 | *xrayutilities* provides a set of python classes to describe crystal lattices and | |
211 | materials. | |
212 | ||
213 | Examples show how to define a new material by defining its lattice and deriving a new material, furthermore materials can be used to calculate the structure factor of a Bragg reflection for an specific energy or the energy dependency of its structure factor for anomalous scattering. Data for this are taken from a database which is included in the download. | |
214 | ||
215 | First defining a new material from scratch is shown. This consists of an lattice with base and the type of atoms with elastic constants of the material:: | |
216 | ||
217 | import xrayutilities as xu | |
218 | ||
219 | # defining a ZincBlendeLattice with two types of atoms and lattice constant a | |
220 | def ZincBlendeLattice(aa,ab,a): | |
221 | #create lattice base | |
222 | lb = xu.materials.LatticeBase() | |
223 | lb.append(aa,[0,0,0]) | |
224 | lb.append(aa,[0.5,0.5,0]) | |
225 | lb.append(aa,[0.5,0,0.5]) | |
226 | lb.append(aa,[0,0.5,0.5]) | |
227 | lb.append(ab,[0.25,0.25,0.25]) | |
228 | lb.append(ab,[0.75,0.75,0.25]) | |
229 | lb.append(ab,[0.75,0.25,0.75]) | |
230 | lb.append(ab,[0.25,0.75,0.75]) | |
231 | ||
232 | #create lattice vectors | |
233 | a1 = [a,0,0] | |
234 | a2 = [0,a,0] | |
235 | a3 = [0,0,a] | |
236 | ||
237 | l = xu.materials.Lattice(a1,a2,a3,base=lb) | |
238 | return l | |
239 | ||
240 | # defining InP, no elastic properties are given, | |
241 | # helper functions exist to create the (6,6) elastic tensor for cubic materials | |
242 | atom_In = xu.materials.elements.In | |
243 | atom_P = xu.materials.elements.P | |
244 | elastictensor = xu.materials.CubicElasticTensor(10.11e+10,5.61e+10,4.56e+10) | |
245 | InP = xu.materials.Material("InP",ZincBlendeLattice(atom_In, atom_P ,5.8687), elastictensor) | |
246 | ||
247 | InP is of course already included in the xu.materials module and can be loaded by:: | |
248 | ||
249 | InP = xu.materials.InP | |
250 | ||
251 | like many other materials. | |
252 | ||
253 | ||
254 | Using the material properties the calculation of the reflection strength of a Bragg reflection can be done as follows:: | |
255 | ||
256 | import xrayutilities as xu | |
257 | import numpy | |
258 | ||
259 | # defining material and experimental setup | |
260 | InAs = xu.materials.InAs | |
261 | energy= 8048 # eV | |
262 | ||
263 | # calculate the structure factor for InAs (111) (222) (333) | |
264 | hkllist = [[1,1,1],[2,2,2],[3,3,3]] | |
265 | for hkl in hkllist: | |
266 | qvec = InAs.Q(hkl) | |
267 | F = InAs.StructureFactor(qvec,energy) | |
268 | print(" |F| = %8.3f" %numpy.abs(F)) | |
269 | ||
270 | ||
271 | Similar also the energy dependence of the structure factor can be determined:: | |
272 | ||
273 | import matplotlib.pyplot as plt | |
274 | ||
275 | energy= numpy.linspace(500,20000,5000) # 500 - 20000 eV | |
276 | F = InAs.StructureFactorForEnergy(InAs.Q(1,1,1),energy) | |
277 | ||
278 | plt.figure(); plt.clf() | |
279 | plt.plot(energy,F.real,'k-',label='Re(F)') | |
280 | plt.plot(energy,F.imag,'r-',label='Imag(F)') | |
281 | plt.xlabel("Energy (eV)"); plt.ylabel("F"); plt.legend() | |
282 | ||
283 | ||
284 | ||
285 | It is also possible to calculate the components of the structure factor of atoms, which may be needed for input into XRD simulations.:: | |
286 | ||
287 | # f = f0(|Q|) + f1(en) + j * f2(en) | |
288 | import xrayutilities as xu | |
289 | import numpy | |
290 | ||
291 | Fe = xu.materials.elements.Fe # iron atom | |
292 | Q = numpy.array([0,0,1.9],dtype=numpy.double) | |
293 | en = 10000 # energy in eV | |
294 | ||
295 | print "Iron (Fe): E: %9.1f eV" % en | |
296 | print "f0: %8.4g" % Fe.f0(numpy.linalg.norm(Q)) | |
297 | print "f1: %8.4g" % Fe.f1(en) | |
298 | print "f2: %8.4g" % Fe.f2(en) | |
299 | ||
300 | ||
301 | User-specific config file | |
302 | ------------------------- | |
303 | ||
304 | Several options of *xrayutilities* can be changed by options in a config file. This includes the default x-ray energy as well as parameters to set the number of threads used by the parallel code and the verbosity of the output. | |
305 | ||
306 | The default options are stored inside the installad Python module and should not be changed. Instead it is suggested to use a user-specific config file | |
307 | '~/.xrayutilities.conf' or a 'xrayutilities.conf' file in the working directory. | |
308 | ||
309 | An example of such a user config file is shown below: | |
310 | ||
311 | .. code-block:: python | |
312 | ||
313 | # begin of xrayutilities configuration | |
314 | [xrayutilities] | |
315 | ||
316 | # verbosity level of information and debugging outputs | |
317 | # 0: no output | |
318 | # 1: very import notes for users | |
319 | # 2: less import notes for users (e.g. intermediate results) | |
320 | # 3: debuging output (e.g. print everything, which could be interesing) | |
321 | # levels can be changed in the config file as well | |
322 | verbosity = 1 | |
323 | ||
324 | # default wavelength in Angstrom, | |
325 | wavelength = MoKa1 # Molybdenum K alpha1 radiation (17479.374eV) | |
326 | ||
327 | # default energy in eV | |
328 | # if energy is given wavelength settings will be ignored | |
329 | #energy = 10000 #eV | |
330 | ||
331 | # number of threads to use in parallel sections of the code | |
332 | nthreads = 1 | |
333 | # 0: the maximum number of available threads will be used (as returned by omp_get_max_threads()) | |
334 | # n: n-threads will be used | |
335 | ||
336 | ||
337 | ||
338 | Determining detector parameters | |
339 | ------------------------------- | |
340 | ||
341 | In the following three examples of how to determine the detector parameters for linear and area detectors is given. | |
342 | The procedure we use is in more detail described in this `article <http://arxiv.org/abs/1304.1732>`_. | |
343 | ||
344 | Linear detectors | |
345 | ^^^^^^^^^^^^^^^^ | |
346 | ||
347 | To determine the detector parameters of a linear detector one needs to perform a scan with the detector angle through the primary beam and aquire a detector spectrum at any point. | |
348 | ||
349 | Using the following script determines the parameters necessary for the detector initialization, which are: | |
350 | ||
351 | * pixelwidth of one channel | |
352 | * the center channel | |
353 | * and the detector tilt (optional) | |
354 | ||
355 | .. literalinclude:: example_xu_linear_detector_parameters.py | |
356 | :linenos: | |
357 | :language: python | |
358 | ||
359 | ||
360 | Area detector (Variant 1) | |
361 | ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
362 | ||
363 | To determine the detector parameters of a area detector one needs to perform scans with the detector angles through the primary beam and aquire a detector images at any position. | |
364 | For the area detector at least two scans (one with the outer detector and and one with the inner detector angle) are required. | |
365 | ||
366 | Using the following script determines the parameters necessary for the detector initialization from such scans in the primary beam only. Further down we discuss an other variant which is also able to use additionally detector images recorded at the Bragg reflection of a known reference crystal. | |
367 | ||
368 | The determined detector parameters are: | |
369 | ||
370 | * pixelwidth of the channels in both directions (2 parameters) | |
371 | * center channels: position of the primary beam at the true zero position of the goniometer (considering the outer angle offset) (2 parameters) | |
372 | * detector tilt azimuth in degree from 0 to 360 | |
373 | * detector tilt angle in degree (>0deg) | |
374 | * detector rotation around the primary beam in degree | |
375 | * outer angle offset, which describes a offset of the outer detector angle from its true zero position | |
376 | ||
377 | The misalignment parameters can be fixed during the fitting. | |
378 | ||
379 | .. literalinclude:: example_xu_ccd_parameter.py | |
380 | :linenos: | |
381 | :language: python | |
382 | ||
383 | Area detector (Variant 2) | |
384 | ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
385 | ||
386 | In addition to scans in the primary beam this variant enables also the use of detector images recorded in scans at Bragg reflections of a known reference materials. However this also required that the sample orientation and x-ray wavelength need to be fit. | |
387 | To keep the additional parameters as small as possible we only implemented this for symmetric coplanar diffractions. | |
388 | ||
389 | The advantage of this method is that it is more sensitive to the outer angle offset also at large detector distances. | |
390 | The additional parameters are: | |
391 | ||
392 | * sample tilt angle in degree | |
393 | * sample tilt azimuth in degree | |
394 | * and the x-ray wavelength in Angstrom | |
395 | ||
396 | .. literalinclude:: example_xu_ccd_parameter_hkl.py | |
397 | :linenos: | |
398 | :language: python | |
399 |
0 | .. xrayutilities documentation master file, created by | |
1 | sphinx-quickstart on Sat Mar 2 11:39:01 2013. | |
2 | You can adapt this file completely to your liking, but it should at least | |
3 | contain the root `toctree` directive. | |
4 | ||
5 | Welcome to xrayutilities's documentation! | |
6 | ========================================= | |
7 | ||
8 | If you look for downloading the package go to `Sourceforge <https://sourceforge.net/projects/xrayutilities>`_ (source distribution) or the `Python package index <https://pypi.python.org/pypi/xrayutilities>`_ (MS Windows binary). | |
9 | Installation instructions you find further down `Installation`_. | |
10 | ||
11 | Read more about *xrayutilities* below or in `Journal of Applied Crystallography 2013, Volume 46, 1162-1170 <http://dx.doi.org/10.1107/S0021889813017214>`_ | |
12 | ||
13 | ||
14 | Introduction | |
15 | ============ | |
16 | ||
17 | *xrayutilities* is a collection of scripts used to analyze x-ray diffraction data. It consists of a python package and several routines coded in C. | |
18 | It especially useful for the reciprocal space conversion of diffraction data taken with linear and area detectors. | |
19 | ||
20 | In the following two concepts of usage for the *xrayutilities* package will be described. | |
21 | First one should get a brief idea of how to analyze x-ray diffraction data with *xrayutilities*. | |
22 | After that the concept of how angular coordinates of Bragg reflections are calculated is presented. | |
23 | ||
24 | Concept of usage | |
25 | ---------------- | |
26 | ||
27 | .. image:: pics/xu_usage.png | |
28 | :width: 400px | |
29 | :align: right | |
30 | :alt: Flow diagram showing how to analyze x-ray diffraction data using xrayutilities | |
31 | ||
32 | *xrayutilities* provides a set of functions to read experimental data from various data file formats. | |
33 | All of them are gathered in the :mod:`io`-subpackage. | |
34 | After reading data with a function from the io-submodule the data might be corrected for monitor counts and/or absorption factor of a beam attenuator. | |
35 | A special set of functions is provided to perform this for point, linear and area detectors. | |
36 | ||
37 | Since the amount of data taken with modern detectors often is too large to be able to work with them properly, a functions for reducing the data from linear and area detectors are provided. | |
38 | They use block-averaging to reduce the amount of data. | |
39 | Use those carefully not to loose the features you are interested in in your measurements. | |
40 | ||
41 | After the pre-treatment of the data, the core part of the package is the transformation of the angular data to reciprocal space. | |
42 | This is done as described in more detail below using the :mod:`experiment`-module`. | |
43 | The classes provided within the experiment module provide routines to help performing X-ray diffraction experiments. | |
44 | This includes methods to calculate the diffraction angles (described below) needed to align crystalline samples and to convert data between angular and reciprocal space. | |
45 | The conversion from angular to reciprocal space is implemented very general for various goniometer geometries. | |
46 | It is especially useful in combination with linear and area detectors as described in this `article <http://dx.doi.org/10.1107/S0021889813017214>`_. | |
47 | In standard cases, Users will only need the initialized routines, which predefine a certain goniometer geometry like the popular four-cirlce and six-circle geometries. | |
48 | ||
49 | After the conversion to reciprocal space, it is convenient to transform the data to a regular grid for visualization. | |
50 | For this purpose the :mod:`gridder`-module has been included into *xrayutilities*. | |
51 | For the visualization of the data in reciprocal space the usage of `matplotlib <http://matplotlib.org>`_ is recommended. | |
52 | ||
53 | A practical example showing the usage is given below. | |
54 | ||
55 | Angle calculation using the material classes | |
56 | -------------------------------------------- | |
57 | ||
58 | .. image:: pics/xu_usage_planning.png | |
59 | :width: 400px | |
60 | :align: right | |
61 | :alt: Flow diagram showing how to calculate angular positions of Bragg reflection using xrayutilities | |
62 | ||
63 | Calculation of angles needed to align Bragg reflections in various diffraction geometries is done using the Materials defined in the :mod:`materials`-package. | |
64 | This package provides a set of classes to describe crystal lattices and materials. | |
65 | Once such a material is properly defined one can calculate its properties, which includes the reciprocal lattice points, optical properties like | |
66 | the refractive index, the structure factor (including the atomic scattering factor) and the complex polarizability. | |
67 | These atomic properties are extracted from a database included in *xrayutilities*. | |
68 | ||
69 | Using such a material and an experimental class from the :mod:`experiment`-module describing the experimental setup the needed diffraction angles can be calculated for certain coplanar diffraction (high, low incidence), grazing incidence diffraction and also special non-coplanar diffraction geometries. | |
70 | ||
71 | .. _helloworld: | |
72 | ||
73 | hello world | |
74 | ----------- | |
75 | ||
76 | A first example with step by step explanation is shown in the following. | |
77 | It showcases the use of *xrayutilities* to calculate angles and read a scan recorded with a linear detector from `spec <http://www.certif.com>`_-file and plots | |
78 | the result as reciprocal space map using matplotlib. | |
79 | ||
80 | .. literalinclude:: example_xu_read_spec_easy.py | |
81 | :linenos: | |
82 | :language: python | |
83 | ||
84 | ||
85 | More such examples can be found on the :ref:`examplespage` page. | |
86 | ||
87 | xrayutilities Python package | |
88 | ============================ | |
89 | ||
90 | .. automodule:: xrayutilities | |
91 | :members: | |
92 | :undoc-members: | |
93 | :show-inheritance: | |
94 | ||
95 | for more details see the full API documentation of :mod:`xrayutilities` found here: :ref:`expapi`. | |
96 | ||
97 | Installation | |
98 | ============ | |
99 | ||
100 | Express instructions | |
101 | -------------------- | |
102 | ||
103 | * install the dependencies (Windows: `pythonxy <http://www.pythonxy.com>`_; Linux/Unix: see below for dependencies). | |
104 | * download *xrayutilities* from `here <https://sourceforge.net/projects/xrayutilities>`_ or use git to check out the `latest <https://sourceforge.net/p/xrayutilities/code/>`_ version. | |
105 | * open a command line and navigate to the downloaded sources and execute: | |
106 | ||
107 | .. code-block:: bash | |
108 | ||
109 | > python setup.py install | |
110 | ||
111 | which will install *xrayutilities* to the default directory. It should be possible to use it (*import xrayutilities*) from now on in python scripts. | |
112 | ||
113 | .. note:: The python package of *xrayutilities* was formerly called ''xrutils'' | |
114 | ||
115 | Detailed instructions | |
116 | --------------------- | |
117 | ||
118 | Installing *xrayutilities* is done using Python's distutils | |
119 | ||
120 | The package can be installed on Linux, Mac OS X and Microsoft Windows, however it is mostly tested on Linux/Unix platforms. | |
121 | Please inform one of the authors in case the installation fails! | |
122 | ||
123 | Required third party software | |
124 | ----------------------------- | |
125 | ||
126 | To keep the coding effort as small as possible *xrayutilities* depends on a | |
127 | large number of third party libraries and Python modules. | |
128 | ||
129 | The needed dependencies are: | |
130 | * **GCC** Gnu Compiler Collection or any compatible C compiler. On windows you most probably should use MinGW or CygWin. Others might work but are untested. | |
131 | * **HDF5** a versatile binary data format (library is implemented in C). | |
132 | Although the library is not called directly, it is needed by the pytables Python | |
133 | module (see below). | |
134 | * **Python** the scripting language in which most of *xrayutilities* code is written in. | |
135 | * **git** a version control system used to keep track on the *xrayutilities* development. (only needed for development) | |
136 | ||
137 | Additionally, the following Python modules are needed in order to make *xrayutilities* work as intended: | |
138 | * **Numpy** a Python module providing numerical array objects | |
139 | * **Scipy** a Python module providing standard numerical routines, which is heavily using numpy arrays | |
140 | * **Python-Tables** a powerful Python interface to HDF5. | |
141 | * **Matplotlib** a Python module for high quality 1D and 2D plotting (optionally) | |
142 | * **IPython** although not a dependency of *xrayutilities* the IPython shell is perfectly suited for the interactive use of the *xrayutilities* python package. | |
143 | ||
144 | After installing all required packages you can continue with installing and | |
145 | building the C library. | |
146 | ||
147 | Building and installing the library and python package | |
148 | ------------------------------------------------------ | |
149 | ||
150 | *xrayutilities* uses the distutils packaging system to build and install all of its components. You can perform the installation by executing | |
151 | ||
152 | .. code-block:: bash | |
153 | ||
154 | >python setup.py install | |
155 | ||
156 | or | |
157 | ||
158 | .. code-block:: bash | |
159 | ||
160 | >python setup.py install --prefix=INSTALLPATH | |
161 | ||
162 | in the root directory of the source distribution. | |
163 | ||
164 | The *--prefix* option sets the root directory for the installation. If it is omitted | |
165 | the libary is installed under /usr/lib/ on Unix systems or in the Python installation directory on Windows. | |
166 | ||
167 | Setup of the Python package | |
168 | --------------------------- | |
169 | ||
170 | You need to make your Python installation aware of where to look for the module. | |
171 | This is usually only needed when installing in non-standard *<install path>* locations. | |
172 | For this case append the installation directory to your *PYTHONPATH* environment variable by | |
173 | ||
174 | .. code-block:: bash | |
175 | ||
176 | >export PYTHONPATH=$PYTHONPATH:<local install path>/lib64/python2.7/site-packages | |
177 | ||
178 | on a Unix/Linux terminal. Or, to make this configuration persistent append this line to | |
179 | your local *.bashrc* file in your home directory. | |
180 | On MS Windows you would like to create a environment variable in the | |
181 | system preferences under system in the advanced tab (Using pythonxy this is done automatically). | |
182 | Be sure to use the correct directory which might be similar to | |
183 | ||
184 | .. code-block:: bash | |
185 | ||
186 | <local install path>/Lib/site-packages | |
187 | ||
188 | on Windows systems. | |
189 | ||
190 | Notes for installing on Windows | |
191 | ------------------------------- | |
192 | ||
193 | Since there is no packages manager on Windows the packages need to be installed manual | |
194 | (including all the dependecies) or a pre-packed solution needs to be used. We strongly suggest to | |
195 | use the `pyhton(x,y) <https://code.google.com/p/pythonxy/>`_ python distribution, | |
196 | which includes already all of the needed dependencies for installing *xrayutilities*. | |
197 | ||
198 | The setup of the environment variables is also done by the python(x,y) installation. | |
199 | One can proceed with the installation of *xrayutilities* directly! | |
200 | The easiest way to do this on windows is to use the binaries distributed on the `Python package index <https://pypi.python.org/pypi/xrayutilities>`_, otherwise one can follow the general installation instructions. | |
201 | Depending on your compiler on Microsoft Windows it might be necessary to perform the building of the Python extension separately and specify the compiler manually. | |
202 | This is done by | |
203 | ||
204 | .. code-block:: bash | |
205 | ||
206 | python setup.py build -c <compiler_name> | |
207 | ||
208 | Using Python(x,y) you want to specify "mingw32" as compiler name. | |
209 | ||
210 | In case you want to do it the hard way install all of the following (versions in brackets indicate the tested set of versions by the author (2.3.2012)): | |
211 | * MinGW (0.4alpha) | |
212 | * Python (2.7.2) | |
213 | * numpy (1.6.1) | |
214 | * scipy (0.10.1) | |
215 | * numexpr (1.4.2) needed for pytables | |
216 | * pytables (2.3.1) | |
217 | * matplotlib (1.1.0) | |
218 | * ipython (0.12) | |
219 | ||
220 | It is suggested to add the MinGW binary directory, as well as the Python and Python-scripts directory | |
221 | to the Path environment variable as described above! Installation is done as described above. | |
222 | ||
223 | .. _expapi: | |
224 | ||
225 | Examples and API-documentation | |
226 | ============================== | |
227 | ||
228 | .. toctree:: | |
229 | :maxdepth: 2 | |
230 | ||
231 | examples | |
232 | xrayutilities | |
233 | xrayutilities.analysis | |
234 | xrayutilities.io | |
235 | xrayutilities.materials | |
236 | xrayutilities.math | |
237 | modules | |
238 | ||
239 | ||
240 | Indices and tables | |
241 | ================== | |
242 | ||
243 | * :ref:`genindex` | |
244 | * :ref:`modindex` | |
245 | * :ref:`search` | |
246 |
0 | P6 | |
1 | # CREATOR: GIMP PNM Filter Version 1.1 | |
2 | 32 32 | |
3 | 255 | |
4 | ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøêêêòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééÙÙÙ×××ÔÔÔÙÙÙâââêêêñññøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙÙØØØÔÔÔÒÒÒÙÙÙççç÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØ××ÖÕÕÕÕÕÕÚÚÚáááçççðððøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿééé××××××××××××××××××××××××××××××××××××××××××××××××ÔÔÔäääûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿééè×ÖÖÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕÖÖÕ××ÖéééûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕÕØØØéééüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓÔÓÓØØØéééýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêééÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒÓÒÒ××ÖéééýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÑÐÐÕÕÕéééýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéèèÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÐÏÏÕÔÓéééýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÎÍÌÎÍÌÎÍÌÎÍÌÎÍÌÎÍÌÎÍËÎÍËÍÍËÆÆÃÊÊÇÎÍÌÎÍÌÎÍÌÎÍÌÎÍÌÓÒÒéééþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþþþþÿÿÿÿÿÿèèèÌËÊÍÌËÅη¸Ê «ÅÀv»cµP³?z°4r§.ºÁ¯ÌËÊÌËÊÌËÊÌËÊÒÑÐéééþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýüüüÿÿÿÿÿÿçççËÊÊÂȸw2h¥i¦i§j¨k¨k¨k¨f«² ËÊÉËÊÉËÊÉËÊÉÑÐÏéééþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüýýýÿÿÿÿÿÿçææÊÈÈÂÅ»ek¨k¨k¨k¨k¨k¨j§c-º¸¸ÉÈÇÉÈÇÉÈÇÉÈÇÐÏÎéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿæææÈÇÅÈÇÆqe k¨k¨k¨k¨k¨a¼¹¸ÈÇÅÈÇÆÈÇÅÈÇÅÏÎÎéééÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæååÆÅÃÆÅÃÇÇÄ{<j§k¨k¨k¨j§h0¹¶¶¼»¹ÅÄÃÆÅÃÆÅÃÆÅÃÎÍÌéééÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿååäÅÃÂÃÈ·¾dk§i¥j§k¨k¨h¤lº¸·¾¼ºÃÂÀÅÃÂÅÃÂÅÃÂÍÌËéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿååå»É§z®7j¦f k:bk¨k¨^¯¤¼º¸¾½»ÂÀ¿ÃÁÀÃÁÀÃÁÀÎÍÌéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùû÷²Ît.i¦]kÄÀÃ{f¡g£sIÁ½À½¼º¾½»À¾½Â¿¿Á¿¾Á¿¾ÍÌÌéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîôæÀij§h¤` ¤«Á¿¾À¾½À¾½yM_*¹¹³¿¾¼¾½»¾¼»¿½¼À¾½À¾½À¾½ÍÌËéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔäÀ³Bi¦d oB²´«À¾¾¾¼»¾¼»½¼ºÀ½¾Á½À¾»»¾¼»¾¼»¾¼»¾¼»¾¼»¾¼»¾¼»ÌËÊìììÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿùûö¹Òp©(i¦b eþ½»º½»º½»º½»º½»¹¼º¹½»¹½»¹½»º½»º½»º½»º½»º½»º½»ºÎÍÌìììÿÿÿÿÿÿÿÿÿ¤Åyÿÿÿÿÿþÿÿÿíóå¿dm¨"i¥XÙáÍãá⻺¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸»º¸ÎÍÌìììÿÿÿÿÿÿÿÿÿl§!¹\íôåÙçǵJh¦e}¢MôöòÿÿÿûûûßÞÝÊÉǾ¼º»¸¶»¹·»¹·»¹·»¹·»¹·»¹·»¹·»¹·»¹·»¹·»¹·»¹·ÎÍÌíííÿÿÿÿÿÿÿÿÿh£k§x5p©'j¦c«¾þþþÿÿÿÿÿÿÿÿÿÿÿÿþþþýýýêêéÄÂÁ¹·µ¹·µ¹·µ¹·µ¹·µ¹·µ¹·µ¹·µ¹·µ¹·µ¹·µÎÍÌïïïÿÿÿÿÿÿÿÿÿ¶hfk§i¥h+ÆѶÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø÷÷àßßÍËʺ¸¶¸¶³¸¶³¸¶³¸¶³¸¶³¸¶³¸¶³ÎÍÌïïïÿÿÿÿÿÿÿÿÿÿÿÿ¯Å^e0õöóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèçÁ¿¾¸¶´·µ³·µ³·µ³·µ³ÏÍÌïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôõòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷åääÎÍ̸¶´¶´±ÎÎÌðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãââÛÚÙúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ⏎ |
Binary diff not shown
Binary diff not shown
Binary diff not shown
0 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
1 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
2 | ||
3 | <svg | |
4 | xmlns:dc="http://purl.org/dc/elements/1.1/" | |
5 | xmlns:cc="http://creativecommons.org/ns#" | |
6 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
7 | xmlns:svg="http://www.w3.org/2000/svg" | |
8 | xmlns="http://www.w3.org/2000/svg" | |
9 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
10 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
11 | width="619.27765" | |
12 | height="571.82245" | |
13 | id="svg2" | |
14 | version="1.1" | |
15 | inkscape:version="0.48.4 r9939" | |
16 | sodipodi:docname="xu_usage.svg" | |
17 | inkscape:export-filename="/home/dk/devel/xrutils/doc/source/pics/xu_usage.png" | |
18 | inkscape:export-xdpi="99.987465" | |
19 | inkscape:export-ydpi="99.987465"> | |
20 | <defs | |
21 | id="defs4"> | |
22 | <marker | |
23 | inkscape:stockid="Arrow1Lend" | |
24 | orient="auto" | |
25 | refY="0" | |
26 | refX="0" | |
27 | id="Arrow1Lend" | |
28 | style="overflow:visible"> | |
29 | <path | |
30 | id="path3978" | |
31 | d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" | |
32 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" | |
33 | transform="matrix(-0.8,0,0,-0.8,-10,0)" /> | |
34 | </marker> | |
35 | <marker | |
36 | inkscape:stockid="Arrow2Mend" | |
37 | orient="auto" | |
38 | refY="0" | |
39 | refX="0" | |
40 | id="Arrow2Mend" | |
41 | style="overflow:visible"> | |
42 | <path | |
43 | id="path4002" | |
44 | style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" | |
45 | d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" | |
46 | transform="scale(-0.6,-0.6)" /> | |
47 | </marker> | |
48 | <inkscape:perspective | |
49 | sodipodi:type="inkscape:persp3d" | |
50 | inkscape:vp_x="0 : 526.18109 : 1" | |
51 | inkscape:vp_y="0 : 1000 : 0" | |
52 | inkscape:vp_z="744.09448 : 526.18109 : 1" | |
53 | inkscape:persp3d-origin="372.04724 : 350.78739 : 1" | |
54 | id="perspective10" /> | |
55 | <inkscape:perspective | |
56 | id="perspective2868" | |
57 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
58 | inkscape:vp_z="1 : 0.5 : 1" | |
59 | inkscape:vp_y="0 : 1000 : 0" | |
60 | inkscape:vp_x="0 : 0.5 : 1" | |
61 | sodipodi:type="inkscape:persp3d" /> | |
62 | <inkscape:perspective | |
63 | id="perspective3666" | |
64 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
65 | inkscape:vp_z="1 : 0.5 : 1" | |
66 | inkscape:vp_y="0 : 1000 : 0" | |
67 | inkscape:vp_x="0 : 0.5 : 1" | |
68 | sodipodi:type="inkscape:persp3d" /> | |
69 | <inkscape:perspective | |
70 | id="perspective3697" | |
71 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
72 | inkscape:vp_z="1 : 0.5 : 1" | |
73 | inkscape:vp_y="0 : 1000 : 0" | |
74 | inkscape:vp_x="0 : 0.5 : 1" | |
75 | sodipodi:type="inkscape:persp3d" /> | |
76 | <inkscape:perspective | |
77 | id="perspective3697-7" | |
78 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
79 | inkscape:vp_z="1 : 0.5 : 1" | |
80 | inkscape:vp_y="0 : 1000 : 0" | |
81 | inkscape:vp_x="0 : 0.5 : 1" | |
82 | sodipodi:type="inkscape:persp3d" /> | |
83 | <inkscape:perspective | |
84 | id="perspective3728" | |
85 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
86 | inkscape:vp_z="1 : 0.5 : 1" | |
87 | inkscape:vp_y="0 : 1000 : 0" | |
88 | inkscape:vp_x="0 : 0.5 : 1" | |
89 | sodipodi:type="inkscape:persp3d" /> | |
90 | <inkscape:perspective | |
91 | id="perspective3753" | |
92 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
93 | inkscape:vp_z="1 : 0.5 : 1" | |
94 | inkscape:vp_y="0 : 1000 : 0" | |
95 | inkscape:vp_x="0 : 0.5 : 1" | |
96 | sodipodi:type="inkscape:persp3d" /> | |
97 | <inkscape:perspective | |
98 | id="perspective3753-1" | |
99 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
100 | inkscape:vp_z="1 : 0.5 : 1" | |
101 | inkscape:vp_y="0 : 1000 : 0" | |
102 | inkscape:vp_x="0 : 0.5 : 1" | |
103 | sodipodi:type="inkscape:persp3d" /> | |
104 | <inkscape:perspective | |
105 | id="perspective3791" | |
106 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
107 | inkscape:vp_z="1 : 0.5 : 1" | |
108 | inkscape:vp_y="0 : 1000 : 0" | |
109 | inkscape:vp_x="0 : 0.5 : 1" | |
110 | sodipodi:type="inkscape:persp3d" /> | |
111 | <inkscape:perspective | |
112 | id="perspective3823" | |
113 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
114 | inkscape:vp_z="1 : 0.5 : 1" | |
115 | inkscape:vp_y="0 : 1000 : 0" | |
116 | inkscape:vp_x="0 : 0.5 : 1" | |
117 | sodipodi:type="inkscape:persp3d" /> | |
118 | <inkscape:perspective | |
119 | id="perspective3823-6" | |
120 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
121 | inkscape:vp_z="1 : 0.5 : 1" | |
122 | inkscape:vp_y="0 : 1000 : 0" | |
123 | inkscape:vp_x="0 : 0.5 : 1" | |
124 | sodipodi:type="inkscape:persp3d" /> | |
125 | <inkscape:perspective | |
126 | id="perspective3823-7" | |
127 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
128 | inkscape:vp_z="1 : 0.5 : 1" | |
129 | inkscape:vp_y="0 : 1000 : 0" | |
130 | inkscape:vp_x="0 : 0.5 : 1" | |
131 | sodipodi:type="inkscape:persp3d" /> | |
132 | <inkscape:perspective | |
133 | id="perspective3914" | |
134 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
135 | inkscape:vp_z="1 : 0.5 : 1" | |
136 | inkscape:vp_y="0 : 1000 : 0" | |
137 | inkscape:vp_x="0 : 0.5 : 1" | |
138 | sodipodi:type="inkscape:persp3d" /> | |
139 | <inkscape:perspective | |
140 | id="perspective3914-7" | |
141 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
142 | inkscape:vp_z="1 : 0.5 : 1" | |
143 | inkscape:vp_y="0 : 1000 : 0" | |
144 | inkscape:vp_x="0 : 0.5 : 1" | |
145 | sodipodi:type="inkscape:persp3d" /> | |
146 | <inkscape:perspective | |
147 | id="perspective3914-4" | |
148 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
149 | inkscape:vp_z="1 : 0.5 : 1" | |
150 | inkscape:vp_y="0 : 1000 : 0" | |
151 | inkscape:vp_x="0 : 0.5 : 1" | |
152 | sodipodi:type="inkscape:persp3d" /> | |
153 | </defs> | |
154 | <sodipodi:namedview | |
155 | id="base" | |
156 | pagecolor="#ffffff" | |
157 | bordercolor="#666666" | |
158 | borderopacity="1.0" | |
159 | inkscape:pageopacity="0.0" | |
160 | inkscape:pageshadow="2" | |
161 | inkscape:zoom="0.7" | |
162 | inkscape:cx="266.31689" | |
163 | inkscape:cy="359.79824" | |
164 | inkscape:document-units="px" | |
165 | inkscape:current-layer="g3878" | |
166 | showgrid="false" | |
167 | inkscape:window-width="1366" | |
168 | inkscape:window-height="709" | |
169 | inkscape:window-x="1920" | |
170 | inkscape:window-y="459" | |
171 | inkscape:window-maximized="1" /> | |
172 | <metadata | |
173 | id="metadata7"> | |
174 | <rdf:RDF> | |
175 | <cc:Work | |
176 | rdf:about=""> | |
177 | <dc:format>image/svg+xml</dc:format> | |
178 | <dc:type | |
179 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
180 | <dc:title></dc:title> | |
181 | </cc:Work> | |
182 | </rdf:RDF> | |
183 | </metadata> | |
184 | <g | |
185 | inkscape:label="Layer 1" | |
186 | inkscape:groupmode="layer" | |
187 | id="layer1" | |
188 | transform="translate(-42.518438,-47.270547)"> | |
189 | <g | |
190 | id="g3873" | |
191 | transform="translate(-9.009489,-18.182746)"> | |
192 | <rect | |
193 | ry="19.192898" | |
194 | rx="19.192898" | |
195 | y="66.453293" | |
196 | x="102.64687" | |
197 | height="59.598999" | |
198 | width="146.07556" | |
199 | id="rect2858" | |
200 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
201 | <text | |
202 | sodipodi:linespacing="125%" | |
203 | id="text2882" | |
204 | y="102.81879" | |
205 | x="175.84323" | |
206 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
207 | xml:space="preserve"><tspan | |
208 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
209 | y="102.81879" | |
210 | x="175.84323" | |
211 | id="tspan2884" | |
212 | sodipodi:role="line">xrayutilities.io</tspan></text> | |
213 | </g> | |
214 | <text | |
215 | xml:space="preserve" | |
216 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
217 | x="318.36639" | |
218 | y="72.418152" | |
219 | id="text2882-0" | |
220 | sodipodi:linespacing="125%"><tspan | |
221 | sodipodi:role="line" | |
222 | x="318.36639" | |
223 | y="72.418152" | |
224 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
225 | id="tspan3683">File IO</tspan><tspan | |
226 | sodipodi:role="line" | |
227 | x="318.36639" | |
228 | y="92.418152" | |
229 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
230 | id="tspan3687">read from various data files</tspan></text> | |
231 | <g | |
232 | id="g3878" | |
233 | transform="translate(-76.771593,-7.7588988)"> | |
234 | <rect | |
235 | ry="19.192898" | |
236 | rx="19.192898" | |
237 | y="155.85181" | |
238 | x="141.7186" | |
239 | height="59.598999" | |
240 | width="204.17061" | |
241 | id="rect2858-9" | |
242 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
243 | <text | |
244 | sodipodi:linespacing="125%" | |
245 | id="text2882-1" | |
246 | y="180.606" | |
247 | x="244.96979" | |
248 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
249 | xml:space="preserve"><tspan | |
250 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
251 | y="180.606" | |
252 | x="244.96979" | |
253 | id="tspan2884-2" | |
254 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
255 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
256 | y="200.606" | |
257 | x="244.96979" | |
258 | sodipodi:role="line" | |
259 | id="tspan3048">IntensityNormalizer</tspan></text> | |
260 | </g> | |
261 | <g | |
262 | id="g3885" | |
263 | transform="translate(-58.08378,5.1903581)"> | |
264 | <rect | |
265 | ry="19.192898" | |
266 | rx="19.192898" | |
267 | y="242.7249" | |
268 | x="121.30019" | |
269 | height="59.599014" | |
270 | width="206.9175" | |
271 | id="rect2858-1" | |
272 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
273 | <text | |
274 | sodipodi:linespacing="125%" | |
275 | id="text2882-5" | |
276 | y="268.48926" | |
277 | x="228.5486" | |
278 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
279 | xml:space="preserve"><tspan | |
280 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
281 | y="268.48926" | |
282 | x="228.5486" | |
283 | id="tspan2884-5" | |
284 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
285 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
286 | y="288.48926" | |
287 | x="228.5486" | |
288 | sodipodi:role="line" | |
289 | id="tspan3050">blockAverage*</tspan></text> | |
290 | </g> | |
291 | <text | |
292 | xml:space="preserve" | |
293 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
294 | x="319.45233" | |
295 | y="171.70253" | |
296 | id="text2882-2" | |
297 | sodipodi:linespacing="125%"><tspan | |
298 | sodipodi:role="line" | |
299 | id="tspan2884-53" | |
300 | x="319.45233" | |
301 | y="171.70253" | |
302 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">Normalize Intensities </tspan><tspan | |
303 | sodipodi:role="line" | |
304 | x="319.45233" | |
305 | y="191.70253" | |
306 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
307 | id="tspan3781">for count time and monitor and absorber</tspan></text> | |
308 | <text | |
309 | xml:space="preserve" | |
310 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
311 | x="319.38983" | |
312 | y="270.0455" | |
313 | id="text2882-2-6" | |
314 | sodipodi:linespacing="125%"><tspan | |
315 | sodipodi:role="line" | |
316 | x="319.38983" | |
317 | y="270.0455" | |
318 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
319 | id="tspan3781-0">average Intensities </tspan><tspan | |
320 | sodipodi:role="line" | |
321 | x="319.38983" | |
322 | y="290.0455" | |
323 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
324 | id="tspan3813">to reduce data size (PSD,CCD)</tspan></text> | |
325 | <g | |
326 | id="g3890" | |
327 | transform="translate(-62.629473,-9.1345549)"> | |
328 | <rect | |
329 | ry="19.192898" | |
330 | rx="19.192898" | |
331 | y="356.87216" | |
332 | x="133.92711" | |
333 | height="59.59903" | |
334 | width="190.75505" | |
335 | id="rect2858-1-2" | |
336 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
337 | <text | |
338 | sodipodi:linespacing="125%" | |
339 | id="text2882-5-5" | |
340 | y="381.3508" | |
341 | x="181.22382" | |
342 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
343 | xml:space="preserve"><tspan | |
344 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
345 | y="381.3508" | |
346 | x="181.22382" | |
347 | id="tspan2884-5-1" | |
348 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
349 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
350 | y="401.3508" | |
351 | x="181.22382" | |
352 | sodipodi:role="line" | |
353 | id="tspan3052">Experiment</tspan></text> | |
354 | </g> | |
355 | <g | |
356 | id="g3895" | |
357 | transform="translate(2.0202924,-28.510196)"> | |
358 | <rect | |
359 | ry="19.192898" | |
360 | rx="19.192898" | |
361 | y="476.07016" | |
362 | x="86.449928" | |
363 | height="59.59903" | |
364 | width="156.40988" | |
365 | id="rect2858-1-1" | |
366 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
367 | <text | |
368 | sodipodi:linespacing="125%" | |
369 | id="text2882-5-3" | |
370 | y="501.8345" | |
371 | x="166.52255" | |
372 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
373 | xml:space="preserve"><tspan | |
374 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
375 | y="501.8345" | |
376 | x="166.52255" | |
377 | id="tspan2884-5-7" | |
378 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
379 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
380 | y="521.83447" | |
381 | x="166.52255" | |
382 | sodipodi:role="line" | |
383 | id="tspan3054">Gridder*</tspan></text> | |
384 | </g> | |
385 | <g | |
386 | id="g3900" | |
387 | transform="translate(9.0913678,-79.200534)"> | |
388 | <rect | |
389 | ry="19.192898" | |
390 | rx="19.192898" | |
391 | y="615.47119" | |
392 | x="88.470238" | |
393 | height="81.822357" | |
394 | width="138.22711" | |
395 | id="rect2858-1-12" | |
396 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
397 | <text | |
398 | sodipodi:linespacing="125%" | |
399 | id="text2882-5-1" | |
400 | y="651.23553" | |
401 | x="155.59364" | |
402 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
403 | xml:space="preserve"><tspan | |
404 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
405 | y="651.23553" | |
406 | x="155.59364" | |
407 | id="tspan2884-5-0" | |
408 | sodipodi:role="line">matplotlib</tspan><tspan | |
409 | id="tspan3869" | |
410 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
411 | y="671.23553" | |
412 | x="155.59364" | |
413 | sodipodi:role="line">visualization</tspan></text> | |
414 | </g> | |
415 | <text | |
416 | xml:space="preserve" | |
417 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
418 | x="318.93671" | |
419 | y="378.72049" | |
420 | id="text2882-2-6-3" | |
421 | sodipodi:linespacing="125%"><tspan | |
422 | sodipodi:role="line" | |
423 | x="318.93671" | |
424 | y="378.72049" | |
425 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
426 | id="tspan3813-2">conversion to momentum space (Ang2Q)</tspan></text> | |
427 | <text | |
428 | xml:space="preserve" | |
429 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
430 | x="318.31171" | |
431 | y="468.00488" | |
432 | id="text2882-2-6-2" | |
433 | sodipodi:linespacing="125%"><tspan | |
434 | sodipodi:role="line" | |
435 | x="318.31171" | |
436 | y="468.00488" | |
437 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
438 | id="tspan3813-5">Bin experimental intensities to regular grid</tspan><tspan | |
439 | sodipodi:role="line" | |
440 | x="318.31171" | |
441 | y="488.00488" | |
442 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
443 | id="tspan3964">in reciprocal space</tspan></text> | |
444 | <text | |
445 | xml:space="preserve" | |
446 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
447 | x="319.34296" | |
448 | y="567.28925" | |
449 | id="text2882-2-6-1" | |
450 | sodipodi:linespacing="125%"><tspan | |
451 | sodipodi:role="line" | |
452 | x="319.34296" | |
453 | y="567.28925" | |
454 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
455 | id="tspan3813-8">visualization of measured data using </tspan><tspan | |
456 | sodipodi:role="line" | |
457 | x="319.34296" | |
458 | y="587.28925" | |
459 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
460 | id="tspan3968">something like matplotlib</tspan></text> | |
461 | <path | |
462 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
463 | d="m 166.67516,107.86955 0,40.22336" | |
464 | id="path3970" | |
465 | inkscape:connector-type="polyline" | |
466 | inkscape:connection-start="#g3873" | |
467 | inkscape:connection-end="#g3878" | |
468 | inkscape:connection-start-point="d4" | |
469 | inkscape:connection-end-point="d4" | |
470 | inkscape:connector-curvature="0" /> | |
471 | <path | |
472 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
473 | d="m 166.67516,207.69191 0,40.22335" | |
474 | id="path4608" | |
475 | inkscape:connector-type="polyline" | |
476 | inkscape:connection-start="#g3878" | |
477 | inkscape:connection-end="#g3885" | |
478 | inkscape:connection-start-point="d4" | |
479 | inkscape:connection-end-point="d4" | |
480 | inkscape:connector-curvature="0" /> | |
481 | <path | |
482 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
483 | d="m 166.67516,307.51427 0,40.22334" | |
484 | id="path4796" | |
485 | inkscape:connector-type="polyline" | |
486 | inkscape:connection-start="#g3885" | |
487 | inkscape:connection-end="#g3890" | |
488 | inkscape:connection-start-point="d4" | |
489 | inkscape:connection-end-point="d4" | |
490 | inkscape:connector-curvature="0" /> | |
491 | <path | |
492 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
493 | d="m 166.67516,407.33664 0,40.22332" | |
494 | id="path4984" | |
495 | inkscape:connector-type="polyline" | |
496 | inkscape:connection-start="#g3890" | |
497 | inkscape:connection-end="#g3895" | |
498 | inkscape:connection-start-point="d4" | |
499 | inkscape:connection-end-point="d4" | |
500 | inkscape:connector-curvature="0" /> | |
501 | <path | |
502 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
503 | d="m 166.67516,507.15899 0,29.11167" | |
504 | id="path5172" | |
505 | inkscape:connector-type="polyline" | |
506 | inkscape:connection-start="#g3895" | |
507 | inkscape:connection-end="#g3900" | |
508 | inkscape:connection-start-point="d4" | |
509 | inkscape:connection-end-point="d4" | |
510 | inkscape:connector-curvature="0" /> | |
511 | </g> | |
512 | </svg> |
Binary diff not shown
0 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
1 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
2 | ||
3 | <svg | |
4 | xmlns:dc="http://purl.org/dc/elements/1.1/" | |
5 | xmlns:cc="http://creativecommons.org/ns#" | |
6 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
7 | xmlns:svg="http://www.w3.org/2000/svg" | |
8 | xmlns="http://www.w3.org/2000/svg" | |
9 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
10 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
11 | width="591.2016" | |
12 | height="316.23358" | |
13 | id="svg2" | |
14 | version="1.1" | |
15 | inkscape:version="0.48.4 r9939" | |
16 | sodipodi:docname="xu_usage_planning.svg" | |
17 | inkscape:export-filename="/home/dk/devel/xrutils/doc/source/pics/xu_usage_planning.png" | |
18 | inkscape:export-xdpi="100.01665" | |
19 | inkscape:export-ydpi="100.01665"> | |
20 | <defs | |
21 | id="defs4"> | |
22 | <marker | |
23 | inkscape:stockid="Arrow1Lend" | |
24 | orient="auto" | |
25 | refY="0" | |
26 | refX="0" | |
27 | id="Arrow1Lend" | |
28 | style="overflow:visible"> | |
29 | <path | |
30 | id="path3978" | |
31 | d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" | |
32 | style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" | |
33 | transform="matrix(-0.8,0,0,-0.8,-10,0)" /> | |
34 | </marker> | |
35 | <marker | |
36 | inkscape:stockid="Arrow2Mend" | |
37 | orient="auto" | |
38 | refY="0" | |
39 | refX="0" | |
40 | id="Arrow2Mend" | |
41 | style="overflow:visible"> | |
42 | <path | |
43 | id="path4002" | |
44 | style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round" | |
45 | d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z" | |
46 | transform="scale(-0.6,-0.6)" /> | |
47 | </marker> | |
48 | <inkscape:perspective | |
49 | sodipodi:type="inkscape:persp3d" | |
50 | inkscape:vp_x="0 : 526.18109 : 1" | |
51 | inkscape:vp_y="0 : 1000 : 0" | |
52 | inkscape:vp_z="744.09448 : 526.18109 : 1" | |
53 | inkscape:persp3d-origin="372.04724 : 350.78739 : 1" | |
54 | id="perspective10" /> | |
55 | <inkscape:perspective | |
56 | id="perspective2868" | |
57 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
58 | inkscape:vp_z="1 : 0.5 : 1" | |
59 | inkscape:vp_y="0 : 1000 : 0" | |
60 | inkscape:vp_x="0 : 0.5 : 1" | |
61 | sodipodi:type="inkscape:persp3d" /> | |
62 | <inkscape:perspective | |
63 | id="perspective3666" | |
64 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
65 | inkscape:vp_z="1 : 0.5 : 1" | |
66 | inkscape:vp_y="0 : 1000 : 0" | |
67 | inkscape:vp_x="0 : 0.5 : 1" | |
68 | sodipodi:type="inkscape:persp3d" /> | |
69 | <inkscape:perspective | |
70 | id="perspective3697" | |
71 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
72 | inkscape:vp_z="1 : 0.5 : 1" | |
73 | inkscape:vp_y="0 : 1000 : 0" | |
74 | inkscape:vp_x="0 : 0.5 : 1" | |
75 | sodipodi:type="inkscape:persp3d" /> | |
76 | <inkscape:perspective | |
77 | id="perspective3697-7" | |
78 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
79 | inkscape:vp_z="1 : 0.5 : 1" | |
80 | inkscape:vp_y="0 : 1000 : 0" | |
81 | inkscape:vp_x="0 : 0.5 : 1" | |
82 | sodipodi:type="inkscape:persp3d" /> | |
83 | <inkscape:perspective | |
84 | id="perspective3728" | |
85 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
86 | inkscape:vp_z="1 : 0.5 : 1" | |
87 | inkscape:vp_y="0 : 1000 : 0" | |
88 | inkscape:vp_x="0 : 0.5 : 1" | |
89 | sodipodi:type="inkscape:persp3d" /> | |
90 | <inkscape:perspective | |
91 | id="perspective3753" | |
92 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
93 | inkscape:vp_z="1 : 0.5 : 1" | |
94 | inkscape:vp_y="0 : 1000 : 0" | |
95 | inkscape:vp_x="0 : 0.5 : 1" | |
96 | sodipodi:type="inkscape:persp3d" /> | |
97 | <inkscape:perspective | |
98 | id="perspective3753-1" | |
99 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
100 | inkscape:vp_z="1 : 0.5 : 1" | |
101 | inkscape:vp_y="0 : 1000 : 0" | |
102 | inkscape:vp_x="0 : 0.5 : 1" | |
103 | sodipodi:type="inkscape:persp3d" /> | |
104 | <inkscape:perspective | |
105 | id="perspective3791" | |
106 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
107 | inkscape:vp_z="1 : 0.5 : 1" | |
108 | inkscape:vp_y="0 : 1000 : 0" | |
109 | inkscape:vp_x="0 : 0.5 : 1" | |
110 | sodipodi:type="inkscape:persp3d" /> | |
111 | <inkscape:perspective | |
112 | id="perspective3823" | |
113 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
114 | inkscape:vp_z="1 : 0.5 : 1" | |
115 | inkscape:vp_y="0 : 1000 : 0" | |
116 | inkscape:vp_x="0 : 0.5 : 1" | |
117 | sodipodi:type="inkscape:persp3d" /> | |
118 | <inkscape:perspective | |
119 | id="perspective3823-6" | |
120 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
121 | inkscape:vp_z="1 : 0.5 : 1" | |
122 | inkscape:vp_y="0 : 1000 : 0" | |
123 | inkscape:vp_x="0 : 0.5 : 1" | |
124 | sodipodi:type="inkscape:persp3d" /> | |
125 | <inkscape:perspective | |
126 | id="perspective3823-7" | |
127 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
128 | inkscape:vp_z="1 : 0.5 : 1" | |
129 | inkscape:vp_y="0 : 1000 : 0" | |
130 | inkscape:vp_x="0 : 0.5 : 1" | |
131 | sodipodi:type="inkscape:persp3d" /> | |
132 | <inkscape:perspective | |
133 | id="perspective3914" | |
134 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
135 | inkscape:vp_z="1 : 0.5 : 1" | |
136 | inkscape:vp_y="0 : 1000 : 0" | |
137 | inkscape:vp_x="0 : 0.5 : 1" | |
138 | sodipodi:type="inkscape:persp3d" /> | |
139 | <inkscape:perspective | |
140 | id="perspective3914-7" | |
141 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
142 | inkscape:vp_z="1 : 0.5 : 1" | |
143 | inkscape:vp_y="0 : 1000 : 0" | |
144 | inkscape:vp_x="0 : 0.5 : 1" | |
145 | sodipodi:type="inkscape:persp3d" /> | |
146 | <inkscape:perspective | |
147 | id="perspective3914-4" | |
148 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
149 | inkscape:vp_z="1 : 0.5 : 1" | |
150 | inkscape:vp_y="0 : 1000 : 0" | |
151 | inkscape:vp_x="0 : 0.5 : 1" | |
152 | sodipodi:type="inkscape:persp3d" /> | |
153 | <inkscape:perspective | |
154 | id="perspective5414" | |
155 | inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
156 | inkscape:vp_z="1 : 0.5 : 1" | |
157 | inkscape:vp_y="0 : 1000 : 0" | |
158 | inkscape:vp_x="0 : 0.5 : 1" | |
159 | sodipodi:type="inkscape:persp3d" /> | |
160 | </defs> | |
161 | <sodipodi:namedview | |
162 | id="base" | |
163 | pagecolor="#ffffff" | |
164 | bordercolor="#666666" | |
165 | borderopacity="1.0" | |
166 | inkscape:pageopacity="0.0" | |
167 | inkscape:pageshadow="2" | |
168 | inkscape:zoom="0.98994949" | |
169 | inkscape:cx="255.70087" | |
170 | inkscape:cy="147.89902" | |
171 | inkscape:document-units="px" | |
172 | inkscape:current-layer="layer1" | |
173 | showgrid="false" | |
174 | inkscape:window-width="1366" | |
175 | inkscape:window-height="709" | |
176 | inkscape:window-x="1920" | |
177 | inkscape:window-y="459" | |
178 | inkscape:window-maximized="1" /> | |
179 | <metadata | |
180 | id="metadata7"> | |
181 | <rdf:RDF> | |
182 | <cc:Work | |
183 | rdf:about=""> | |
184 | <dc:format>image/svg+xml</dc:format> | |
185 | <dc:type | |
186 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
187 | <dc:title></dc:title> | |
188 | </cc:Work> | |
189 | </rdf:RDF> | |
190 | </metadata> | |
191 | <g | |
192 | inkscape:label="Layer 1" | |
193 | inkscape:groupmode="layer" | |
194 | id="layer1" | |
195 | transform="translate(-52.297636,-148.10306)"> | |
196 | <g | |
197 | id="g3878" | |
198 | transform="translate(-24.060915,-6.7487463)"> | |
199 | <rect | |
200 | ry="19.192898" | |
201 | rx="19.192898" | |
202 | y="155.85181" | |
203 | x="120.29003" | |
204 | height="59.598999" | |
205 | width="161.46063" | |
206 | id="rect2858-9" | |
207 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
208 | <text | |
209 | sodipodi:linespacing="125%" | |
210 | id="text2882-1" | |
211 | y="182.606" | |
212 | x="200.36266" | |
213 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
214 | xml:space="preserve"><tspan | |
215 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
216 | y="182.606" | |
217 | x="200.36266" | |
218 | id="tspan2884-2" | |
219 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
220 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
221 | y="202.606" | |
222 | x="200.36266" | |
223 | sodipodi:role="line" | |
224 | id="tspan3033">Materials</tspan></text> | |
225 | </g> | |
226 | <g | |
227 | id="g3885" | |
228 | transform="translate(-35.677676,-8.7436629)"> | |
229 | <rect | |
230 | ry="19.192898" | |
231 | rx="19.192898" | |
232 | y="242.7249" | |
233 | x="121.30019" | |
234 | height="59.599014" | |
235 | width="182.67383" | |
236 | id="rect2858-1" | |
237 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
238 | <text | |
239 | sodipodi:linespacing="125%" | |
240 | id="text2882-5" | |
241 | y="268.48926" | |
242 | x="211.37282" | |
243 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
244 | xml:space="preserve"><tspan | |
245 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
246 | y="268.48926" | |
247 | x="211.37282" | |
248 | id="tspan2884-5" | |
249 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
250 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
251 | y="288.48926" | |
252 | x="211.37282" | |
253 | sodipodi:role="line" | |
254 | id="tspan3035">Experiment</tspan></text> | |
255 | </g> | |
256 | <text | |
257 | xml:space="preserve" | |
258 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
259 | x="318.93671" | |
260 | y="171.70256" | |
261 | id="text2882-2" | |
262 | sodipodi:linespacing="125%"><tspan | |
263 | sodipodi:role="line" | |
264 | x="318.93671" | |
265 | y="171.70256" | |
266 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
267 | id="tspan3781">Materials in experiment</tspan><tspan | |
268 | sodipodi:role="line" | |
269 | x="318.93671" | |
270 | y="191.70256" | |
271 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
272 | id="tspan5404">for which Bragg peak position is needed</tspan></text> | |
273 | <text | |
274 | xml:space="preserve" | |
275 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
276 | x="317.79608" | |
277 | y="256.70853" | |
278 | id="text2882-2-6" | |
279 | sodipodi:linespacing="125%"><tspan | |
280 | sodipodi:role="line" | |
281 | x="317.79608" | |
282 | y="256.70853" | |
283 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
284 | id="tspan3781-0">Experimental geometry</tspan><tspan | |
285 | sodipodi:role="line" | |
286 | x="317.79608" | |
287 | y="276.70853" | |
288 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
289 | id="tspan3813">in which Bragg peaks are measured</tspan></text> | |
290 | <g | |
291 | id="g3890" | |
292 | transform="translate(-80.629473,46.865445)"> | |
293 | <rect | |
294 | ry="19.192898" | |
295 | rx="19.192898" | |
296 | y="356.87216" | |
297 | x="157.16061" | |
298 | height="59.59903" | |
299 | width="202.87688" | |
300 | id="rect2858-1-2" | |
301 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
302 | <text | |
303 | sodipodi:linespacing="125%" | |
304 | id="text2882-5-5" | |
305 | y="382.63651" | |
306 | x="259.43643" | |
307 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
308 | xml:space="preserve"><tspan | |
309 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
310 | y="382.63651" | |
311 | x="259.43643" | |
312 | id="tspan2884-5-1" | |
313 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
314 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
315 | y="402.63651" | |
316 | x="259.43643" | |
317 | sodipodi:role="line" | |
318 | id="tspan3039">Experiment.Q2Ang</tspan></text> | |
319 | </g> | |
320 | <text | |
321 | xml:space="preserve" | |
322 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
323 | x="318.93671" | |
324 | y="426.72049" | |
325 | id="text2882-2-6-3" | |
326 | sodipodi:linespacing="125%"><tspan | |
327 | sodipodi:role="line" | |
328 | x="318.93671" | |
329 | y="426.72049" | |
330 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
331 | id="tspan3813-2">conversion of Q to angular coordinates</tspan><tspan | |
332 | sodipodi:role="line" | |
333 | x="318.93671" | |
334 | y="446.72049" | |
335 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
336 | id="tspan5448">for the specified experimental geometry </tspan></text> | |
337 | <g | |
338 | id="g3878-2" | |
339 | transform="translate(-32.647219,163.00763)"> | |
340 | <rect | |
341 | ry="19.192898" | |
342 | rx="19.192898" | |
343 | y="155.85181" | |
344 | x="120.29003" | |
345 | height="59.598999" | |
346 | width="178.63324" | |
347 | id="rect2858-9-3" | |
348 | style="color:#000000;fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" /> | |
349 | <text | |
350 | sodipodi:linespacing="125%" | |
351 | id="text2882-1-8" | |
352 | y="180.606" | |
353 | x="210.36266" | |
354 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
355 | xml:space="preserve"><tspan | |
356 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
357 | y="180.606" | |
358 | x="210.36266" | |
359 | id="tspan2884-2-3" | |
360 | sodipodi:role="line">xrayutilities.</tspan><tspan | |
361 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
362 | y="200.606" | |
363 | x="210.36266" | |
364 | sodipodi:role="line" | |
365 | id="tspan3037">Materials.Q</tspan></text> | |
366 | </g> | |
367 | <text | |
368 | xml:space="preserve" | |
369 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Tymes;-inkscape-font-specification:Tymes" | |
370 | x="318.42108" | |
371 | y="341.71454" | |
372 | id="text2882-2-1" | |
373 | sodipodi:linespacing="125%"><tspan | |
374 | sodipodi:role="line" | |
375 | x="318.42108" | |
376 | y="341.71454" | |
377 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
378 | id="tspan5404-8">calculation of Q for Bragg reflection</tspan><tspan | |
379 | sodipodi:role="line" | |
380 | x="318.42108" | |
381 | y="361.71454" | |
382 | style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans" | |
383 | id="tspan5450">of the given materials </tspan></text> | |
384 | <path | |
385 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
386 | d="m 176.95943,208.70206 0,25.27918" | |
387 | id="path5452" | |
388 | inkscape:connector-type="polyline" | |
389 | inkscape:connection-start="#g3878" | |
390 | inkscape:connection-end="#g3885" | |
391 | inkscape:connection-start-point="d4" | |
392 | inkscape:connection-end-point="d4" | |
393 | inkscape:connector-curvature="0" /> | |
394 | <path | |
395 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
396 | d="m 176.95943,293.58025 0,25.27919" | |
397 | id="path5640" | |
398 | inkscape:connector-type="polyline" | |
399 | inkscape:connection-start="#g3885" | |
400 | inkscape:connection-end="#g3878-2" | |
401 | inkscape:connection-start-point="d4" | |
402 | inkscape:connection-end-point="d4" | |
403 | inkscape:connector-curvature="0" /> | |
404 | <path | |
405 | style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" | |
406 | d="m 176.95943,378.45844 0,25.27917" | |
407 | id="path5828" | |
408 | inkscape:connector-type="polyline" | |
409 | inkscape:connection-start="#g3878-2" | |
410 | inkscape:connection-end="#g3890" | |
411 | inkscape:connection-start-point="d4" | |
412 | inkscape:connection-end-point="d4" | |
413 | inkscape:connector-curvature="0" /> | |
414 | </g> | |
415 | </svg> |
0 | analysis Package | |
1 | ================ | |
2 | ||
3 | :mod:`analysis` Package | |
4 | ----------------------- | |
5 | ||
6 | .. automodule:: xrayutilities.analysis | |
7 | :members: | |
8 | :undoc-members: | |
9 | :show-inheritance: | |
10 | ||
11 | :mod:`line_cuts` Module | |
12 | ----------------------- | |
13 | ||
14 | .. automodule:: xrayutilities.analysis.line_cuts | |
15 | :members: | |
16 | :undoc-members: | |
17 | :show-inheritance: | |
18 | ||
19 | :mod:`line_cuts3d` Module | |
20 | ------------------------- | |
21 | ||
22 | .. automodule:: xrayutilities.analysis.line_cuts3d | |
23 | :members: | |
24 | :undoc-members: | |
25 | :show-inheritance: | |
26 | ||
27 | :mod:`misc` Module | |
28 | ------------------ | |
29 | ||
30 | .. automodule:: xrayutilities.analysis.misc | |
31 | :members: | |
32 | :undoc-members: | |
33 | :show-inheritance: | |
34 | ||
35 | :mod:`sample_align` Module | |
36 | -------------------------- | |
37 | ||
38 | .. automodule:: xrayutilities.analysis.sample_align | |
39 | :members: | |
40 | :undoc-members: | |
41 | :show-inheritance: | |
42 |
0 | io Package | |
1 | ========== | |
2 | ||
3 | :mod:`io` Package | |
4 | ----------------- | |
5 | ||
6 | .. automodule:: xrayutilities.io | |
7 | :members: | |
8 | :undoc-members: | |
9 | :show-inheritance: | |
10 | ||
11 | :mod:`edf` Module | |
12 | ----------------- | |
13 | ||
14 | .. automodule:: xrayutilities.io.edf | |
15 | :members: | |
16 | :undoc-members: | |
17 | :show-inheritance: | |
18 | ||
19 | :mod:`imagereader` Module | |
20 | ------------------------- | |
21 | ||
22 | .. automodule:: xrayutilities.io.imagereader | |
23 | :members: | |
24 | :undoc-members: | |
25 | :show-inheritance: | |
26 | ||
27 | :mod:`panalytical_xml` Module | |
28 | ----------------------------- | |
29 | ||
30 | .. automodule:: xrayutilities.io.panalytical_xml | |
31 | :members: | |
32 | :undoc-members: | |
33 | :show-inheritance: | |
34 | ||
35 | :mod:`radicon` Module | |
36 | --------------------- | |
37 | ||
38 | .. automodule:: xrayutilities.io.radicon | |
39 | :members: | |
40 | :undoc-members: | |
41 | :show-inheritance: | |
42 | ||
43 | :mod:`rotanode_alignment` Module | |
44 | -------------------------------- | |
45 | ||
46 | .. automodule:: xrayutilities.io.rotanode_alignment | |
47 | :members: | |
48 | :undoc-members: | |
49 | :show-inheritance: | |
50 | ||
51 | :mod:`seifert` Module | |
52 | --------------------- | |
53 | ||
54 | .. automodule:: xrayutilities.io.seifert | |
55 | :members: | |
56 | :undoc-members: | |
57 | :show-inheritance: | |
58 | ||
59 | :mod:`spec` Module | |
60 | ------------------ | |
61 | ||
62 | .. automodule:: xrayutilities.io.spec | |
63 | :members: | |
64 | :undoc-members: | |
65 | :show-inheritance: | |
66 | ||
67 | :mod:`spectra` Module | |
68 | --------------------- | |
69 | ||
70 | .. automodule:: xrayutilities.io.spectra | |
71 | :members: | |
72 | :undoc-members: | |
73 | :show-inheritance: | |
74 |
0 | materials Package | |
1 | ================= | |
2 | ||
3 | :mod:`materials` Package | |
4 | ------------------------ | |
5 | ||
6 | .. automodule:: xrayutilities.materials | |
7 | :members: | |
8 | :undoc-members: | |
9 | :show-inheritance: | |
10 | ||
11 | :mod:`_create_database` Module | |
12 | ------------------------------ | |
13 | ||
14 | .. automodule:: xrayutilities.materials._create_database | |
15 | :members: | |
16 | :undoc-members: | |
17 | :show-inheritance: | |
18 | ||
19 | :mod:`_create_database_alt` Module | |
20 | ---------------------------------- | |
21 | ||
22 | .. automodule:: xrayutilities.materials._create_database_alt | |
23 | :members: | |
24 | :undoc-members: | |
25 | :show-inheritance: | |
26 | ||
27 | :mod:`cif` Module | |
28 | ----------------- | |
29 | ||
30 | .. automodule:: xrayutilities.materials.cif | |
31 | :members: | |
32 | :undoc-members: | |
33 | :show-inheritance: | |
34 | ||
35 | :mod:`database` Module | |
36 | ---------------------- | |
37 | ||
38 | .. automodule:: xrayutilities.materials.database | |
39 | :members: | |
40 | :undoc-members: | |
41 | :show-inheritance: | |
42 | ||
43 | :mod:`elements` Module | |
44 | ---------------------- | |
45 | ||
46 | .. automodule:: xrayutilities.materials.elements | |
47 | :members: | |
48 | :undoc-members: | |
49 | :show-inheritance: | |
50 | ||
51 | :mod:`lattice` Module | |
52 | --------------------- | |
53 | ||
54 | .. automodule:: xrayutilities.materials.lattice | |
55 | :members: | |
56 | :undoc-members: | |
57 | :show-inheritance: | |
58 | ||
59 | :mod:`material` Module | |
60 | ---------------------- | |
61 | ||
62 | .. automodule:: xrayutilities.materials.material | |
63 | :members: | |
64 | :undoc-members: | |
65 | :show-inheritance: | |
66 | ||
67 | :mod:`predefined_materials` Module | |
68 | ---------------------------------- | |
69 | ||
70 | .. automodule:: xrayutilities.materials.predefined_materials | |
71 | :members: | |
72 | :undoc-members: | |
73 | :show-inheritance: | |
74 |
0 | math Package | |
1 | ============ | |
2 | ||
3 | :mod:`math` Package | |
4 | ------------------- | |
5 | ||
6 | .. automodule:: xrayutilities.math | |
7 | :members: | |
8 | :undoc-members: | |
9 | :show-inheritance: | |
10 | ||
11 | :mod:`fit` Module | |
12 | ----------------- | |
13 | ||
14 | .. automodule:: xrayutilities.math.fit | |
15 | :members: | |
16 | :undoc-members: | |
17 | :show-inheritance: | |
18 | ||
19 | :mod:`functions` Module | |
20 | ----------------------- | |
21 | ||
22 | .. automodule:: xrayutilities.math.functions | |
23 | :members: | |
24 | :undoc-members: | |
25 | :show-inheritance: | |
26 | ||
27 | :mod:`transforms` Module | |
28 | ------------------------ | |
29 | ||
30 | .. automodule:: xrayutilities.math.transforms | |
31 | :members: | |
32 | :undoc-members: | |
33 | :show-inheritance: | |
34 | ||
35 | :mod:`vector` Module | |
36 | -------------------- | |
37 | ||
38 | .. automodule:: xrayutilities.math.vector | |
39 | :members: | |
40 | :undoc-members: | |
41 | :show-inheritance: | |
42 |
0 | xrayutilities Package | |
1 | ===================== | |
2 | ||
3 | :mod:`xrayutilities` Package | |
4 | ---------------------------- | |
5 | ||
6 | .. automodule:: xrayutilities.__init__ | |
7 | :members: | |
8 | :undoc-members: | |
9 | :show-inheritance: | |
10 | ||
11 | :mod:`config` Module | |
12 | -------------------- | |
13 | ||
14 | .. automodule:: xrayutilities.config | |
15 | :members: | |
16 | :undoc-members: | |
17 | :show-inheritance: | |
18 | ||
19 | :mod:`exception` Module | |
20 | ----------------------- | |
21 | ||
22 | .. automodule:: xrayutilities.exception | |
23 | :members: | |
24 | :undoc-members: | |
25 | :show-inheritance: | |
26 | ||
27 | :mod:`experiment` Module | |
28 | ------------------------ | |
29 | ||
30 | .. automodule:: xrayutilities.experiment | |
31 | :members: | |
32 | :undoc-members: | |
33 | :show-inheritance: | |
34 | ||
35 | :mod:`gridder` Module | |
36 | --------------------- | |
37 | ||
38 | .. automodule:: xrayutilities.gridder | |
39 | :members: | |
40 | :undoc-members: | |
41 | :show-inheritance: | |
42 | ||
43 | :mod:`gridder2d` Module | |
44 | ----------------------- | |
45 | ||
46 | .. automodule:: xrayutilities.gridder2d | |
47 | :members: | |
48 | :undoc-members: | |
49 | :show-inheritance: | |
50 | ||
51 | :mod:`gridder3d` Module | |
52 | ----------------------- | |
53 | ||
54 | .. automodule:: xrayutilities.gridder3d | |
55 | :members: | |
56 | :undoc-members: | |
57 | :show-inheritance: | |
58 | ||
59 | :mod:`normalize` Module | |
60 | ----------------------- | |
61 | ||
62 | .. automodule:: xrayutilities.normalize | |
63 | :members: | |
64 | :undoc-members: | |
65 | :show-inheritance: | |
66 | ||
67 | :mod:`utilities` Module | |
68 | ----------------------- | |
69 | ||
70 | .. automodule:: xrayutilities.utilities | |
71 | :members: | |
72 | :undoc-members: | |
73 | :show-inheritance: | |
74 | ||
75 | :mod:`utilities_noconf` Module | |
76 | ------------------------------ | |
77 | ||
78 | .. automodule:: xrayutilities.utilities_noconf | |
79 | :members: | |
80 | :undoc-members: | |
81 | :show-inheritance: | |
82 | ||
83 | Subpackages | |
84 | ----------- | |
85 | ||
86 | .. toctree:: | |
87 | ||
88 | xrayutilities.analysis | |
89 | xrayutilities.io | |
90 | xrayutilities.materials | |
91 | xrayutilities.math | |
92 |
Binary diff not shown
55 | 55 | def build_extensions(self): |
56 | 56 | c = self.compiler.compiler_type |
57 | 57 | # set custom compiler options |
58 | if copt.has_key(c): | |
58 | if c in list(copt.keys()): | |
59 | 59 | for e in self.extensions: |
60 | 60 | e.extra_compile_args = copt[ c ] |
61 | if lopt.has_key(c): | |
61 | if c in list(lopt.keys()): | |
62 | 62 | for e in self.extensions: |
63 | 63 | e.extra_link_args = lopt[ c ] |
64 | 64 | build_ext.build_extensions(self) |
76 | 76 | define_macros = user_macros) |
77 | 77 | |
78 | 78 | setup(name="xrayutilities", |
79 | version="1.0.1", | |
79 | version="1.0.2", | |
80 | 80 | author="Eugen Wintersberger, Dominik Kriegner", |
81 | 81 | description="package for x-ray diffraction data evaluation", |
82 | 82 | classifiers=["Topic :: Scientific/Engineering :: Physics", |
446 | 446 | qpos = cxrayutilities.ang2q_conversion(sAngles, dAngles, self.r_i,sAxis, dAxis, self._kappa_dir, |
447 | 447 | UB, wl, config.NTHREADS) |
448 | 448 | |
449 | return qpos[:,0],qpos[:,1],qpos[:,2] | |
449 | if Npoints==1: | |
450 | return ( qpos[0,0], qpos[0,1], qpos[0,2] ) | |
451 | else: | |
452 | return qpos[:,0],qpos[:,1],qpos[:,2] | |
450 | 453 | |
451 | 454 | def init_linear(self,detectorDir,cch,Nchannel,distance=None,pixelwidth=None,chpdeg=None,tilt=0,**kwargs): |
452 | 455 | """ |
152 | 152 | self.header[key] = value |
153 | 153 | |
154 | 154 | # try to parse motor positions and counters from header into separate dictionary |
155 | if self.header.has_key('motor_mne'): | |
155 | if 'motor_mne' in self.header.keys(): | |
156 | 156 | tkeys = self.header['motor_mne'].split() |
157 | 157 | try: |
158 | 158 | tval = numpy.array(self.header['motor_pos'].split(),dtype=numpy.double) |
160 | 160 | except: |
161 | 161 | print("XU.io.EDFFile.ReadData: Warning: header conversion of motor positions failed") |
162 | 162 | |
163 | if self.header.has_key('counter_mne'): | |
163 | if 'counter_mne' in self.header.keys(): | |
164 | 164 | tkeys = self.header['counter_mne'].split() |
165 | 165 | try: |
166 | 166 | tval = numpy.array(self.header['counter_pos'].split(),dtype=numpy.double) |
170 | 170 | el = re.sub(r"([1-9])",r"",a[0]) |
171 | 171 | el = re.sub(r"\(\w*\)",r"",el) |
172 | 172 | for symop in self.symops: |
173 | exec("pos = numpy.array("+ symop+ ")") | |
173 | pos = eval("numpy.array("+ symop+ ")") | |
174 | 174 | # check that position is within unit cell |
175 | 175 | pos = pos - pos//1 |
176 | 176 | # check if position is unique |
180 | 180 | unique = False |
181 | 181 | if unique: |
182 | 182 | unique_pos.append(pos) |
183 | exec("element = elements."+el) | |
183 | element = eval("elements."+el) | |
184 | 184 | self.unique_positions.append((element, unique_pos)) |
185 | 185 | |
186 | 186 | def Lattice(self): |
781 | 781 | Material.__init__(self,"None",copy.copy(matA.lattice),matA.cij) |
782 | 782 | self.matA = matA |
783 | 783 | self.matB = matB |
784 | self.xb = 0 | |
784 | self._xb = 0 | |
785 | 785 | self._setxb(x) |
786 | 786 | |
787 | 787 | def lattice_const_AB(self, latA, latB, x): |
792 | 792 | return (latB-latA)*x + latA |
793 | 793 | |
794 | 794 | def _getxb(self): |
795 | return self.xb | |
795 | return self._xb | |
796 | 796 | |
797 | 797 | def _setxb(self,x): |
798 | self.xb = x | |
798 | self._xb = x | |
799 | 799 | self.name = "%s(%2.2f)%s(%2.2f)" %(self.matA.name,1.-x,self.matB.name,x) |
800 | 800 | #modify the lattice |
801 | 801 | self.lattice.a1 = self.lattice_const_AB(self.matA.lattice.a1, self.matB.lattice.a1, x) |
1069 | 1069 | """ |
1070 | 1070 | This function returns a material whos lattice is pseudomorphic on a |
1071 | 1071 | particular substrate material. |
1072 | This function works meanwhile only for cubic materials. | |
1072 | This function works meanwhile only for cubic materials on (001) substrates | |
1073 | 1073 | |
1074 | 1074 | required input arguments: |
1075 | 1075 | submat .................... substrate material |
93 | 93 | method to calculate the lattice parameter of the SiGe alloy with composition |
94 | 94 | Si_{1-x}Ge_x |
95 | 95 | """ |
96 | return latA+ (0.2*x+0.027*x**2)*latA/numpy.abs(latA) | |
96 | return latA+ (0.2*x+0.027*x**2)*latA/numpy.linalg.norm(latA) | |
97 | 97 | |
98 | 98 | def _setxb(self,x): |
99 | 99 | """ |
260 | 260 | {NULL, NULL, 0, NULL} /* Sentinel */ |
261 | 261 | }; |
262 | 262 | |
263 | #if PY_MAJOR_VERSION >= 3 | |
264 | static struct PyModuleDef moduledef = { | |
265 | PyModuleDef_HEAD_INIT, | |
266 | "cxrayutilities", /* m_name */ | |
267 | "Python C extension including performance critical parts\n" | |
268 | "of xrayutilities (gridder, qconversion, block-averageing)\n", /* m_doc */ | |
269 | -1, /* m_size */ | |
270 | XRU_Methods, /* m_methods */ | |
271 | NULL, /* m_reload */ | |
272 | NULL, /* m_traverse */ | |
273 | NULL, /* m_clear */ | |
274 | NULL, /* m_free */ | |
275 | }; | |
276 | #endif | |
263 | 277 | |
264 | 278 | PyMODINIT_FUNC |
265 | initcxrayutilities(void) { | |
279 | #if PY_MAJOR_VERSION >= 3 | |
280 | PyInit_cxrayutilities(void) | |
281 | #else | |
282 | initcxrayutilities(void) | |
283 | #endif | |
284 | { | |
266 | 285 | PyObject *m; |
267 | 286 | |
287 | #if PY_MAJOR_VERSION >= 3 | |
288 | m = PyModule_Create(&moduledef); | |
289 | #else | |
268 | 290 | m = Py_InitModule3("cxrayutilities", XRU_Methods, |
269 | 291 | "Python C extension including performance critical parts\n" |
270 | 292 | "of xrayutilities (gridder, qconversion, block-averageing)\n"); |
271 | if (m == NULL) | |
272 | return; | |
293 | #endif | |
273 | 294 | |
274 | 295 | import_array(); |
296 | ||
297 | #if PY_MAJOR_VERSION >= 3 | |
298 | return m; | |
299 | #endif | |
275 | 300 | } |
13 | 13 | ang = self.hxrd.Q2Ang(self.mat.Q(self.hklsym)) |
14 | 14 | qout = self.hxrd.Ang2HKL(ang[0],ang[3],mat=self.mat) |
15 | 15 | for i in range(3): |
16 | self.assertAlmostEqual(qout[i][0], self.hklsym[i], places=10) | |
16 | self.assertAlmostEqual(qout[i], self.hklsym[i], places=10) | |
17 | 17 | |
18 | 18 | def test_qconversion_point_asym(self): |
19 | 19 | ang = self.hxrd.Q2Ang(self.mat.Q(self.hklasym)) |
20 | 20 | qout = self.hxrd.Ang2HKL(ang[0],ang[3],mat=self.mat) |
21 | 21 | for i in range(3): |
22 | self.assertAlmostEqual(qout[i][0], self.hklasym[i], places=10) | |
22 | self.assertAlmostEqual(qout[i], self.hklasym[i], places=10) | |
23 | 23 | |
24 | 24 | if __name__ == '__main__': |
25 | 25 | unittest.main() |
Binary diff not shown