source: HiSusy/trunk/Pythia8/pythia8170/xmldoc/SemiInternalResonances.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: 10.1 KB
Line 
1<chapter name="Semi-Internal Resonances">
2
3<h2>Semi-Internal Resonances</h2>
4
5The introduction of a new <aloc href="SemiInternalProcesses">
6semi-internal process</aloc> may also involve a new particle,
7not currently implemented in PYTHIA. Often it is then enough to
8use the <aloc href="ParticleDataScheme">standard machinery</aloc> 
9to introduce a new particle (<code>id:all = ...</code>) and new
10decay channels (<code>id:addChannel = ...</code>). By default this
11only allows you to define a fixed total width and fixed branching
12ratios. Using <code><aloc href="ResonanceDecays">meMode</aloc></code> 
13values 100 or bigger provides the possibility of a very
14simple threshold behaviour.
15
16<p/>
17If you want to have complete freedom, however, there are two
18ways to go. One is that you make the resonance decay part of the
19hard process itself, either using the
20<aloc href="LesHouchesAccord">Les Houches interface</aloc> or
21a semi-internal process. The other is for you to create a new
22<code>ResonanceWidths</code> object, where you write the code
23needed for a calculation of the partial width of a particular
24channel.
25
26<p/>
27Here we will explain what is involved in setting up a resonance.
28Should you actually go ahead with this, it is strongly recommended
29to use an existing resonance as a template, to get the correct
30structure. There also exists a sample main program,
31<code>main22.cc</code>, that illustrates how you could combine
32a new process and a new resonance.
33
34<p/>
35There are three steps involved in implementing a new resonance:
36<br/>1) providing the standard particle information, as already
37outlined above (<code>id:all = ...</code>,
38<code>id:addChannel = ...</code>), except that now branching
39ratios need not be specified, since they anyway will be overwritten
40by the dynamically calculated values.
41<br/>2) writing the class that calculates the partial widths.
42<br/>3) handing in a pointer to an instance of this class to PYTHIA.
43<br/>We consider the latter two aspects in turn.
44
45<h3>The ResonanceWidths Class</h3> 
46
47The resonance-width calculation has to be encoded in a new class.
48The relevant code could either be put before the main program in the
49same file, or be stored separately, e.g. in a matched pair
50of <code>.h</code> and <code>.cc</code> files. The latter may be more
51convenient, in particular if the calculations are lengthy, or
52likely to be used in many different runs, but of course requires
53that these additional files are correctly compiled and linked.
54
55<p/>
56The class has to be derived  from the <code>ResonanceWidths</code> 
57base class. It can implement a number of methods. The constructor
58and the <code>calcWidth</code> ones are always needed, while others
59are for convenience. Much of the administrativ machinery is handled
60by methods in the base class.
61
62<p/>Thus, in particular, you must implement expressions for all
63possible final states, whether switched on in the current run or not,
64since all contribute to the total width needed in the denominator of
65the Breit-Wigner expression. Then the methods in the base class take
66care of selecting only allowed channels where that is required, and
67also of including effects of closed channels in secondary decays.
68These methods can be accessed indirectly via the
69<code><aloc href="ResonanceDecays">res...</aloc></code>
70methods of the normal
71<code><aloc href="ParticleDataScheme">particle database</aloc></code>.
72
73<p/>
74A <b>constructor</b> for the derived class obviously must be available.
75Here you are quite free to allow a list of arguments, to set
76the parameters of your model. The constructor must call the
77base-class <code>initBasic(idResIn)</code> method, where the argument
78<code>idResIn</code> is the PDG-style identity code you have chosen
79for the new resonance. When you create several related resonances
80as instances of the same class you would naturally make
81<code>idResIn</code> an argument of the constructor; for the
82PYTHIA classes this convention is used also in cases when it is
83not needed.
84<br/>The <code>initBasic(...)</code> method will
85hook up the <code>ResonanceWidths</code> object with the corresponding
86entry in the generic particle database, i.e. with the normal particle
87information you set up in point 1) above. It will store, in base-class
88member variables, a number of quantities that you later may find useful:
89<br/><code>idRes</code> : the identity code you provide;
90<br/><code>hasAntiRes</code> : whether there is an antiparticle;
91<br/><code>mRes</code> : resonance mass;
92<br/><code>GammaRes</code> resonance width;
93<br/><code>m2Res</code> : the squared mass;
94<br/><code>GamMRat</code> : the ratio of width to mass.
95
96<p/>
97A <b>destructor</b> is only needed if you plan to delete the resonance
98before the natural end of the run, and require some special behaviour
99at that point. If you call such a destructor you will leave a pointer
100dangling inside the <code>Pythia</code> object you gave it in to,
101if that still exists.
102
103<method name="void ResonanceWidths::initConstants()"> 
104is called once during initialization, and can then be used to set up
105further parameters specific to this particle species, such as couplings,
106and perform calculations that need not be repeated for each new event,
107thereby saving time. This method needs not be implemented.
108</method>
109
110<method name="void ResonanceWidths::calcPreFac(bool calledFromInit = false)">
111is called once a mass has been chosen for the resonance, but before
112a specific final state is considered. This routine can therefore
113be used to perform calculations that otherwise might have to be repeated
114over and over again in <code>calcWidth</code> below. It is optional
115whether you want to use this method, however, or put
116everything in <code>calcWidth()</code>.
117<br/>The optional argument will have the value <code>true</code> when
118the resonance is initialized, and then be <code>false</code> throughout
119the event generation, should you wish to make a distinction.
120In PYTHIA such a distinction is made for <ei>gamma^*/Z^0</ei> and 
121<ei>gamma^*/Z^0/Z'^0</ei>, owing to the necessity of a special
122description of interference effects, but not for other resonances.
123<br/>In addition to the base-class member variables already described
124above, <code>mHat</code> contains the current mass of the resonance.
125At initialization this agrees with the nominal mass <code>mRes</code>,
126but during the run it will not (in general).
127</method>
128
129<method name="void ResonanceWidths::calcWidth(bool calledFromInit = false)">
130is the key method for width calculations and returns a partial width
131value, as further described below. It is called for a specific
132final state, typically in a loop over all allowed final states,
133subsequent to the <code>calcPreFac(...)</code> call above.
134Information on the final state is stored in a number of base-class
135variables, for you to use in your calculations:
136<br/><code>iChannel</code> : the channel number in the list of
137possible decay channels;
138<br/><code>mult</code> : the number of decay products;
139<br/><code>id1, id2, id3</code> : the identity code of up to the first
140three decay products, arranged in descending order of the absolute value
141of the identity code;
142<br/><code>id1Abs, id2Abs, id3Abs</code> : the absolute value of the
143above three identity codes;
144<br/><code>mHat</code> : the current resonance mass, which is the same
145as in the latest <code>calcPreFac(...)</code> call;
146<br/><code>mf1, mf2, mf3</code> : masses of the above decay products;
147<br/><code>mr1, mr2, mr3</code> : squared ratio of the product masses
148to the resonance mass;
149<br/><code>ps</code> : is only meaningful for two-body decays, where it
150gives the phase-space factor
151<ei>ps = sqrt( (1. - mr1 - mr2)^2 - 4. * mr1 * mr2 )</ei>;
152<br/>In two-body decays the third slot is zero for the above properties.
153Should there be more than three particles in the decay, you would have
154to take care of the subsequent products yourself, e.g. using
155<br/><code>particlePtr->decay[iChannel].product(j);</code>
156<br/>to extract the <code>j</code>'th decay products (with
157<code>j = 0</code> for the first, etc.). Currently we are not aware
158of any such examples.
159<br/>The base class also contains methods for <ei>alpha_em</ei> and
160<ei>alpha_strong</ei> evaluation, and can access many standard-model
161couplings; see the existing code for examples.
162<br/>The result of your calculation should be stored in
163<br/><code>widNow</code> : the partial width of the current channel,
164expressed in GeV.
165</method>
166
167<method name="double ResonanceWidths::widthChan( double mHat,
168int idAbs1, int idAbs2)">
169is not normally used. In PYTHIA the only exception is Higgs decays,
170where it is used to define the width (except for colour factors)
171associated with a specific incoming/outgoing state. It allows the
172results of some loop expressions to be pretabulated.
173</method>
174
175<h3>Access to resonance widths</h3> 
176
177Once you have implemented a class, it is straightforward to
178make use of it in a run. Assume you have written a new class
179<code>MyResonance</code>, which inherits from
180<code>ResonanceWidths</code>. You then create an instance of
181this class and hand it in to a <code>pythia</code> object with
182<pre>
183      ResonanceWidths* myResonance = new MyResonance();
184      pythia.setResonancePtr( myResonance);
185</pre>
186If you have several resonances you can repeat the procedure any number
187of times. When <code>pythia.init(...)</code> is called these resonances
188are initialized along with all the internal resonances, and treated in
189exactly the same manner. See also the <aloc href="ProgramFlow">Program
190Flow</aloc> 
191description.
192
193<p/>
194If the code should be of good quality and general usefulness,
195it would be simple to include it as a permanently available process
196in the standard program distribution. The final step of that integration
197ought to be left for the PYTHIA authors, but basically all that is
198needed is to add one line in
199<code>ParticleData::initResonances</code>, where one creates an
200instance of the resonance in the same way as for the resonances already
201there. In addition, the particle data and decay table for the new
202resonance has to be added to the permanent
203<aloc href="ParticleData">particle database</aloc>, and the code itself
204to <code>include/ResonanceWidths.h</code> and
205<code>src/ResonanceWidths.cc</code>.
206
207</chapter>
208
209<!-- Copyright (C) 2012 Torbjorn Sjostrand -->
Note: See TracBrowser for help on using the repository browser.