nCTEQ++

nCTEQ++ is the name given to the C++ based PDF fitting code used by the nCTEQ Collaboration, of which I am a part of. I contributed heavily to the writing, validation, and testing of this code and it provided the backbone for my Ph.D. analysis. The code base itself is private but I will provide an overview of the structure and some significant features.

 
 
Schematic of the structure of nCTEQ++

Schematic of the structure of nCTEQ++

Structure

nCTEQ++ is designed with a modular structure. The red modules represent user-defined modules where inputs can be tuned to specific analyses. The blue modules represent the core of the fitting code. In the core, theory modules send predictions to the χ2 module, the χ2 function is then minimized by the minimizer module (currently this is is an interface to the Minuit minimizer from ROOT), and the resulting minimum is passed back to the theory modules. This cycle continues until a true minimum is reached and the χ2 cannot be further reduced. At this point, the results are passed to an outputer module containing both preset and user-defined specifications.


Interface with APPlGrid interface

One of the important improvements I pioneered for nCTEQ++ was the ability to use theory predictions in the form of APPLgrid pre-calculated grid files to allow for the inclusion of data from the Large Hadron Collider in an nCTEQ fit for the first time!

LHC data included in an nCTEQ fit for the first time ever.

LHC data included in an nCTEQ fit for the first time ever.

These grid files are produced using the MCFM event generation code using proton-proton events but through the use of some utilities in APPLgrid and access to the ManeFrame computing cluster at SMU, I was able to render grids that were independent of the underlying PDFs used in their generation. This allows the grids to be used in calculations with any PDFs, most significantly for proton-lead collisions at the LHC.

Additionally, this technique of using APPLgrid files to provide theory predictions reduced the time it takes to add a new type of data into a global fit from several months to a matter of days.

This work earned me my Ph.D. and will the subject of a future publication.


The output from nCTEQ++ fits is designed to be plotted with Python. A sample plotting script can be found here.

The output from nCTEQ++ fits is designed to be plotted with Python. A sample plotting script can be found here.

Plotting Outputs

Once a fit in nCTEQ++ is completed, the output results are dumped to a file. I then wrote a series of plotting utilities to perform the analysis of these results.

This includes plots like the one to the right, which shows the χ2 per degree of freedom for each data set in this particular fit, as well as visualizing the PDFs themselves among many other things. Examples of some of these plots can be found here and a sample plotting script can be found on my GitHub page.