Parton Distributions

The parton distributions file contains the PDF class (an abbreviation hopefully so well accepted that it is used in many places of the code, instead of writing it out in full). PDF is the base class, from which specific PDF classes are derived.

The choice of which PDF to use is made by a switch in the Pythia class, see here. Thus there is no need for a normal user to study this class. The structure must be understood when interfacing new PDF's, however.

The PDF base class

PDF defines the interface that all PDF classes should respect. The constructor requires the incoming beam species to be given: even if used for a proton PDF, one needs to know whether the beam is actually an antiproton. This is one of the reasons why Pythia always defines two PDF objects in an event, one for each beam.

Once a PDF object has been constructed, call it pdf, the main method is pdf.xf( id, x, Q2), which returns x*f_id(x, Q2), properly taking into account whether the beam is an antiparticle or not.

Whenever the xf member is called with a new flavour, x or Q^2, the xfUpdate member is called to do the actual updating. This routine may either update that particular flavour or all flavours at this (x, Q^2) point. (In the latter case the saved id value idSav should be set to 9.) The choice is to be made by the producer of a given set, based on what he/she deems most effective, given that sometimes only one flavour need be evaluated, and about equally often all flavours are needed at the same x and Q^2. Anyway, the latest value is always kept in memory. This is the other reason why Pythia has one separate PDF object for each beam, so that values at different x can be kept in memory.

Derived classes

There is only one pure virtual method, xfUpdate, that therefore must be implemented in any derived class. Currently the list of such classes is tiny:

For protons:

The default is CTEQ 5L, which is the most recent of the two.

For charged leptons (e, mu, tau):