professor is hosted by Hepforge, IPPP Durham


Professor is a tuning tool for Monte Carlo event generators, based on the ideas described in "Tuning and Test of Fragmentation Models Based on Identified Particles and Precision Event Shape Data" (Z. Phys., C73 (1996) 11-60).

Fundamentally, the idea of Professor is to reduce the exponentially expensive process of brute-force tuning to a scaling closer to a power law in the number of parameters, while allowing for massive parallelisation and systematically improving the scan results by use of a deterministic parameterisation of the generator's response to changes in the steering parameters.

The approach is not limited to MC tuning: any situation which can benefit from fast parameterisation of histogram values can use Professor! To underlines this, here are a few other papers utilising Professor for various problems: EFT Higgs fits #1, #2, #3, a top-quark EFT fit, a cosmic-ray fit, and determination of σeff.

This is our paper from 2009, please cite when using the system in your work: Professor paper

2023-12-09: Professor release 2.4.2

2023-06-27: Professor release 2.4.1

2023-04-18: Professor release 2.4.0

This first "major" update of Professor in several years fixes some runtime issues, and in particular updates to use the new (and compatibility-breaking) iMinuit2 API, and Python3. The packaging and installation has been updated to use pip, as distutils has been deprecated/discontinued. Uncertainty parametrisation is now set to "median" mode by default, to avoid fit instabilities. All other behavioural features remain the same as before.

2022-11-02: Professor release 2.3.4

2020-10-28: Professor release 2.3.3

2019-09-06: Professor release 2.3.2

2019-06-13: Professor release 2.3.1

2018-10-10: Professor release 2.3.0

Bug fixes plus new interface elements for C++/Python programmability.

2017-11-10: Professor release 2.2.2

We are very pleased to release Professor 2.2.2.

This release brings a number of useful and partially experimental features. Amongst them are the ability to use more than one set parameterisations. Think of large parameter spaces where the polynomial approximation may not neccesssarily be justified. Partitioning the parameterspace into smaller patches of valid polynomials helps greatly especially in cases where you are interested in a good approximation of the total parameter space and not just the minimum of a chi2. One application is multinest --- this release comes with prof2-tune-nest which uses Johannes Buchner's excellent pymultinest (, wrapper of MultiNest (Copyright Farhan Feroz and Mike Hobson). Superplot ( conveniently plots profile likelihoods and posterior PDFs of the tuning problem at hand, e.g.:

We overhauled the parameter sampling to allow for more sophisticated sampling methods i.e. sobol and latin hypercube sampling.

prof2-tune now allows to optionally produce profiles and contours through MIGRAD and MINOS:

Eigentunes have made their way back into the package due to renewed interest. The procedure is based on a principal axis transformation of the covariance matrix. At the moment the one calculated by minuit is used but other methods are of course easy to implement. The deltaChi2 needs to be provided manually. We are still working on a statistically sound method of obtaining the latter through bootstrapping.

Another extension is the usage of emcee, an MCMC sampler that allows to produce profile plots of the likelihood (-0.5*Chi2):

Download source code

This is a docker image build on top of rivet 2.5.4:

docker pull hepstore/professor:2.2.2

2017-02-02: Professor release 2.2.1

We are very pleased to release Professor 2.2.1.

This release comes with a more forgiving and therefore more stable usage of prof2-ipol. Instead of a hard exit when encountering nan coefficients (symptom of very low statistics in input histograms) those histograms are simply ignored. Further, the matplotlib backend now defaults to Agg allowing for plot output in the absence of X11.

Download source code

docker pull iamholger/professor:2.2.1

2016-12-20: Professor release 2.2.0

We are very pleased to release Professor 2.2.0.

Download source code

The parametrisation building has been improved significantly allowing the calculation of polynomials in high dimensional parameter spaces, e.g. 20 dimensions in seconds rather than hours.

We added a few more scripts to contrib, such as prof2-sobol (requires pygsl) which is an alternative to prof2-sample that uses the SOBOL algorithm for pseudo random number generation. The support vector machine parameters habe been tuned to give better resolutions when using the machine learning scipts prof2-ml-* (requires scipy and scikit-learn).

We have dockerised this version of professor with all depdendcies included.

docker pull iamholger/professor:2.2

docker pull iamholger/professorml:2.2 (with scikit-learn for machine learning bits)

Using professor2 with docker

The source code package also contains a few jupyter notebooks that demonstrate the usage of some of the machinery.

You can also try them out on Binder. Check Binder status here

Get Professor 2.1.4!
Released 2016-07-14. See ChangeLog

Professor 2 bootstrap script

Fully configured docker container with all dependencies:
docker pull iamholger/professor

or Professor 1.4.0, released 2014-12-12

Professor has been successfully used to produce most of the established "tunings" of the general purpose MC event generators heavily used in high-energy physics. This approach to numerically automated tuning began with the first Professor paper which created new optimal tunings of the Pythia 6 event generator to a wide range of data from LEP, JADE, and the Tevatron.

Since then, Professor has become the standard method for MC generator developers and HEP experimentalists to tune MC models. These tunes help to challenge theoretical models of QCD as implemented in generators, and to understand QCD backgrounds to new experiments, particularly at the LHC.

Professor is written in C++ and Python as a set of command line programs and underlying C++ and Python libraries. The core numerical machinery is provided in fast C++, using the Eigen3 linear algebra package, and high-level functionality is built on top of this in Python, via the Cython, numpy, scipy, and iminuit toolkits. The Rivet and YODA data analysis packages are required for most built-in functionality.

An overview is given in "Tools for event generator tuning and validation", as well as the Pythia 6 tuning paper linked above.


The Professor collaboration is:

  • Andy Buckley
  • Holger Schulz
Former members:
  • Hendrik Hoeth
  • Heiko Lacker
  • Jan Eike von Seggern
  • Daniel Weyh
  • Simone Amoroso
with grateful thanks also to the many generator authors and experts who have contributed (and continue to contribute) to generator tunes using the Professor system.

Professor 1.x

The current version of Professor is the 2.x series. However, this is a ground-up rewrite and does not yet have all the functionality of Professor 1.x. Both programmes can be installed at the same time and users may find some 1.x features useful.

For more information see the Wiki and documentation. We encourage you to contact us at we're keen to help you use the system, but a little hands-on advice goes a long way towards not getting junk results ;-)