Most people are familiar with two common ways of calculating derivatives, symbolic differentiation and numerical approximation (e.g. finite differences). There is also a third method called “automatic differentiation” (AD). It is a way of calculating exact derivatives of computer code by decomposing it to a sequence of simple functions and applying the chain rule. AD is one of the key technologies which enabled the recent rise of deep learning, where it is known as “backpropagation”. It lies at the heart of hugely popular machine learning libraries such as PyTorch and Google’s Tensorflow. The main benefit of using AD in the context of physics and astronomy is that it enables the use of gradient based optimization methods and advanced sampling methods such as Hamiltonian Monte Carlo with complex high-dimensional models. In this talk Fran will explain how AD works and how you can start writing differentiable code.
Talks and presentations
Abstract: Classes and objects are powerful concepts that are supported by most major programming languages. They make it easier to make software modular (another powerful concept in software development), and to rethink algorithms in terms of high-level interacting components rather than low-level variables and operations. Mastering these concepts does however require some effort, and that means that object-oriented programming is not used as often in science as it could be. In this talk, I will give a very basic introduction to the concept of object-oriented programming, using a very simple example. I will focus on what classes and objects are, and why using them can improve the quality of your code. I will conclude my talk by showing object-oriented programming in action in my own code CMacIonize on the code documentation (web page; this page was automatically generated from the source code by a tool called doxygen).
Alexander konovalov gave a talk on the paper Ten Simple Rules for Reproducible Research in Jupyter Notebooks by Adam Rule et al., and his talk was be given using the very technology about which he spoke abut. The slides for this talk are contained in this Jupyter notebook, which will be launched on Binder from this GitHub repository. The Jupyter notebook will be translated into a reveal.js-based presentation using the Jupyter extension called RISE.
Do you worry about things like floating-point numbers in your code? Or are you like me and just bury your head in the sand and hope everything is okay? Should I just increase everything to double precision and hope that works?! Why does 0.1 + 0.2 = 0.30000000004 ?! This talk aims to cover the basics of what I think every computational physicist should know including floating-point numbers, random number generators, Monte Carlo method, finite difference method, and bounding hierarchy volumes.
An introduction to Docker
Modern applications have to run on a vast number of different systems, with different hardware (e.g. a phone vs an HPC system) and very different software versions (e.g. Windows XP vs Android Oreo). Making sure the software you want to use runs on the machine you want to use can hence be very difficult. Docker is a very popular software tool that helps to address this issue. It is the most well-known implementation of so-called container technology. This technology allows you to (a) run different isolated software environments on the same machine, and (b) create consistent and portable software environments that can be run on different machines. In this talk, I will give a very brief introduction to the concept of containers and why they are useful. I will then give an overview of the most important commands you need to set up your own containers using Docker. The talk will contain a short tutorial; those who want can have a look at the installation instructions for Docker on https://docs.docker.com/install/ and follow along.
Introduction to the rendering software Blender. Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline—modeling, rigging, animation, simulation, rendering, compositing and motion tracking, even video editing and game creation.
James gives an introduction and overview of the basics of Blender, along with some tips and tricks on how to best use Blender.
Workshop on debugging, and profiling techniques to help improve your code. Talk covers various basics of debugging, including various tools available to assist in debugging. As well as how to profile your code to help identify bottlenecks.
Computers, supercomputers and how to use them. Talk covers an intro to how computers actually work, and how to apply this knowledge to make your code more efficent/compatable with supercomputers.
Fitting a model to data. The talk covers fitting a line model to a few data points using maximum likelihood and Markov Chain Monte Carlo methods.
Data managment. Dr. Federica Fina from the universities’ Research data managment (RDM) team gives a talk on: St Andrews RDM policy, file naming, data storage among various other data managment topics.
Smoothed-particle hydrodynamics. Talk covers an intro to Smoothed-particle hydrodynamics (SPH), along with: a basic derivation of the main mathematical components of SPH, and various applications of SPH.
Image analysis and open problems in biophotonics. Talk covers Jonathan Nylk’s work within Kishan Dholakia’s group with particular focus on: deconvolution and princial component anaylsis (PCA).
Intorduction to version control software (Git). Talk introduces the basics of version control software. Including: brief introduction to “how it works”, how to install and configure Git, a mini-tutorial on the basic commands and workflow used by Git, and how to use remote repositories.
Machine learning in Biophotonics. Talk covers the basics of machine learning including: Convolutional neural networks for classification, Deep Learning, and training neural networks.
Machine learning in Astronomy. Talk covers the basics of machine learning including decision trees, random forests, and neural networks. Talk contextualises these with a case study in planet detection from a library of observations.
Workflows are a schematic representation of what you as a scientist need to do to convert raw input (simulation parameters, observational/experimental data) into the scientific products you are interested in (mostly plots and tables). They help you keep track of the dependencies between different steps in an analysis or simulation pipeline, and make it easier for other people to see what it is exactly that you do. Workflow managements systems (WMSs) help you to run workflows automatically. They read your workflow and then schedule it on the hardware you make available in an efficient and robust way, without requiring any manual intervention. This makes running your workflows much more efficient and means you have to spend less time on trivial computing tasks, which means you have more time to do interesting science. In this talk, I give a very basic introduction to the concept of scientific workflows using a real example from astrophysics. I start from a very simple workflow and then gradually increase its complexity to illustrate the usefulness of WMSs. I then show how to run this example workflow using the Makeflow WMS.
Talk on how Monte Carlo radiation transfer (MCRT) can be applied to modelling the propagation of photons through various tissues. Talk covers brief basic introduction to MCRT and how various different grids can be used to track various quantities with in the simulation.