source: HiSusy/trunk/Pythia8/pythia8170/xmldoc/AlpgenAndMLM.xml @ 1

Last change on this file since 1 was 1, checked in by zerwas, 11 years ago

first import of structure, PYTHIA8 and DELPHES

File size: 25.1 KB
Line 
1
2<chapter name="ALPGEN and MLM merging">
3
4<h2>ALPGEN and MLM merging</h2>
5
6This manual page describes the ALPGEN <ref>Man03</ref> and MLM merging
7<ref>Man02</ref> interfaces for PYTHIA 8. While future versions of
8ALPGEN will be able to write out events in LHEF format, previous
9versions always output events in an ALPGEN native format (a combination
10of a ".unw" and a "_unw.par" file). The ALPGEN component of this code
11contains a reader for this native format (for unweighted events), as
12well as parameter reading for both ALPGEN native and LHE file formats.
13Although designed to work together with the MLM component, they are
14implemented entirely separately and it is possible to use one without
15the other.
16
17<p/>
18It should be noted that all the functionality described here is provided
19through external routines, and therefore the presence of these features is
20dependent on the main program being used. This structure allows for the
21easy extensibility of the merging scheme. The files of interest are located
22in the <code>examples/</code> subdirectory:
23<ul>
24<li>
25<code>MLMhooks.h</code> : provides a
26<aloc href="UserHooks"><code>UserHooks</code></aloc> derived
27class for performing the MLM merging procedure. All <code>MLM:*</code>
28options, described below, are implemented in this file. Further
29technical details of this class are given at the end of this manual
30page.
31</li>
32<li>
33<code>LHAupAlpgen.h</code> : provides three classes for the reading of
34ALPGEN event and parameter files. <code>LHAupAlpgen</code> is an
35<aloc href="LesHouchesAccord"><code>LHAup</code></aloc> derived
36class for reading in ALPGEN native format event files.
37<code>AlpgenPar</code> is a class for the parsing of ALPGEN parameter
38files, making the information available through a simple interface.
39<code>AlpgenHooks</code> is a
40<aloc href="UserHooks"><code>UserHooks</code></aloc> derived class that
41provides the <code>Alpgen:*</code> options, described below. Further
42technical details of these classes are given at the end of this manual
43page.
44</li>
45<li>
46<code>main32.cc, main32.cmnd</code> : a sample main program and card
47file showing the usage of the previous two files. It combines the Alpgen
48and MLM UserHooks classes together, such that the functionality of both
49is available, and reads in a sample ALPGEN event file while performing
50the MLM merging procedure. Some commented out sets of options are
51provided in the card file, which can be activated to try different
52merging setups.
53</li>
54<li>
55<code>main32.unw, main32_unw.par</code> : an ALPGEN format event and
56parameter file containing 100 W + 3 jet events. It is not feasible
57to package large event files with the PYTHIA distribution, but this
58sample is enough to show the different components in action.
59</li>
60</ul>
61
62<h2>ALPGEN</h2>
63
64<b>NB: these options are provided by the AlpgenHooks class,
65which must be loaded for this functionality to be present</b>
66
67<p/>
68ALPGEN event files that have been written out in LHEF format should be
69read in through the normal LHEF machinery
70(see <aloc href="BeamParameters">beam parameters</aloc>). Files in
71ALPGEN's native format, instead, may be processed using the
72<code>Alpgen:file</code> option below. When using this option, the
73ALPGEN parameter file is stored in the PYTHIA Info object under the key
74<code>AlpgenPar</code>, see the "Header information" section of the
75<aloc href="EventInformation">Event Information</aloc> manual page for
76more details. Processes not implemented by the PYTHIA 6 interface
77supplied with ALPGEN are also not implemented here.
78
79<p/>
80When reading in ALPGEN native event files, some momenta are shifted by
81the file reader to ensure energy-momentum conservation. The magnitude of
82these shifts should be small (around the MeV level in the worst case)
83and warnings will be produced if they are above a set threshold. A large
84number of warnings may signify unexpected behaviour and should
85potentially be investigated. It is also known that certain event
86classes, for example an event with both light and heavy <ei>b</ei>
87quarks may give rise to these warnings.
88
89<p/>
90The ALPGEN file reader supports the reading of the event and parameter
91files in gzip format with file extensions ".unw.gz" and "_unw.par.gz"
92respectively. This requires the use of external libraries, however, and
93the <code>README</code> file in the main directory contains instructions
94on how to enable this.
95
96<p/>
97All other <code>Alpgen:*</code> options apply to both LHE and native
98file formats, and include options to guide the MLM merging procedure
99based on the parameters that are read in with the events file.
100
101<word name="Alpgen:file" default="void">
102This option is used to read in ALPGEN format event files. Using this option
103overrides any previously set beam options inside PYTHIA. The path to the
104files, not including any file extension, should be provided e.g. for input
105files <ei>input_unw.par</ei> and <ei>input.unw</ei>, the value
106<ei>input</ei> should be used.
107</word>
108
109<flag name="Alpgen:setMasses" default="on">
110When switched on, any particle masses provided by ALPGEN are set in
111the PYTHIA <aloc href="ParticleDataScheme">particle database</aloc>.
112</flag>
113
114<flag name="Alpgen:setMLM" default="on">
115When switched on, the merging parameters (see below) are set according to
116the ALPGEN hard process cuts:
117<ul>
118<li> <ei>MLM:eTjetMin = min(ptjmin + 5., 1.2 * ptjmin), </ei> </li>
119<li> <ei>MLM:coneRadius = drjmin, </ei>
120<li> <ei>MLM:etaJetMax = etajmax, </ei>
121</ul>
122where the <code>ptjmin</code>, <code>drjmin</code> and
123<code>etajmax</code> are the incoming ALPGEN parameters. Note that any
124existing values of these parameters are overwritten.
125</flag>
126
127<flag name="Alpgen:setNjet" default="on">
128When switched on, the <code>MLM:nJet</code> parameter (see below) is set
129to the incoming <code>njet</code> ALPGEN parameter. Note that any
130existing value of this parameter is overwritten.
131</flag>
132
133
134<h2>MLM Merging</h2>
135
136<b>NB: these options are provided by the MLMhooks class,
137which must be loaded for this functionality to be present</b>
138
139<p/>
140This section describes the MLM merging interface for PYTHIA 8. The most
141common reference to the algorithm is <ref>Man02</ref>. In many respects,
142however, the implementation provided in the ALPGEN package should be
143considered the official description of the MLM merging procedure.
144Although designed primarily to work with events generated with ALPGEN, it
145can in principle also be used with events from a different source. This
146should not be done without thought, however, and it is up to the user to
147understand the details of the algorithm and the implications of using a
148different hard process generator.
149
150<p/>
151A brief description of the MLM procedure, as implemented, is given here.
152First, either the CellJet or SlowJet jet algorithm is chosen, see the
153<aloc href="EventAnalysis">Event Analysis</aloc> page for more details.
154Both of these algorithms have an <ei>R</ei> and <ei>etaMax</ei>
155parameter. In addition, CellJet has an <ei>eTmin</ei> and SlowJet has a
156<ei>pTmin</ei> parameter. These are the primary three parameters of the
157merging procedure, and in practice are set dependent on the cuts applied
158to the matrix element (ME) generation. We stress that the merging
159procedure is not tied to the geometry of a specific physical detector,
160but only to the match between the original partons and the resulting
161jets, using standard jet algorithms in the phase space region where
162partons have been generated.
163
164<p/>
165ME samples with different jet multiplicities are run through the event
166generator, and the generation interrupted after parton showers have been
167applied, but before resonance decays and beam remnants have been
168processed. Note in particular that top quarks will not yet
169be decayed, which may lead to slight differences with the PYTHIA 6
170interface included with the ALPGEN package. In what follows, the
171hardness measure of jets/partons is taken to be <ei>eT</ei> when CellJet
172is used and <ei>pT</ei> when SlowJet is used. The hard system (ignoring
173all MPI systems) is then analysed:
174<ul>
175  <li>
176    The particles in the original matrix element process are sorted into
177    light partons, heavy partons and other particles. For backwards
178    compatibility, a light parton is defined as the set <ei>(d, u, s, c,
179    b, g)</ei> with zero mass. A heavy parton is defined as the set
180    <ei>(c, b, t)</ei> with non-zero mass.
181  </li>
182  <li>
183    All particles not originating from the heavy partons or other
184    particles are passed to the jet algorithm and clustered.
185  </li>
186  <li>
187    Clustered jets are matched to the light partons in the original ME
188    process. There are two different methods which can be used:
189    <ul>
190      <li>
191        Method 1: The following is done for each parton, in order
192        of decreasing hardness. The <ei>delta R</ei> between the parton
193        and all jets is calculated and the smallest value taken. If
194        this is less than the jet <ei>R</ei> parameter, possibly
195        multiplied by a constant, the jet and parton are considered to
196        match, and the jet is removed from further consideration.
197        Note that for CellJet the <ei>delta R</ei> measure is in
198        <ei>(eta, phi)</ei>, while for SlowJet, it is in
199        <ei>(y, phi)</ei>.
200      </li>
201      <li>
202        Method 2: This method is only possible when using the SlowJet
203        algorithm. Before the clustering is performed, extremely soft
204        "ghost" particles are added to the event at the
205        <ei>(y, phi)</ei> coordinates of the original matrix element
206        partons. If such a particle is clustered into a jet, the parton
207        and jet are considered to match. The idea of "ghost" particles
208        was originally introduced by FastJet as a way to measure jet
209        areas <ref>Cac06</ref> and should not affect clustering with an
210        infrared-safe jet algorithm.
211      </li>
212    </ul>
213  <li>
214    If there is a light ME parton remaining which has not been matched
215    to a jet, then the event is vetoed. If all ME partons have been
216    matched to a jet, but there are still some extra jets remaining,
217    then two options are possible:
218    <ul>
219      <li>
220        Exclusive mode: the event is vetoed. This is typically used when
221        there are ME samples with higher jet multiplicities, which would
222        fill in the extra jets.
223      </li>
224      <li>
225        Inclusive mode: the event is retained if the extra jets are softer
226        than the softest matched jet. This is typically used when
227        there is no ME sample with higher jet multiplicity, so the parton
228        shower should be allowed to give extra jets.
229    </ul>
230  </li>
231  <li>
232    All particles originating from the heavy partons are passed to the
233    jet algorithm and clustered.
234  </li>
235  <li>
236    The clustered jets are again matched to the original partons, but
237    there is no requirement for a match to be present; all matched jets
238    are immediately discarded. The matching procedure is much the same
239    as for light partons, but with two differences when <ei>delta R</ei>
240    matching is used. First, a different <ei>R</ei> parameter than that
241    used by the jet algorithm may optionally be given. Second, all jets
242    that are within the given radius of the parton are matched, not
243    just the one with the smallest <ei>delta R</ei> measure. If there
244    are still extra jets remaining then in exclusive mode the event is
245    immediately vetoed, while in inclusive mode the event is retained if
246    the extra jets are softer than the softest <em>light</em> matched jet.
247  </li>
248</ul>
249
250<p/>
251Some different options are provided, specified further below. These
252are set so that, by default, the algorithm closely follows the official
253MLM interface provided in the ALPGEN package. All vetoing of events
254is done through the usual
255<aloc href="UserHooks"><code>UserHooks</code></aloc> machinery, and is
256therefore already taken into account in the cross section.
257In the output from
258<code><aloc href="EventStatistics">Pythia::statistics()</aloc></code>,
259the difference between the "Selected" and "Accepted" columns gives the
260number of events that have not survived the vetoing procedure. It is
261still the responsibility of the user to add together the results from
262runs with different jet multiplicities. In the simplest case, when
263ALPGEN input is used and the hard process parameters are used to guide
264the merging procedure, it is enough to set the <code>MLM:nJetMax</code>
265parameter (see below).
266
267
268<h3>Merging</h3>
269
270<flag name="MLM:merge" default="off">
271Master switch to activate MLM merging.
272</flag>
273
274
275<h3>Exclusive mode</h3>
276
277The following settings determine whether clustered jets which do not
278match an original hard parton are allowed. They are typically permitted
279in the highest jet multiplicity sample, where the parton shower may
280produce extra hard jets, without risk of double counting. Any
281extra jet produced by the shower must be softer than any matched light
282jet, or else the event is vetoed.
283
284<modepick name="MLM:exclusive" default="2" min="0" max="2">
285Exclusive or inclusive merging.
286<option value="0">
287The merging is run in inclusive mode.
288</option>
289<option value="1">
290The merging is run in exclusive mode.
291</option>
292<option value="2">
293If <ei>MLM:nJet &lt; MLM:nJetMax</ei>, then the merging is run in
294exclusive mode, otherwise it is run in inclusive mode. If
295<ei>MLM:nJetMax &lt; 0</ei> or <ei>MLM:nJet &lt; 0</ei>, then the
296algorithm defaults to exclusive mode.
297</option>
298
299<modepick name="MLM:nJet" default="-1" min="-1">
300The number of additional light jets in the incoming process.
301This is used when <ei>MLM:exclusive = 2</ei>.
302Note that for ALPGEN input, this value may be automatically set.
303</modepick>
304
305<modepick name="MLM:nJetMax" default="-1" min="-1">
306This parameter is used to indicate the maximum number of jets that will be
307matched. This is used when <ei>MLM:exclusive = 2</ei>.
308</modepick>
309
310
311<h3>Jet algorithm</h3>
312
313The choice of jet algorithm and associated parameters can be adjusted with
314the settings below. The PYTHIA 8 internal <code>CellJet</code> and
315<code>SlowJet</code> routines are used, see the
316<aloc href="EventAnalysis">Event Analysis</aloc> page for more details.
317
318<modepick name="MLM:jetAlgorithm" default="1" min="1" max="2">
319The choice of jet algorithm to use when merging against hard partons.
320<option value="1">The CellJet algorithm.</option>
321<option value="2">The SlowJet algorithm.</option>
322</modepick>
323
324<modepick name="MLM:nEta" default="100" min="50">
325Specific to the CellJet algorithm, the number of bins in pseudorapidity.
326</modepick>
327
328<modepick name="MLM:nPhi" default="60" min="30">
329Specific to the CellJet algorithm, the number of bins in phi.
330</modepick>
331
332<parm name="MLM:eTseed" default="1.5" min="0.0">
333Specific to the CellJet algorithm, the minimum <ei>eT</ei> for a cell
334to be acceptable as the trial center of a jet.
335</parm>
336
337<parm name="MLM:eTthreshold" default="0.1">
338Specific to the CellJet algorithm, cells with <ei>eT &lt; eTthreshold</ei>
339are completely neglected by the jet algorithm.
340</parm>
341
342<modepick name="MLM:slowJetPower" default="-1" min="-1" max="1">
343The power to use in the SlowJet algorithm.
344<option value="-1">The anti-kT algorithm.</option>
345<option value="0">The Cambridge/Aachen algorithm.</option>
346<option value="1">The kT algorithm.</option>
347</modepick>
348
349
350<h3>Merging parameters</h3>
351
352The following options are the three main parameters for the merging
353procedure. Although here they are in principle free parameters, they should
354be heavily influenced by the hard process generation cuts. For ALPGEN
355input, these values may be set automatically.
356
357<parm name="MLM:eTjetMin" default="20.0" min="5.0">
358For the CellJet algorithm, this gives the minimum transverse energy
359inside a cone for a jet to be accepted. For the SlowJet algorithm, this
360is instead the minimum transverse momentum required for a cluster to be
361accepted as a jet.
362</parm>
363
364<parm name="MLM:coneRadius" default="0.7" min="0.1">
365For the CellJet algorithm, this gives the size of the cone in (eta, phi)
366space drawn around the geometric center of the jet. For the SlowJet
367algorithm, this gives the <ei>R</ei> parameter.
368</parm>
369
370<parm name="MLM:etaJetMax" default="2.5" min="0.1">
371For both jet algorithms, this defines the maximum pseudorapidity that
372the detector is assumed to cover. In this context, however, it is tied
373to the phase space region in which partons have been generated.
374Specifically, particles within <ei>etaJetMax + coneRadius</ei> are
375passed to the jet algorithm, with only jets within <ei>etaJetMax</ei>
376retained in the merging.
377</parm>
378
379
380<h3>Jet matching</h3>
381
382The following parameters control the criteria for matching a clustered jet
383to a hard parton.
384
385<modepick name="MLM:jetAllow" default="1" min="1" max="2">
386Controls which particles are clustered by the jet algorithm.
387<option value="1">
388This option explicitly disallows top quarks, leptons and photons. All other
389particle types are passed to the jet algorithm.
390</option>
391<option value="2">
392No extra particles are disallowed.
393</option>
394</modepick>
395
396<modepick name="MLM:jetMatch" default="1" min="1" max="2">
397Criteria for matching a clustered jet to a parton.
398<option value="1">
399This option can be used with both the CellJet and SlowJet
400algorithms. The <ei>delta R</ei> between each parton and
401jet is taken, and the minimal value compared against
402<ei>MLM:coneMatchLight * MLM:coneRadius</ei> for light jets or
403<ei>MLM:coneMatchHeavy * MLM:coneRadiusHeavy</ei> for heavy jets.
404Note that by default <ei>MLM:coneRadiusHeavy = MLM:coneRadius</ei>,
405see below. If below this value, the parton and jet are considered
406to match. With CellJet, the <ei>delta R</ei> measure is in
407<ei>(eta, phi)</ei>, while with SlowJet it is in <ei>(y, phi)</ei>.
408</option>
409<option value="2">
410This option can only be used with the SlowJet algorithm. The hard
411partons are inserted into the parton level event as "ghost" particles,
412but at the correct <ei>(y, phi)</ei> position. If this particle is then
413clustered into a jet, it is considered a match.
414</option>
415</modepick>
416
417<parm name="MLM:coneMatchLight" default="1.5" min="0.1">
418The <code>coneMatchLight</code> parameter used when
419<ei>MLM:jetMatch = 1</ei>.
420</parm>
421
422<parm name="MLM:coneRadiusHeavy" default="-1.0">
423The <code>coneRadiusHeavy</code> parameter used when
424<ei>MLM:jetMatch = 1</ei>. When assigned a negative value,
425the value of <code>MLM:coneRadius</code> is used.
426</parm>
427
428<parm name="MLM:coneMatchHeavy" default="1.0" min="0.1">
429The <code>coneMatchHeavy</code> parameter used when
430<ei>MLM:jetMatch = 1</ei>.
431</parm>
432
433
434<h2>Class information</h2>
435
436Some more technical information about the different classes is given
437below. For clarity, some limited information on certain private methods
438is provided.
439
440<h3>LHAupAlpgen</h3>
441
442This class is derived from the
443<aloc href="LesHouchesAccord"><code>LHAup</code></aloc> base class, and
444uses the standard machinery to pass initialisation and event data to
445PYTHIA. These standard functions are not documented here. The complete
446parameter file is stored in the PYTHIA Info object, if given, under the
447key <code>AlpgenPar</code>.
448
449<method name="LHAupAlpgen::LHAupAlpgen(const char *baseFNin,
450Info *infoPtrIn = NULL)">
451The constructor for the class takes the base filename for the ALPGEN
452format files (without file extensions) and optionally a pointer to a
453PYTHIA Info class, used for warning/error message printing and for
454storing the ALPGEN parameter file. The event and
455parameter files are opened immediately, with the <code>AlpgenPar</code>
456class, described below, used to parse the parameter file.
457</method>
458
459<method name="bool LHAupAlpgen::addResonances()">
460This is a private method used when an event is read in. The information
461read from the event file does not always contain a complete listing of
462all particles and four-momenta, and so various details must be
463reconstructed. Exactly which details are filled in can vary based on the
464ALPGEN process in question.
465</method>
466
467<method name="bool LHAupAlpgen::rescaleMomenta()">
468This is another private method used when an event is read in.
469It shuffles and rescales momenta in an event to ensure energy-momentum
470conservation.  First, <ei>pT</ei> is made to balance by splitting any
471imbalance between all outgoing particles with their energies also
472scaled. Second, the <ei>e/pZ</ei> of the two incoming particles are
473scaled to balance the outgoing particles. Finally, any intermediate
474resonances are recalculated from their decay products.
475</method>
476
477<h3>AlpgenPar</h3>
478
479This class parses an ALPGEN parameter file and makes the information
480available through a simple interface. The information is stored
481internally in key/value (string/double) format. All lines prior to:
482<pre>  ************** run parameters </pre>
483are ignored, and in the general case, a line e.g.
484<pre>  10   3.00000000000000        ! njets</pre>
485would be stored with key "njets" and value "3.0". The following lines
486are special cases where the line may be split or the key translated:
487<pre>
488  3 ! hard process code
489  0.000   4.700 174.300  80.419  91.188 120.000 ! mc,mb,mt,mw,mz,mh
490  912.905 0.0914176   ! Crosssection +- error (pb)
491  100 29787.4  ! unwtd events, lum (pb-1) Njob= 2
492</pre>
493In the first line, the key "hard process code" is translated to
494"hpc". In the second, the mass values are split and each given an entry
495in the internal store. In the third, the cross section and cross section
496error are stored under the keys "xsecup" and "xerrup" respectively.
497Finally, the number of events and luminosity are stored under the keys
498"nevent" and "lum" respectively. In the event that a duplicate key is
499present, with differing values, the stored value is overwritten and a
500warning given.
501
502<method name="AlpgenPar::AlpgenPar(Info *infoPtrIn = NULL)">
503The constructor does nothing except for store the PYTHIA Info
504pointer, if given. This is used for warning/error message printing.
505</method>
506
507<method name="bool AlpgenPar::parse(const string paramStr)">
508This method parses an ALPGEN parameter file. The parameter file is
509passed as a single string, mainly intended to be read out from the
510PYTHIA Info object using the header information methods.
511</method>
512
513<method name="bool AlpgenPar::haveParam(const string &amp;paramIn)">
514Method to check if a parameter with key <code>paramIn</code> is present.
515Returns true if present, else false.
516</method>
517
518<method name="double AlpgenPar::getParam(const string &amp;paramIn)">
519</method>
520<methodmore name="int AlpgenPar::getParamAsInt(const string &amp;paramIn)">
521Return the parameter with key <code>paramIn</code> as a double or
522integer. The presence of a parameter should have already been checked
523using the <code>haveParam()</code> function above. If the parameter is
524not present, 0 is returned.
525</methodmore>
526
527<method name="void AlpgenPar::void printParams()">
528Method to print a list of stored parameters.
529</method>
530
531<h3>AlpgenHooks</h3>
532
533This <aloc href="UserHooks"><code>UserHooks</code></aloc> derived class
534provides all the <code>Alpgen:*</code> options. It is provided as a
535UserHooks class such that the code works regardless of whether ALPGEN
536native or LHE file formats are used. It is declared with virtual
537inheritance so that it may be combine with other UserHooks classes, see
538the "Combining UserHooks" section below.
539
540<method name="AlpgenHooks(Pythia &amp;pythia)">
541The constructor takes a PYTHIA object as input, so that the beam
542parameter settings can be overridden if the <code>Alpgen:file</code>
543option is given. If this is the case, an <code>LHAupAlpgen</code>
544instance is automatically created and passed to PYTHIA.
545</method>
546
547<method name="bool initAfterBeams()">
548This is the only UserHooks method that is overridden. It is called
549directly after PYTHIA has initialised the beams, and therefore the
550header information should be present in the PYTHIA Info object. The
551<code>AlpgenPar</code> class is used to parse ALPGEN parameters, if
552present, which are then used to set further PYTHIA settings.
553</method>
554 
555<h3>MLMhooks</h3>
556
557This <aloc href="UserHooks"><code>UserHooks</code></aloc> derived class
558provides all the <code>MLM:*</code> options. It is also declared with
559virtual inheritance for combining with other UserHooks classes. It
560uses standard UserHooks methods to perform the merging procedure
561outlined previously in this manual page, and therefore detailed method
562information is not given.
563
564<h3>Combining UserHooks</h3>
565
566It is possible to combine multiple UserHooks classes together, such that
567the functionality of both is present. A prerequisite is that the
568different UserHooks classes should be declared with virtual inheritance,
569e.g.
570<pre>
571  class MLMhooks : virtual public UserHooks
572</pre>
573Without this option, when combining two UserHooks derived classes
574together, two copies of the base UserHooks class would be created
575leading to ambiguity.
576
577<p/>
578An example combining the AlpgenHooks and MLMhooks classes together is
579given in <code>main32.cc</code>:
580<pre>
581  class AlpgenAndMLMhooks : public AlpgenHooks, public MLMhooks {
582  public:
583    AlpgenAndMLMhooks(Pythia &pythia)
584      : AlpgenHooks(pythia), MLMhooks() {}
585 
586    virtual bool initAfterBeams() {
587      // Call init of both AlpgenHooks and MLMhooks (order important)
588      if (!AlpgenHooks::initAfterBeams()) return false;
589      if (!MLMhooks::initAfterBeams())    return false;
590      return true;
591    }
592  };
593</pre>
594This class inherits from both AlpgenHooks and MLMhooks. Any functions
595which are present in both classes should be overridden with a function
596that calls the different parent methods in the desired order. In the
597above example, the only shared methods are the constructor and
598<code>initAfterBeams()</code>.
599
600</chapter>
601
602<!-- Copyright (C) 2012 Torbjorn Sjostrand -->
Note: See TracBrowser for help on using the repository browser.