PyMieSim 3.5.4__cp312-cp312-win_amd64.whl → 3.5.4.3__cp312-cp312-win_amd64.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.
- PyMieSim/_version.py +2 -2
- PyMieSim/binary/interface_detector.cp310-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_detector.cp311-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_detector.cp312-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_experiment.cp310-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_experiment.cp311-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_experiment.cp312-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_scatterer.cp310-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_scatterer.cp311-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_scatterer.cp312-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_sets.cp310-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_sets.cp311-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_sets.cp312-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_source.cp310-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_source.cp311-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_source.cp312-win_amd64.pyd +0 -0
- PyMieSim/binary/libcpp_coordinates.a +0 -0
- PyMieSim/binary/libcpp_detector.a +0 -0
- PyMieSim/binary/libcpp_experiment.a +0 -0
- PyMieSim/binary/libcpp_fibonacci.a +0 -0
- PyMieSim/binary/libcpp_mode_field.a +0 -0
- PyMieSim/binary/libcpp_sets.a +0 -0
- PyMieSim/binary/libcpp_source.a +0 -0
- PyMieSim/experiment/scatterer/base.py +8 -2
- PyMieSim/experiment/scatterer/core_shell.py +11 -8
- PyMieSim/experiment/scatterer/cylinder.py +8 -7
- PyMieSim/experiment/scatterer/sphere.py +8 -7
- PyMieSim/experiment/source/gaussian.py +13 -14
- PyMieSim/experiment/source/planewave.py +15 -16
- PyMieSim/mesh.py +73 -156
- PyMieSim/single/detector/base.py +9 -9
- PyMieSim/single/detector/coherent.py +5 -6
- PyMieSim/single/detector/uncoherent.py +1 -2
- PyMieSim/single/representations.py +14 -14
- PyMieSim/single/source/gaussian.py +24 -6
- PyMieSim/special_functions.py +0 -17
- PyMieSim/units.py +1 -0
- {PyMieSim/binary → lib}/libZBessel.a +0 -0
- {PyMieSim/binary → lib}/lib_ZBessel.a +0 -0
- {PyMieSim/binary → lib}/libcpp_base_scatterer.a +0 -0
- lib/libcpp_coreshell.a +0 -0
- lib/libcpp_cylinder.a +0 -0
- lib/libcpp_sphere.a +0 -0
- {pymiesim-3.5.4.dist-info → pymiesim-3.5.4.3.dist-info}/METADATA +3 -3
- {pymiesim-3.5.4.dist-info → pymiesim-3.5.4.3.dist-info}/RECORD +47 -52
- PyMieSim/binary/interface_fibonacci.cp310-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_fibonacci.cp311-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_fibonacci.cp312-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_mode_field.cp310-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_mode_field.cp311-win_amd64.pyd +0 -0
- PyMieSim/binary/interface_mode_field.cp312-win_amd64.pyd +0 -0
- PyMieSim/binary/libcpp_coreshell.a +0 -0
- PyMieSim/binary/libcpp_cylinder.a +0 -0
- PyMieSim/binary/libcpp_sphere.a +0 -0
- {pymiesim-3.5.4.dist-info → pymiesim-3.5.4.3.dist-info}/WHEEL +0 -0
- {pymiesim-3.5.4.dist-info → pymiesim-3.5.4.3.dist-info}/licenses/LICENSE +0 -0
PyMieSim/_version.py
CHANGED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
PyMieSim/binary/libcpp_sets.a
CHANGED
Binary file
|
PyMieSim/binary/libcpp_source.a
CHANGED
Binary file
|
@@ -62,11 +62,17 @@ class BaseScatterer():
|
|
62
62
|
CPPClass = CppMediumProperties if name == 'medium' else CppScattererProperties
|
63
63
|
|
64
64
|
if all(isinstance(item, Quantity) for item in properties):
|
65
|
-
|
65
|
+
instance = CPPClass(index_properties=properties.magnitude)
|
66
|
+
self.binding_kwargs[f'{name}_properties'] = instance
|
67
|
+
|
68
|
+
return instance
|
66
69
|
|
67
70
|
elif all(isinstance(item, BaseMaterial) for item in properties):
|
68
71
|
eval_index = numpy.asarray([m.compute_refractive_index(self.source.wavelength.to_base_units().magnitude) for m in properties])
|
69
|
-
|
72
|
+
instance = CPPClass(material_properties=eval_index)
|
73
|
+
self.binding_kwargs[f'{name}_properties'] = instance
|
74
|
+
|
75
|
+
return instance
|
70
76
|
|
71
77
|
else:
|
72
78
|
raise TypeError("All elements in the list must be of type 'Quantity' or 'BaseMaterial', not a mix of both.")
|
@@ -66,14 +66,17 @@ class CoreShell(BaseScatterer, Sequential):
|
|
66
66
|
is_sequential=self.is_sequential
|
67
67
|
)
|
68
68
|
|
69
|
-
self._add_properties(name='medium', properties=self.medium_property)
|
69
|
+
mediun_properties = self._add_properties(name='medium', properties=self.medium_property)
|
70
70
|
|
71
|
-
self._add_properties(name='core', properties=self.core_property)
|
71
|
+
core_properties = self._add_properties(name='core', properties=self.core_property)
|
72
72
|
|
73
|
-
self._add_properties(name='shell', properties=self.shell_property)
|
73
|
+
shell_properties = self._add_properties(name='shell', properties=self.shell_property)
|
74
74
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
75
|
+
self.binding = CppCoreShellSet(
|
76
|
+
core_diameter=self.core_diameter.to('meter').magnitude,
|
77
|
+
shell_thickness=self.shell_thickness.to('meter').magnitude,
|
78
|
+
core_properties=core_properties,
|
79
|
+
shell_properties=shell_properties,
|
80
|
+
medium_properties=mediun_properties,
|
81
|
+
is_sequential=self.is_sequential,
|
82
|
+
)
|
@@ -51,12 +51,13 @@ class Cylinder(BaseScatterer, Sequential):
|
|
51
51
|
|
52
52
|
self.binding_kwargs = dict(diameter=self.diameter, is_sequential=self.is_sequential)
|
53
53
|
|
54
|
-
self._add_properties(name='medium', properties=self.medium_property)
|
54
|
+
mediun_properties = self._add_properties(name='medium', properties=self.medium_property)
|
55
55
|
|
56
|
-
self._add_properties(name='scatterer', properties=self.property)
|
56
|
+
scatterer_properties = self._add_properties(name='scatterer', properties=self.property)
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
58
|
+
self.binding = CppCylinderSet(
|
59
|
+
diameter=self.diameter.to('meter').magnitude,
|
60
|
+
scatterer_properties=scatterer_properties,
|
61
|
+
medium_properties=mediun_properties,
|
62
|
+
is_sequential=self.is_sequential,
|
63
|
+
)
|
@@ -54,12 +54,13 @@ class Sphere(BaseScatterer, Sequential):
|
|
54
54
|
|
55
55
|
self.binding_kwargs = dict(diameter=self.diameter, is_sequential=self.is_sequential)
|
56
56
|
|
57
|
-
self._add_properties(name='medium', properties=self.medium_property)
|
57
|
+
mediun_properties = self._add_properties(name='medium', properties=self.medium_property)
|
58
58
|
|
59
|
-
self._add_properties(name='scatterer', properties=self.property)
|
59
|
+
scatterer_properties = self._add_properties(name='scatterer', properties=self.property)
|
60
60
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
61
|
+
self.binding = CppSphereSet(
|
62
|
+
diameter=self.diameter.to('meter').magnitude,
|
63
|
+
scatterer_properties=scatterer_properties,
|
64
|
+
medium_properties=mediun_properties,
|
65
|
+
is_sequential=self.is_sequential,
|
66
|
+
)
|
@@ -32,12 +32,17 @@ class Gaussian(BaseSource, Sequential):
|
|
32
32
|
wavelength: Quantity
|
33
33
|
polarization: Union[BasePolarization, Quantity]
|
34
34
|
|
35
|
-
def
|
35
|
+
def _generate_binding(self) -> None:
|
36
36
|
"""
|
37
37
|
Prepares the keyword arguments for the C++ binding based on the scatterer's properties. This
|
38
38
|
involves evaluating material indices and organizing them into a dictionary for the C++ interface.
|
39
39
|
|
40
40
|
"""
|
41
|
+
self.mapping = {}
|
42
|
+
|
43
|
+
if not isinstance(self.polarization, BasePolarization):
|
44
|
+
self.polarization = Linear(self.polarization)
|
45
|
+
|
41
46
|
self.binding_kwargs = dict(
|
42
47
|
wavelength=self.wavelength,
|
43
48
|
jones_vector=self.polarization.element,
|
@@ -46,16 +51,10 @@ class Gaussian(BaseSource, Sequential):
|
|
46
51
|
is_sequential=self.is_sequential
|
47
52
|
)
|
48
53
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
self.
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
binding_kwargs = {
|
58
|
-
k: v.to_base_units().magnitude if isinstance(v, Quantity) else v for k, v in self.binding_kwargs.items()
|
59
|
-
}
|
60
|
-
|
61
|
-
self.binding = CppGaussianSourceSet(**binding_kwargs)
|
54
|
+
self.binding = CppGaussianSourceSet(
|
55
|
+
wavelength=self.wavelength.to('meter').magnitude,
|
56
|
+
jones_vector=self.polarization.element,
|
57
|
+
NA=self.NA.to('dimensionless').magnitude,
|
58
|
+
optical_power=self.optical_power.to('watt').magnitude,
|
59
|
+
is_sequential=self.is_sequential
|
60
|
+
)
|
@@ -40,14 +40,20 @@ class PlaneWave(BaseSource, Sequential):
|
|
40
40
|
|
41
41
|
return value
|
42
42
|
|
43
|
-
def
|
43
|
+
def _generate_binding(self) -> None:
|
44
44
|
"""
|
45
45
|
Prepares the keyword arguments for the C++ binding based on the scatterer's properties. This
|
46
46
|
involves evaluating material indices and organizing them into a dictionary for the C++ interface.
|
47
47
|
|
48
|
-
Returns
|
49
|
-
|
48
|
+
Returns
|
49
|
+
-------
|
50
|
+
None
|
50
51
|
"""
|
52
|
+
self.mapping = {}
|
53
|
+
|
54
|
+
if not isinstance(self.polarization, BasePolarization):
|
55
|
+
self.polarization = Linear(self.polarization)
|
56
|
+
|
51
57
|
self.binding_kwargs = dict(
|
52
58
|
wavelength=self.wavelength,
|
53
59
|
jones_vector=self.polarization.element,
|
@@ -55,16 +61,9 @@ class PlaneWave(BaseSource, Sequential):
|
|
55
61
|
is_sequential=self.is_sequential
|
56
62
|
)
|
57
63
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
self._generate_binding_kwargs()
|
65
|
-
|
66
|
-
binding_kwargs = {
|
67
|
-
k: v.to_base_units().magnitude if isinstance(v, Quantity) else v for k, v in self.binding_kwargs.items()
|
68
|
-
}
|
69
|
-
|
70
|
-
self.binding = CppPlaneWaveSourceSet(**binding_kwargs)
|
64
|
+
self.binding = CppPlaneWaveSourceSet(
|
65
|
+
wavelength=self.wavelength.to('meter').magnitude,
|
66
|
+
jones_vector=self.polarization.element,
|
67
|
+
amplitude=self.amplitude.to('volt/meter').magnitude,
|
68
|
+
is_sequential=self.is_sequential
|
69
|
+
)
|
PyMieSim/mesh.py
CHANGED
@@ -7,7 +7,7 @@ import numpy
|
|
7
7
|
from PyMieSim.binary.interface_detector import FIBONACCIMESH
|
8
8
|
from PyMieSim import units
|
9
9
|
|
10
|
-
class FibonacciMesh:
|
10
|
+
class FibonacciMesh(FIBONACCIMESH):
|
11
11
|
"""
|
12
12
|
Represents an angular mesh using a Fibonacci sphere distribution, where each point
|
13
13
|
covers an equivalent solid angle. This type of mesh is useful for simulating angular
|
@@ -44,8 +44,6 @@ class FibonacciMesh:
|
|
44
44
|
|
45
45
|
Methods
|
46
46
|
-------
|
47
|
-
initialize_properties():
|
48
|
-
Initializes additional mesh properties based on the Fibonacci distribution generated by the binding.
|
49
47
|
projection_HV_vector() -> tuple:
|
50
48
|
Returns the parallel and perpendicular projections of the mesh on the horizontal and vertical base vectors as vectors.
|
51
49
|
projection_HV_scalar() -> tuple:
|
@@ -54,14 +52,14 @@ class FibonacciMesh:
|
|
54
52
|
Computes the scalar projection of a given vector onto a base vector.
|
55
53
|
projection_on_base_vector(vector, base_vector) -> numpy.ndarray:
|
56
54
|
Computes the vector projection of a given vector onto a base vector.
|
57
|
-
get_cartesian_coordinates() -> numpy.ndarray:
|
58
|
-
Returns the Cartesian coordinates of the mesh points.
|
59
55
|
get_axis_vector() -> numpy.ndarray:
|
60
56
|
Returns the axis vector corresponding to the phi and gamma offsets.
|
61
57
|
rotate_around_axis(rotation_angle) -> None:
|
62
58
|
Rotates the mesh around its principal axis by a specified angle.
|
63
59
|
|
64
60
|
"""
|
61
|
+
|
62
|
+
# ---------------------- Validation Methods ----------------------
|
65
63
|
def _validate_angle_units(cls, value):
|
66
64
|
"""
|
67
65
|
Ensures that diameter is Quantity objects with length units.
|
@@ -80,199 +78,134 @@ class FibonacciMesh:
|
|
80
78
|
|
81
79
|
return value
|
82
80
|
|
83
|
-
|
84
|
-
def __init__(self,
|
81
|
+
# ---------------------- Initialization Methods ----------------------
|
82
|
+
def __init__(self,
|
83
|
+
max_angle: units.Quantity,
|
84
|
+
sampling: int,
|
85
|
+
phi_offset: units.Quantity,
|
86
|
+
gamma_offset: units.Quantity,
|
87
|
+
min_angle: units.Quantity = 0 * units.degree,
|
88
|
+
rotation_angle: Optional[units.Quantity] = 0.0):
|
85
89
|
"""
|
86
90
|
Initializes the FibonacciMesh with the specified parameters.
|
87
91
|
|
88
92
|
Parameters
|
89
93
|
----------
|
90
|
-
max_angle :
|
94
|
+
max_angle : units.Quantity
|
91
95
|
The maximum angle in radians, typically defined by the numerical aperture of the imaging system.
|
92
96
|
sampling : int
|
93
97
|
The number of points distributed across the mesh. Higher values result in finer resolution.
|
94
|
-
phi_offset :
|
98
|
+
phi_offset : units.Quantity
|
95
99
|
Angle offset in the azimuthal (parallel to incident light polarization) direction in degrees.
|
96
|
-
gamma_offset :
|
100
|
+
gamma_offset : units.Quantity
|
97
101
|
Angle offset in the polar (perpendicular to incident light polarization) direction in degrees.
|
98
|
-
rotation_angle : Optional[
|
102
|
+
rotation_angle : Optional[units.Quantity], default=0.0
|
99
103
|
Rotation of the entire mesh around its principal axis, in degrees.
|
100
104
|
"""
|
101
105
|
self.sampling = sampling
|
102
106
|
self.max_angle = self._validate_angle_units(max_angle)
|
103
|
-
self.
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
self.structured = False
|
108
|
-
self._para = None
|
109
|
-
self._perp = None
|
110
|
-
|
111
|
-
self.vertical_vector = numpy.array([1, 0, 0])
|
112
|
-
self.horizontal_vector = numpy.array([0, 1, 0])
|
107
|
+
self.min_angle = self._validate_angle_units(min_angle)
|
108
|
+
phi_offset = self._validate_angle_units(phi_offset)
|
109
|
+
gamma_offset = self._validate_angle_units(gamma_offset)
|
110
|
+
rotation = self._validate_angle_units(rotation_angle)
|
113
111
|
|
114
|
-
|
112
|
+
super().__init__(
|
115
113
|
sampling=self.sampling,
|
116
114
|
max_angle=self.max_angle,
|
117
|
-
|
118
|
-
|
119
|
-
|
115
|
+
min_angle=self.min_angle,
|
116
|
+
rotation_angle=rotation,
|
117
|
+
phi_offset=numpy.deg2rad(phi_offset),
|
118
|
+
gamma_offset=numpy.deg2rad(gamma_offset),
|
120
119
|
)
|
121
120
|
|
122
|
-
self.
|
123
|
-
self.binding.compute_vector_field()
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
121
|
+
self.compute_vector_field()
|
128
122
|
|
123
|
+
# ---------------------- Property Methods ----------------------
|
129
124
|
@property
|
130
|
-
def
|
125
|
+
def theta(self) -> units.Quantity:
|
131
126
|
"""
|
132
|
-
Returns the
|
127
|
+
Returns the polar angles (theta) of the mesh in radians.
|
133
128
|
|
134
129
|
Returns
|
135
130
|
-------
|
136
|
-
|
137
|
-
The
|
131
|
+
units.Quantity
|
132
|
+
The polar angles in radians.
|
138
133
|
"""
|
139
|
-
return self.
|
134
|
+
return self.spherical.theta * units.radian
|
140
135
|
|
141
136
|
@property
|
142
|
-
def
|
137
|
+
def phi(self) -> units.Quantity:
|
143
138
|
"""
|
144
|
-
Returns the
|
139
|
+
Returns the azimuthal angles (phi) of the mesh in radians.
|
145
140
|
|
146
141
|
Returns
|
147
142
|
-------
|
148
|
-
|
149
|
-
The
|
143
|
+
units.Quantity
|
144
|
+
The azimuthal angles in radians.
|
150
145
|
"""
|
151
|
-
return self.
|
146
|
+
return self.spherical.phi * units.radian
|
152
147
|
|
153
148
|
@property
|
154
|
-
def
|
149
|
+
def d_omega(self) -> units.Quantity:
|
155
150
|
"""
|
156
|
-
Returns the
|
151
|
+
Returns the solid angle (d_omega) of the mesh in steradians.
|
157
152
|
|
158
153
|
Returns
|
159
154
|
-------
|
160
|
-
|
161
|
-
The
|
155
|
+
units.Quantity
|
156
|
+
The solid angle in steradians.
|
162
157
|
"""
|
163
|
-
return self.
|
158
|
+
return self.spherical._cpp_d_omega * units.steradian
|
164
159
|
|
165
160
|
@property
|
166
|
-
def
|
161
|
+
def omega(self) -> units.Quantity:
|
167
162
|
"""
|
168
|
-
Returns the
|
163
|
+
Returns the solid angle (omega) of the mesh in steradians.
|
169
164
|
|
170
165
|
Returns
|
171
166
|
-------
|
172
|
-
|
173
|
-
The
|
167
|
+
units.Quantity
|
168
|
+
The solid angle in steradians.
|
174
169
|
"""
|
175
|
-
return self.
|
176
|
-
|
177
|
-
def get_phi(self, unit: str = 'radian'):
|
178
|
-
"""
|
179
|
-
Returns the azimuthal angle (phi) of the mesh in the specified unit.
|
180
|
-
|
181
|
-
Parameters
|
182
|
-
----------
|
183
|
-
unit : str, optional
|
184
|
-
The unit of the angle to return, either 'radian' or 'degree'. Default is 'radian'.
|
185
|
-
|
186
|
-
Returns
|
187
|
-
-------
|
188
|
-
numpy.ndarray
|
189
|
-
Array of phi values in the specified unit.
|
190
|
-
"""
|
191
|
-
if unit.lower() in ['rad', 'radian']:
|
192
|
-
return self.binding.phi
|
193
|
-
elif unit.lower() in ['deg', 'degree']:
|
194
|
-
return numpy.rad2deg(self.binding.phi)
|
195
|
-
|
196
|
-
def get_theta(self, unit: str = 'radian'):
|
197
|
-
"""
|
198
|
-
Returns the polar angle (theta) of the mesh in the specified unit.
|
199
|
-
|
200
|
-
Parameters
|
201
|
-
----------
|
202
|
-
unit : str, optional
|
203
|
-
The unit of the angle to return, either 'radian' or 'degree'. Default is 'radian'.
|
204
|
-
|
205
|
-
Returns
|
206
|
-
-------
|
207
|
-
numpy.ndarray
|
208
|
-
Array of theta values in the specified unit.
|
209
|
-
"""
|
210
|
-
if unit.lower() in ['rad', 'radian']:
|
211
|
-
return self.binding.theta
|
212
|
-
elif unit.lower() in ['deg', 'degree']:
|
213
|
-
return numpy.rad2deg(self.binding.theta)
|
170
|
+
return self.spherical._cpp_omega * units.steradian
|
214
171
|
|
215
172
|
@property
|
216
|
-
def
|
173
|
+
def phi_offset(self) -> units.Quantity:
|
217
174
|
"""
|
218
|
-
Returns the
|
175
|
+
Returns the azimuthal angle offset (phi_offset) in radians.
|
219
176
|
|
220
177
|
Returns
|
221
178
|
-------
|
222
|
-
|
223
|
-
|
179
|
+
units.Quantity
|
180
|
+
The azimuthal angle offset in radians.
|
224
181
|
"""
|
225
|
-
return self.
|
182
|
+
return self._cpp_phi_offset * units.radian
|
226
183
|
|
227
184
|
@property
|
228
|
-
def
|
185
|
+
def gamma_offset(self) -> units.Quantity:
|
229
186
|
"""
|
230
|
-
Returns the
|
187
|
+
Returns the polar angle offset (gamma_offset) in radians.
|
231
188
|
|
232
189
|
Returns
|
233
190
|
-------
|
234
|
-
|
235
|
-
|
191
|
+
units.Quantity
|
192
|
+
The polar angle offset in radians.
|
236
193
|
"""
|
237
|
-
return self.
|
194
|
+
return self._cpp_gamma_offset * units.radian
|
238
195
|
|
239
196
|
@property
|
240
|
-
def
|
241
|
-
"""
|
242
|
-
Returns the Z-coordinate of the mesh points.
|
243
|
-
|
244
|
-
Returns
|
245
|
-
-------
|
246
|
-
numpy.ndarray
|
247
|
-
Array of Z-coordinates.
|
248
|
-
"""
|
249
|
-
return self.binding.z
|
250
|
-
|
251
|
-
def initialize_properties(self):
|
252
|
-
"""
|
253
|
-
Initializes additional properties of the Fibonacci mesh based on the underlying
|
254
|
-
C++ implementation.
|
255
|
-
|
256
|
-
This includes calculating Cartesian coordinates and solid angles for each point on the mesh.
|
197
|
+
def rotation(self) -> units.Quantity:
|
257
198
|
"""
|
258
|
-
|
259
|
-
self.d_omega_radian = self.binding.d_omega
|
260
|
-
self.d_omega_degree = self.binding.d_omega * (180 / numpy.pi) ** 2
|
261
|
-
self.omega_radian = self.binding.omega
|
262
|
-
self.omega_degree = self.binding.omega * (180 / numpy.pi) ** 2
|
263
|
-
|
264
|
-
|
265
|
-
def get_cartesian_coordinates(self) -> numpy.ndarray:
|
266
|
-
"""
|
267
|
-
Returns the Cartesian coordinates of the mesh points.
|
199
|
+
Returns the rotation angle of the mesh around its principal axis in radians.
|
268
200
|
|
269
201
|
Returns
|
270
202
|
-------
|
271
|
-
|
272
|
-
|
203
|
+
units.Quantity
|
204
|
+
The rotation angle in radians.
|
273
205
|
"""
|
274
|
-
return
|
206
|
+
return self._cpp_rotation * units.radian
|
275
207
|
|
208
|
+
# ---------------------- Additional Methods ----------------------
|
276
209
|
def get_axis_vector(self) -> numpy.ndarray:
|
277
210
|
"""
|
278
211
|
Returns the axis vector corresponding to the phi and gamma offsets.
|
@@ -282,28 +215,12 @@ class FibonacciMesh:
|
|
282
215
|
numpy.ndarray
|
283
216
|
The axis vector normalized to unit length.
|
284
217
|
"""
|
285
|
-
x, y,
|
286
|
-
axis_vector = numpy.array([x[0], y[0], z[0]])
|
218
|
+
axis_vector = numpy.array([self.cartesian.x[0], self.cartesian.y[0], self.cartesian.z[0]])
|
287
219
|
|
288
220
|
norm = numpy.sqrt(numpy.square(axis_vector).sum())
|
289
221
|
|
290
222
|
return axis_vector / norm
|
291
223
|
|
292
|
-
def rotate_around_axis(self, rotation_angle: float) -> None:
|
293
|
-
"""
|
294
|
-
Rotates the mesh around its principal axis by a specified angle.
|
295
|
-
|
296
|
-
Parameters
|
297
|
-
----------
|
298
|
-
rotation_angle : float
|
299
|
-
The angle in degrees by which to rotate the mesh.
|
300
|
-
|
301
|
-
Returns
|
302
|
-
-------
|
303
|
-
None
|
304
|
-
"""
|
305
|
-
self.binding.rotate_around_axis(rotation_angle)
|
306
|
-
|
307
224
|
def projection_HV_vector(self) -> tuple:
|
308
225
|
"""
|
309
226
|
Projects the vertical and horizontal base vectors onto the parallel and perpendicular components
|
@@ -324,16 +241,16 @@ class FibonacciMesh:
|
|
324
241
|
"""
|
325
242
|
parallel_projection = [
|
326
243
|
self.projection_on_base_vector(
|
327
|
-
vector=self.
|
244
|
+
vector=self.parallel,
|
328
245
|
base_vector=X
|
329
|
-
) for X in [self.
|
246
|
+
) for X in [self._cpp_vertical_base, self._cpp_horizontal_base]
|
330
247
|
]
|
331
248
|
|
332
249
|
perpendicular_projection = [
|
333
250
|
self.projection_on_base_vector(
|
334
|
-
vector=self.
|
251
|
+
vector=self.perpendicular,
|
335
252
|
base_vector=X
|
336
|
-
) for X in [self.
|
253
|
+
) for X in [self._cpp_vertical_base, self._cpp_horizontal_base]
|
337
254
|
]
|
338
255
|
|
339
256
|
return numpy.array(parallel_projection), numpy.array(perpendicular_projection)
|
@@ -359,16 +276,16 @@ class FibonacciMesh:
|
|
359
276
|
"""
|
360
277
|
parallel_projection = [
|
361
278
|
self.projection_on_base_scalar(
|
362
|
-
vector=self.
|
279
|
+
vector=self.parallel,
|
363
280
|
base_vector=X
|
364
|
-
) for X in [self.
|
281
|
+
) for X in [self._cpp_vertical_base, self._cpp_horizontal_base]
|
365
282
|
]
|
366
283
|
|
367
284
|
perpendicular_projection = [
|
368
285
|
self.projection_on_base_scalar(
|
369
|
-
vector=self.
|
286
|
+
vector=self.perpendicular,
|
370
287
|
base_vector=X
|
371
|
-
) for X in [self.
|
288
|
+
) for X in [self._cpp_vertical_base, self._cpp_horizontal_base]
|
372
289
|
]
|
373
290
|
|
374
291
|
return numpy.array(parallel_projection), numpy.array(perpendicular_projection)
|
@@ -406,7 +323,7 @@ class FibonacciMesh:
|
|
406
323
|
|
407
324
|
where :math:`\vec{v}` is the input vector and :math:`\vec{b}` is the base vector.
|
408
325
|
"""
|
409
|
-
return vector.
|
326
|
+
return vector._cpp_get_scalar_product(base_vector)
|
410
327
|
|
411
328
|
def projection_on_base_vector(self, vector: numpy.ndarray, base_vector: numpy.ndarray) -> numpy.ndarray:
|
412
329
|
r"""
|
@@ -446,6 +363,6 @@ class FibonacciMesh:
|
|
446
363
|
then scales `base_vector` by this scalar to produce the projected vector.
|
447
364
|
"""
|
448
365
|
projection = self.projection_on_base_scalar(vector, base_vector)
|
449
|
-
base_projection = numpy.outer(projection, base_vector)
|
366
|
+
base_projection = numpy.outer(projection, base_vector.data)
|
450
367
|
|
451
368
|
return base_projection
|
PyMieSim/single/detector/base.py
CHANGED
@@ -6,7 +6,7 @@ from typing import Optional
|
|
6
6
|
|
7
7
|
from PyMieSim.single.representations import Footprint
|
8
8
|
from MPSPlots.colormaps import blue_black_red
|
9
|
-
from PyMieSim.units import Quantity,
|
9
|
+
from PyMieSim.units import Quantity, watt, meter, second, farad, volt
|
10
10
|
from PyMieSim import units
|
11
11
|
from PyMieSim.single.scatterer.base import BaseScatterer
|
12
12
|
import pyvista
|
@@ -124,10 +124,10 @@ class BaseDetector(units.UnitsValidation):
|
|
124
124
|
None: This method does not return a value. It modifies the provided scene.
|
125
125
|
"""
|
126
126
|
# Stack the mesh coordinates into a single array
|
127
|
-
coordinates = numpy.
|
128
|
-
self._cpp_mesh.x,
|
129
|
-
self._cpp_mesh.y,
|
130
|
-
self._cpp_mesh.z
|
127
|
+
coordinates = numpy.vstack((
|
128
|
+
self._cpp_mesh.cartesian.x,
|
129
|
+
self._cpp_mesh.cartesian.y,
|
130
|
+
self._cpp_mesh.cartesian.z
|
131
131
|
))
|
132
132
|
|
133
133
|
# Wrap the coordinates for PyVista visualization
|
@@ -206,8 +206,8 @@ class BaseDetector(units.UnitsValidation):
|
|
206
206
|
|
207
207
|
"""
|
208
208
|
Ephi, Etheta = scatterer.get_farfields_array(
|
209
|
-
phi=self._cpp_mesh.phi,
|
210
|
-
theta=self._cpp_mesh.theta,
|
209
|
+
phi=self._cpp_mesh.spherical.phi,
|
210
|
+
theta=self._cpp_mesh.spherical.theta,
|
211
211
|
r=distance
|
212
212
|
)
|
213
213
|
|
@@ -263,9 +263,9 @@ class BaseDetector(units.UnitsValidation):
|
|
263
263
|
"""
|
264
264
|
poynting_vector = self.get_poynting_vector(scatterer=scatterer, distance=distance)
|
265
265
|
|
266
|
-
dA = self._cpp_mesh.
|
266
|
+
dA = self._cpp_mesh._cpp_d_omega * distance ** 2
|
267
267
|
|
268
|
-
total_power = 0.5 * numpy.
|
268
|
+
total_power = 0.5 * numpy.trapezoid(y=poynting_vector, dx=dA)
|
269
269
|
|
270
270
|
return total_power
|
271
271
|
|
@@ -83,18 +83,17 @@ class CoherentMode(DETECTOR, BaseDetector):
|
|
83
83
|
self.polarization_filter = self._validate_detector_polarization_units(polarization_filter)
|
84
84
|
|
85
85
|
super().__init__(
|
86
|
-
coherent=False,
|
87
86
|
mode_number=self.mode_number,
|
87
|
+
sampling=self.sampling,
|
88
88
|
NA=self.NA.to(units.AU).magnitude,
|
89
89
|
cache_NA=self.cache_NA.to(units.AU).magnitude,
|
90
|
-
sampling=self.sampling,
|
91
|
-
mean_coupling=self.mean_coupling,
|
92
|
-
gamma_offset=self.gamma_offset.to(units.radian).magnitude,
|
93
90
|
phi_offset=self.phi_offset.to(units.radian).magnitude,
|
91
|
+
gamma_offset=self.gamma_offset.to(units.radian).magnitude,
|
94
92
|
polarization_filter=self.polarization_filter.to(units.radian).magnitude,
|
95
93
|
rotation=self.rotation.to(units.radian).magnitude,
|
96
|
-
|
94
|
+
coherent=False,
|
95
|
+
mean_coupling=self.mean_coupling,
|
96
|
+
medium_refractive_index=self.medium_refractive_index.to(units.RIU).magnitude,
|
97
97
|
)
|
98
98
|
|
99
|
-
|
100
99
|
# -
|
@@ -21,8 +21,7 @@ class Photodiode(DETECTOR, BaseDetector):
|
|
21
21
|
polarization_filter: Optional[units.Quantity] = None,
|
22
22
|
cache_NA: Optional[units.Quantity] = 0 * units.AU,
|
23
23
|
mean_coupling: bool = False,
|
24
|
-
medium_refractive_index: units.Quantity = 1.0 * units.RIU
|
25
|
-
):
|
24
|
+
medium_refractive_index: units.Quantity = 1.0 * units.RIU):
|
26
25
|
"""
|
27
26
|
Initialize the Photodiode detector with its parameters.
|
28
27
|
|
@@ -110,12 +110,12 @@ class BaseRepresentation():
|
|
110
110
|
scene.add_mesh(glyphs, color=color, opacity=opacity)
|
111
111
|
|
112
112
|
def add_phi_vector_to_3d_plot(
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
113
|
+
self,
|
114
|
+
scene: pyvista.Plotter,
|
115
|
+
n_points: int = 20,
|
116
|
+
opacity: float = 1.0,
|
117
|
+
radius: float = 1.0,
|
118
|
+
color: str = 'black') -> None:
|
119
119
|
"""
|
120
120
|
Adds a vector field to the 3D plot, representing vectors in the phi direction.
|
121
121
|
|
@@ -213,14 +213,14 @@ class Stokes(BaseRepresentation):
|
|
213
213
|
self.V = (-2 * numpy.imag(self.E_phi * self.E_theta.conjugate())) / intensity
|
214
214
|
|
215
215
|
def plot(
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
216
|
+
self,
|
217
|
+
unit_size: List[float] = (400, 400),
|
218
|
+
background_color: str = 'white',
|
219
|
+
show_edges: bool = False,
|
220
|
+
colormap: str = blue_black_red,
|
221
|
+
opacity: float = 1.0,
|
222
|
+
symmetric_colormap: bool = False,
|
223
|
+
show_axis_label: bool = False) -> None:
|
224
224
|
"""
|
225
225
|
Visualizes the Stokes parameters (I, Q, U, V) on a 3D plot.
|
226
226
|
|
@@ -5,7 +5,6 @@ import numpy
|
|
5
5
|
import pyvista
|
6
6
|
from PyMieSim import units
|
7
7
|
from PyMieSim.polarization import BasePolarization
|
8
|
-
from PyMieSim.special_functions import NA_to_angle
|
9
8
|
from PyMieSim.binary.interface_source import GAUSSIAN
|
10
9
|
from PyMieSim.single.source.base import BaseSource
|
11
10
|
|
@@ -14,10 +13,10 @@ class Gaussian(GAUSSIAN, BaseSource):
|
|
14
13
|
amplitude: units.Quantity
|
15
14
|
|
16
15
|
def __init__(self,
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
wavelength: units.Quantity,
|
17
|
+
polarization: units.Quantity | BasePolarization,
|
18
|
+
optical_power: units.Quantity,
|
19
|
+
NA: units.Quantity) -> None:
|
21
20
|
"""
|
22
21
|
Initializes a Gaussian light source for light scattering simulations, characterized by its optical power and numerical aperture.
|
23
22
|
|
@@ -50,6 +49,21 @@ class Gaussian(GAUSSIAN, BaseSource):
|
|
50
49
|
NA=self.NA.to(units.AU).magnitude,
|
51
50
|
)
|
52
51
|
|
52
|
+
def numerical_aperture_to_angle(self, numerical_aperture: float) -> float:
|
53
|
+
"""
|
54
|
+
Convert numerical aperture (NA) to angle in radians.
|
55
|
+
|
56
|
+
Parameters
|
57
|
+
----------
|
58
|
+
NA : float
|
59
|
+
The numerical aperture.
|
60
|
+
|
61
|
+
Returns
|
62
|
+
-------
|
63
|
+
float
|
64
|
+
The angle in radians.
|
65
|
+
"""
|
66
|
+
return numpy.arcsin(numerical_aperture) if numerical_aperture <= 1.0 else numpy.arcsin(numerical_aperture - 1) + numpy.pi / 2
|
53
67
|
|
54
68
|
def plot(self, color: str = 'red', opacity: float = 0.8, show_axis_label: bool = False) -> None:
|
55
69
|
"""
|
@@ -103,7 +117,11 @@ class Gaussian(GAUSSIAN, BaseSource):
|
|
103
117
|
"""
|
104
118
|
# Calculate the maximum angle from the numerical aperture (NA)
|
105
119
|
|
106
|
-
|
120
|
+
numerical_aperture = self.NA.magnitude
|
121
|
+
|
122
|
+
angle = self.numerical_aperture_to_angle(numerical_aperture)
|
123
|
+
|
124
|
+
max_angle = numpy.rad2deg(angle)
|
107
125
|
|
108
126
|
# Create the cone mesh
|
109
127
|
cone_mesh = pyvista.Cone(
|
PyMieSim/special_functions.py
CHANGED
@@ -4,23 +4,6 @@
|
|
4
4
|
import numpy
|
5
5
|
|
6
6
|
|
7
|
-
def NA_to_angle(NA: float) -> float:
|
8
|
-
"""
|
9
|
-
Convert numerical aperture (NA) to angle in radians.
|
10
|
-
|
11
|
-
Parameters
|
12
|
-
----------
|
13
|
-
NA : float
|
14
|
-
The numerical aperture.
|
15
|
-
|
16
|
-
Returns
|
17
|
-
-------
|
18
|
-
float
|
19
|
-
The angle in radians.
|
20
|
-
"""
|
21
|
-
return numpy.arcsin(NA) if NA <= 1.0 else numpy.arcsin(NA - 1) + numpy.pi / 2
|
22
|
-
|
23
|
-
|
24
7
|
def cartesian_to_spherical(x: numpy.ndarray, y: numpy.ndarray, z: numpy.ndarray) -> tuple:
|
25
8
|
"""
|
26
9
|
Convert Cartesian coordinates to spherical coordinates.
|
PyMieSim/units.py
CHANGED
@@ -53,6 +53,7 @@ def initialize_registry(ureg: Optional[object] = None):
|
|
53
53
|
'refractive_index_unit': ureg.refractive_index_unit,
|
54
54
|
'degree': ureg.degree,
|
55
55
|
'radian': ureg.radian,
|
56
|
+
'steradian': ureg.steradian,
|
56
57
|
'AU': ureg.dimensionless,
|
57
58
|
'distance': ureg.meter.dimensionality,
|
58
59
|
'time': ureg.second.dimensionality,
|
Binary file
|
Binary file
|
Binary file
|
lib/libcpp_coreshell.a
ADDED
Binary file
|
lib/libcpp_cylinder.a
ADDED
Binary file
|
lib/libcpp_sphere.a
ADDED
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: PyMieSim
|
3
|
-
Version: 3.5.4
|
3
|
+
Version: 3.5.4.3
|
4
4
|
Summary: A package for light scattering computation.
|
5
5
|
Keywords: mie,scattering,backscatter,sphere,cylinder,nanoparticle,phase function,efficiency,rayleigh,backscattering
|
6
6
|
Author-Email: Martin Poinsinet de Sivry-Houle <martin.poinsinet.de.sivry@gmail.com>
|
@@ -54,14 +54,14 @@ Requires-Dist: MPSPlots==1.6.4
|
|
54
54
|
Requires-Dist: pydantic<2.12.0,>=2.9.2
|
55
55
|
Requires-Dist: pint-pandas~=0.6
|
56
56
|
Requires-Dist: pandas~=2.3.0
|
57
|
-
Requires-Dist: PyOptik==1.10.
|
57
|
+
Requires-Dist: PyOptik==1.10.8
|
58
58
|
Requires-Dist: tabulate~=0.9
|
59
59
|
Requires-Dist: pyvista==0.45.2
|
60
60
|
Provides-Extra: testing
|
61
61
|
Requires-Dist: pytest>=0.6; extra == "testing"
|
62
62
|
Requires-Dist: pytest-cov>=2.0; extra == "testing"
|
63
63
|
Requires-Dist: pytest-json-report==1.5.0; extra == "testing"
|
64
|
-
Requires-Dist: coverage==7.
|
64
|
+
Requires-Dist: coverage==7.9.1; extra == "testing"
|
65
65
|
Provides-Extra: documentation
|
66
66
|
Requires-Dist: numpydoc==1.8.0; extra == "documentation"
|
67
67
|
Requires-Dist: sphinx>=5.1.1; extra == "documentation"
|
@@ -1,40 +1,35 @@
|
|
1
|
+
lib/lib_ZBessel.a,sha256=-gAtLmxtZIPWbEsYRO5D3dxJqckSt8F_ztDfZp4EFYg,10676
|
2
|
+
lib/libcpp_base_scatterer.a,sha256=1INJH5LmHsWtPONmHFQEcWdlaI3mLBXLe_STf7NlOhg,274256
|
3
|
+
lib/libcpp_coreshell.a,sha256=5iB5HOVz1D00peSIQS92wyCbT6gEdfal4AR_cMjUx1A,278460
|
4
|
+
lib/libcpp_cylinder.a,sha256=MiPk21cuf9fdozfz7BDrGJRMGTIovbbPNo5smw8H1KI,257878
|
5
|
+
lib/libcpp_sphere.a,sha256=9jnKAYLjK8DM9qag2R0GNwViWRKKCTetltMk8DosJnE,272548
|
6
|
+
lib/libZBessel.a,sha256=UNdjCVMntAsGcJJPRzPG9-2Gkyk8_m2b8ranryyuMBA,133174
|
1
7
|
PyMieSim/__init__.py,sha256=ATPcasYo6e8DbNhyXGPN8lRhB_mcOGvNV-kO82U9Z5k,260
|
2
8
|
PyMieSim/__main__.py,sha256=ZSJaGgDhOSzpwPZLLrqyzu6JH5nO7KPHblCD8OMuF4A,180
|
3
|
-
PyMieSim/_version.py,sha256=
|
9
|
+
PyMieSim/_version.py,sha256=SPA2ARbwEu3rmTOQ07I3xcu74m_6fSX88nf8mSfbM_U,537
|
4
10
|
PyMieSim/binary/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
PyMieSim/binary/interface_detector.cp310-win_amd64.pyd,sha256=
|
6
|
-
PyMieSim/binary/interface_detector.cp311-win_amd64.pyd,sha256=
|
7
|
-
PyMieSim/binary/interface_detector.cp312-win_amd64.pyd,sha256=
|
8
|
-
PyMieSim/binary/interface_experiment.cp310-win_amd64.pyd,sha256=
|
9
|
-
PyMieSim/binary/interface_experiment.cp311-win_amd64.pyd,sha256
|
10
|
-
PyMieSim/binary/interface_experiment.cp312-win_amd64.pyd,sha256=
|
11
|
-
PyMieSim/binary/
|
12
|
-
PyMieSim/binary/
|
13
|
-
PyMieSim/binary/
|
14
|
-
PyMieSim/binary/
|
15
|
-
PyMieSim/binary/
|
16
|
-
PyMieSim/binary/
|
17
|
-
PyMieSim/binary/
|
18
|
-
PyMieSim/binary/
|
19
|
-
PyMieSim/binary/
|
20
|
-
PyMieSim/binary/
|
21
|
-
PyMieSim/binary/
|
22
|
-
PyMieSim/binary/
|
23
|
-
PyMieSim/binary/
|
24
|
-
PyMieSim/binary/
|
25
|
-
PyMieSim/binary/
|
26
|
-
PyMieSim/binary/
|
27
|
-
PyMieSim/binary/libcpp_base_scatterer.a,sha256=hFKfMjepxGSd9gJ4lpmgMaM20yaGCQrlECLpyEaCJuM,274288
|
28
|
-
PyMieSim/binary/libcpp_coreshell.a,sha256=8GNJkI-FOZmfJy0Fn1gGAchU-Gzxx8CezUqusOL3r-o,277128
|
29
|
-
PyMieSim/binary/libcpp_cylinder.a,sha256=u18PyRTwH0zO8txectzz_1FmPVkuDEVvYDH7NSJiSr8,257450
|
30
|
-
PyMieSim/binary/libcpp_detector.a,sha256=e1ALt5VMqJHBf-_qXMSnWFmra7KFhtoMqPK_d20_vtA,278530
|
31
|
-
PyMieSim/binary/libcpp_experiment.a,sha256=dHydMa9KzDdma4YIlq1KVbGrnziUEDucAiDnfYJ0OMQ,239080
|
32
|
-
PyMieSim/binary/libcpp_fibonacci.a,sha256=uZM82tg6KgQHRoSArj1wBnlxgLpwpchzq2MwT-W1fMI,239832
|
33
|
-
PyMieSim/binary/libcpp_mode_field.a,sha256=CTWFHQyavYGvpRp1TZjPdAayK6AS9L0YIzUnwJ2oK9s,222240
|
34
|
-
PyMieSim/binary/libcpp_sets.a,sha256=VxuGVwvG1AaihBLd3qvz84nrh4-aDofSPJlnOzKWI7A,238994
|
35
|
-
PyMieSim/binary/libcpp_source.a,sha256=64szhnXFlZeD2lh8g711qW1Ts-eS2U3_mHmp0VOEDkk,1172
|
36
|
-
PyMieSim/binary/libcpp_sphere.a,sha256=J3RxJRytOLo9iiZWmpryi1YEMSYXZ857BStF-KDnljg,271412
|
37
|
-
PyMieSim/binary/libZBessel.a,sha256=UHlF6SeIRf6Ok8151M99R0zabDYSH8YpzsC6Bz9jxWE,133174
|
11
|
+
PyMieSim/binary/interface_detector.cp310-win_amd64.pyd,sha256=k_eFMo3StUEQDOdeIacs0DbZG4vwoZaxk-8RPsCyEVI,755712
|
12
|
+
PyMieSim/binary/interface_detector.cp311-win_amd64.pyd,sha256=pulrHpr_y6wH7lwRM3J0kqocN2DMm6gu0AzhHJldzP0,758784
|
13
|
+
PyMieSim/binary/interface_detector.cp312-win_amd64.pyd,sha256=7RM0e0XPJ5XA0R8TaslN79QnCRCEirjt4c5QpmmhBSo,759296
|
14
|
+
PyMieSim/binary/interface_experiment.cp310-win_amd64.pyd,sha256=XKfGab5bUHMZPVK_c5qNsVtRE9uE4NIArcCBFpZbLk0,797696
|
15
|
+
PyMieSim/binary/interface_experiment.cp311-win_amd64.pyd,sha256=0YOaqlzDhWpmBLPLC-33J0yVZzmggDVO2gZAY1_B2Lc,801280
|
16
|
+
PyMieSim/binary/interface_experiment.cp312-win_amd64.pyd,sha256=eGk9Idhrt1uyciyo2kLtD3lgx73fyQLIyLDj7Ka-2nA,799232
|
17
|
+
PyMieSim/binary/interface_scatterer.cp310-win_amd64.pyd,sha256=4Ot0KbxHCfRgTJKOJfPxWzpsM6FWdKyB5Vig0i6-2YE,1171968
|
18
|
+
PyMieSim/binary/interface_scatterer.cp311-win_amd64.pyd,sha256=_8apNih_N2EFPeHLNsqS7VZyOPo6Ml5TizNvkXQhfzo,1176064
|
19
|
+
PyMieSim/binary/interface_scatterer.cp312-win_amd64.pyd,sha256=X_Fnl7w5IikBFpv9HgZBEOcdbMD-YgtuSUEwLof6GhM,1175040
|
20
|
+
PyMieSim/binary/interface_sets.cp310-win_amd64.pyd,sha256=_WVxNPVZkRnlhk_7LSaweouzs-giwNglHL42l-kGYBs,1178624
|
21
|
+
PyMieSim/binary/interface_sets.cp311-win_amd64.pyd,sha256=Jlg7J9wyHGEvIvmpe74yA8J8Ihn6yMwXK2y_gUvvyYA,1183232
|
22
|
+
PyMieSim/binary/interface_sets.cp312-win_amd64.pyd,sha256=0H2MdS6z37E68m2S_ezLgGKCHE3jZFNPPD7VFVheoy4,1181184
|
23
|
+
PyMieSim/binary/interface_source.cp310-win_amd64.pyd,sha256=yOLgbVBPeOKYZrENJDeUlEPnolzflrjjJgYLlGVAwgs,539648
|
24
|
+
PyMieSim/binary/interface_source.cp311-win_amd64.pyd,sha256=1jVMPboHJwMkz9RVrbTPxAUu6W2t-se1wLha3RGQyp8,542720
|
25
|
+
PyMieSim/binary/interface_source.cp312-win_amd64.pyd,sha256=id_8x-4l9XnqqX9iYxCi0bqNYNZgp3UK1akjaP5KXaw,542208
|
26
|
+
PyMieSim/binary/libcpp_coordinates.a,sha256=tt-tyg-vEN-SgkX-1JIwZQwZVUZEGJH-RfRI-mv3yyI,23506
|
27
|
+
PyMieSim/binary/libcpp_detector.a,sha256=7-rng9IlrQXoGD46iiZJf1u2ZuC03sCNbnuFmbAs-mk,281046
|
28
|
+
PyMieSim/binary/libcpp_experiment.a,sha256=e34A3wfs6_ohx-hGLN767kz6JwAQ_lrhbWVkhSi9xk4,238788
|
29
|
+
PyMieSim/binary/libcpp_fibonacci.a,sha256=dVfFPVjTSl9mD615OgN_xiCemqBxRkgZBAo7Q7eXjdg,16808
|
30
|
+
PyMieSim/binary/libcpp_mode_field.a,sha256=_h02sv7kUoEQXGjx3o9zeLFVSAcTqWWZKq_N6KpzSs4,13388
|
31
|
+
PyMieSim/binary/libcpp_sets.a,sha256=g5YXDuDDn4GadPSiwnYrMC5OOyW8EiJx4yWEFlwnO6w,238702
|
32
|
+
PyMieSim/binary/libcpp_source.a,sha256=F-MUQYpSyBEiH4roRqFVzKczyalaSx8OWoS_vsuzJRc,4070
|
38
33
|
PyMieSim/directories.py,sha256=x8nf0HACHDuny0YQ3sPnktY8aCKOA1RDvbDTSrerGN0,679
|
39
34
|
PyMieSim/experiment/__init__.py,sha256=3W7RgRQ2wspQyhAsUUfd5oYx199lQbYv90Lf0A5Ypf4,46
|
40
35
|
PyMieSim/experiment/dataframe_subclass.py,sha256=WVVbvLmdPaqgFU48f8Ua0-WOlNj-CDpK_tFNCDC5ixU,7394
|
@@ -43,28 +38,28 @@ PyMieSim/experiment/detector/base.py,sha256=R2kObUqhY1FicedybH7xn4DJu50-SdAWtHc2
|
|
43
38
|
PyMieSim/experiment/detector/coherent_mode.py,sha256=5bnQ0j22R5-6ALR9_3wseF01JOiSk9iii2opvcsaQpc,1855
|
44
39
|
PyMieSim/experiment/detector/photodiode.py,sha256=Hpw9Nxo19QUV-r31LCuEl2-EOgUPDEbkbOVB0zPyw8s,1902
|
45
40
|
PyMieSim/experiment/scatterer/__init__.py,sha256=Daf3HTH5jA5Br5R3hb0NQSVZAz5NpaiedGUQG1bYtkU,128
|
46
|
-
PyMieSim/experiment/scatterer/base.py,sha256=
|
47
|
-
PyMieSim/experiment/scatterer/core_shell.py,sha256=
|
48
|
-
PyMieSim/experiment/scatterer/cylinder.py,sha256=
|
49
|
-
PyMieSim/experiment/scatterer/sphere.py,sha256=
|
41
|
+
PyMieSim/experiment/scatterer/base.py,sha256=3wKHLeOnXIXNK9ZE8-q0vNVjeYP2pJV4191DuGSfRuQ,3977
|
42
|
+
PyMieSim/experiment/scatterer/core_shell.py,sha256=2HQI285zd63hY0DaDNUwyeOEaDaE5DX3dF9WG9SyhRU,3552
|
43
|
+
PyMieSim/experiment/scatterer/cylinder.py,sha256=bpypSsx23WAOx9FEdnkepJI0tfIKBbUndXR7DDjktHw,2601
|
44
|
+
PyMieSim/experiment/scatterer/sphere.py,sha256=hiv8rXTm-7BEhE0d48jX9KvSoaxiD1KkmNaC7O9J5sM,2911
|
50
45
|
PyMieSim/experiment/setup.py,sha256=bNbiKh77TX94qKBhDP9PBjE5WZ6b_uQXMK-7R5CrrBI,13649
|
51
46
|
PyMieSim/experiment/source/__init__.py,sha256=QOwlP9wBNAlQA3dmH-g8mNpb2qu5hFdlD_zkmw88Q8w,66
|
52
47
|
PyMieSim/experiment/source/base.py,sha256=bkIM2UDO8APBi6MPWWGrapkSqddQBmiCScJ3Y2Q741c,3189
|
53
|
-
PyMieSim/experiment/source/gaussian.py,sha256=
|
54
|
-
PyMieSim/experiment/source/planewave.py,sha256=
|
48
|
+
PyMieSim/experiment/source/gaussian.py,sha256=00FAe2dHDefDNFr-nh3yA9P4dvtoVfdQmDI36G6wdLI,2390
|
49
|
+
PyMieSim/experiment/source/planewave.py,sha256=rZtCS_fOk--WzUg8tz7e5QwHZy_3N9KS-QP4jgo6gXI,2548
|
55
50
|
PyMieSim/experiment/utils.py,sha256=pVdLsLYACnOt1aKPmLO9qLC9I2a9paN4ypMF3TIaaGA,5512
|
56
51
|
PyMieSim/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
52
|
PyMieSim/gui/helper.py,sha256=GWrG91CBVgMruvwvQbhfU_07ZhbIBkgAs3FwOvCPhe8,2605
|
58
53
|
PyMieSim/gui/interface.py,sha256=MLE1_6VXdNxAsQlEh0LzKs3o6U7jT5im8QuSGOpiXcA,4948
|
59
54
|
PyMieSim/gui/section.py,sha256=Ro7lbaUJhtvtZEAhzYn5Fbl8BSdQGjAImYESNmYmis4,21701
|
60
|
-
PyMieSim/mesh.py,sha256=
|
55
|
+
PyMieSim/mesh.py,sha256=6ZwIv79eQY7bOl4NRTK1oOSV8X6aMG8BOUC0UTmbU0Q,14934
|
61
56
|
PyMieSim/polarization.py,sha256=l94om78Sku0BjDjzZfBqJ9zW06EghHLs6wKKv-lZRDU,5661
|
62
57
|
PyMieSim/single/__init__.py,sha256=uE3Ctqg90vm4CWTn9uHdnENSOAg7dgHZwwjbrEGWBd8,2255
|
63
58
|
PyMieSim/single/detector/__init__.py,sha256=5w47VDcm6L5VVNz019syCYtM84k1BIHbJll5UktDNjk,91
|
64
|
-
PyMieSim/single/detector/base.py,sha256=
|
65
|
-
PyMieSim/single/detector/coherent.py,sha256=
|
66
|
-
PyMieSim/single/detector/uncoherent.py,sha256=
|
67
|
-
PyMieSim/single/representations.py,sha256=
|
59
|
+
PyMieSim/single/detector/base.py,sha256=ex-TMwiv5kI3QJnkSyNgf7oMz22508v_51PE8orqUnU,11590
|
60
|
+
PyMieSim/single/detector/coherent.py,sha256=tvJJG41iSFHbFbWg1FB_Frxu1k5s6V8OMZBFU3-meag,5405
|
61
|
+
PyMieSim/single/detector/uncoherent.py,sha256=CKR_Iqcx2UjD8ospj9H4rMFNbbM_jLXZgL_PLj2BGWw,4953
|
62
|
+
PyMieSim/single/representations.py,sha256=vOznCZL-8KrErz-4m4-9w7g433rmUCfVmWFObLONd_Q,29883
|
68
63
|
PyMieSim/single/scatterer/__init__.py,sha256=CN5D1UTvtIWMrlYvN4YqA3_DAp0jOPlPKl8ZCKUUU-4,128
|
69
64
|
PyMieSim/single/scatterer/base.py,sha256=bRNhLsvu9t8SVROdpnXnpklR_9UNKhw69YmBo6PIjG8,20106
|
70
65
|
PyMieSim/single/scatterer/core_shell.py,sha256=5u5kJpNf3m-E6hU6E4vhALYZitJ0BwlhnYrD1Ek6cIM,4785
|
@@ -72,10 +67,10 @@ PyMieSim/single/scatterer/cylinder.py,sha256=uKnpNQ1gq-Mb2bOXIlWpohpd4xIdriT85LF
|
|
72
67
|
PyMieSim/single/scatterer/sphere.py,sha256=UBdfnOSVA9Ep4Xz4ASgXmLKUOCtFoFqJgRTlMCk66Q4,3581
|
73
68
|
PyMieSim/single/source/__init__.py,sha256=UTGc7nja-s3Cfx9tbscY-OOpku8td8eTyRkruUNfN00,96
|
74
69
|
PyMieSim/single/source/base.py,sha256=T7Wx-4JYsG7-OOuZAga7XrzQiYo1jzB2AHLWTxr71Uw,130
|
75
|
-
PyMieSim/single/source/gaussian.py,sha256=
|
70
|
+
PyMieSim/single/source/gaussian.py,sha256=LY7ShqlnpefXdHaEz5oQZBVhjxBQWcLhNjgGVzfOSxc,4986
|
76
71
|
PyMieSim/single/source/planewave.py,sha256=Wr5vnege_0yyogG4oVDnJgGOnTfBcI0Delw61M_iTn8,3683
|
77
|
-
PyMieSim/special_functions.py,sha256=
|
78
|
-
PyMieSim/units.py,sha256=
|
72
|
+
PyMieSim/special_functions.py,sha256=Dwdt3civrBFckhw3Tj0bQvJ2m124B70dqXXQX5VQmcQ,2164
|
73
|
+
PyMieSim/units.py,sha256=b6TscVsAkKOiJfqs28gRLI4z_0g1tMS9lzelO623OjQ,4353
|
79
74
|
PyMieSim/validation_data/bohren_huffman/figure_810.csv,sha256=a16WSB7y7_TuGcboXUINj7y-mX0mkG_Vo0CFtE-pfF8,10073
|
80
75
|
PyMieSim/validation_data/bohren_huffman/figure_87.csv,sha256=6vf5uPxzYP7N1rD8GgQJxi4-Yme8Q3ycPpsavXlQQZY,40002
|
81
76
|
PyMieSim/validation_data/bohren_huffman/figure_88.csv,sha256=c30NQRjxlPz6plBcuG3kMVdTYQ0sHmRXRnzS67gyFnQ,40002
|
@@ -95,7 +90,7 @@ PyMieSim/validation_data/pymiescatt/validation_Qsca_coreshell_1.csv,sha256=fW1pa
|
|
95
90
|
PyMieSim/validation_data/pymiescatt/validation_Qsca_coreshell_2.csv,sha256=khOJo3N54CqvrG9sxpuvvv5mZlcF3awOk738WHLougI,10400
|
96
91
|
PyMieSim/validation_data/pymiescatt/validation_Qsca_medium.csv,sha256=7PE_F3sLIKmKPhcoMUxeByZHw3lzDfc3TH9g9bh3Noo,20800
|
97
92
|
PyMieSim/validation_data/pymiescatt/validation_sphere.csv,sha256=0VCbInLU-PcTMa8IOsGL9vBWYJ9tQ6FpMv3ApV8fQVY,143548
|
98
|
-
pymiesim-3.5.4.dist-info/METADATA,sha256=
|
99
|
-
pymiesim-3.5.4.dist-info/WHEEL,sha256=jS-OUpQ7pzysZBq4lYO_axuVXwmbi12-xcZ3P0PA_yc,106
|
100
|
-
pymiesim-3.5.4.dist-info/licenses/LICENSE,sha256=Iiz1zBIAocPfqqVpPTakp8OKXY9K5j4bIRbgaXy2iAE,1109
|
101
|
-
pymiesim-3.5.4.dist-info/RECORD,,
|
93
|
+
pymiesim-3.5.4.3.dist-info/METADATA,sha256=3QF4Pz6lqkM-onxvKsHs4zMk7yLajZ-4mZx9uSpp8dM,13472
|
94
|
+
pymiesim-3.5.4.3.dist-info/WHEEL,sha256=jS-OUpQ7pzysZBq4lYO_axuVXwmbi12-xcZ3P0PA_yc,106
|
95
|
+
pymiesim-3.5.4.3.dist-info/licenses/LICENSE,sha256=Iiz1zBIAocPfqqVpPTakp8OKXY9K5j4bIRbgaXy2iAE,1109
|
96
|
+
pymiesim-3.5.4.3.dist-info/RECORD,,
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
PyMieSim/binary/libcpp_sphere.a
DELETED
Binary file
|
File without changes
|
File without changes
|