Spheres setup¶
MSTM code requires explicit setup of the positons and sizes of spheres. There are several classes designed in MSTMstudio to help this setup.
Example: particles aggregate¶
Script to construct spheres with random sizes placed on a regular grid:
from mstm_studio.mstm_spectrum import LogNormalSpheres
from mstm_studio.alloy_AuAg import AlloyAuAg
spheres = LogNormalSpheres(9, 10.0, 0.2, 5., AlloyAuAg(1.))
while spheres.check_overlap():
print('spheres are overlapping, regenerating...')
spheres = LogNormalSpheres(9, 10.0, 0.2, 5., AlloyAuAg(1.))
print(spheres.a)
Sample output:
Box size estimated as: 77.0 nm
Desired number of particles: 9
Number of particles in a box: 8
Resulted number of particles: 8
spheres are overlapping, regenerating...
Box size estimated as: 77.0 nm
Desired number of particles: 9
Number of particles in a box: 8
Resulted number of particles: 8
[ 9.307773 8.61185299 9.92867988 8.84140858 9.87175352 8.71090184
9.71505038 12.40459688]
Classes¶

class
mstm_studio.mstm_spectrum.
Spheres
[source]¶ Abstract collection of spheres
 Object fields:
 N: int
 number of spheres
 x, y, z: numpy arrays
 coordinates of spheres centers
 a: list or arrray
 spheres radii
 materials: numpy array
 Material objects or strings
Creates empty collection of spheres. Use child classes for nonempty!

get_center
(method='')[source]¶ calculate center of masses in assumption of uniform density
Parameter:
 method: string {‘’’mass’}
 If method == ‘mass’ then center of masses (strictly speaking, volumes) is calculated. Otherwise all spheres are averaged evenly.

load
(filename, mat_filename='etaGold.txt', units='nm')[source]¶ Reads spheres coordinates and radii from file.
Parameters:
 filename: string
 file to be read from
 mat_filename: string
 all spheres will have this material (spherematerial storaging is not yet implemented)
 units: string {‘mum’’nm’}
 distance units. If ‘mum’ then coordinated will be scaled (x1000)

class
mstm_studio.mstm_spectrum.
SingleSphere
(x, y, z, a, mat_filename='etaGold.txt')[source]¶ Collection of spheres with only one sphere
Parameters:
 x, y, z: float
 coordinates of spheres centers
 a: float
 spheres radii
 mat_filename: string, float, complex value or Material object
 material specification

class
mstm_studio.mstm_spectrum.
ExplicitSpheres
(N=0, Xc=[], Yc=[], Zc=[], a=[], mat_filename='etaGold.txt')[source]¶ Create explicitely defined spheres
 Parameters:
 N: int
 number of spheres
 Xc, Yc, Zc: lists or numpy arrays
 coordinates of the spheres centers
 a: list or numpy array
 radii of the spheres
 mat_filename: string, list of strings, Material or list of
 Materials specification of spheres material
Note: If only first array Xc is supplied, than all data is assumed zipped in it, i.e.: Xc = [X1, Y1, Z1, a1, …, XN, YN, ZN, aN]

class
mstm_studio.mstm_spectrum.
LogNormalSpheres
(N, mu, sigma, d, mat_filename='etaGold.txt')[source]¶ The set of spheres positioned on the regular mesh with random LogNormal distributed sizes. In the case overlapping of the spheres the sizes should(?) be regenerated.
Parameters:
 N: int
 number of spheres
 mu, sigma: floats
 parameters of LogNormal distribution
 d: float
 average empty space between spheres centers
 mat_filename: string or Material object
 specification of spheres material
MSTM run¶
Tmatrix formalism prposed by Waterman [Khlebtsov2013] is one of the generalization of Mie theory towards the multiple spherical targets. The Multi Sphere Tmatrix (MSTM) Fortran code is developed by Mischnko and Mackowsky [Mackowski2011]. The SPR class implements functionality required for extinction spectra calculation in visible range. Note, that Fortran code have wider functionality, including near field calculations, angledependent calculations, etc, which are not currently implemented. Consult the MSTM website <http://eng.auburn.edu/users/dmckwski/scatcodes/> for details.
Example: coreshell particle¶
Absorbtion efficiency (normalized crosssection) of goldsilver coreshell particle.
from mstm_studio.alloy_AuAg import AlloyAuAg
from mstm_studio.mstm_spectrum import SPR, ExplicitSpheres
import matplotlib.pyplot as plt
import numpy as np
wls = np.linspace(300, 800, 100) # define wavelengths
spr = SPR(wls) # create SPR object
spr.environment_material = 'glass' # set matrix
spheres = ExplicitSpheres(2, [0,0,0,10,0,0,0,12], mat_filename=[AlloyAuAg(1.),AlloyAuAg(0.)])
spr.set_spheres(spheres)
spr.set_incident_field(fixed=False)
spr.simulate()
plt.plot(spr.wavelengths, spr.absorbtion)
plt.xlabel('Wavelegth, nm')
plt.ylabel('Absorbtion efficiency, a.u.')
plt.savefig('coreshell_mstm.png', bbox_inches='tight')
Class¶

class
mstm_studio.mstm_spectrum.
SPR
(wavelengths)[source]¶ Class for calculation of surface plasmin resonance (SPR), running MSTM external code. The MSTM executable should be set in MSTM_BIN environment variable. Default is ~/bin/mstm.x
 Parameter:
 wavelengths: numpy array
 Wavelegths in nm

set_incident_field
(fixed=False, azimuth_angle=0.0, polar_angle=0.0, polarization_angle=0.0)[source]¶ Set incident wave orientation and polarization
Parameters:
 fixed: bool
 True  fixed orientation and polarized light False  average over all orientations and polarizations
azimuth_angle, polar_angle: float (degrees)
 polarization_angle: float (degrees)
 !sensible only for near field calculation! polarization angle relative to the kz palne. 0  Xpolarized, 90  Ypolarized (if azimuth and polar angles are zero).

simulate
(outfn=None)[source]¶ Start the simulation.
The inpuit parameters are read from object dictionary paramDict. Routine will prepare input file scriptParams.inp in the temporary folder, which will be deleted after calculation.
After calculation the result depends on the polarization setting. For polarized light the object fields will be filled:
extinction_par, extinction_ort, absorbtion_par, absorbtion_ort, scattering_par, scattering_ort.While for orientationaveraged calculation just:
extinction, absorbtion and scattering.
[Khlebtsov2013] 

[Mackowski2011] 
