Using different matrix elements and showers

We now want to modify some hard matrix elements and related options. There may also be a slightly different work flow if you start doing this. To see where this is done, we start with another simple example:

Higgs production from gluon fusion

We have to go back to the input file LHC-Matchbox.in. Have a good look at the file. It is already structured in a way that guides through the choices you have to make for the hard process. After a general section, in which the beam parameters are defined and which we leave at their defaults at this point, there is a section on process selection. For this process we still provide a built-in leading-order (LO) and next-to-leading-order (NLO) matrix element, so we only have to modify this bit.

We have to alter the three command lines therein to

set Factory:OrderInAlphaS 2
set Factory:OrderInAlphaEW 1

do Factory:Process p p -> h0

Clearly, the last line selects the process. Note that the number of built-in processes is limited, but we do the same thing when we pull in external matrix element providers.

The orders of the couplings must be like this if you think of the subprocess in terms of the involved top quark triangle. Even if we use an effective theory for the ggh coupling, the orders of the coupling constants remain unchanged.

Also, note that for the subprocess only the couplings of the LO process must be given. The additional couplings of the NLO corrections are taken into account automatically.

In order of this to work we also need to change the scale for the process as the default choice used for Drell-Yan, i.e. the mass of the lepton pair won’t work for this process. You can change the line

set Factory:ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/LeptonPairMassScale

in the input file to

set Factory:ScaleChoice /Herwig/MatrixElements/Matchbox/Scales/FixedScale
set /Herwig/MatrixElements/Matchbox/Scales/FixedScale:FixedScale 125.7

to use a fixed scale rather than the lepton-pair mass. More information on the different scale choices can be found in the Section on scales.

In addition as we have an external Higgs boson which can only be handled as an on-shell particle we must set the width of the Higgs boson used in calculating the hard process to zero, which can be achieved by uncommenting the line

#read Matchbox/OnShellEWProduction.in

in the input file which also zeros the width of the W and Z bosons. In some cases you may wish to only do this for the Higgs boson, for example if you are simulating production of the Higgs boson in association with a W or Z boson. You can zero the width of the Higgs boson used in the matrix element calculation by adding

set /Herwig/Particles/h0:HardProcessWidth 0.*GeV

to the input file.

A different work flow

We can now split up the work flow a little bit, as it will be more useful once we consider more complicated processes. We can separate the build of the matrix element and the integration. For more complicated processes, both steps can take some time and perhaps require a few iterations. The integration can even be parallelized, which is very useful for complicated processes.

Build step

Instead of the single read step we have made previously, we now start with

[example] $ Herwig build LHC-Matchbox.in

which will build the matrix elements, create diagrams and prepare sampling. And a .run file is created. All steps are very straightforward for our example process.

Integration step

Next we integrate the matrix element with

[example] $ Herwig integrate LHC-Matchbox.run

This may take a while (not in the ggH example, though). This step creates a file HerwigGrids.xml that contains information about the phase space after the integration. This will be used for more efficient sampling during the event generation.

Now, we can generate a few events, as before with

[example] $ Herwig run LHC-Matchbox.run -N 100

It’s probably convenient to leave the MPIHandler and hadronization switched off for the moment, see the More runs, switching things on and off section as a reminder.

LO or NLO calculation

In order to get some understanding of the impact of the NLO calculation it might be useful to also look at the leading-order only result and see what kind of radiation is produced by the parton shower alone. This can be done a bit further down in the input file. There you can comment out the line

# read Matchbox/MCatNLO-DefaultShower.in

and uncomment the following line

read Matchbox/MCatLO-DefaultShower.in

in order to switch off the real and virtual parts of the NLO calculation.

Run a few events at LO and NLO and look at the .log and .out files. You should see that at LO only a small subset of processes has been used. You can also compare the resulting LO and NLO cross sections.

Matching with Dipole shower

The matching of LO/NLO computations and parton showers not only works for the default parton shower (the “q-tilde-shower”) but also for the Catani-Seymour dipole shower. To achieve this, we switch off the default shower by commenting out all the following lines

#read Matchbox/MCatNLO-DefaultShower.in
# read Matchbox/Powheg-DefaultShower.in
## use for strict LO/NLO comparisons
# read Matchbox/MCatLO-DefaultShower.in
## use for improved LO showering
# read Matchbox/LO-DefaultShower.in

