Software

I build and maintain open-source Python tools for computational and cognitive neuroscience. Two of them sit at the heart of most of my research: braincoder, for neural encoding and decoding models, and bauer, for Bayesian cognitive models of choice.

Two Gaussian population receptive field tuning curves over a stimulus feature axis

braincoder

braincoder fits encoding models to neural data (for now, fMRI) and then inverts those models to decode stimulus information back out of the brain. By inverting an encoding model, we can track, from moment to moment, which information the brain has access to and with how much uncertainty.

It wraps stimulus handling, model definition, HRF convolution, and optimization into a single Keras 3-based toolkit. You can pick a ready-made model (Gaussian population receptive field, HRF-aware, linear) or write your own, and run the same code on TensorFlow, JAX, or PyTorch. It powers the encoding-model work across my numerical-cognition and value projects.

Source · Documentation & tutorials

Drift-diffusion model fit: psychometric choice curve and reaction times by difficulty

bauer

bauer (Bayesian Estimation of Perceptual, Numerical and Risky choice) is a PyMC-based library for fitting hierarchical Bayesian cognitive models to behavioural decision-making data. It covers three task families (psychometric, magnitude comparison, and risky choice), built on a shared Bayesian-observer front-end, with each participant getting their own parameters regularised by a group-level distribution.

bauer now reaches beyond modelling choices alone. On top of the same cognitive front-end it offers sequential-sampling likelihoods, the drift-diffusion model (DDM) and the race-diffusion model (RDM), so a model is informed by reaction times as well as the choices people make. A single model can then speak to both what people choose and how long they take to decide, helping to separate, for example, perceptual acuity from response caution.

Source · Documentation & tutorials

Other packages I maintain

  • nideconv: deconvolve (neural) time series
  • pymp2rage: compute T1 maps and T1UNI images for the MP2RAGE sequence

I also contribute to BIDS, nilearn, pycortex, niworkflows, and nipype.