My caption 😄

Electromagnetic Software

Over the course of my academic career, I have mostly used the statistical programming language R for the analysis of my data and exploration of theory. I have developed several R packages in that time for various useful optics calculations and for data-processing.


The mlfilms package uses the transfer matrix method to calculate the reflection and transmission of plane polarised light from an arbitary stack of thin films.

It is the most complete R package I have created, with documentation and examples.

Documentation Github


The thor2 package provides the optical response of various thorlab components for use in R.



Package for producting colourplots/heatmap plots of linearly-spaced data with arbitrary non-linear coordinate transformations.

Developed by necessity to be able to transform wavelength $(\lambda)$ and angle $(\theta)$ data to non-linearly spaced colourplots of frequency $(1/\lambda)$ and momentum $(\propto (1/\lambda) \sin{\theta})$, but also works for any linearly-spaced to nonlinear-spaced data. For example the Cartesian to polar colourplot transformation $f(x,y) \rightarrow f(r, \theta)$.



rindex allows you to browse refractive index data from directly in R, and to directly use the datasets or interpolated refractive index functions for a wide range of materials.



An example script showing how to implement a simple Finite Difference Time Domain calculation in R.



An R implementation to calculate Surface Plasmon Polariton dispersion in Graphene, including interactions with substrate phonons.


photonMonkey / ultrafastMonkey

Miscellaneous convenience functions for use in optics.

Github (photonMonkey) Github (ultrafastMonkey)