We switch on the dipole shower and its subtractive matching by uncommenting one of the corresponding lines below - depending on our choice of the order of perturbation theory (LO or NLO) and the matching (MCatNLO or Powheg).

# read Matchbox/MCatNLO-DipoleShower.in
# read Matchbox/Powheg-DipoleShower.in
## use for strict LO/NLO comparisons
# read Matchbox/MCatLO-DipoleShower.in
## use for improved LO showering
# read Matchbox/LO-DipoleShower.in

Fixed-order calculation

Besides using a parton shower and matching, we can of course choose only a fixed-order calculation to calculate the cross section of the selected process and to generate parton-level events. For this purpose, we comment out all lines corresponding to the DefaultShower or the DipoleShower

#read Matchbox/MCatNLO-DefaultShower.in
# read Matchbox/Powheg-DefaultShower.in
## use for strict LO/NLO comparisons
# read Matchbox/MCatLO-DefaultShower.in
## use for improved LO showering
# read Matchbox/LO-DefaultShower.in

# read Matchbox/MCatNLO-DipoleShower.in
# read Matchbox/Powheg-DipoleShower.in
## use for strict LO/NLO comparisons
# read Matchbox/MCatLO-DipoleShower.in
## use for improved LO showering
# read Matchbox/LO-DipoleShower.in

and activate either the NLO Matchbox/NLO-NoShower.in or the LO Matchbox/LO-NoShower.in snippet:

# read Matchbox/NLO-NoShower.in
# read Matchbox/LO-NoShower.in

Some scale variations

Further below in LHC-Matchbox.in you find a section on scale variations. Some scale choices that have to be made for the simulation can be tested. Normally, the results should not depend “too much” on the choice of these scales. Therefore, the sensitivity of results to these scales is a good indication for higher orders that have not yet been accounted for in the simulation.

Try to vary some of the scales by activating either the MuDown (variation by a factor of 1/2) or the MuUp (variation by a factor of 2) snippet.

# read Matchbox/MuDown.in
# read Matchbox/MuUp.in

Note: These variations affect only the hard subprocess.

If you want to use scale variations for the parton shower apply one of the following two additional snippets at a time.

# read Matchbox/MuQDown.in
# read Matchbox/MuQUp.in

You can check whether one of the aforementioned scale variations has some effect on your final state distributions, if you make use of e.g. a RIVET analysis within your simulation.

A slightly more complicated process

Now let us consider a matrix element that is provided by an external program. Let us first choose Z+jet production, as here we also have the possibility to compare to our internal matrix element, if desired. We first change the subprocess as we have seen above

set Factory:OrderInAlphaS 1
set Factory:OrderInAlphaEW 1

do Factory:Process p p -> Z0 j

Now, that we consider an additional jet we also have to worry about the cuts on the hard subprocess. For a cross process with a final jet we have to impose a jet cut, otherwise we are running into divergent regions of phase space. In the cuts section of the LHC-Matchbox.in input file you can uncomment the appropriate lines to demand a single jet, such that they look like this

## cuts on additional jets
read Matchbox/DefaultPPJets.in
insert JetCuts:JetRegions 0 FirstJet
# insert JetCuts:JetRegions 1 SecondJet

More information on the cuts which can be applied can be found in the section on cuts.

For the purpose of the tutorial it might be easier to only do a very crude integration until you want to do a serious production run and invest more time in the integration part. You can adjust some parameters of the sampler by stating in your LHC-Matchbox.in file:

# crude read step
set /Herwig/Samplers/CellGridSampler:InitialPoints 1000
set /Herwig/Samplers/CellGridSampler:ExplorationPoints 500
set /Herwig/Samplers/CellGridSampler:ExplorationSteps 1
set /Herwig/Samplers/CellGridSampler:RemapperPoints 500

You will find that the cross section estimates that are written during run time have much larger errors in this way. For physical results it is crucial to set these parameters back to more accurate levels, e.g. the default values. Maybe you even run into trouble with the phase space integration. In this case you have to increase all the parameters a bit in order to get a slightly more stable phase space.

Make a quick check of this run setup. Before you continue, it is advisable to delete the sub-directory ./Herwig-scratch of your working directory before you continue. This contains information specific to the process that has been simulated.