~ubuntu-branches/ubuntu/trusty/pythia8/trusty-proposed

« back to all changes in this revision

Viewing changes to phpdoc/SemiInternalResonances.php

  • Committer: Package Import Robot
  • Author(s): Lifeng Sun
  • Date: 2012-05-22 11:43:00 UTC
  • Revision ID: package-import@ubuntu.com-20120522114300-0jvsv2vl4o2bo435
Tags: upstream-8.1.65
ImportĀ upstreamĀ versionĀ 8.1.65

Show diffs side-by-side

added added

removed removed

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