Mathis Dubau

Mathis Dubau · Projects & path

Projects

From a Bachelor's degree in Bordeaux to the ATLAS experiment, the software behind the thesis, and physics simulations from my studies.

Path

2023 – 2026

Doctorate at LAPP, Annecy

ATLAS · Université Savoie Mont Blanc

Polarisation in VBS WZ, forward electrons for Run-4 in the e/γ\mathrm{e}/\gamma Combined Performance group, and active learning for BSM scans with LAPTh. My research →

Mar – Jul 2023

Master's internship (M2), LAPP

Supervisor: Olivier Arnaez

Coverage extension studies for future polarisation measurements in WZ events in the electroweak sector: preliminary studies for the thesis on the potential gain in sensitivity from the extension of the tracker coverage of ATLAS for the HL-LHC.

May – Jun 2022

Master's internship (M1), IP2I Lyon

Supervisors: Nazila Mahmoudi and Mohamed Amine Boussejra

Application of Machine Learning to the sampling of high-dimensional supersymmetric parameter spaces: an active-learning method with DNN to scan efficiently the reduced phase spaces of the MSSM (pMSSM, NMFV). The method → · Redone as a project →

May – Jun 2021

Bachelor's internship (L3), CENBG Bordeaux

Supervisor: Cécile Jollet

Determination of the probability of two- and three-flavour neutrino oscillations. Redone as a project →

2018 – 2023

Bachelor's in Bordeaux, Master's in Lyon

Université de Bordeaux · Université Claude Bernard Lyon 1, subatomic path

Including C++, parallel computing, data science, and practicals with Geant4 and ROOT.

Research software

The code behind the thesis. The repositories are private (ATLAS data and internal tools); the methods are public in the thesis.

VBS-WZ-DNN

Deep neural networks (Keras / TensorFlow) for the VBS WZjj analysis: a four-class signal-versus-background network and three polarisation networks. The repository covers the full chain: hyperparameter optimisation, k-fold training, plots and comparisons, the 2D templates binned with Voronoi regions, and the export of the trained networks to C++ and Fortran.

The method →

VBS-WZ-fit

The statistical analysis. No fit configuration is edited by hand: TRExFitter configurations are generated from modular Python blocks (samples, normalisation factors, systematics), run, and post-processed into plots and LaTeX tables, for each polarisation measurement, run period (Run-2, Run-3, combined) and blinding state.

The fit →

Forward-electron calibration and identification

DNN calibration and identification of forward electrons for the HL-LHC, one network per |η||\eta| bin, converted to JSON and validated inside Athena, the ATLAS software.

The method →

Is the network using all the information?

A standalone framework that answers, in bits, how much of the information the input variables carry about the label the analysis network actually extracts. Information theory gives the zero point a ROC curve lacks: for any model qq scored on unseen events, I(X;Y)≥H(Y)−CE(q)I(X;Y) \geq H(Y) - \mathrm{CE}(q), so a cross-entropy is a certified lower bound on mutual information.

Every thesis figure, reproducible

The 290 script-made figures of the thesis, in its own style and at the size it includes them, each with the numbers it is drawn from, so that any figure can be redrawn and restyled on a laptop, without the grid storage or the analysis software.

The thesis schemes

109 schemes drawn in TikZ, from detectors to Feynman diagrams and a Standard Model in Lego bricks, with a standalone preview and a check that they stay identical to the thesis's copies.

The scheme bank →

Writing tools for the thesis

A lint that turns the writing conventions into searches, so that a class of defect is found exhaustively instead of being sampled by a reader, and change-tracking tools (latexdiff modes, changed tables and figures) for the reviewers.

Slides from the thesis

A Beamer template, and a defence talk whose figures and numbers are derived from the thesis sources rather than retyped, so the two cannot disagree.

Teaching material

Introduction to Python

The Jupyter notebooks of the introduction to Python I taught at Université Savoie Mont Blanc.

Interactive data display

A Dash and Plotly web app to explore ROOT ntuples interactively, packaged in a container and deployed with Kubernetes.

Physics simulations

Exercises and practicals from my Bachelor's and Master's degrees, rewritten in Python or C++ so that each one is validated against a known result. All figures follow the style of the thesis. Code on GitHub.

The hydrogen atom

From L1–L2 exercises, Python

