SPlaC v1.01
SERS and Plasmonics Codes package for Matlab
Contact: eric.leru@vuw.ac.nz
Website: http://www.victoria.ac.nz/raman/book/codes.aspx
Contents
%%%%%%%%%
1. License and referencing
2. Description
3. Installation
4. Disclaimer
5. Feedback
6. Getting started
7. Changes to version 1.01
%%%%%%%%%%%%%
1. License
%%%%%%%%%%%%%
Copyright 2008 Eric Le Ru and Pablo Etchegoin.
This package, including all its files and content are under the
following copyright: 2008 Eric Le Ru and Pablo Etchegoin.
The package may be used freely for research, teaching,
or personal use. The unmodified complete package
(including the README files) may be re-distributed
and freely exchanged for pure research purposes, but cannot
be commercialized or used for commercial/government purposes.
If research results obtained using the package are published
in the scientific literature (or in any other form), the package
should be appropriately referenced through its link to the book:
E. C. Le Ru and P. G. Etchegoin, Principles of Surface-Enhanced
Raman Spectroscopy and Related Plasmonic Effects
(Elsevier, Amsterdam, 2009).
%%%%%%%%%%%%%%%%
2. Description
%%%%%%%%%%%%%%%%
This package contains a suite of Matlab codes to carry out various EM
calculations relevant to SERS and plasmonics. Most of the underlying theory
and relevant formulae are described in the aforementioned book (see
license above).
The relevant equations and sections from the book are referenced when possible
in the "inline comments" to the codes. However, the codes can also be used
independently of the book (most of the theory can also be found in standard EM
textbooks).
This package includes:
- 30 self-running MatLab codes (functions)
to reproduce most of the "theoretical" figures of the book
(in directory "BookFigures").
- Analytical expressions for the optical properties of silver (Ag)
and gold (Au) in the visible/NIR region
(in directory "General").
- Codes to evaluate reflection/refraction at multilayer planar interfaces
(in directory "Plane").
These include local-field calculations and example scripts for Surface Plasmon
Resonances (SPRs) in the Otto and Kretsmann configurations.
- Ellipsoids in the electrostatics approximation
(in directory "Ellipsoids").
These include local-field calculations
relevant to SERS (average and maximum enhancement factors) for prolate
and oblate spheroids, and for general ellipsoids.
- Mie theory codes for plane wave excitation
(in directory "Mie/PWE").
These include radiation profile and
local field calculations along with plotting tools for visualization.
- Extension of Mie theory to dipolar emission
(in directory "Mie/DIP").
These include radiation profile and radiative and
non-radiative enhancements calculations,
along with plotting tools for visualization.
- Extension of Mie theory to spherical multilayers (e.g. coated sphere)
(in directory "Mie/MUL").
These codes reuse many of the codes in "Mie/PWE" and "Mie/DIP".
- Scripts to obtain useful symbolic expressions related to Mie theory
(in directory "Mie/SYM").
The Matlab "symbolic toolbox" is necessary to run these.
%%%%%%%%%%%%%%%%%
3. Installation
%%%%%%%%%%%%%%%%%
- Unzip the SPlaC.zip file, keeping the subdirectory structure for
clarity.
- Then set your Matlab current directory to 'SPlaC' and
run the "InitPath.m" function once in Matlab to add all the SPlaC
subdirectories to your Matlab path. All the SPlaC functions and scripts
are then accessible from the command line. This allows all codes
to run and communicate with each other irrespective of the current directory.
Note that you must run "InitPath.m" each time you restart Matlab.
To avoid this step, you may add all SPlaC folders to your Matlab path
permanently or edit the startup.m file to do that (check Matlab
help for details).
%%%%%%%%%%%%%%%
4. Disclaimer
%%%%%%%%%%%%%%%
These codes have been developed and tested with Matlab 7.5.0 (R2007b)
on a PC running Microsoft Windows XP Pro SP2.
Slight changes may be necessary to run them on older (or newer!) version
of Matlab.
Although every efforts have been made to get rid of bugs (programming
bugs, or even incorrect physical formulae), some may (must, we could say)
still be present. We hope the users will help us identify them and we
will try to update the codes when necessary.
Note also in this context that these codes do not implement a strict
error checking of the user inputs, i.e. following the famous English
proverb "garbage in, garbage out" (also known as "GIGO" in computer
science), if the parameters are incorrect during a function call,
errors will occur.
The authors do not accept any responsibility for improper use of the
codes, accidental errors that might still be present in them, or
improper interpretation of their limitations and/or results derived
therefrom. It is the responsibility of the user to check the validity
of the inputs/outputs, their physical interpretation, and their
suitability for his/her specific problem.
%%%%%%%%%%%%%%%
5. Feedback
%%%%%%%%%%%%%%%
We would like to hear from the users of these codes to improve them.
This includes simple issues of layouts and organization
of the information or plain errors.
Please feel free to send us any feedback (good or bad), bug reports,
questions, comments, or suggestions to:
eric.leru@vuw.ac.nz
%%%%%%%%%%%%%%%%%%%%
6. Getting started
%%%%%%%%%%%%%%%%%%%%
The easiest way (perhaps) to start realizing the extent of the codes,
and what can be done with them, is to try to reproduce the figures from
the book in the directory "BookFigures". From this latter directory,
each individual m-file (a MatLab function) reproduces a specific
figure shown in the book and its accompanying calculations.
The reason for trying to gain familiarity with the codes by reproducing
figures is twofold. First of all, the codes run by themselves and,
therefore, the inexperienced user is spared the work of having to
decide which parameters he/she needs to start the calculation. In
addition, the figures and the results can (and should) be used in
conjunction with the book itself. In that manner, a lengthy explanation
of the physical meaning of the calculation (which would be impossible
to include in the code itself) is readily available. Moreover, the reader
can also adapt the figure to his/her specific needs, or "play with the
parameters" to get a deeper understanding.
Once the is user familiar with the meaning of the calculation,
the codes producing the figures can be inspected.
The most important programming lines are accompanied by a suitable comment
or remark. We believe any user with a minimum of experience in MatLab
can easily follow the logic of the calculation. The main exception
to this are the lines of code used for plotting and visualization, which
are not explained in as much detail, but can be understood using the
Matlab help.
For example, the MatLab script “MakeFig6_11.m”, to reproduce Figure 11
of Chapter 6, contains under close inspection a call to the routine:
“PweSolveSingleSphere”, which solves the Mie scattering problem for a
single sphere. This code therefore provides a hands-on example of how
to call this routine.
In this way, a potential user can learn without much effort and through examples
how the different routines can be pieced together to produce a specific
outcome. This can then be potentially be used for different needs or
applications beyond the ones shown in the book.
In the case of the codes for Mie theory, two functions, "tt PweFullMonty" and
"DipFullMonty" are also provided
to give an illustration of the possibilities of the codes by producing
a number of representative figures. These are a good starting point to
browse and understand the codes. These can be called simply by running the scripts
"PweFullMonty" for Mie theory for plane wave excitation, and
"DipFullMonty" for Mie theory for dipole emission.
Finally, the codes can be browsed in HTML format in the SPlaC online
help. Thanks to the cross-linking of all functions and scripts, this
provides a relatively easy and efficient way to navigate the codes.
The SPlaC online help can be found at:
http://www.victoria.ac.nz/raman/book/Codes/helpstart.html
from where it can also be downloaded as a zip file for local browsing.
%%%%%%%%%%%%%%%%%%%%%%%%%%%
7. Changes to version 1.01
%%%%%%%%%%%%%%%%%%%%%%%%%%%
Below is a summary of the changes made from v1.0 to v1.01
Note that the help files were not updated.
1/ In PwePlotThetaDep:
Legend is incorrect.
Replaced sLegend{2*ll-1} and sLegend{2*ll} by
sLegend{ll} and sLegend{ll+length(lambda0)}
It now reads:
% prepare legend for figure
sLegend{ll}=['F_{E4}^0(\theta,\phi=0) - \lambda=' num2str(lambda(indLambda(ll)))];
sLegend{ll+length(lambda0)}=['F_{E4}^0(\theta,\phi=90^\circ) - \lambda=' num2str(lambda(indLambda(ll)))];
2/ In EllEMproperties:
Added the computations of Qext, and Qsca in the ES approximation for the ellipsoid.
3/ In MakeFig6_18:
Updated calls to EllEMproperties to account for change above
In comments, changed [1 x H] by [H x 1] (error)
4/ Since the 2013 Matlab release, the use of besselj, bessely, or besselh has been changed,
which results in an error. All instances have therefore been replaced with the new syntax:
[numat, rhomat] = meshgrid(nu,rho);
f=besselj(numat, rhomat);
in GenZnAll, GenRBall, GenRBpsi2, GenRBxi2.
At the same time, bsxfun was used in place of repmat to speed up computations.
5/ The syntax of taylor has also changed and this was updated in
SymScriptSphBessel and SymScrriptZnAll