webmo 1.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- webmo/__init__.py +2 -0
- webmo/gui.py +193 -0
- webmo/spectrum.py +451 -0
- webmo/util.py +358 -0
- webmo/webmo_rest.py +903 -0
- webmo-1.6.0.dist-info/METADATA +35 -0
- webmo-1.6.0.dist-info/RECORD +10 -0
- webmo-1.6.0.dist-info/WHEEL +5 -0
- webmo-1.6.0.dist-info/licenses/LICENSE +21 -0
- webmo-1.6.0.dist-info/top_level.txt +1 -0
webmo/__init__.py
ADDED
webmo/gui.py
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
#handle abstract base class
|
|
2
|
+
from abc import ABC, abstractmethod
|
|
3
|
+
|
|
4
|
+
class _WebMOGUIBase(ABC):
|
|
5
|
+
"""The _WebMOGUIBase class is an abstract base class for all Python-based GUIs for WebMO.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
def __init__(self, template, query_vars, additional_vars):
|
|
9
|
+
self._query_vars = query_vars
|
|
10
|
+
self._additional_vars = additional_vars
|
|
11
|
+
|
|
12
|
+
@abstractmethod
|
|
13
|
+
def display(self):
|
|
14
|
+
"""Presents the menu-driven JupyterGUI
|
|
15
|
+
|
|
16
|
+
Displays the JupyterGUI using a system of IPython widgets.
|
|
17
|
+
|
|
18
|
+
Args:
|
|
19
|
+
None
|
|
20
|
+
|
|
21
|
+
Returns:
|
|
22
|
+
None
|
|
23
|
+
"""
|
|
24
|
+
pass
|
|
25
|
+
|
|
26
|
+
@abstractmethod
|
|
27
|
+
def get_variables(self):
|
|
28
|
+
"""Returns a populated variables dictionary.
|
|
29
|
+
|
|
30
|
+
Returns a populated variables dictionary, generated using the user-selected
|
|
31
|
+
menu options, along with an additional user-specified key/value pairs (additional_vars)
|
|
32
|
+
|
|
33
|
+
Args:
|
|
34
|
+
None
|
|
35
|
+
|
|
36
|
+
Returns:
|
|
37
|
+
A populated dictionary of of variables and values.
|
|
38
|
+
"""
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
class JupyterGUI(_WebMOGUIBase):
|
|
42
|
+
"""The JupyterGUI class is a menu-driven Jupyter GUI interface for setting up WebMO jobs.
|
|
43
|
+
|
|
44
|
+
The class utilizes IPython widgets to present a menu-driven interface, using a subset
|
|
45
|
+
of user-specified list of template variables.
|
|
46
|
+
"""
|
|
47
|
+
try:
|
|
48
|
+
import ipywidgets
|
|
49
|
+
except:
|
|
50
|
+
#fail silently, since this should never happen in Jupyter
|
|
51
|
+
pass #print('ipywidgets not found; disabling support for JupyterGUI')
|
|
52
|
+
|
|
53
|
+
import time
|
|
54
|
+
|
|
55
|
+
def __init__(self, template, query_vars, additional_vars=None):
|
|
56
|
+
"""Constructor for JupyterGUI
|
|
57
|
+
|
|
58
|
+
This constructor generates a JupyterGUI object.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
template(dict): A specific template, selected from WebMOREST.get_templates()
|
|
62
|
+
query_vars(list): A subset of variables to use when generating the GUI
|
|
63
|
+
additional_vars(dict, optional): A dictionary of additional variables/values to utilize during input file generation
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
object: The newly constructed JupyterGUI object
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
_WebMOGUIBase.__init__(self, template, query_vars, additional_vars)
|
|
70
|
+
self._widgets = []
|
|
71
|
+
self._display_time = -1
|
|
72
|
+
|
|
73
|
+
for var in query_vars:
|
|
74
|
+
if template['variables'][var]['type'] == 'checkbox':
|
|
75
|
+
#handle checkbox options
|
|
76
|
+
self._widgets.append(
|
|
77
|
+
self.ipywidgets.widgets.Checkbox(
|
|
78
|
+
value=True if template['variables'][var]['default'] == 'on' else False,
|
|
79
|
+
description=var,
|
|
80
|
+
disabled=False));
|
|
81
|
+
elif template['variables'][var]['type'] == 'dropdown':
|
|
82
|
+
#handle select/dropdown options
|
|
83
|
+
self._widgets.append(
|
|
84
|
+
self.ipywidgets.widgets.Dropdown(
|
|
85
|
+
options=template['variables'][var]['options'],
|
|
86
|
+
value=template['variables'][var]['default'],
|
|
87
|
+
description=var,
|
|
88
|
+
disabled=False));
|
|
89
|
+
else:
|
|
90
|
+
#handle text input
|
|
91
|
+
self._widgets.append(
|
|
92
|
+
self.ipywidgets.widgets.Text(
|
|
93
|
+
description=var,
|
|
94
|
+
value=template['variables'][var]['default'],
|
|
95
|
+
disabled=False));
|
|
96
|
+
|
|
97
|
+
def display(self):
|
|
98
|
+
|
|
99
|
+
self._display_time = self.time.time()
|
|
100
|
+
|
|
101
|
+
for widget in self._widgets:
|
|
102
|
+
display(widget)
|
|
103
|
+
|
|
104
|
+
def get_variables(self):
|
|
105
|
+
|
|
106
|
+
MIN_INPUT_TIME = 1.0
|
|
107
|
+
# sanity check to make sure user has had time to input something
|
|
108
|
+
# fail this call during re-execution of entire notebook at once
|
|
109
|
+
elapsed_time = self.time.time() - self._display_time
|
|
110
|
+
if self._display_time == -1 or elapsed_time < MIN_INPUT_TIME:
|
|
111
|
+
raise RuntimeError('Must provide JupyterGUI input before calling get_variables')
|
|
112
|
+
|
|
113
|
+
# add in additional user-specified variables
|
|
114
|
+
if (self._additional_vars != None):
|
|
115
|
+
variables = {**self._additional_vars}
|
|
116
|
+
else:
|
|
117
|
+
variables = {}
|
|
118
|
+
|
|
119
|
+
for (var, widget) in zip(self._query_vars, self._widgets):
|
|
120
|
+
if isinstance(widget, self.ipywidgets.Checkbox):
|
|
121
|
+
variables[var] = "on" if widget.value == True else ""
|
|
122
|
+
else:
|
|
123
|
+
variables[var] = widget.value
|
|
124
|
+
|
|
125
|
+
return variables
|
|
126
|
+
|
|
127
|
+
class ConsoleGUI(_WebMOGUIBase):
|
|
128
|
+
"""The ConsoleGUI class is a text-based interface for setting up WebMO jobs.
|
|
129
|
+
|
|
130
|
+
The class utilizes the questionary library to present a neat interface using a subset
|
|
131
|
+
of user-specified list of template variables.
|
|
132
|
+
"""
|
|
133
|
+
|
|
134
|
+
def __init__(self, template, query_vars, additional_vars=None):
|
|
135
|
+
"""Constructor for ConsoleGUI
|
|
136
|
+
|
|
137
|
+
This constructor generates a ConsoleGUI object.
|
|
138
|
+
|
|
139
|
+
Args:
|
|
140
|
+
template(dict): A specific template, selected from WebMOREST.get_templates()
|
|
141
|
+
query_vars(list): A subset of variables to use when generating the GUI
|
|
142
|
+
additional_vars(dict, optional): A dictionary of additional variables/values to utilize during input file generation
|
|
143
|
+
|
|
144
|
+
Returns:
|
|
145
|
+
object: The newly constructed ConsoleGUI object
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
import questionary as q
|
|
149
|
+
|
|
150
|
+
_WebMOGUIBase.__init__(self, template, query_vars, additional_vars)
|
|
151
|
+
self._questions = []
|
|
152
|
+
for var in query_vars:
|
|
153
|
+
# checkbox options
|
|
154
|
+
if template['variables'][var]['type'] == 'checkbox':
|
|
155
|
+
self._questions.append(q.confirm(var));
|
|
156
|
+
# select/dropdown options
|
|
157
|
+
elif template['variables'][var]['type'] == 'dropdown':
|
|
158
|
+
choices = []
|
|
159
|
+
for key, value in template['variables'][var]['options'].items():
|
|
160
|
+
choices.append(q.Choice(title=key, value=value))
|
|
161
|
+
|
|
162
|
+
self._questions.append(
|
|
163
|
+
q.select(
|
|
164
|
+
var,
|
|
165
|
+
choices=choices,
|
|
166
|
+
use_shortcuts=True));
|
|
167
|
+
# text input
|
|
168
|
+
else:
|
|
169
|
+
self._questions.append(
|
|
170
|
+
q.text(var));
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
def display(self):
|
|
174
|
+
|
|
175
|
+
self._answers = []
|
|
176
|
+
for question in self._questions:
|
|
177
|
+
self._answers.append(question.ask())
|
|
178
|
+
|
|
179
|
+
def get_variables(self):
|
|
180
|
+
|
|
181
|
+
# add in additional user-specified variables
|
|
182
|
+
if (self._additional_vars != None):
|
|
183
|
+
variables = {**self._additional_vars}
|
|
184
|
+
else:
|
|
185
|
+
variables = {}
|
|
186
|
+
|
|
187
|
+
for (var, value) in zip(self._query_vars, self._answers):
|
|
188
|
+
if isinstance(value, bool):
|
|
189
|
+
variables[var] = "on" if value else ""
|
|
190
|
+
else:
|
|
191
|
+
variables[var] = value
|
|
192
|
+
|
|
193
|
+
return variables
|
webmo/spectrum.py
ADDED
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
import numpy as np
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
# lineshape functions
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
def _faddeeva(z):
|
|
8
|
+
"""
|
|
9
|
+
Calculates the scaled complex complementary function in the complex plane.
|
|
10
|
+
We use this to calculate voigt lineshapes.
|
|
11
|
+
"""
|
|
12
|
+
if _faddeeva.run_yet == False:
|
|
13
|
+
_faddeeva.run_yet = True
|
|
14
|
+
_faddeeva.N = 1000
|
|
15
|
+
_faddeeva.L = np.sqrt(_faddeeva.N / np.sqrt(2))
|
|
16
|
+
# our basis set. 1000 elements hits a good blend of speed and accuracy.
|
|
17
|
+
l = [
|
|
18
|
+
5.11748989e-16,-1.44365777e-16,1.71205586e-16,1.43270169e-16,
|
|
19
|
+
2.40509424e-16,9.34400028e-17,3.33586468e-16,2.07038704e-16,
|
|
20
|
+
3.95030052e-16,-2.26565767e-17,2.99460336e-16,5.72632548e-16,
|
|
21
|
+
1.29042294e-16,-7.07527120e-17,-5.62526370e-18,2.36711749e-16,
|
|
22
|
+
1.02183724e-16,-4.34250382e-16,-8.07532865e-17,-4.96929924e-16,
|
|
23
|
+
1.26045192e-16,-2.53796359e-16,-1.03766119e-16,-2.15858058e-16,
|
|
24
|
+
-1.83552885e-16,-8.67481915e-17,-3.07549909e-16,-2.74584240e-16,
|
|
25
|
+
-2.69389284e-17,-4.24362029e-16,-5.95060089e-16,-3.70830265e-16,
|
|
26
|
+
2.29567357e-16,7.09903912e-17,-9.60967179e-16,2.56731866e-16,
|
|
27
|
+
-4.28826105e-16,-4.30205991e-16,-5.08718759e-16,-2.72358486e-16,
|
|
28
|
+
-2.89119580e-16,-3.97432513e-16,-4.35239789e-16,-8.06482626e-17,
|
|
29
|
+
-8.25507147e-16,-3.76087656e-16,-8.24193610e-16,-5.49494587e-16,
|
|
30
|
+
-6.65608655e-16,-7.53824209e-16,-7.22452074e-16,-3.57335854e-16,
|
|
31
|
+
-2.98311037e-16,-4.14104958e-16,-2.58059335e-16,-7.98829398e-16,
|
|
32
|
+
-3.86795717e-16,-2.37823897e-16,-1.83073068e-16,-8.98227362e-17,
|
|
33
|
+
-5.28120565e-17,-4.52881008e-16,-1.81103394e-16,-8.56200133e-17,
|
|
34
|
+
-1.22186640e-16,-5.41322089e-17,-7.24757378e-16,-3.50403658e-16,
|
|
35
|
+
-1.42903007e-16,-1.86846592e-16,-3.94211076e-16,-5.10446457e-16,
|
|
36
|
+
-2.41826709e-16,-1.21038373e-16,-3.79652685e-16,-3.19221360e-16,
|
|
37
|
+
-3.57241318e-16,-3.08579376e-16,-1.28131320e-16,-3.12949918e-16,
|
|
38
|
+
-2.46392992e-16,-2.91414183e-16,-2.85635470e-16,-8.72117464e-17,
|
|
39
|
+
-5.38404011e-17,-7.88752966e-17,8.44277161e-17,2.10083596e-17,
|
|
40
|
+
1.82773768e-17,-4.62896364e-16,-2.15480876e-16,-3.50123461e-16,
|
|
41
|
+
-2.44328019e-16,-5.22369602e-16,-3.02177957e-16,-4.95661311e-16,
|
|
42
|
+
-2.05232527e-16,-6.89780504e-16,-5.76999940e-16,-3.57086548e-16,
|
|
43
|
+
-1.73695260e-16,-5.10360238e-16,-3.18226893e-16,-6.53936479e-16,
|
|
44
|
+
-4.07209831e-16,-5.23531607e-16,-6.25241467e-16,-5.59616421e-16,
|
|
45
|
+
-5.05190494e-16,-4.95920116e-16,5.91918728e-17,-4.24242069e-16,
|
|
46
|
+
-4.26716888e-16,-1.94214030e-16,-3.91975316e-16,1.89855222e-17,
|
|
47
|
+
-8.41436616e-17,-1.91135361e-16,1.17185773e-16,1.70875441e-17,
|
|
48
|
+
-7.82465278e-17,-4.50946865e-16,-3.49996280e-16,-3.61639701e-16,
|
|
49
|
+
-1.44123098e-16,-4.53945169e-16,-1.19604860e-16,-1.05312368e-16,
|
|
50
|
+
-1.05598414e-16,-1.98885939e-16,-1.60492266e-16,-5.06892532e-17,
|
|
51
|
+
-2.08435369e-16,-1.15672143e-16,-2.28953471e-16,-2.10576416e-16,
|
|
52
|
+
-1.43268468e-16,-3.93351320e-16,-3.19012003e-16,-2.86881044e-16,
|
|
53
|
+
-3.09187106e-16,4.85144017e-17,-1.43142304e-17,-2.05880804e-16,
|
|
54
|
+
-2.88573343e-16,-2.34476402e-16,-4.24449546e-16,-3.15047863e-16,
|
|
55
|
+
7.15863776e-18,-9.40085268e-17,-3.41068217e-16,-5.81558958e-16,
|
|
56
|
+
-1.23060165e-16,-2.29925794e-16,-1.00051620e-16,2.60549021e-16,
|
|
57
|
+
-1.95855091e-16,-6.47544512e-16,-2.11951657e-16,1.68350302e-16,
|
|
58
|
+
-3.31451746e-16,-9.37946003e-17,-5.38246225e-17,2.45588357e-16,
|
|
59
|
+
-1.55116503e-16,1.47231294e-16,3.32452583e-17,-1.15883349e-16,
|
|
60
|
+
-6.26556401e-17,-4.11199133e-16,3.40065530e-16,2.76793021e-16,
|
|
61
|
+
4.41447793e-16,5.24289805e-16,2.00946326e-16,3.90427144e-16,
|
|
62
|
+
1.15328785e-16,1.07955299e-17,-2.17963342e-17,4.93958279e-16,
|
|
63
|
+
2.49313066e-17,-1.32566816e-16,4.10357049e-16,-4.52822565e-16,
|
|
64
|
+
4.07881112e-16,-7.92449589e-17,1.19915180e-16,1.39818533e-15,
|
|
65
|
+
1.00809312e-17,-4.43575229e-16,-5.06216625e-17,4.14292705e-17,
|
|
66
|
+
3.96859128e-17,-8.34232666e-16,9.11190986e-16,9.32038663e-16,
|
|
67
|
+
8.84033937e-18,6.99303277e-18,9.01104015e-16,9.15275917e-16,
|
|
68
|
+
0.00000000e00,9.09494702e-16,0.00000000e00,-9.09494702e-16,
|
|
69
|
+
0.00000000e00,-9.09494702e-16,-9.09494702e-16,0.00000000e00,
|
|
70
|
+
-9.09494702e-16,0.00000000e00,0.00000000e00,-4.54747351e-16,
|
|
71
|
+
-4.54747351e-16,0.00000000e00,0.00000000e00,4.54747351e-16,
|
|
72
|
+
4.54747351e-16,0.00000000e00,4.54747351e-16,0.00000000e00,
|
|
73
|
+
0.00000000e00,0.00000000e00,0.00000000e00,4.54747351e-16,
|
|
74
|
+
0.00000000e00,4.54747351e-16,4.54747351e-16,-4.54747351e-16,
|
|
75
|
+
0.00000000e00,0.00000000e00,-4.54747351e-16,-4.54747351e-16,
|
|
76
|
+
0.00000000e00,2.27373675e-16,-2.27373675e-16,-2.27373675e-16,
|
|
77
|
+
0.00000000e00,-2.27373675e-16,-3.41060513e-16,-2.27373675e-16,
|
|
78
|
+
-1.13686838e-16,-2.27373675e-16,0.00000000e00,5.68434189e-17,
|
|
79
|
+
5.68434189e-17,3.97903932e-16,1.70530257e-16,-2.27373675e-16,
|
|
80
|
+
1.70530257e-16,0.00000000e00,3.12638804e-16,1.42108547e-17,
|
|
81
|
+
-1.13686838e-16,1.98951966e-16,9.94759830e-17,9.94759830e-17,
|
|
82
|
+
1.20792265e-16,3.41060513e-16,2.62900812e-16,1.06581410e-16,
|
|
83
|
+
2.73558953e-16,2.13162821e-17,2.87769808e-16,1.81188398e-16,
|
|
84
|
+
4.19220214e-16,3.90798505e-17,2.38031816e-16,1.49213975e-16,
|
|
85
|
+
4.86721774e-16,6.03961325e-17,3.49054119e-16,1.88737914e-16,
|
|
86
|
+
3.00204306e-16,4.88498131e-17,9.72555370e-17,5.17141885e-16,
|
|
87
|
+
1.27453603e-16,4.18998169e-16,4.35429470e-16,2.03947970e-16,
|
|
88
|
+
3.28403971e-16,7.09432513e-17,2.75390821e-16,1.28230759e-16,
|
|
89
|
+
1.38278278e-16,1.62314606e-16,1.17683641e-16,-7.49122986e-17,
|
|
90
|
+
-4.42562653e-17,2.25021390e-16,5.67809688e-17,-9.29117894e-17,
|
|
91
|
+
4.77465290e-17,-4.95159469e-17,-7.98319744e-17,-1.82109536e-16,
|
|
92
|
+
1.66366920e-16,-1.86119349e-16,1.35362208e-16,-3.26893894e-16,
|
|
93
|
+
1.89110880e-16,8.02986150e-17,2.42919400e-16,-1.88988365e-16,
|
|
94
|
+
1.09200626e-16,-1.55745100e-16,-1.23230690e-16,-7.49633103e-17,
|
|
95
|
+
-1.58868199e-16,-5.36516361e-17,2.77595573e-16,2.81580071e-16,
|
|
96
|
+
-2.95155908e-16,-2.48784798e-16,2.91340472e-16,1.36892539e-16,
|
|
97
|
+
1.70318153e-16,1.73748269e-16,4.65475589e-17,-2.31324207e-16,
|
|
98
|
+
1.83833839e-17,-6.04137894e-17,4.80069234e-17,-2.85632380e-16,
|
|
99
|
+
3.67524426e-17,-4.74434771e-17,-3.17576294e-16,-1.71678676e-16,
|
|
100
|
+
-1.08599054e-16,-2.18406185e-16,1.85501493e-16,-1.46516971e-17,
|
|
101
|
+
-9.07895605e-17,-7.19678890e-17,1.53856704e-16,-1.40846832e-16,
|
|
102
|
+
7.20265739e-17,-2.54008979e-16,-1.23325143e-16,2.75474757e-16,
|
|
103
|
+
2.32616486e-16,-1.75463698e-16,9.79362317e-17,2.20669333e-16,
|
|
104
|
+
-2.29810374e-16,-7.95069634e-17,2.87994117e-16,3.12697006e-16,
|
|
105
|
+
3.14586804e-16,1.79021616e-16,2.06952162e-17,-2.67293573e-16,
|
|
106
|
+
3.45231230e-16,8.68326886e-17,2.65629639e-16,3.06821693e-18,
|
|
107
|
+
1.34860677e-16,2.74418053e-16,-3.04162528e-16,1.09786189e-16,
|
|
108
|
+
-1.54948449e-17,-3.43520294e-16,-8.60630571e-17,-3.28755503e-16,
|
|
109
|
+
-2.06357180e-16,-7.70834219e-16,-4.48670877e-16,-4.21195874e-16,
|
|
110
|
+
-3.33542439e-16,-1.12012549e-16,1.31482158e-16,-9.05916732e-17,
|
|
111
|
+
-1.88320054e-16,-2.71973298e-16,-1.85779885e-16,-2.41487719e-16,
|
|
112
|
+
-3.34298416e-16,-1.26864283e-16,-1.07737460e-16,-3.00912980e-16,
|
|
113
|
+
-5.14639839e-16,-3.53320333e-16,-5.69661721e-16,-1.64073995e-16,
|
|
114
|
+
-1.61323191e-16,-6.91875273e-16,2.10402594e-17,-4.97408214e-16,
|
|
115
|
+
-9.58387029e-17,-4.71724194e-16,-2.64915700e-16,-3.20381256e-16,
|
|
116
|
+
-1.81528269e-16,-3.63661361e-16,-3.33501787e-16,-4.82454667e-16,
|
|
117
|
+
1.92955199e-17,-2.70836693e-16,3.39983475e-17,6.18997114e-17,
|
|
118
|
+
-1.02320106e-16,1.27057441e-16,8.31854263e-17,-1.18884147e-16,
|
|
119
|
+
9.89208773e-17,2.55999309e-16,-1.28411687e-17,1.37041750e-16,
|
|
120
|
+
1.06258503e-16,4.81342042e-16,4.98521006e-16,2.55381445e-16,
|
|
121
|
+
2.54674725e-16,2.62261848e-16,3.83584674e-16,1.89662976e-16,
|
|
122
|
+
1.26359468e-16,3.08514032e-16,2.58755647e-16,2.87385786e-16,
|
|
123
|
+
8.62079097e-17,2.85730122e-16,1.60530531e-16,2.12208599e-16,
|
|
124
|
+
-7.50533882e-17,1.03721015e-16,-9.44620129e-17,-1.25196451e-17,
|
|
125
|
+
1.83989433e-16,1.02092358e-16,1.23199547e-16,3.12924987e-16,
|
|
126
|
+
7.94899735e-18,3.13515155e-17,-1.91924262e-16,-1.57024233e-16,
|
|
127
|
+
-1.16563275e-16,1.01280507e-16,-3.14811048e-16,-1.99895021e-16,
|
|
128
|
+
3.17185157e-17,3.72378215e-16,-2.48438099e-17,-1.96408130e-16,
|
|
129
|
+
2.19875515e-16,-1.48259617e-16,-1.88755403e-16,6.10412835e-17,
|
|
130
|
+
-7.97417495e-17,1.04554694e-16,-1.34343584e-16,1.57394697e-16,
|
|
131
|
+
-2.97867426e-16,9.44191922e-17,-3.12413672e-16,1.09925848e-16,
|
|
132
|
+
-1.70858155e-16,1.22319748e-16,-2.39270244e-16,2.99282075e-16,
|
|
133
|
+
2.71551291e-16,1.51896598e-16,-1.91045098e-16,3.37244715e-16,
|
|
134
|
+
-1.68447924e-16,2.78788148e-16,-1.02388408e-16,2.28266264e-16,
|
|
135
|
+
-1.06314013e-16,7.49857205e-17,6.80150911e-17,2.62399291e-16,
|
|
136
|
+
2.93062592e-16,6.72930693e-16,1.23409884e-16,7.80241772e-17,
|
|
137
|
+
1.23935426e-16,7.42401592e-17,-4.97733202e-17,2.24872387e-17,
|
|
138
|
+
3.13006754e-17,4.36894318e-16,-2.73584271e-17,5.34106732e-16,
|
|
139
|
+
3.04015329e-17,3.55236272e-16,2.00061692e-16,2.35008822e-17,
|
|
140
|
+
2.00115055e-16,7.50216609e-16,1.71467707e-16,5.48936595e-16,
|
|
141
|
+
6.59987339e-16,9.11465756e-16,3.27550321e-16,3.16454926e-16,
|
|
142
|
+
3.25061464e-16,3.92881805e-16,4.45080470e-16,4.34813674e-16,
|
|
143
|
+
2.86276929e-16,2.80084273e-16,4.02814643e-16,2.86153600e-16,
|
|
144
|
+
1.46638302e-16,2.34169964e-16,-3.36764594e-17,1.72043602e-16,
|
|
145
|
+
3.94568392e-16,1.84240100e-16,1.58638568e-16,-6.67371223e-17,
|
|
146
|
+
2.14683219e-16,-4.10907209e-17,-5.60176818e-18,-4.23445380e-16,
|
|
147
|
+
1.13835939e-18,-1.09095088e-16,8.20242358e-17,8.94645890e-17,
|
|
148
|
+
1.93399044e-16,3.99021608e-17,-1.82013746e-16,6.18526657e-16,
|
|
149
|
+
-1.11938105e-16,6.66551783e-16,5.13967366e-16,5.58363111e-16,
|
|
150
|
+
-4.19435265e-18,-3.54000381e-16,1.01030703e-16,4.22960946e-16,
|
|
151
|
+
2.42257871e-16,1.01132651e-16,1.82876993e-16,-9.86957381e-17,
|
|
152
|
+
3.56039675e-16,1.05496299e-16,3.44095847e-16,5.75735467e-16,
|
|
153
|
+
2.24941492e-16,2.69783032e-16,1.92864050e-16,-9.74377652e-18,
|
|
154
|
+
2.79461094e-16,-3.94524145e-16,6.85116549e-17,-3.18711202e-16,
|
|
155
|
+
-7.88669123e-17,7.99601369e-17,-2.31458426e-17,-2.50800230e-16,
|
|
156
|
+
-7.86084747e-17,-4.74833060e-16,-4.36565773e-17,-1.55929470e-16,
|
|
157
|
+
-4.05522987e-16,-3.59094184e-16,-2.55120726e-16,-4.05726600e-16,
|
|
158
|
+
-2.13699502e-16,-5.41348764e-16,-4.78030787e-17,-2.58327801e-16,
|
|
159
|
+
-3.46581471e-16,-3.46533290e-16,-8.53057559e-17,-5.38831280e-16,
|
|
160
|
+
-3.46786352e-16,-4.32363655e-16,-1.68813053e-16,-7.17961227e-17,
|
|
161
|
+
-3.91976466e-16,-2.55961277e-16,-6.32428739e-17,-2.99788312e-16,
|
|
162
|
+
5.13471358e-17,-4.10951740e-16,-1.03668319e-17,-2.33628706e-16,
|
|
163
|
+
-3.38590834e-16,-5.28009955e-18,-6.29904955e-17,-2.06798096e-16,
|
|
164
|
+
-2.06115411e-16,-5.30012252e-16,-8.60235170e-17,-3.79126886e-16,
|
|
165
|
+
-3.93774310e-16,-1.23453191e-16,-1.98039359e-16,-2.99884806e-16,
|
|
166
|
+
-1.70348792e-16,-5.75530462e-16,-1.90399233e-17,-1.33260936e-16,
|
|
167
|
+
-2.41764387e-16,-2.41057218e-16,2.74137576e-17,-1.43504070e-16,
|
|
168
|
+
-1.79498040e-16,-1.49035292e-16,-5.13045291e-17,7.64957220e-17,
|
|
169
|
+
-9.01996753e-18,7.79047747e-17,8.01635709e-17,1.01525911e-16,
|
|
170
|
+
3.24917016e-16,1.64160518e-16,1.22226009e-16,5.58281902e-16,
|
|
171
|
+
7.64857413e-17,2.02497667e-16,8.65193004e-17,3.72152535e-16,
|
|
172
|
+
-9.26868752e-18,-2.09224351e-16,-8.47794702e-17,-1.25922233e-16,
|
|
173
|
+
1.29086358e-16,2.89461144e-16,-8.20626177e-17,-5.16486509e-17,
|
|
174
|
+
1.83191796e-16,-3.06674860e-16,-1.13915329e-16,3.80596575e-16,
|
|
175
|
+
-3.28275082e-16,1.10666724e-16,-5.99813539e-17,1.05195582e-16,
|
|
176
|
+
-1.75628122e-16,-3.65824066e-16,-4.36305437e-16,-1.34170680e-16,
|
|
177
|
+
-2.35694163e-18,-8.44147857e-17,-2.29387585e-16,-2.49491085e-16,
|
|
178
|
+
-3.82957891e-16,-2.01082319e-16,-3.69520171e-16,3.08359859e-16,
|
|
179
|
+
-1.99895640e-17,-3.32817349e-16,-1.20815203e-16,-3.95566702e-18,
|
|
180
|
+
-4.24507796e-16,-3.33867325e-16,-6.50492639e-16,-4.67244932e-16,
|
|
181
|
+
-6.40278657e-17,-1.99413595e-16,-6.38794849e-17,-4.86309451e-16,
|
|
182
|
+
-3.90516920e-16,-5.53476004e-16,-4.25387534e-16,-5.07859220e-16,
|
|
183
|
+
1.50184194e-16,-1.56593179e-16,-5.77023883e-17,-1.20813224e-16,
|
|
184
|
+
-2.42609780e-16,-6.96228162e-16,-2.31425493e-16,-5.63834410e-16,
|
|
185
|
+
-3.28654446e-16,-3.29201011e-16,1.15017889e-16,-5.36343420e-16,
|
|
186
|
+
-2.25728055e-17,-4.08400873e-16,-7.62532358e-18,-5.63480342e-16,
|
|
187
|
+
2.29275694e-17,-3.86463027e-16,-1.19440287e-16,-1.12034603e-17,
|
|
188
|
+
-4.48245375e-16,-8.71150653e-17,-3.59698822e-16,7.63701580e-16,
|
|
189
|
+
-2.09249540e-16,-7.29027711e-17,4.34806301e-16,2.79370416e-16,
|
|
190
|
+
4.35781459e-16,9.68543292e-17,1.82341529e-16,4.66259454e-16,
|
|
191
|
+
4.58752443e-16,-5.47309304e-16,4.82142613e-16,6.60132335e-16,
|
|
192
|
+
4.61280949e-16,-3.13067390e-16,1.92698504e-16,1.04964129e-16,
|
|
193
|
+
-8.98832392e-17,-3.42289455e-16,3.43710315e-16,3.40297977e-17,
|
|
194
|
+
2.34400799e-16,3.56171595e-17,-1.35737919e-16,4.13360932e-16,
|
|
195
|
+
9.28909624e-17,-5.26283763e-17,5.39552046e-16,2.63123975e-16,
|
|
196
|
+
1.77400491e-16,1.60163316e-16,1.73522799e-16,2.60524046e-16,
|
|
197
|
+
3.91736558e-16,1.22245854e-16,5.72475581e-16,-2.79943119e-17,
|
|
198
|
+
5.39626522e-16,4.69224371e-16,1.79053135e-16,4.94826390e-16,
|
|
199
|
+
3.39932067e-16,8.38290822e-17,2.83931853e-16,5.55942954e-16,
|
|
200
|
+
4.19747676e-16,2.79124937e-16,2.03558902e-16,4.24519122e-16,
|
|
201
|
+
1.02658980e-16,1.89197331e-17,3.63112861e-16,1.41263763e-16,
|
|
202
|
+
-6.39833244e-17,2.94156130e-16,1.19279922e-16,2.62537867e-16,
|
|
203
|
+
9.23250107e-17,9.54340873e-17,2.02657914e-16,8.56837549e-17,
|
|
204
|
+
1.09912242e-16,3.25830034e-16,-6.06707638e-17,1.19561917e-16,
|
|
205
|
+
1.82940837e-18,-4.63814691e-17,-1.76004402e-16,-1.14268787e-16,
|
|
206
|
+
-1.99388849e-16,-2.34993921e-16,-2.91227483e-16,7.53550548e-18,
|
|
207
|
+
4.82690083e-18,-2.38575495e-16,-2.44652589e-16,-8.24120125e-17,
|
|
208
|
+
-1.33320590e-16,-2.00054414e-16,-1.43372915e-16,1.89338899e-16,
|
|
209
|
+
-3.10018714e-16,-1.46340691e-16,-1.07599704e-16,-1.64066751e-16,
|
|
210
|
+
-2.17562644e-16,-1.17636359e-16,-1.86483075e-16,5.34358570e-17,
|
|
211
|
+
-4.22094388e-17,1.49639967e-16,-9.19369910e-17,6.43735552e-17,
|
|
212
|
+
-4.95497319e-17,3.33550953e-16,-5.58797396e-18,1.08044533e-17,
|
|
213
|
+
-5.68782134e-17,-1.09699521e-16,2.02816822e-17,6.57529483e-18,
|
|
214
|
+
-5.62985774e-17,1.37422525e-16,3.68137873e-16,2.93855626e-16,
|
|
215
|
+
4.60911681e-16,2.79558527e-16,1.93645149e-16,4.29339673e-16,
|
|
216
|
+
3.94346119e-16,-9.11980916e-17,2.08587798e-16,4.60632308e-16,
|
|
217
|
+
2.46253693e-16,2.94939706e-16,2.89601071e-16,2.36630408e-16,
|
|
218
|
+
3.40090024e-16,2.08679525e-16,1.92263017e-16,9.71798469e-17,
|
|
219
|
+
2.75039790e-16,4.35625730e-16,3.44388483e-16,3.13739000e-16,
|
|
220
|
+
2.67825858e-16,5.23555689e-16,7.02254341e-17,1.24864649e-16,
|
|
221
|
+
3.20139668e-16,2.33491483e-16,2.19996198e-16,3.10765864e-16,
|
|
222
|
+
1.92283246e-16,4.58564011e-16,5.97928541e-16,1.65336064e-16,
|
|
223
|
+
1.97369721e-16,4.79474407e-16,4.74556351e-16,-2.72567462e-17,
|
|
224
|
+
4.84030144e-16,2.35944695e-16,-1.64178854e-16,2.08598406e-16,
|
|
225
|
+
4.78048738e-16,-1.07186669e-16,2.72374315e-16,1.30982162e-16,
|
|
226
|
+
6.19721697e-16,1.84166717e-16,2.19916975e-16,-8.38157837e-17,
|
|
227
|
+
3.10783706e-16,1.43651243e-16,8.32086938e-16,-8.60950101e-17,
|
|
228
|
+
1.12719684e-15,1.25055521e-15,1.59161573e-15,2.61479727e-15,
|
|
229
|
+
5.34328137e-15,8.24229573e-15,1.30739863e-14,2.09752216e-14,
|
|
230
|
+
3.33102435e-14,5.24096322e-14,8.29913915e-14,1.30512490e-13,
|
|
231
|
+
2.04465778e-13,3.19687388e-13,4.96527264e-13,7.69091457e-13,
|
|
232
|
+
1.18768639e-12,1.82723170e-12,2.80164159e-12,4.28093472e-12,
|
|
233
|
+
6.51965593e-12,9.89587079e-12,1.49690322e-11,2.25677468e-11,
|
|
234
|
+
3.39091173e-11,5.07809830e-11,7.57933947e-11,1.12751053e-10,
|
|
235
|
+
1.67175699e-10,2.47052924e-10,3.63894571e-10,5.34237415e-10,
|
|
236
|
+
7.81753258e-10,1.14021130e-09,1.65761999e-09,2.40199471e-09,
|
|
237
|
+
3.46936706e-09,4.99485579e-09,7.16792849e-09,1.02533485e-08,
|
|
238
|
+
1.46198336e-08,2.07791178e-08,2.94389945e-08,4.15750919e-08,
|
|
239
|
+
5.85276356e-08,8.21314254e-08,1.14889782e-07,1.60206498e-07,
|
|
240
|
+
2.22693985e-07,3.08581163e-07,4.26251360e-07,5.86949080e-07,
|
|
241
|
+
8.05705175e-07,1.10254346e-06,1.50404848e-06,2.04539498e-06,
|
|
242
|
+
2.77296513e-06,3.74771110e-06,5.04945887e-06,6.78239587e-06,
|
|
243
|
+
9.08204151e-06,1.21240672e-05,1.61354139e-05,2.14082509e-05,
|
|
244
|
+
2.83174350e-05,3.73422599e-05,4.90934463e-05,6.43464991e-05,
|
|
245
|
+
8.40827711e-05,1.09539808e-04,1.42272822e-04,1.84229443e-04,
|
|
246
|
+
2.37840239e-04,3.06127873e-04,3.92838172e-04,5.02596823e-04,
|
|
247
|
+
6.41095903e-04,8.15314926e-04,1.03378162e-03,1.30687819e-03,
|
|
248
|
+
1.64719925e-03,2.06996828e-03,2.59351969e-03,3.23985416e-03,
|
|
249
|
+
4.03527510e-03,5.01111418e-03,6.20455414e-03,7.65955651e-03,
|
|
250
|
+
9.42790170e-03,1.15703481e-02,1.41579155e-02,1.72732972e-02,
|
|
251
|
+
2.10124030e-02,2.54860316e-02,3.08216711e-02,3.71654197e-02,
|
|
252
|
+
4.46840156e-02,5.35669618e-02,6.40287248e-02,7.63109798e-02,
|
|
253
|
+
9.06848724e-02,1.07453255e-01,1.26952855e-01,1.49556315e-01,
|
|
254
|
+
1.75674058e-01,2.05755892e-01,2.40292299e-01,2.79815316e-01,
|
|
255
|
+
3.24898926e-01,3.76158879e-01,4.34251842e-01,4.99873794e-01,
|
|
256
|
+
5.73757579e-01,6.56669521e-01,7.49405043e-01,8.52783210e-01,
|
|
257
|
+
9.67640138e-01,1.09482124e00,1.23517231e00,1.38952936e00,
|
|
258
|
+
1.55870741e00,1.74348805e00,1.94460614e00,2.16273548e00,
|
|
259
|
+
2.39847384e00,2.65232736e00,2.92469468e00,3.21585089e00,
|
|
260
|
+
3.52593174e00,3.85491824e00,4.20262214e00,4.56867248e00,
|
|
261
|
+
4.95250359e00,5.35334499e00,5.77021329e00,6.20190671e00,
|
|
262
|
+
6.64700218e00,7.10385565e00,7.57060543e00,8.04517909e00,
|
|
263
|
+
8.52530380e00,9.00852024e00,9.49220006e00,9.97356678e00,
|
|
264
|
+
1.04497200e01,1.09176625e01,1.13743304e01,1.18166252e01,
|
|
265
|
+
1.22414481e01,1.26457352e01,1.30264942e01,1.33808408e01,
|
|
266
|
+
1.37060347e01,1.39995149e01,1.42589331e01,1.44821848e01,
|
|
267
|
+
1.46674378e01,1.48131571e01,1.49181262e01,1.49814637e01,
|
|
268
|
+
]
|
|
269
|
+
a = np.array(l)
|
|
270
|
+
a = np.flip(a)
|
|
271
|
+
_faddeeva.vals = a
|
|
272
|
+
_faddeeva.poly = np.polynomial.polynomial.Polynomial(a)
|
|
273
|
+
|
|
274
|
+
Z = (_faddeeva.L + 1j * z) / (_faddeeva.L - 1j * z)
|
|
275
|
+
p = _faddeeva.poly(Z)
|
|
276
|
+
w = 2 * p / (_faddeeva.L - 1j * z)**2 + (1 / np.sqrt(np.pi)) / (_faddeeva.L - 1j * z)
|
|
277
|
+
|
|
278
|
+
return(w)
|
|
279
|
+
|
|
280
|
+
_faddeeva.run_yet = False
|
|
281
|
+
_faddeeva.vals = None
|
|
282
|
+
_faddeeva.L = None
|
|
283
|
+
_faddeeva.N = None
|
|
284
|
+
_faddeeva.poly = None
|
|
285
|
+
|
|
286
|
+
def _arb_voigt(center, intensity, ratio, peak_width):
|
|
287
|
+
"""
|
|
288
|
+
Use the Faddeeva function to calculate a voigt line shape. See
|
|
289
|
+
https://en.wikipedia.org/wiki/Voigt_profile#The_uncentered_Voigt_profile
|
|
290
|
+
"""
|
|
291
|
+
|
|
292
|
+
def _voigt_decoder(q, k):
|
|
293
|
+
"""
|
|
294
|
+
Takes the FWHM (k) and a ratio (q) and determines the values of gamma and sigma.
|
|
295
|
+
|
|
296
|
+
Accurate to within around 1.2%.
|
|
297
|
+
"""
|
|
298
|
+
f_l = (-k*(q**2) + (-1 + q)**2 * np.sqrt(((k**2)*(q**2) * (4 - 8 * q + 5 * (q**2)))/(-1 + q)**4))/(2 * (-1 + q)**2)
|
|
299
|
+
f_g = (k * (q**2) - (-1 + q)**2 * np.sqrt(((k**2) * (q**2) * (4 - 8 * q + 5 * (q**2)))/(-1 + q)**4))/(2 * (-1 + q) * q)
|
|
300
|
+
|
|
301
|
+
|
|
302
|
+
gamma = f_l/2 # because gamma = FWHM/2
|
|
303
|
+
sigma = f_g / (2 * np.sqrt(2*np.log(2)))
|
|
304
|
+
|
|
305
|
+
return(gamma,sigma)
|
|
306
|
+
|
|
307
|
+
from math import sqrt, pi
|
|
308
|
+
|
|
309
|
+
gamma, sigma = _voigt_decoder(ratio, peak_width)
|
|
310
|
+
denom = sigma * sqrt(2 * pi) # denomonator
|
|
311
|
+
z = lambda x: _faddeeva((x - center + gamma*1j)/(sqrt(2) * sigma)) # Define z(x) as numerator, more or less
|
|
312
|
+
l = lambda x: intensity * ((z(x).real)/denom) # define the actual voigt function
|
|
313
|
+
|
|
314
|
+
return l
|
|
315
|
+
|
|
316
|
+
def voigt_line(center, intensity, width=10, q=0.5, start=0, stop=4000, step=1):
|
|
317
|
+
"""Calculate a voigt lineshape
|
|
318
|
+
|
|
319
|
+
This function returns a pair of numpy arrays that define a voigt line.
|
|
320
|
+
|
|
321
|
+
Arguments:
|
|
322
|
+
center(float): the center point of the line
|
|
323
|
+
intensity(float): the area under the line (NOT the height!)
|
|
324
|
+
width(float,optional): the full width half max of the desired line
|
|
325
|
+
q(float,optional): the ratio of gaussian to lorentzian, from 0 < q < 1.
|
|
326
|
+
start(float,optional): the starting point of the returned array
|
|
327
|
+
stop(float,optional): the ending point of the returned array
|
|
328
|
+
step(float,optional): the space between points of the returned array
|
|
329
|
+
|
|
330
|
+
Returns:
|
|
331
|
+
(x,y): a tuple of the x and y numpy arrays of the specified line
|
|
332
|
+
"""
|
|
333
|
+
if (q <= 0):
|
|
334
|
+
return(gauss_line(center, intensity, width, start, stop, step))
|
|
335
|
+
elif (q >= 1):
|
|
336
|
+
return(lorentz_line(center,intensity,width,start,stop,step))
|
|
337
|
+
|
|
338
|
+
x = np.arange(start=start, stop=stop, step=step)
|
|
339
|
+
vfunc = np.vectorize(_arb_voigt(center, intensity, q, width))
|
|
340
|
+
return((x,vfunc(x)))
|
|
341
|
+
|
|
342
|
+
def _arb_gaussian(center, intensity, width=10):
|
|
343
|
+
"""
|
|
344
|
+
Return a gaussian with an arbitrary height and intensity, with sigma being determined by calculating
|
|
345
|
+
it from our FWHM peak width.
|
|
346
|
+
"""
|
|
347
|
+
from math import sqrt, pi, exp, log
|
|
348
|
+
|
|
349
|
+
sigma = (width / (2 * sqrt(2 * log(2))))
|
|
350
|
+
l = lambda x: intensity * (1/(sigma*sqrt(2*pi))) * exp(-((x-center)**2/(2*sigma**2)))
|
|
351
|
+
|
|
352
|
+
return l
|
|
353
|
+
|
|
354
|
+
def gauss_line(center, intensity, width=10, start=0, stop=4000, step=1):
|
|
355
|
+
"""Calculate a gaussian lineshape
|
|
356
|
+
|
|
357
|
+
This function returns a pair of numpy arrays that define a gaussian with
|
|
358
|
+
given parameters.
|
|
359
|
+
|
|
360
|
+
Arguments:
|
|
361
|
+
center(float): the center point of the line
|
|
362
|
+
intensity(float): the area under the line (NOT the height!)
|
|
363
|
+
width(float,optional): the full width half max of the desired line
|
|
364
|
+
start(float,optional): the starting point of the returned array
|
|
365
|
+
stop(float,optional): the ending point of the returned array
|
|
366
|
+
step(float,optional): the space between points of the returned array
|
|
367
|
+
|
|
368
|
+
Returns:
|
|
369
|
+
(x,y): a tuple of the x and y numpy arrays of the specified line
|
|
370
|
+
"""
|
|
371
|
+
x = np.arange(start=start, stop=stop, step=step)
|
|
372
|
+
vfunc = np.vectorize(_arb_gaussian(center, intensity, width))
|
|
373
|
+
return((x,vfunc(x)))
|
|
374
|
+
|
|
375
|
+
def _arb_lorentz(center, intensity, width=10):
|
|
376
|
+
"""
|
|
377
|
+
Return a lorentzian with an arbitrary height and intensity, with gamma being calculated from our
|
|
378
|
+
FWHM peak width.
|
|
379
|
+
"""
|
|
380
|
+
from math import pi
|
|
381
|
+
|
|
382
|
+
gamma = (width / 2)
|
|
383
|
+
l = lambda x: (intensity/pi) * (gamma/((x-(center))**2 + gamma**2))
|
|
384
|
+
|
|
385
|
+
return l
|
|
386
|
+
|
|
387
|
+
def lorentz_line(center, intensity, width=10, start=0, stop=4000, step=1):
|
|
388
|
+
"""Calculate a lorentzian lineshape
|
|
389
|
+
|
|
390
|
+
This function returns a pair of numpy arrays that define a lorentzian line
|
|
391
|
+
given a set of parameters.
|
|
392
|
+
|
|
393
|
+
Arguments:
|
|
394
|
+
center(float): the center point of the line
|
|
395
|
+
intensity(float): the area under the line (NOT the height!)
|
|
396
|
+
width(float,optional): the full width half max of the desired line
|
|
397
|
+
start(float,optional): the starting point of the returned array
|
|
398
|
+
stop(float,optional): the ending point of the returned array
|
|
399
|
+
step(float,optional): the space between points of the returned array
|
|
400
|
+
|
|
401
|
+
Returns:
|
|
402
|
+
(x,y): a tuple of the x and y numpy arrays of the specified line
|
|
403
|
+
"""
|
|
404
|
+
x = np.arange(start=start, stop=stop, step=step)
|
|
405
|
+
vfunc = np.vectorize(_arb_lorentz(center, intensity, width))
|
|
406
|
+
return((x,vfunc(x)))
|
|
407
|
+
|
|
408
|
+
def construct_spectrum(points, intensities, lineshape="gauss", frac_loren=0.5, width=10, start=0, stop=4000, step=1):
|
|
409
|
+
"""Construct an entire spectrum plot of data
|
|
410
|
+
|
|
411
|
+
This function returns a pair of numpy arrays that make a spectrum; an x axis
|
|
412
|
+
and a y axis of the spectrum at each point on the x axis. This can then be
|
|
413
|
+
plotted or analyzed.
|
|
414
|
+
|
|
415
|
+
Arguments:
|
|
416
|
+
points([float]): a list of peak positions
|
|
417
|
+
intensities([float]): a list of corresponding peak intensities - the order must
|
|
418
|
+
match `points`
|
|
419
|
+
lineshape(string,optional): the desired lineshape. The options are "gauss", "lorentz", and "voigt"
|
|
420
|
+
frac_loren(float,optional): the fraction lorentzian of the voigt lineshape, if specified
|
|
421
|
+
width(float,optional): the full width half max of each peak
|
|
422
|
+
start(float,optional): the starting point of the returned array
|
|
423
|
+
stop(float,optional): the ending point of the returned array
|
|
424
|
+
step(float,optional): the space between points of the returned array
|
|
425
|
+
|
|
426
|
+
Returns:
|
|
427
|
+
(x,y): a tuple of the x and y numpy arrays for the constructed spectrum
|
|
428
|
+
"""
|
|
429
|
+
l = []
|
|
430
|
+
|
|
431
|
+
linefuncs = {
|
|
432
|
+
"gauss": gauss_line,
|
|
433
|
+
"lorentz": lorentz_line,
|
|
434
|
+
"voigt": lambda x, y, **kwargs: voigt_line(x,y,q=frac_loren, **kwargs)
|
|
435
|
+
}
|
|
436
|
+
if (lineshape not in linefuncs.keys()):
|
|
437
|
+
raise AssertionError("invalid lineshape specified")
|
|
438
|
+
else:
|
|
439
|
+
linefunc = linefuncs[lineshape]
|
|
440
|
+
|
|
441
|
+
if (len(points) == 0 or len(intensities) == 0):
|
|
442
|
+
raise AssertionError("points or intensities are empty")
|
|
443
|
+
|
|
444
|
+
if (len(points) != len(intensities)):
|
|
445
|
+
raise AssertionError("peaks and intensities do not match size")
|
|
446
|
+
|
|
447
|
+
for (x,y) in zip(points, intensities):
|
|
448
|
+
axis, tmp = linefunc(x,y,width=width,start=start,stop=stop,step=step)
|
|
449
|
+
l.append(tmp)
|
|
450
|
+
|
|
451
|
+
return((axis,np.array(l).sum(axis=0)))
|