The radial Schrödinger equation solved with finite differences as a tridiagonal eigenvalue problem: the levels depend on nn only, as the Coulomb potential predicts, and match Bohr's En=−13.6eVn2E_n = -\frac{13.6\,\mathrm{eV}}{n^2} within 0.6meV0.6\,\mathrm{meV}. The s, p and d orbitals are drawn from the exact wave functions, whose radial parts agree with the numerical ones.

Hydrogen orbitals 1s to 3d in the xz plane, sign of the wave function in colour
Orbitals in the xzxz plane: sign of ψ\psi in colour.
Computed s, p and d levels on the Bohr energies
The s, p and d levels fall on the Bohr energies: they depend on nn only.

The H₂ molecule: bond and vibrations

From L2–L3 exercises, Python

The bond of H2+\mathrm{H}_2^+ with LCAO orbitals (bonding σg\sigma_g, antibonding σu\sigma_u), and the vibrational levels of H2\mathrm{H}_2 in a Morse potential: all 18 bound levels match the exact Morse spectrum within 0.21meV0.21\,\mathrm{meV}, and crowd together towards dissociation where the harmonic picture fails.

Bonding and antibonding orbitals of H2+
Bonding and antibonding orbitals.
Vibrational levels in the Morse potential, with the harmonic approximation
Vibrational levels in the Morse potential.

Quantum tunnelling of a wave packet

Personal project, Python

A Gaussian wave packet hits a square barrier. The 1D time-dependent Schrödinger equation is solved with the split-step Fourier method, which conserves the norm to machine precision, and the transmitted probability is checked against the exact plane-wave result averaged over the packet's momentum distribution: they agree within 4%4\,\% from EV0\frac{E}{V_0} = 0.1 to 1.5.

Animation of a Gaussian wave packet partly crossing and partly reflected by a square barrier
The packet splits on the barrier: part tunnels through, part is reflected.
Transmission probability against E over V0, simulation compared with the exact result
Transmission TT against EV0\frac{E}{V_0}: simulation and exact result.

The 2D Ising model

Bachelor's lab (L3), rewritten in Python

The ferromagnetic transition with the Metropolis algorithm on a 48×4848\times48 lattice, updated as a checkerboard with numpy. Below T=2.1T = 2.1 the magnetisation matches Onsager's exact solution to better than 0.01; near Tc=2.269T_c = 2.269 the finite lattice rounds the transition.

Spin configurations below, at and above the critical temperature
Spins below, at and above TcT_c.
Magnetisation, susceptibility and heat capacity against temperature
Magnetisation, susceptibility and heat capacity across the transition.

Molecular dynamics of liquid argon in C++

Master's project (M1), numerical modelling in C++

NN argon atoms in a periodic box interacting through a Lennard-Jones potential, with four integrators to compare (Euler, Verlet, leapfrog, Runge–Kutta 4), a thermostat and simulated annealing. Verlet keeps the total energy within 4×10−4%4\times10^{-4}\,\% over 10ps10\,\mathrm{ps}, the speeds follow Maxwell–Boltzmann, and g(r)g(r) shows the first-neighbour shell of a liquid at 3.7Å3.7\,\mathrm{Å}.

Histogram of atom speeds with the Maxwell-Boltzmann curve
Speeds against the Maxwell–Boltzmann distribution.
Radial distribution function of liquid argon
Radial distribution function g(r)g(r).

The solar system as an N-body problem

Personal project, Python

The Sun and the eight planets integrated with velocity Verlet over one orbit of Neptune, in astronomical units (G=4π2G = 4\pi^2). The periods follow Kepler's third law within 0.2%0.2\,\%, the gap being the planets' pull on each other, and the energy stays within 7×10−77\times10^{-7} over 170 years where explicit Euler loses 2%2\,\% in 10.

Orbits of the inner and outer planets
Inner planets (left) and the whole system (right).
Relative energy error over ten years, Euler against velocity Verlet
Energy error with the same step: Euler drifts, velocity Verlet stays bounded.

The nonlinear pendulum

From an L2 Python exercise

The pendulum without the small-angle approximation, integrated at a relative tolerance of 10−1110^{-11}: the period matches the elliptic-integral formula to six digits and diverges as the amplitude reaches 180°. The phase portrait separates oscillations from full rotations, and a damped trajectory crosses the separatrix.

Phase portrait of the pendulum with the separatrix and a damped trajectory
Phase portrait: separatrix in red, damped trajectory in blue.
Period against amplitude, simulation compared with the exact and Borda formulas
Period against amplitude.

