Abstract
Mie scattering simulations are essential to designing sensing and imaging devices for atmospheric and biomedical sciences applications. Current simulators based on Lorenz-Mie theory allow obtaining scattering phase functions for several scatterer geometries. Still, they are not optimized for simulating ranging parameters and do not compute coupling powers into coherent or incoherent detectors. Here, we present PyMieSim: a Python interface wrapping a C++ parallelized core for a fast, flexible, and highly visual simulation package, allowing for the study of ranges of parameters for different source, scatterer, and detector configurations. We demonstrate two applications: flow-cytometry geometry optimization and few-mode optical coherence tomography contrast analysis.
© 2023 Optica Publishing Group under the terms of the Optica Open Access Publishing Agreement
1. Introduction
Light-particle interactions are at the heart of a wide range of technologies, from biomedical imaging to solid-state physics [1,2]. In particular, numerous biomedical optics applications rely upon light scattering interactions for early diagnosis of cancer [3] or a variety of diseases, such as Alzheimer’s [4]. Understanding such complex interactions between light sources, scatterers, and detectors is of prime importance in validating experimental results and theoretical predictions. Optical configurations composed of a source, scatterer, and detector (SSD) are defined by several attributes resulting in systems of high dimensionality. Although the source and scatterer interaction can be challenging to solve, under certain conditions [5], the scatterer can be approximated to a geometry sporting symmetries such as a sphere, simplifying the mathematical expressions and, thus, enabling the use of fast simulation tools, such as the Lorenz-Mie scattering theory (LMT). The LMT framework allows finding exact solutions to Maxwell’s equations for some scatterer geometries such as homogeneous spheres, stratified spheres, or circular cylinders, albeit using planewave illumination. Bohren and Huffman’s Fortran codes [1] for such a framework have been widely used and adapted in several programming languages, providing an essential tool for experimental validation and theoretical predictions. Python is currently a prevalent, interpreted programming language [6] that has become pivotal for scientific applications, notably due to its wide range of available libraries [7,8], exportability, and flexibility. Presently, a few Python/C++ projects exist for LMT such as PyMieScatt (Python) [9], MieLab (Python) [10] or Bim-Sim (C++) [11]. These do not emulate interactions with detectors (coherent or incoherent), and nor are they suitable for studying optical properties of large sets of configurations. Moreover, as these projects are written exclusively in Python or C++, they inherit either the slowness or complexity of the associated programming language. In this paper, we present PyMieSim, a fast and flexible Python library wrapping a C++/Fortran core for simulating a wide range of SSD configurations with a much-reduced run time. The library allows defining a complete SSD system to compute the full scattered field (over 4 $\pi$ steradian), properties such as efficiencies (scattering, extinction, absorption, and radiation pressure), asymmetry, and albedo parameters, as well the coupling between the far-field scattered wave and a detection scheme (incoherent detector or coherent optical fibers). PyMieSim comprises three different LMT solvers, each one computing solutions of Maxwell’s equations for different scatterer form factors: homogeneous spheres, 2-layer spheres, and perpendicularly illuminated infinite circular cylinders. Whilst there exists a few libraries allowing for the study of source-scatterer interactions [9,12,13], none allow evaluating interaction with a detector. More importantly, other packages are not suitable for studying the optical properties of a large set of optical configurations with the required short compute time. By contrast, PyMieSim allows the simulation of coherent detection schemes like fiber optic modes or incoherent schemes like photodiode detectors. PyMieSim offers more than two orders of magnitude in reduced compute-time over all comparable publicly-available packages. In the following sections, we discuss the most important aspects of the scattering algorithm implemented in PyMieSim, validate its results against state-of-the-art algorithms, and demonstrate typical simulations, including various detection geometries.
1.1 Lorenz-Mie theory applications
Lorenz-Mie scattering theory (LMT) is a central framework for describing various processes that are at the core of several technologies and studies. LMT makes use of electric and magnetic multipole expansions to compute the scattered near- and far fields. Originally, LMT packages only allowed computing solutions for homogeneous spheres [14]. Since then, various geometries were adapted, including: infinite cylinders [15], stratified spheres [10], and others [16]. The analysis of such solutions as a function of the scattering event parameters may serve many applications in biomedical optics, such as light scattering spectroscopy (LSS) [17] or surface plasmon resonance enhancement, respectively. Solutions to Mie scattering may also be used for particle sizing [18], absorption quantification through the atmosphere [19], sensing of cells in biological tissues [20], flow cytometry [21], and also in metamaterial design [22]. While the LMT framework is bound to assume planewave illumination and is limited to certain scatterer geometries, it is widely used as a first-order approximation for more complex configurations. The generalized Lorenz-Mie scattering theory (GLMT) framework is an extension of LMT that enables defining an arbitrary illumination source to compute the scattering attribute. However, GLMT is more computationally expensive—especially when rotational symmetry is broken—as it usually involves computing higher-order terms of beam decomposition [23].
2. Theory
PyMieSim is a Python package that was developed to provide a novel tool for the extensive study of light scattering interactions. In order to simulate a scattering event as shown in Fig. 1, PyMieSim exploits the LMT framework. From this, the library can output various scattering properties, compute the scattered far fields and compute the coupling between the latter and different detection schemes.
2.1 Optical setup
Figure 1 shows a typical geometry for a scattering event defined using variables found in the package. Illumination is described using the wavelength in vacuum, $\lambda _0$, the polarization, $\hat E_0$ and amplitude $\left | E_0 \right |$. A scatterer (either a homogeneous sphere, a stratified sphere, or an infinite cylinder) is described through its diameter, $d$, its refractive index, ${m}_{\textrm {sca}}$, and that of the surrounding medium, ${m}_{\textrm {med}}$. A detector defined with a (NA) is placed at an inclination and azimuthal angles $\phi$ and $\gamma$, respectively, accepts two orthogonally polarized scattered fields that can be specifically selected with a polarization filter. The detector coupling mechanism can also be set to coherent or incoherent, such as a photodiode or linearly polarized (LP) propagation modes in an optical fiber, respectively.
2.2 Lorenz-Mie theory
The standard LMT provides a mathematical framework that enables numerical methods to infer scattering properties of a scatterer planewave interaction. While approximate algorithms such as the anomalous diffraction [24] or Wiscombe approximation [25] were developed to accelerate the computation, the need for such speed up has been decreasing with the evolution of central process unit (CPU) and graphical process unit (GPU) architectures and clock speed. As of today, a well-written exact solution algorithm can usually achieve the time-restrictive requirements of the end-user. For this reason, we will restrain ourselves to discussing exact solution algorithms. In particular, LMT returns the scattering matrix elements, denoted as $S_{1-4}$, and defined as
2.3 Scattering properties
While the scattering coefficients represent the amplitudes for the VSH, which do not describe measurable properties of the scattering event, they can be used to compute the scattering efficiencies and other parameters. Table 1 shows PyMieSim’s output for each scatterer type. For the homogeneous and 2-layer sphere, PyMieSim computes the efficiencies for scattering ($Q_{\textrm {sca}}$), extinction ($Q_{\textrm {ext}}$), absorption ($Q_{\textrm {abs}}$), radiation pressure ($Q_{\textrm {pr}}$) and backscatter ($Q_{\textrm {back}}$), as well as the asymmetry parameter ($g$) and albedo ($\Lambda$), using the relations shown in the Table 1. These relations are based on the coefficients $a_n$ and $b_n$ described in Eqs. (5–7). However, due to the symmetry breaking for the infinite cylinder, the asymmetry parameter $g$ cannot be readily written in terms of the scattering coefficient $a_n$ and $b_n$. As such, PyMieSim evaluates the asymmetry parameter $g$ by computing the expected value of the inclination angle: $\left\langle\cos (\phi )\right\rangle$ (Equations not shown [1]).
The cross-sections, $\sigma$, associated with the efficiencies can be retrieved, by multiplying $Q$ with the geometrical cross-section of the scatterer $A$ as
2.4 Coupling mechanism
In addition to computing the scattering properties and scattering far-field, the PyMieSim package can evaluate the coupling of the scattering far-field with a specific detector. To do so, the solid angle space, where the far-field is evaluated, is generated using the Fibonacci lattice algorithm [30], which exhibits useful integration properties such as avoiding the local anisotropy of a conventional latitude–longitude array. The simulated detectors can be divided into two categories, namely, incoherent and coherent detection schemes. The first category embodies a system for which the output signal is proportional to the intensity of the impinging light field, such as a PIN diode. Such a detection scheme does not depend on the impinging field phase. The second category represents a system sensitive to the amplitude of the incident light field, such as a single-mode fiber (SMF) or a few-mode fiber (FMF). Furthermore, the coherent coupling mechanism can be subdivided into two parts: centered coupling and mean coupling. The first case occurs when the scatterer is perfectly centered with the detector in comparison to the incident light field. In that case, following the same argument described in [31], we define the centered coupling as
For incoherent coupling mechanisms, the centered and mean couplings lead to the same results, as it does not depend on the phase of the scattering far field. Additionally, the PyMieSim software can also compute the scatterer footprint, which represents the coupling as a function of the scatterer spatial offset in two directions. Such a footprint is what we can expect to see using a scanning system, as it was demonstrated in [31].
3. Main features of PyMieSim
PyMieSim was developed using an architecture promoting fast computing time and ease of operation under several platforms.
3.1 Architecture
Figure 2 represents the structure of PyMieSim. The package takes advantage of the object-oriented aspect of Python to define three C++ classes: Source describes the incoming wave, Scatterer defines the scatterer geometry and attributes, and Detector defines the detector type, position, and attributes. Within the Python wrapper Experiment, Source and Scatterer interact together to return scattering efficiencies, while Detector returns the coupling ratio and scatterer footprint. The wrapping of these classes into a Python object is done using the PyBind11 library [32]. PyMieSim was developed in parallel with another Python package: PyOptik [33] to define the scatterer and immersion medium as specific materials with wavelength-dependent properties fetched from an online database (RefractiveIndex.info [34]). The code being composed of a Python wrapper for C++, it has to be compiled and, as such, is operating system (OS) dependent. For portability, PyMieSim exploits the Python package manager with uploaded pre-compiled code (wheel format). PyMieSim is currently available on the three main OS: Linux, macOS, Windows for different Python versions: 3.7, 3.8, 3.9. Furthermore, the project also allows end-users to manually install the package for any system configuration. PyMieSim is also available on the online Google Colab platform and, thus, may be used on any OS.
3.2 Compute time
Wiscombe’s criterion, used to define the coefficient order, $n$, (see Eq. (3)) shows that the compute time rapidly increases for large size parameters, $x$. PyMieSim, written in C++ and Fortran, significantly reduces the runtime compared to existing Python packages, allowing for the study of a large set of SSD configurations up to large-size parameters. Figure 3(a) shows the runtime comparison for scattering coefficient calculations using different software packages. The calculations were performed on a Linux distribution using an AMD Ryzen 5 2600 (6 cores) CPU and 16 GB of ddr4 ram, and show a gain exceeding 130x for large sets of parameters (> 40 000). PyMieSim’s short computational time allows interfacing with other algorithms for fast post-processing, such as Mie inverse problems [35,36]. Such gain permits optimization tools to be used in conjunction with the library.
3.3 User interface
PyMieSim simulates SSD configurations, which are composed of up to fourteen attributes, as shown in Fig. 2. The package gives to the end-user full control over each of those attributes, allowing to iterate over ranges for each one. Moreover, PyMieSim comes with an additional tool (DataVisual [37]) for high-dimensionality data operation, analysis, and visualization. PyMieSim provides a handy application programming interface (API), accompanied by visual tools at each level to grasp the optical configurations. PyMieSim is also a set of independent tools that allow the user to embed within another project. The software implements a seamless integration of the C++ outputted data with the scientific NumPy library [38], allowing the package to be readily implemented in any other Python project. Figure 4 shows the simulation of the scattering event as depicted in Fig. 1, for ranging values of detector’s inclination angle $\phi$ and numerical aperture NA. The plots show that, as the NA of the detector increases, finer details in the scattering diagram vanish. Normalization is necessary to visualize all four curves, as increased NA results in increased coupling power, which the package allows calculating (not shown). Working examples of the code used to generate the plots shown in this paper can also be found at Code 1 [29] and https://pymiesim.readthedocs.io/en/latest/. As such, simulation and visualization are important aspects for an exhaustive understanding of the involved mechanisms. PyMieSim makes use of different graphical tools to give better insight to the end user. Fig. 5 shows examples of simulations performed using PyMieSim. Figure 5(a)–(c) show scattering experiments using a single scatterer ($d = {1000}\;\textrm{nm}$, $m=1.4$) and a linearly polarized planewave ($\lambda _0 = {500}\;\textrm{nm}$). Figure 5(a) shows amplitude scattering matrix elements $S_1(\phi )$ (left) and $S_2(\phi )$ (right). Figure 5(b) shows a 3D rendering of the real and imaginary parts of the scattering phase function, while Fig. 5(c) shows the far-field representation of the scattered intensity. Figure 5(d) shows different detector far-field representations. From left to right: an incoherent detector (NA=0.5), and three fiber modes: LP$_{01}$, LP$_{11}$, and LP$_{21}$. The LP far-field modes are computed using the Fraunhofer approximation.
4. Validation
Mie simulation results for the homogeneous sphere, the 2-layer sphere, and the infinite cylinder were extensively tested and compared to other libraries, namely: MiePlot [12], PyMieScatt [9], and MiePython [13]. However, to the best of our knowledge, no library implements the scattering calculation for infinite cylinders. As such, we compared our results to the literature. Figure 6 compares the scattering efficiencies for two orthogonal polarization, $Q_{scaI}, Q_{scaII}$, for a cylinder ($m=1.55$) in air (red and blue curves) and in water (orange and green curves) with results published in [1,39] (black dashed curves). The four curves overlap perfectly.
5. Application
Here, we describe two use cases exploiting the unique features of PyMieSim, namely its fast compute core and the ability to simulate a coherent detection scheme.
5.1 Flow-cytometry optimization
PyMieSim’s fast computing core allows using the library for optimization problems. For example, we demonstrate how PyMieSim could be used to improve the accuracy of a flow cytometry system through the optimization of its detectors’ position. In its standard implementation, flow-cytometry uses two orthogonal photodetectors defined by the coordinates $\{ { \phi _0 = 0^\circ, \gamma _0=0^\circ }\}$ and $\{ { \phi _1 = 90^\circ, \gamma _1=0^\circ }\}$ in order to measure front and side scattering efficiencies of scatterers flowing one at a time through a monochromatic, polarized laser beam [40]. In this flow-cytometry optimization example, we define the optical system’s baseline parameters as in [21]. We thus modeled scattering from spherical scatterers within a phase space defined by a refractive index ranging from 1.33 to 1.6 and diameter ranging from 100 to 500 nm, illuminated with a polarized light source at 405 nm. We first modeled an unoptimized orthogonal detector pair with an NA of 0.15, then let PyMieSim optimize the detectors’ angular values ($\phi$ and $\gamma$) and NA (where NA is a free parameter ranging from [0.1 to 0.4]).
Figures 7(a-b) show, for each detector, the coupling power as a function of scatterer size and refractive index. For each detector, the measured coupling power defines an iso-contour, the intersection of which returns the scatterer’s size and refractive index. Uncertainty in the detector’s measurement broadens the iso-contour into areas bounded by dashed lines in Figs. 7(a)–(b) and shown as shaded areas in Figs. 7(c)–(d). Figures 7(c) maps the intersection of the areas in the unoptimized case. As iso-contours from each detector are not orthogonal, the uncertainty on size and refractive index remains large. PyMieSim was then used to compute a new set of detector’s angular locations and NA for which uncertainty would be minimized across all scatterer sizes and refractive indices. For a fixed measurement uncertainty, the best-case scenario occurs when the iso-contours for both detectors are orthogonal, this would mean that the projection of the gradient of the coupling field for each detector equals zero at every point. This was used as the optimization metric, normalized on a scale from zero to one, where zero means that all the iso-contour lines are orthogonal, and one means that they are co-linear. Mathematically, the optimization problem can be written in the following form:
5.2 Coherent imaging analysis
Another valuable application of the library concerns coherent or partially coherent imaging. PyMieSim allows simulating coherent detection schemes based on a fiber’s LP modes to improve endoscopy methods such as optical coherence tomography (OCT). Recently, the use of several LP modes has been under investigation as a way to acquire additional contrast [4,31,42]. PyMieSim allows modeling the source of contrast based on scatterer size and geometries for each LP mode [31]. Figure 8 shows an example of the coupling power of a coherent imaging system as a function of the scatterer size and different LP modes. In particular, Fig. 8 demonstrates that the coupling behavior does not change for small scatterers (i.e., approaching the Rayleigh regime), however, the coupling power in each mode diverges for larger scatterers, hinting at possible size-based contrast for FM-OCT.
6. Conclusion
We conclude by briefly comparing PyMieSim to other implementations of Mie theory. Table 2 summarizes the features of several Mie codes available online. The table highlights PyMieSim’s main aspects: enabling simulation for different types of scatterers, a fast computing core, an easy-to-install package, and an intuitive API. Moreover, PyMieSim addresses shortcomings associated with the other libraries, providing a continuous integration pipeline for an extensive testing process to ensure the library structure’s integrity and that the results produced match the literature. Additionally, the library provides complete online documentation and a platform with tens of examples featuring the reproduction of already published results.
The PyMieSim package is still under active development and has been designed to be readily upgraded. The library also makes use of external tools such as Travis [43] for continuous integration and Docker [44] for the compilation of the source code for each OS. There are various incremental additions and features that are being designed for near-future deployments, namely: GLMT framework, GPU computation, and graphical user interface (GUI). The GLMT framework is an extension of the LMT for structured illumination sources, thus allowing the user to define specific light sources such as a Gaussian beam [23], Bessel beam [45] or fiber optic LP modes. While many simulation projects exist for LMT simulations, only a few include GLMT. The framework can also be used to simulate the interaction with scatterers breaking the symmetries, as it was demonstrated for arbitrarily oriented spheroids [46]. While the necessary computation differs from the LMT framework, using the existing PyMieSim platform makes such a feature easier to implement. A similar approach could also be used to compute the near-field components of scattering events, allowing for multi-scatterer interaction and thus widening the range of applications of the library.
The ability to create experiment setups with ranging attributes for the scattering event is one of the main appeals of PyMieSim. Moreover, its implementation has been parallelized to make the most of the multiple cores that recent CPU architecture offers. Due to its highly independent implementation, the algorithm for such computation could be passed to GPU for an even more reduced runtime.
Finally, the aim of the package is to be easy to install and use. While the interpreted Python language allows using easy to handle platforms such as Jupyter notebook or Google Colab, the coding part might still be a barrier for some users. As such, developing a graphical interface can help overcome this difficulty. This is why we plan to develop a server-based application that will be accessible through a web browser.
Funding
Fonds de recherche du Québec – Nature et technologies (304141); Natural Sciences and Engineering Research Council of Canada (RGPIN-06404-2016, RGPIN-2018-06151).
Acknowledgements
We thank Pierre-Alexandre Aubé for his precious help with the writing of the PyMieSim package. Portions of this work were presented at SPIE Photonics West’s Symposium on Optical Interactions with Tissues and Cells XXXIII; and Advanced Photonics in Urology in 2022 (PC1195802) [47]. The presentation focused on the application programming interface and the usability of the package, while this manuscript delves into the equations behind the package, validates its output against other packages, demonstrates improvement in the computation time, and demonstrates the novel and unique features of PyMieSim through two use-cases of practical interest to the community.
Disclosures
The authors declare no conflicts of interest.
Data Availability
The source code for PyMieSim is available as Code 1 [29]. The raw data used in the article is available from the authors upon reasonable request.
References
1. C. F. Bohren and D. R. Huffman, Absorption and scattering of light by small particles (John Wiley & Sons, 2008).
2. M. I. Mishchenko, L. D. Travis, and A. A. Lacis, Scattering, absorption, and emission of light by small particles (Cambridge university press, 2002).
3. S. L. Jacques, J. C. Ramella-Roman, and K. Lee, “Imaging skin pathology with polarized light,” J. Biomed. Opt. 7(3), 329–340 (2002). [CrossRef]
4. P. Eugui, A. Lichtenegger, M. Augustin, D. J. Harper, M. Muck, T. Roetzer, A. Wartak, T. Konegger, G. Widhalm, C. K. Hitzenberger, A. Woehrer, and B. Baumann, “Beyond backscattering: optical neuroimaging by brad,” Biomed. Opt. Express 9(6), 2476–2494 (2018). [CrossRef]
5. M. Hammer, D. Schweitzer, B. Michel, E. Thamm, and A. Kolb, “Single scattering by red blood cells,” Appl. Opt. 37(31), 7410–7418 (1998). [CrossRef]
6. G. Van Rossum and F. L. Drake Jr, Python tutorial (Centrum voor Wiskunde en Informatica Amsterdam, The Netherlands, 1995).
7. T. E. Oliphant, “Python for scientific computing,” Comput. Sci. Eng. 9(3), 10–20 (2007). [CrossRef]
8. K. J. Millman and M. Aivazis, “Python for scientists and engineers,” Comput. Sci. Eng. 13(2), 9–12 (2011). [CrossRef]
9. B. J. Sumlin, W. R. Heinson, and R. K. Chakrabarty, “Retrieving the aerosol complex refractive index using pymiescatt: A mie computational package with visualization capabilities,” J. Quant. Spectrosc. Radiat. Transf. 205, 127–134 (2018). [CrossRef]
10. O. Pe na-Rodríguez, P. P. G. Pérez, and U. Pal, “Mielab: a software tool to perform calculations on the scattering of electromagnetic waves by multilayered spheres,” Int. J. Spectrosc. 2011, 1–10 (2011). [CrossRef]
11. S. Berisha, T. van Dijk, R. Bhargava, P. S. Carney, and D. Mayerich, “Bim-sim: Interactive simulation of broadband imaging using mie theory,” Front. Phys. 5, 5 (2017). [CrossRef]
12. P. Laven, “MiePlot (a computer program for scattering of light from a sphere using Mie theory & the Debye series),” (2011), http://www.philiplaven.com/mieplot.htm.
13. S. Prahl, “MiePython,” (2021), https://miepython.readthedocs.io/en/latest/.
14. G. Mie, “Beiträge zur optik trüber medien, speziell kolloidaler metallösungen,” Ann. Phys. 330(3), 377–445 (1908). [CrossRef]
15. W. Sun, N. G. Loeb, and B. Lin, “Light scattering by an infinite circular cylinder immersed in an absorbing medium,” Appl. Opt. 44(12), 2338–2342 (2005). [CrossRef]
16. F. Frezza, F. Mangini, and N. Tedeschi, “Introduction to electromagnetic scattering: tutorial,” J. Opt. Soc. Am. A 35(1), 163–173 (2018). [CrossRef]
17. V. Turzhitsky, L. Qiu, I. Itzkan, A. A. Novikov, M. S. Kotelev, M. Getmanskiy, V. A. Vinokurov, A. V. Muradov, and L. T. Perelman, “Spectroscopy of scattered light for the characterization of micro and nanoscale objects in biology and medicine,” Appl. Spectrosc. 68(2), 133–154 (2014). [CrossRef]
18. M. R. Vaziri, A. Omidvar, B. Jaleh, and N. P. Shabestari, “Investigating the extrinsic size effect of palladium and gold spherical nanoparticles,” Opt. Mater. 64, 413–420 (2017). [CrossRef]
19. T. C. Bond, G. Habib, and R. W. Bergstrom, “Limitations in the enhancement of visible light absorption due to mixing state,” J. Geophys. Res.: Atmos. 111(D20), D20211 (2006). [CrossRef]
20. P. Bassan, A. Kohler, H. Martens, J. Lee, E. Jackson, N. Lockyer, P. Dumas, M. Brown, N. Clarke, and P. Gardner, “Rmies-emsc correction for infrared spectra of biological cells: Extension using full mie theory and gpu computing,” J. Biophotonics 3(8-9), 609–620 (2010). [CrossRef]
21. E. van der Pol, L. de Rond, F. A. Coumans, E. L. Gool, A. N. Böing, A. Sturk, R. Nieuwland, and T. G. van Leeuwen, “Absolute sizing and label-free identification of extracellular vesicles by flow cytometry,” Nanomedicine (N. Y., NY, U. S.) 14(3), 801–810 (2018). [CrossRef]
22. Q. Zhao, J. Zhou, F. Zhang, and D. Lippens, “Mie resonance-based dielectric metamaterials,” Mater. Today 12(12), 60–69 (2009). [CrossRef]
23. J. Qiu and J. Shen, “Beam shape coefficient calculation for a gaussian beam: localized approximation, quadrature and angular spectrum decomposition methods,” Appl. Opt. 57(2), 302–313 (2018). [CrossRef]
24. H. C. Hulst and H. C. van de Hulst, Light scattering by small particles (Courier Corporation, 1981).
25. W. J. Wiscombe, “Improved mie scattering algorithms,” Appl. Opt. 19(9), 1505–1509 (1980). [CrossRef]
26. A. A. R. Neves and D. Pisignano, “Effect of finite terms on the truncation error of mie series,” Opt. Lett. 37(12), 2418–2420 (2012). [CrossRef]
27. G. Gouesbet and G. Gréhan, Generalized Lorenz-Mie theories, vol. 31 (Springer, 2011).
28. J. L. Arbuckle, Amos™ 7.0 user’s guide (Amos Development Corporation, 1995).
29. M. Poinsinet de Sivry-Houle and C. Boudoux, “MartinPdeS/PyMieSim: PyMieSim beta,” Zenodo (2022), https://doi.org/10.5281/zenodo.7407114.
30. R. Swinbank and R. James Purser, “Fibonacci grids: A novel approach to global modelling,” Q.J.R. Meteorol. Soc. 132(619), 1769–1793 (2006). [CrossRef]
31. M. Poinsinet de Sivry-Houle, S. B. Beaudoin, S. Brais-Brunet, M. Dehaes, N. Godbout, and C. Boudoux, “All-fiber few-mode optical coherence tomography using a modally-specific photonic lantern,” Biomed. Opt. Express 12(9), 5704–5719 (2021). [CrossRef]
32. W. Jakob, J. Rhinelander, and D. Moldovan, “pybind11–seamless operability between c++ 11 and python, GitHub (2017). https://github.com/pybind/pybind11
33. M. Poinsinet de Sivry-Houle and P.-A. Aubé, “PyOptik: A python package for material refractive index library,” Python Package Index (2021), https://pypi.org/project/PyOptik/.
34. M. N. Polyanskiy, “Refractive index database,”.
35. I. Ludlow and J. Everitt, “Inverse mie problem,” J. Opt. Soc. Am. A 17(12), 2229–2235 (2000). [CrossRef]
36. K. J. Chalut, M. G. Giacomelli, and A. Wax, “Application of mie theory to assess structure of spheroidal scattering in backscattering geometries,” J. Opt. Soc. Am. A 25(8), 1866–1874 (2008). [CrossRef]
37. M. Poinsinet de Sivry-Houle, “DataVisual: a python tool for high-dimensionality dataset visualization,” Python Package Index (2021), https://pypi.org/project/DataVisual/.
38. C. R. Harris, K. J. Millman, S. J. van der Walt, et al., “Array programming with NumPy,” Nature 585(7825), 357–362 (2020). [CrossRef]
39. T. A. Bashkatova, A. N. Bashkatov, V. I. Kochubey, and V. V. Tuchin, “Light-scattering properties for spherical and cylindrical particles: a simple approximation derived from mie calculations,” in Saratov Fall Meeting 2000: Optical Technologies in Biophysics and Medicine II, vol. 4241 (International Society for Optics and Photonics, 2001), pp. 247–259.
40. K. M. McKinnon, “Flow cytometry: an overview,” Curr. Protocols Immunology 120(1), 5 (2018). [CrossRef]
41. J. A. Nelder and R. Mead, “A simplex method for function minimization,” The Computer J. 7(4), 308–313 (1965). [CrossRef]
42. M. Kreysing, D. Ott, M. J. Schmidberger, O. Otto, M. Schürmann, E. Martín-Badosa, G. Whyte, and J. Guck, “Dynamic operation of optical fibres beyond the single-mode regime facilitates the orientation of biological cells,” Nat. Commun. 5(1), 5481 (2014). [CrossRef]
43. M. Beller, G. Gousios, and A. Zaidman, “TravisTorrent: synthesizing Travis CI and GitHub for full-stack research on continuous integration,” in 2017 IEEE/ACM 14th International Conference on Mining Software Repositories (MSR), (IEEE, 2017), pp. 447–450.
44. D. Merkel, “Docker: lightweight Linux containers for consistent development and deployment,” Linux J. 2014(239), 2 (2014). [CrossRef]
45. L. A. Ambrosio and H. E. Hernández-Figueroa, “Integral localized approximation description of ordinary Bessel beams and application to optical trapping forces,” Biomed. Opt. Express 2(7), 1893–1906 (2011). [CrossRef]
46. F. Xu, K. Ren, G. Gouesbet, G. Gréhan, and X. Cai, “Generalized Lorenz-Mie theory for an arbitrarily oriented, located, and shaped beam scattered by a homogeneous spheroid,” J. Opt. Soc. Am. A 24(1), 119–131 (2007). [CrossRef]
47. M. Poinsinet de Sivry-Houle, P.-A. Aube, N. Godbout, and C. Boudoux, “Pymiesim: an open source library for fast and flexible light scattering simulations,” in Optical Interactions with Tissue and Cells XXXIII; and Advanced Photonics in Urology, (SPIE, 2022), p. PC1195802.