  RooFit is a toolkit for statistical modeling and fitting used by most
experiments in particle physics. Just as data sets from next-generation
experiments grow, processing requirements for physics analysis become more
computationally demanding, necessitating performance optimizations for RooFit.
One possibility to speed-up minimization and add stability is the use of
Automatic Differentiation (AD). Unlike for numerical differentiation, the
computation cost scales linearly with the number of parameters, making AD
particularly appealing for statistical models with many parameters. In this
paper, we report on one possible way to implement AD in RooFit. Our approach is
to add a facility to generate C++ code for a full RooFit model automatically.
Unlike the original RooFit model, this generated code is free of virtual
function calls and other RooFit-specific overhead. In particular, this code is
then used to produce the gradient automatically with Clad. Clad is a source
transformation AD tool implemented as a plugin to the clang compiler, which
automatically generates the derivative code for input C++ functions. We show
results demonstrating the improvements observed when applying this code
generation strategy to HistFactory and other commonly used RooFit models.
HistFactory is the subcomponent of RooFit that implements binned likelihood
models with probability densities based on histogram templates. These models
frequently have a very large number of free parameters and are thus an
interesting first target for AD support in RooFit.