The magnetic field of a solenoid

From an L2 Python exercise

The field of a finite solenoid everywhere in space, as a sum of 40 loops whose Biot–Savart field is written with elliptic integrals. On the axis it matches the current-sheet formula within 0.2%0.2\,\%; at the centre it is 7%7\,\% below the infinite-solenoid value, since a coil six radii long leaks field at its ends.

Field lines of a finite solenoid and the field on its axis
Field lines and the field on the axis.

Attenuation of gamma rays

Bachelor's lab (L3), nuclear physics

137Cs^{137}\mathrm{Cs} and 22Na^{22}\mathrm{Na} gammas through aluminium and copper plates, measured with a NaI scintillator. Beer–Lambert fits of the photopeak give attenuation coefficients within 6%6\,\% of the NIST XCOM values, falling with energy as Compton scattering takes over from the photoelectric effect.

ln(I/I0) against absorber thickness with linear fits
ln⁡(II0)\ln\left(\frac{I}{I_0}\right) against thickness, with the fits.

Machine learning to sample the pMSSM

From my M1 internship, Python and numpy

Most random points of the 19-parameter pMSSM give no physical spectrum: only 32%32\,\% pass SOFTSUSY. A neural network written in plain numpy (backpropagation by hand, Adam) learns which ones survive, with a ROC AUC of 0.90: keeping the best-scored half doubles the valid fraction and loses fewer than one valid point in ten. Of the valid points, 11%11\,\% have a lightest Higgs boson within 3GeV3\,\mathrm{GeV} of the measured 125.1GeV125.1\,\mathrm{GeV}.

Valid fraction of the points selected by the network score
Valid fraction of the points the network selects.
Histogram of the lightest Higgs mass of the valid points, with the measured 125.1 GeV
Lightest Higgs mass of the valid points, against the measured 125.1GeV125.1\,\mathrm{GeV}.

Finding GW150914 with a matched filter

Personal project, Python, LIGO open data

The first binary black-hole merger recovered from the public LIGO strain with numpy only: noise spectrum estimated from the data, whitening, and a matched filter over a bank of inspiral chirps. The network SNR peaks at 9.9, Livingston sees it 6.3ms6.3\,\mathrm{ms} before Hanford, and the best chirp mass, 32 M⊙M_\odot, is close to the catalogue's 31 M⊙M_\odot in the detector frame.

Whitened strain of Hanford and Livingston and the time-frequency map of the chirp
Whitened strain and the chirp in time and frequency.
Signal-to-noise ratio around the event and across the template bank
SNR around the event and across the template bank.

Neutrino oscillations

From my L3 internship, Python

Three-flavour oscillations from the PMNS matrix, checked against unitarity and the closed-form reactor survival to 10−1210^{-12}, up to the spectrum a reactor experiment like JUNO measures at 52.5km52.5\,\mathrm{km}: the fast wiggles shift between the normal and inverted mass orderings.

Reactor antineutrino spectrum at 52.5 km for both mass orderings
The reactor spectrum at 52.5km52.5\,\mathrm{km}, both orderings.
Electron antineutrino survival probability against distance
Survival against distance at 4MeV4\,\mathrm{MeV}.

2048 as a Python package

Personal project

The 2048 game as an installable Python package: a D2048 class for a board of any size, move prediction and end-of-game detection, tests with pytest, a jeu2048 command, and a documentation site.

GitHub · Docs

Personal projects

This website

Written in HTML and CSS, built by a small Python script: the equations are written in LaTeX and rendered in the thesis's math font, and the plots and schemes come from the thesis sources. The site is available in English and in French.

Triathlon training analytics

Five seasons of training rebuilt from the recordings, the method that organises them, and the plan towards an Ironman: PDFs and a static site produced from hand-editable text files, offline, with a single make. A small phone dashboard reads it.

Self-hosted home server in progress

Photos, files and the training dashboard served from home with Docker, reachable only through a VPN, with single sign-on, two-factor authentication and encrypted backups.

Reproducible workstation

One script rebuilds my Ubuntu laptop from scratch: packages, dotfiles, editor and shell setup, backups, and the colour palette and fonts used across all my documents.

Advent of Code

Programming puzzles each December, in Python.

Outreach

Since 2024, I am a CERN Guide and present the LHC and its experiments to visitors. I also took part in the Journée de la Science at LAPP and gave the lectures of an introduction to Python at Université Savoie Mont Blanc.