herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.3.0
MatrixElement
Matchbox
Phasespace
RandomHelpers.h
1
// -*- C++ -*-
2
//
3
// RandomHelpers.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4
// Copyright (C) 2002-2019 The Herwig Collaboration
5
//
6
// Herwig is licenced under version 3 of the GPL, see COPYING for details.
7
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8
//
9
#ifndef HERWIG_RandomHelpers_H
10
#define HERWIG_RandomHelpers_H
11
12
#include "
ThePEG/Config/ThePEG.h
"
13
14
namespace
Herwig
{
15
16
using namespace
ThePEG
;
17
23
namespace
RandomHelpers {
24
30
inline
double
sign
(
double
x) {
31
return
x < 0. ? -1. : 1.;
32
}
33
39
template
<
class
Density>
40
struct
Generator
{
41
45
double
lower
()
const
;
46
50
double
upper
()
const
;
51
55
double
value
(
double
x)
const
;
56
60
double
normalization
()
const
;
61
66
double
operator()
(
double
r)
const
;
67
68
};
69
75
struct
Expression
{};
76
82
template
<>
83
struct
Generator
<
Expression
> {
84
88
virtual
~Generator
() {}
89
93
virtual
double
lower
()
const
= 0;
94
98
virtual
double
upper
()
const
= 0;
99
103
virtual
double
value
(
double
x)
const
= 0;
104
108
virtual
double
normalization
()
const
= 0;
109
114
virtual
double
operator()
(
double
r)
const
= 0;
115
116
};
117
123
template
<
class
Density>
124
struct
Container
{};
125
131
template
<
class
Density>
132
class
Generator
<
Container
<Density> >
133
:
public
Generator
<Expression> {
134
138
Generator<Density>
generator
;
139
140
public
:
141
145
Generator
(
const
Generator<Density>
& gen)
146
: generator(gen) {}
147
151
virtual
double
lower
()
const
{
return
generator.
lower
(); }
152
156
virtual
double
upper
()
const
{
return
generator.
upper
(); }
157
161
virtual
double
value
(
double
x)
const
{
return
generator.
value
(x); }
162
166
virtual
double
normalization
()
const
{
return
generator.
normalization
(); }
167
172
virtual
double
operator()
(
double
r)
const
{
return
generator(r); }
173
174
};
175
181
template
<
class
Density>
182
pair<double,double>
generate
(
const
Generator<Density>
& gen,
183
double
r) {
184
double
x = gen(r);
185
186
if
( gen.
value
(x) != 0. )
187
return
make_pair(x,gen.
normalization
()/gen.
value
(x));
188
else
189
return
make_pair(x,0.);
190
}
191
197
template
<
class
Density>
198
struct
Remap
{};
199
205
template
<
class
Density>
206
class
Generator
<
Remap
<Density> > {
207
211
Generator<Density>
theGenerator
;
212
216
double
theLower
;
217
221
double
theUpper
;
222
226
Generator
(
const
Generator<Density>
& gen,
227
double
low,
double
up)
228
: theGenerator(gen), theLower(low), theUpper(up) {
229
if
( low >= up )
230
throw
std::logic_error(
"[Generator<Remap>] Invalid boundaries."
);
231
}
232
236
const
Generator<Density>
&
generator
()
const
{
return
theGenerator; }
237
241
double
lower
()
const
{
return
theLower; }
242
246
double
upper
()
const
{
return
theUpper; }
247
251
double
value
(
double
y)
const
{
252
double
xm = generator().lower();
253
double
xp = generator().upper();
254
double
ym =
lower
();
255
double
yp =
upper
();
256
double
x = ((xp-xm)/(yp-ym))*y+(yp*xm-ym*xp)/(yp-ym);
257
return
generator().value(x);
258
}
259
263
double
normalization
()
const
{
264
double
xm = generator().lower();
265
double
xp = generator().upper();
266
double
ym =
lower
();
267
double
yp =
upper
();
268
return
((yp-ym)/(xp-xm))*generator().normalization();
269
}
270
275
double
operator()
(
double
r)
const
{
276
double
xm = generator().lower();
277
double
xp = generator().upper();
278
double
ym =
lower
();
279
double
yp =
upper
();
280
double
x = ((yp-ym)/(xp-xm))*generator()(r)+(xp*ym-xm*yp)/(xp-xm);
281
return
x;
282
}
283
284
};
285
291
struct
on
{
292
296
double
lower
;
297
301
double
upper
;
302
306
on
(
double
a,
double
b)
307
:
lower
(a),
upper
(b) {}
308
};
309
315
template
<
class
Density>
316
Generator<Remap<Density>
>
operator*
(
const
Generator<Density>
& gen,
317
const
on
& interval) {
318
return
Generator<Remap<Density>
>(gen,interval.
lower
,interval.
upper
);
319
}
320
321
327
template
<
class
Density>
328
struct
Rescale
{};
329
335
template
<
class
Density>
336
class
Generator
<
Rescale
<Density> > {
337
341
Generator<Density>
theGenerator
;
342
346
double
theScale
;
347
348
public
:
349
353
Generator
(
const
Generator<Density>
& gen,
354
double
sc)
355
: theGenerator(gen), theScale(sc) {
356
}
357
361
const
Generator<Density>
&
generator
()
const
{
return
theGenerator; }
362
366
double
scale
()
const
{
return
theScale; }
367
371
double
lower
()
const
{
return
generator().lower(); }
372
376
double
upper
()
const
{
return
generator().upper(); }
377
381
double
value
(
double
x)
const
{
382
return
scale()*generator().value(x);
383
}
384
388
double
normalization
()
const
{
389
return
scale()*generator().normalization();
390
}
391
396
double
operator()
(
double
r)
const
{
397
return
generator()(r);
398
}
399
400
};
401
407
template
<
class
Density>
408
Generator<Rescale<Density>
>
operator*
(
double
a,
const
Generator<Density>
& gen) {
409
return
Generator<Rescale<Density>
>(gen,a);
410
}
411
417
template
<
class
Density1,
418
class
Density2>
419
struct
Sum
{};
420
426
template
<
class
Density1,
427
class
Density2>
428
class
Generator
<
Sum
<Density1,Density2> > {
429
433
Generator<Density1>
theFirstGenerator
;
434
438
Generator<Density2>
theSecondGenerator
;
439
443
double
theLower
;
444
448
double
theUpper
;
449
454
double
theFraction
;
455
456
public
:
457
461
Generator
(
const
Generator<Density1>
& firstGen,
462
const
Generator<Density2>
& secondGen)
463
: theFirstGenerator(firstGen), theSecondGenerator(secondGen),
464
theLower(min(firstGen.
lower
(),secondGen.
lower
())),
465
theUpper(max(firstGen.
upper
(),secondGen.
upper
())),
466
theFraction(1.) {
467
theFraction =
468
firstGenerator().
normalization
() /
normalization
();
469
}
470
474
const
Generator<Density1>
&
firstGenerator
()
const
{
return
theFirstGenerator; }
475
479
const
Generator<Density2>
&
secondGenerator
()
const
{
return
theSecondGenerator; }
480
484
double
lower
()
const
{
return
theLower; }
485
489
double
upper
()
const
{
return
theUpper; }
490
495
double
fraction
()
const
{
return
theFraction; }
496
500
double
value
(
double
x)
const
{
501
double
res = 0.;
502
if
( firstGenerator().
lower
() <= x &&
503
x <= firstGenerator().
upper
() )
504
res += firstGenerator().value(x);
505
if
( secondGenerator().
lower
() <= x &&
506
x <= secondGenerator().
upper
() )
507
res += secondGenerator().value(x);
508
return
res;
509
}
510
514
double
normalization
()
const
{
515
return
516
firstGenerator().normalization() + secondGenerator().normalization();
517
}
518
523
double
operator()
(
double
r)
const
{
524
return
525
r < fraction() ?
526
firstGenerator()(r/fraction()) :
527
secondGenerator()((r-fraction())/(1.-fraction()));
528
}
529
530
};
531
537
template
<
class
Density1,
538
class
Density2>
539
Generator<Sum<Density1,Density2>
>
operator+
(
const
Generator<Density1>
& first,
540
const
Generator<Density2>
& second) {
541
return
Generator<Sum<Density1,Density2>
>(first,second);
542
}
543
550
template
<
class
Density>
551
struct
matcher
{
552
556
Generator<Density>
generator
;
557
561
matcher
(
const
Generator<Density>
& gen)
562
:
generator
(gen) {}
563
564
};
565
572
template
<
class
Density>
573
matcher<Density>
match
(
const
Generator<Density>
& gen) {
574
return
matcher<Density>
(gen);
575
}
576
583
template
<
class
Density1,
584
class
Density2>
585
Generator<Sum<Density1,Rescale<Density2>
> >
operator+
(
const
Generator<Density1>
& first,
586
const
matcher<Density2>
& second) {
587
double
matching =
588
first.
value
(first.
upper
())/
589
second.
generator
.value(second.
generator
.lower());
590
return
Generator<Sum<Density1,Rescale<Density2>
> >(first,matching*second.
generator
);
591
}
592
598
template
<
class
Density1,
599
class
Density2>
600
struct
Piecewise
{};
601
607
struct
ToBeDefined
{};
608
614
template
<
class
Density1,
615
class
Density2>
616
class
Generator
<
Piecewise
<Density1,Density2> > {
617
621
Generator<Density1>
theFirstGenerator
;
622
626
Generator<Density2>
theSecondGenerator
;
627
631
double
theLower
;
632
636
double
theIntermediate
;
637
641
double
theUpper
;
642
647
double
theFraction
;
648
649
public
:
650
654
Generator
(
const
Generator<Density1>
& firstGen,
655
const
Generator<Density2>
& secondGen)
656
: theFirstGenerator(firstGen), theSecondGenerator(secondGen),
657
theLower(firstGen.
lower
()), theIntermediate(firstGen.
upper
()), theUpper(secondGen.
upper
()),
658
theFraction(1.) {
659
if
( firstGenerator().
upper
() != secondGenerator().
lower
() )
660
throw
std::logic_error(
"[Generator<Piecewise>] Invalid boundaries."
);
661
theFraction =
662
firstGenerator().normalization() /
normalization
();
663
}
664
668
const
Generator<Density1>
&
firstGenerator
()
const
{
return
theFirstGenerator; }
669
673
const
Generator<Density2>
&
secondGenerator
()
const
{
return
theSecondGenerator; }
674
678
double
lower
()
const
{
return
theLower; }
679
683
double
intermediate
()
const
{
return
theIntermediate; }
684
688
double
upper
()
const
{
return
theUpper; }
689
694
double
fraction
()
const
{
return
theFraction; }
695
699
double
value
(
double
x)
const
{
700
return
701
x <
intermediate
() ?
702
firstGenerator().value(x) :
703
secondGenerator().value(x);
704
}
705
709
double
normalization
()
const
{
710
return
711
firstGenerator().normalization() + secondGenerator().normalization();
712
}
713
718
double
operator()
(
double
r)
const
{
719
return
720
r < fraction() ?
721
firstGenerator()(r/fraction()) :
722
secondGenerator()((r-fraction())/(1.-fraction()));
723
}
724
728
template
<
class
Density3>
729
Generator<Piecewise<Piecewise<Density1,Density2>
,Density3> >
730
operator,
(
const
Generator<Density3>
& thirdGenerator) {
731
return
732
Generator<Piecewise<Piecewise<Density1,Density2>
,Density3> >
733
(*
this
,thirdGenerator);
734
}
735
739
template
<
class
Density3>
740
Generator<Piecewise<Piecewise<Density1,Density2>
,
Rescale<Density3>
> >
741
operator,
(
const
matcher<Density3>
& thirdGenerator) {
742
double
matching =
743
value
(
upper
())/thirdGenerator.
generator
.value(
upper
());
744
return
745
Generator<Piecewise<Piecewise<Density1,Density2>
,
Rescale<Density3>
> >
746
(*
this
,matching*thirdGenerator.
generator
);
747
}
748
749
};
750
756
template
<
class
Density>
757
struct
Generator
<
Piecewise
<Density,
ToBeDefined
> > {
758
762
Generator<Density>
generator
;
763
767
Generator
(
const
Generator<Density>
& gen)
768
: generator(gen) {}
769
773
template
<
class
Density2>
774
Generator<Piecewise<Density,Density2>
>
775
operator,
(
const
Generator<Density2>
& secondGen) {
776
return
777
Generator<Piecewise<Density,Density2>
>
778
(generator,secondGen);
779
}
780
784
template
<
class
Density2>
785
Generator<Piecewise<Density,Rescale<Density2>
> >
786
operator,
(
const
matcher<Density2>
& secondGen) {
787
double
matching =
788
generator.
value
(generator.
upper
())/secondGen.
generator
.value(generator.
upper
());
789
return
790
Generator<Piecewise<Density,Rescale<Density2>
> >
791
(generator,matching*secondGen.
generator
);
792
}
793
794
};
795
801
template
<>
802
struct
Generator
<
Piecewise
<
ToBeDefined
,
ToBeDefined
> > {
803
807
template
<
class
Density>
808
Generator<Piecewise<Density,ToBeDefined>
>
809
operator,
(
const
Generator<Density>
& gen) {
810
return
811
Generator<Piecewise<Density,ToBeDefined>
>(gen);
812
}
813
814
};
815
821
inline
Generator<Piecewise<ToBeDefined,ToBeDefined> >
822
piecewise
() {
823
return
Generator<Piecewise<ToBeDefined,ToBeDefined>
>();
824
}
825
826
827
833
struct
Flat
{};
834
840
template
<>
841
class
Generator
<
Flat
> {
842
846
double
theLower
;
847
851
double
theUpper
;
852
853
public
:
854
858
Generator
(
double
low,
double
up)
859
: theLower(low), theUpper(up) {}
860
864
double
lower
()
const
{
return
theLower; }
865
869
double
upper
()
const
{
return
theUpper; }
870
874
double
value
(
double
x)
const
{
875
return
x>=
lower
() && x<=
upper
() ? 1. : 0.;
876
}
877
881
double
normalization
()
const
{
return
upper
()-
lower
(); }
882
887
double
operator()
(
double
r)
const
{
888
return
lower
() + r*(
upper
()-
lower
());
889
}
890
891
};
892
898
inline
Generator<Flat>
flat
(
double
low,
double
up) {
899
return
Generator<Flat>
(low,up);
900
}
901
907
struct
Zero
{};
908
914
template
<>
915
class
Generator
<
Zero
> {
916
920
double
theLower
;
921
925
double
theUpper
;
926
927
public
:
928
932
Generator
(
double
low,
double
up)
933
: theLower(low), theUpper(up) {}
934
938
double
lower
()
const
{
return
theLower; }
939
943
double
upper
()
const
{
return
theUpper; }
944
948
double
value
(
double
x)
const
{
949
return
x>=
lower
() && x<=
upper
() ?
Constants::epsilon
: 0.;
950
}
951
955
double
normalization
()
const
{
return
0.; }
956
961
double
operator()
(
double
r)
const
{
962
return
lower
() + r*(
upper
()-
lower
());
963
}
964
965
};
966
972
inline
Generator<Zero>
zero
(
double
low,
double
up) {
973
return
Generator<Zero>
(low,up);
974
}
975
981
struct
Inverse
{};
982
988
template
<>
989
class
Generator
<
Inverse
> {
990
994
double
thePole
;
995
999
double
theLower
;
1000
1004
double
theUpper
;
1005
1009
double
theScale
;
1010
1014
double
theOffset
;
1015
1016
public
:
1017
1021
Generator
(
double
z,
1022
double
l,
double
u)
1023
: thePole(z),
1024
theLower(l), theUpper(u),
1025
theScale(z < l ? log((u-z)/(l-z)) : log((z-l)/(z-u))),
1026
theOffset(z < l ? log(l-z) : log(z-u)) {
1027
if
( z >= l && z <= u )
1028
throw
std::logic_error(
"[Generator<Inverse>] Pole inside sampling interval."
);
1029
}
1030
1034
double
lower
()
const
{
return
theLower; }
1035
1039
double
upper
()
const
{
return
theUpper; }
1040
1044
double
pole
()
const
{
return
thePole; }
1045
1049
double
scale
()
const
{
return
theScale; }
1050
1054
double
offset
()
const
{
return
theOffset; }
1055
1059
double
value
(
double
x)
const
{
1060
return
x>=
lower
() && x<=
upper
() ? 1/abs(x-pole()) : 0.;
1061
}
1062
1066
double
normalization
()
const
{
1067
return
scale();
1068
}
1069
1074
double
operator()
(
double
r)
const
{
1075
return
pole() +
sign
(
upper
()-pole())*exp(scale()*r+offset());
1076
}
1077
1078
};
1079
1085
inline
Generator<Inverse>
inverse
(
double
z,
1086
double
lower,
double
upper) {
1087
return
Generator<Inverse>
(z,lower,upper);
1088
}
1089
1095
struct
Power
{};
1096
1102
template
<>
1103
class
Generator
<
Power
> {
1104
1108
double
thePole
;
1109
1113
double
thePower
;
1114
1118
double
theLower
;
1119
1123
double
theUpper
;
1124
1128
double
theScale
;
1129
1133
double
theOffset
;
1134
1135
public
:
1136
1140
Generator
(
double
z,
double
p,
1141
double
l,
double
u)
1142
: thePole(z), thePower(p),
1143
theLower(l), theUpper(u),
1144
theScale(z<=l ? (
pow
(u-z,1.+p)-
pow
(l-z,1.+p))/(1.+p) : (
pow
(z-l,1.+p)-
pow
(z-u,1.+p))/(1.+p)),
1145
theOffset(z<=l ?
pow
(l-z,1.+p)/(1.+p) :
pow
(z-u,1.+p)/(1.+p)) {
1146
if
( p == -1. )
1147
throw
std::logic_error(
"[Generator<Power>] Unit inverse. Consider using inverse()."
);
1148
if
( z >= l && z <= u && p < 0. )
1149
throw
std::logic_error(
"[Generator<Power>] Pole inside sampling interval."
);
1150
if
( z >= l && z <= u && p > 0. )
1151
throw
std::logic_error(
"[Generator<Power>] Zero inside sampling interval."
);
1152
}
1153
1157
double
lower
()
const
{
return
theLower; }
1158
1162
double
upper
()
const
{
return
theUpper; }
1163
1167
double
pole
()
const
{
return
thePole; }
1168
1172
double
power
()
const
{
return
thePower; }
1173
1177
double
scale
()
const
{
return
theScale; }
1178
1182
double
offset
()
const
{
return
theOffset; }
1183
1187
double
value
(
double
x)
const
{
1188
return
x>=
lower
() && x<=
upper
() ?
pow
(abs(x-pole()),
power
()) : 0.;
1189
}
1190
1194
double
normalization
()
const
{
1195
return
scale();
1196
}
1197
1202
double
operator()
(
double
r)
const
{
1203
return
pole() +
sign
(
upper
()-pole())*
pow
((1.+
power
())*(scale()*r+offset()),1./(1.+
power
()));
1204
}
1205
1206
};
1207
1213
inline
Generator<Power>
power
(
double
z,
double
p,
1214
double
lower,
double
upper) {
1215
return
Generator<Power>
(z,p,lower,upper);
1216
}
1217
1223
struct
BreitWigner
{};
1224
1230
template
<>
1231
class
Generator
<
BreitWigner
> {
1232
1236
double
thePole
;
1237
1241
double
theWidth
;
1242
1246
double
theLower
;
1247
1251
double
theUpper
;
1252
1256
double
theScale
;
1257
1261
double
theOffset
;
1262
1266
double
theSqrtWidth
;
1267
1268
public
:
1269
1273
Generator
(
double
z,
double
w,
1274
double
l,
double
u)
1275
: thePole(z), theWidth(w),
1276
theLower(l), theUpper(u),
1277
theScale((atan((u-z)/
sqrt
(abs(w*z)))-atan((l-z)/
sqrt
(abs(w*z))))/
sqrt
(abs(w*z))),
1278
theOffset(atan((l-z)/
sqrt
(abs(w*z)))/
sqrt
(abs(w*z))),
1279
theSqrtWidth(
sqrt
(abs(w*z))) {
1280
if
( w == 0. )
1281
throw
std::logic_error(
"[Generator<BreitWigner>] Zero width. Consider using power()."
);
1282
}
1283
1287
double
lower
()
const
{
return
theLower; }
1288
1292
double
upper
()
const
{
return
theUpper; }
1293
1297
double
pole
()
const
{
return
thePole; }
1298
1302
double
width
()
const
{
return
theWidth; }
1303
1307
double
scale
()
const
{
return
theScale; }
1308
1312
double
offset
()
const
{
return
theOffset; }
1313
1317
double
sqrtWidth
()
const
{
return
theSqrtWidth; }
1318
1322
double
value
(
double
x)
const
{
1323
return
1324
x>=
lower
() && x<=
upper
() ?
1325
1./(
sqr
(x-pole())+abs(width()*pole())) : 0.;
1326
}
1327
1331
double
normalization
()
const
{
1332
return
scale();
1333
}
1334
1339
double
operator()
(
double
r)
const
{
1340
double
res = pole() + sqrtWidth()*tan(sqrtWidth()*(scale()*r+offset()));
1341
if
( res <=
lower
() )
return
lower
()*(1+std::numeric_limits<double>::epsilon());
1342
else
if
( res >=
upper
() )
return
upper
()*(1-std::numeric_limits<double>::epsilon());
1343
else
return
res;
1344
}
1345
1346
};
1347
1353
inline
Generator<BreitWigner>
breitWigner
(
double
z,
double
w,
1354
double
lower,
double
upper) {
1355
return
Generator<BreitWigner>
(z,w,lower,upper);
1356
}
1357
1358
}
1359
1360
}
1361
1362
#endif
// HERWIG_RandomHelpers_H
ThePEG.h
Herwig::RandomHelpers::Generator< BreitWigner >::scale
double scale() const
Return the scale for random numbers.
Definition:
RandomHelpers.h:1307
Herwig::RandomHelpers::Generator< BreitWigner >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:1331
Herwig::RandomHelpers::Generator< BreitWigner >::theOffset
double theOffset
Offset for random mnumbers.
Definition:
RandomHelpers.h:1261
Herwig::RandomHelpers::Generator< BreitWigner >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:1287
Herwig::RandomHelpers::Generator< BreitWigner >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:1292
Herwig::RandomHelpers::Generator< BreitWigner >::sqrtWidth
double sqrtWidth() const
The square root of width times pole.
Definition:
RandomHelpers.h:1317
Herwig::RandomHelpers::Generator< BreitWigner >::width
double width() const
Return the width.
Definition:
RandomHelpers.h:1302
Herwig::RandomHelpers::Generator< BreitWigner >::thePole
double thePole
The position of the pole.
Definition:
RandomHelpers.h:1236
Herwig::RandomHelpers::Generator< BreitWigner >::theSqrtWidth
double theSqrtWidth
The square root of width times pole.
Definition:
RandomHelpers.h:1266
Herwig::RandomHelpers::Generator< BreitWigner >::theScale
double theScale
Scale for random numbers.
Definition:
RandomHelpers.h:1256
Herwig::RandomHelpers::Generator< BreitWigner >::Generator
Generator(double z, double w, double l, double u)
Construct from pole, width and boundaries.
Definition:
RandomHelpers.h:1273
Herwig::RandomHelpers::Generator< BreitWigner >::theWidth
double theWidth
The width.
Definition:
RandomHelpers.h:1241
Herwig::RandomHelpers::Generator< BreitWigner >::offset
double offset() const
Return the offset for random mnumbers.
Definition:
RandomHelpers.h:1312
Herwig::RandomHelpers::Generator< BreitWigner >::theLower
double theLower
The lower bound.
Definition:
RandomHelpers.h:1246
Herwig::RandomHelpers::Generator< BreitWigner >::pole
double pole() const
Return the position of the pole.
Definition:
RandomHelpers.h:1297
Herwig::RandomHelpers::Generator< BreitWigner >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:1339
Herwig::RandomHelpers::Generator< BreitWigner >::theUpper
double theUpper
The upper bound.
Definition:
RandomHelpers.h:1251
Herwig::RandomHelpers::Generator< BreitWigner >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:1322
Herwig::RandomHelpers::Generator< Container< Density > >::value
virtual double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:161
Herwig::RandomHelpers::Generator< Container< Density > >::upper
virtual double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:156
Herwig::RandomHelpers::Generator< Container< Density > >::generator
Generator< Density > generator
The generator.
Definition:
RandomHelpers.h:138
Herwig::RandomHelpers::Generator< Container< Density > >::lower
virtual double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:151
Herwig::RandomHelpers::Generator< Container< Density > >::operator()
virtual double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:172
Herwig::RandomHelpers::Generator< Container< Density > >::Generator
Generator(const Generator< Density > &gen)
Construct from generator.
Definition:
RandomHelpers.h:145
Herwig::RandomHelpers::Generator< Container< Density > >::normalization
virtual double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:166
Herwig::RandomHelpers::Generator< Flat >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:874
Herwig::RandomHelpers::Generator< Flat >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:864
Herwig::RandomHelpers::Generator< Flat >::Generator
Generator(double low, double up)
Construct from boundaries.
Definition:
RandomHelpers.h:858
Herwig::RandomHelpers::Generator< Flat >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:881
Herwig::RandomHelpers::Generator< Flat >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:869
Herwig::RandomHelpers::Generator< Flat >::theLower
double theLower
The lower boundary.
Definition:
RandomHelpers.h:846
Herwig::RandomHelpers::Generator< Flat >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:887
Herwig::RandomHelpers::Generator< Flat >::theUpper
double theUpper
The upper boundary.
Definition:
RandomHelpers.h:851
Herwig::RandomHelpers::Generator< Inverse >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:1066
Herwig::RandomHelpers::Generator< Inverse >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:1034
Herwig::RandomHelpers::Generator< Inverse >::theOffset
double theOffset
Offset for random mnumbers.
Definition:
RandomHelpers.h:1014
Herwig::RandomHelpers::Generator< Inverse >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:1059
Herwig::RandomHelpers::Generator< Inverse >::theUpper
double theUpper
The upper bound.
Definition:
RandomHelpers.h:1004
Herwig::RandomHelpers::Generator< Inverse >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:1039
Herwig::RandomHelpers::Generator< Inverse >::Generator
Generator(double z, double l, double u)
Construct from pole and boundaries.
Definition:
RandomHelpers.h:1021
Herwig::RandomHelpers::Generator< Inverse >::theLower
double theLower
The lower bound.
Definition:
RandomHelpers.h:999
Herwig::RandomHelpers::Generator< Inverse >::thePole
double thePole
The position of the pole.
Definition:
RandomHelpers.h:994
Herwig::RandomHelpers::Generator< Inverse >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:1074
Herwig::RandomHelpers::Generator< Inverse >::pole
double pole() const
Return the position of the pole.
Definition:
RandomHelpers.h:1044
Herwig::RandomHelpers::Generator< Inverse >::scale
double scale() const
Return the scale for random numbers.
Definition:
RandomHelpers.h:1049
Herwig::RandomHelpers::Generator< Inverse >::theScale
double theScale
Scale for random numbers.
Definition:
RandomHelpers.h:1009
Herwig::RandomHelpers::Generator< Inverse >::offset
double offset() const
Return the offset for random mnumbers.
Definition:
RandomHelpers.h:1054
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::theFraction
double theFraction
The fraction of the unit interval considered for the first generator.
Definition:
RandomHelpers.h:647
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:678
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::secondGenerator
const Generator< Density2 > & secondGenerator() const
Return the second generator.
Definition:
RandomHelpers.h:673
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::theSecondGenerator
Generator< Density2 > theSecondGenerator
The second generator.
Definition:
RandomHelpers.h:626
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::theUpper
double theUpper
The upper boundary.
Definition:
RandomHelpers.h:641
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::theLower
double theLower
The lower boundary.
Definition:
RandomHelpers.h:631
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::firstGenerator
const Generator< Density1 > & firstGenerator() const
Return the first generator.
Definition:
RandomHelpers.h:668
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::theIntermediate
double theIntermediate
The transition value.
Definition:
RandomHelpers.h:636
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:688
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::intermediate
double intermediate() const
Return the transition value.
Definition:
RandomHelpers.h:683
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::fraction
double fraction() const
Return the fraction of the unit interval considered for the first generator.
Definition:
RandomHelpers.h:694
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::theFirstGenerator
Generator< Density1 > theFirstGenerator
The first generator.
Definition:
RandomHelpers.h:621
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::operator,
Generator< Piecewise< Piecewise< Density1, Density2 >, Rescale< Density3 > > > operator,(const matcher< Density3 > &thirdGenerator)
Construct piecewise generators.
Definition:
RandomHelpers.h:741
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:709
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:699
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:718
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::operator,
Generator< Piecewise< Piecewise< Density1, Density2 >, Density3 > > operator,(const Generator< Density3 > &thirdGenerator)
Construct piecewise generators.
Definition:
RandomHelpers.h:730
Herwig::RandomHelpers::Generator< Piecewise< Density1, Density2 > >::Generator
Generator(const Generator< Density1 > &firstGen, const Generator< Density2 > &secondGen)
Construct from generators.
Definition:
RandomHelpers.h:654
Herwig::RandomHelpers::Generator< Power >::thePole
double thePole
The position of the pole.
Definition:
RandomHelpers.h:1108
Herwig::RandomHelpers::Generator< Power >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:1194
Herwig::RandomHelpers::Generator< Power >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:1162
Herwig::RandomHelpers::Generator< Power >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:1202
Herwig::RandomHelpers::Generator< Power >::theScale
double theScale
Scale for random numbers.
Definition:
RandomHelpers.h:1128
Herwig::RandomHelpers::Generator< Power >::thePower
double thePower
The power.
Definition:
RandomHelpers.h:1113
Herwig::RandomHelpers::Generator< Power >::offset
double offset() const
Return the offset for random mnumbers.
Definition:
RandomHelpers.h:1182
Herwig::RandomHelpers::Generator< Power >::Generator
Generator(double z, double p, double l, double u)
Construct from pole, power and boundaries.
Definition:
RandomHelpers.h:1140
Herwig::RandomHelpers::Generator< Power >::scale
double scale() const
Return the scale for random numbers.
Definition:
RandomHelpers.h:1177
Herwig::RandomHelpers::Generator< Power >::pole
double pole() const
Return the position of the pole.
Definition:
RandomHelpers.h:1167
Herwig::RandomHelpers::Generator< Power >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:1157
Herwig::RandomHelpers::Generator< Power >::theLower
double theLower
The lower bound.
Definition:
RandomHelpers.h:1118
Herwig::RandomHelpers::Generator< Power >::power
double power() const
Return the power.
Definition:
RandomHelpers.h:1172
Herwig::RandomHelpers::Generator< Power >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:1187
Herwig::RandomHelpers::Generator< Power >::theOffset
double theOffset
Offset for random mnumbers.
Definition:
RandomHelpers.h:1133
Herwig::RandomHelpers::Generator< Power >::theUpper
double theUpper
The upper bound.
Definition:
RandomHelpers.h:1123
Herwig::RandomHelpers::Generator< Remap< Density > >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:241
Herwig::RandomHelpers::Generator< Remap< Density > >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:275
Herwig::RandomHelpers::Generator< Remap< Density > >::generator
const Generator< Density > & generator() const
Return the generator.
Definition:
RandomHelpers.h:236
Herwig::RandomHelpers::Generator< Remap< Density > >::theGenerator
Generator< Density > theGenerator
The underlying generator.
Definition:
RandomHelpers.h:211
Herwig::RandomHelpers::Generator< Remap< Density > >::Generator
Generator(const Generator< Density > &gen, double low, double up)
Construct from generator and new boundaries.
Definition:
RandomHelpers.h:226
Herwig::RandomHelpers::Generator< Remap< Density > >::value
double value(double y) const
Return the density's value.
Definition:
RandomHelpers.h:251
Herwig::RandomHelpers::Generator< Remap< Density > >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:263
Herwig::RandomHelpers::Generator< Remap< Density > >::theUpper
double theUpper
The new upper bound.
Definition:
RandomHelpers.h:221
Herwig::RandomHelpers::Generator< Remap< Density > >::theLower
double theLower
The new lower bound.
Definition:
RandomHelpers.h:216
Herwig::RandomHelpers::Generator< Remap< Density > >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:246
Herwig::RandomHelpers::Generator< Rescale< Density > >::theScale
double theScale
The rescaling factor.
Definition:
RandomHelpers.h:346
Herwig::RandomHelpers::Generator< Rescale< Density > >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:381
Herwig::RandomHelpers::Generator< Rescale< Density > >::theGenerator
Generator< Density > theGenerator
The underlying generator.
Definition:
RandomHelpers.h:341
Herwig::RandomHelpers::Generator< Rescale< Density > >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:388
Herwig::RandomHelpers::Generator< Rescale< Density > >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:371
Herwig::RandomHelpers::Generator< Rescale< Density > >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:396
Herwig::RandomHelpers::Generator< Rescale< Density > >::scale
double scale() const
Return the scale.
Definition:
RandomHelpers.h:366
Herwig::RandomHelpers::Generator< Rescale< Density > >::generator
const Generator< Density > & generator() const
Return the generator.
Definition:
RandomHelpers.h:361
Herwig::RandomHelpers::Generator< Rescale< Density > >::Generator
Generator(const Generator< Density > &gen, double sc)
Construct from generator and scale.
Definition:
RandomHelpers.h:353
Herwig::RandomHelpers::Generator< Rescale< Density > >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:376
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::theFraction
double theFraction
The fraction of the unit interval considered for the first generator.
Definition:
RandomHelpers.h:454
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:489
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::theFirstGenerator
Generator< Density1 > theFirstGenerator
The first generator.
Definition:
RandomHelpers.h:433
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::theSecondGenerator
Generator< Density2 > theSecondGenerator
The second generator.
Definition:
RandomHelpers.h:438
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::firstGenerator
const Generator< Density1 > & firstGenerator() const
Return the first generator.
Definition:
RandomHelpers.h:474
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:484
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:500
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::theUpper
double theUpper
The upper boundary.
Definition:
RandomHelpers.h:448
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::Generator
Generator(const Generator< Density1 > &firstGen, const Generator< Density2 > &secondGen)
Construct from generators.
Definition:
RandomHelpers.h:461
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::secondGenerator
const Generator< Density2 > & secondGenerator() const
Return the second generator.
Definition:
RandomHelpers.h:479
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::theLower
double theLower
The lower boundary.
Definition:
RandomHelpers.h:443
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:514
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:523
Herwig::RandomHelpers::Generator< Sum< Density1, Density2 > >::fraction
double fraction() const
Return the fraction of the unit interval considered for the first generator.
Definition:
RandomHelpers.h:495
Herwig::RandomHelpers::Generator< Zero >::lower
double lower() const
Return the lower bound of the density generated.
Definition:
RandomHelpers.h:938
Herwig::RandomHelpers::Generator< Zero >::normalization
double normalization() const
Return the density's normalization.
Definition:
RandomHelpers.h:955
Herwig::RandomHelpers::Generator< Zero >::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Definition:
RandomHelpers.h:961
Herwig::RandomHelpers::Generator< Zero >::theLower
double theLower
The lower boundary.
Definition:
RandomHelpers.h:920
Herwig::RandomHelpers::Generator< Zero >::theUpper
double theUpper
The upper boundary.
Definition:
RandomHelpers.h:925
Herwig::RandomHelpers::Generator< Zero >::Generator
Generator(double low, double up)
Construct from boundaries.
Definition:
RandomHelpers.h:932
Herwig::RandomHelpers::Generator< Zero >::value
double value(double x) const
Return the density's value.
Definition:
RandomHelpers.h:948
Herwig::RandomHelpers::Generator< Zero >::upper
double upper() const
Return the upper bound of the density generated.
Definition:
RandomHelpers.h:943
Herwig::RandomHelpers::zero
Generator< Zero > zero(double low, double up)
Construct a zero density.
Definition:
RandomHelpers.h:972
Herwig::RandomHelpers::operator*
Generator< Remap< Density > > operator*(const Generator< Density > &gen, const on &interval)
Construct a remapped density generator.
Definition:
RandomHelpers.h:316
Herwig::RandomHelpers::breitWigner
Generator< BreitWigner > breitWigner(double z, double w, double lower, double upper)
Construct the density 1/((x-z)^2 + abs(w z))
Definition:
RandomHelpers.h:1353
Herwig::RandomHelpers::inverse
Generator< Inverse > inverse(double z, double lower, double upper)
Construct the density 1/|x-z|.
Definition:
RandomHelpers.h:1085
Herwig::RandomHelpers::operator+
Generator< Sum< Density1, Density2 > > operator+(const Generator< Density1 > &first, const Generator< Density2 > &second)
Construct the sum of two densities.
Definition:
RandomHelpers.h:539
Herwig::RandomHelpers::power
Generator< Power > power(double z, double p, double lower, double upper)
Construct the density |(x-z)|^p.
Definition:
RandomHelpers.h:1213
Herwig::RandomHelpers::generate
pair< double, double > generate(const Generator< Density > &gen, double r)
Generate a random variable and return its weight.
Definition:
RandomHelpers.h:182
Herwig::RandomHelpers::flat
Generator< Flat > flat(double low, double up)
Construct a constant density.
Definition:
RandomHelpers.h:898
Herwig::RandomHelpers::match
matcher< Density > match(const Generator< Density > &gen)
Indicate that the argument density should be matched to the previous one in a piecewise definition.
Definition:
RandomHelpers.h:573
Herwig::RandomHelpers::piecewise
Generator< Piecewise< ToBeDefined, ToBeDefined > > piecewise()
Construct a piecewise defined density.
Definition:
RandomHelpers.h:822
Herwig::RandomHelpers::sign
double sign(double x)
Small helper.
Definition:
RandomHelpers.h:30
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
ThePEG::Constants::epsilon
constexpr double epsilon
ThePEG::Helicity::intermediate
intermediate
ThePEG
ThePEG::sqrt
double sqrt(int x)
ThePEG::pow
constexpr double pow(double x, ExponentT p)
ThePEG::sqr
constexpr auto sqr(const T &x) -> decltype(x *x)
Herwig::RandomHelpers::BreitWigner
The density 1/((x-z)^2 + abs(w z))
Definition:
RandomHelpers.h:1223
Herwig::RandomHelpers::Container
A density container.
Definition:
RandomHelpers.h:124
Herwig::RandomHelpers::Expression
A density expression.
Definition:
RandomHelpers.h:75
Herwig::RandomHelpers::Flat
A constant density.
Definition:
RandomHelpers.h:833
Herwig::RandomHelpers::Generator< Expression >::value
virtual double value(double x) const =0
Return the density's value.
Herwig::RandomHelpers::Generator< Expression >::operator()
virtual double operator()(double r) const =0
Generate the return value according to the implemented density, given a flat random number on the uni...
Herwig::RandomHelpers::Generator< Expression >::lower
virtual double lower() const =0
Return the lower bound of the density generated.
Herwig::RandomHelpers::Generator< Expression >::normalization
virtual double normalization() const =0
Return the density's normalization.
Herwig::RandomHelpers::Generator< Expression >::upper
virtual double upper() const =0
Return the upper bound of the density generated.
Herwig::RandomHelpers::Generator< Expression >::~Generator
virtual ~Generator()
The destructor.
Definition:
RandomHelpers.h:88
Herwig::RandomHelpers::Generator< Piecewise< Density, ToBeDefined > >::operator,
Generator< Piecewise< Density, Rescale< Density2 > > > operator,(const matcher< Density2 > &secondGen)
Construct piecewise generators.
Definition:
RandomHelpers.h:786
Herwig::RandomHelpers::Generator< Piecewise< Density, ToBeDefined > >::operator,
Generator< Piecewise< Density, Density2 > > operator,(const Generator< Density2 > &secondGen)
Construct piecewise generators.
Definition:
RandomHelpers.h:775
Herwig::RandomHelpers::Generator< Piecewise< Density, ToBeDefined > >::Generator
Generator(const Generator< Density > &gen)
Construct from generator.
Definition:
RandomHelpers.h:767
Herwig::RandomHelpers::Generator< Piecewise< Density, ToBeDefined > >::generator
Generator< Density > generator
The first generator.
Definition:
RandomHelpers.h:762
Herwig::RandomHelpers::Generator< Piecewise< ToBeDefined, ToBeDefined > >::operator,
Generator< Piecewise< Density, ToBeDefined > > operator,(const Generator< Density > &gen)
Construct piecewise generators.
Definition:
RandomHelpers.h:809
Herwig::RandomHelpers::Generator
Define the generator concept.
Definition:
RandomHelpers.h:40
Herwig::RandomHelpers::Generator::operator()
double operator()(double r) const
Generate the return value according to the implemented density, given a flat random number on the uni...
Herwig::RandomHelpers::Generator::normalization
double normalization() const
Return the density's normalization.
Herwig::RandomHelpers::Generator::value
double value(double x) const
Return the density's value.
Herwig::RandomHelpers::Generator::upper
double upper() const
Return the upper bound of the density generated.
Herwig::RandomHelpers::Generator::lower
double lower() const
Return the lower bound of the density generated.
Herwig::RandomHelpers::Inverse
A density 1/|x-z|.
Definition:
RandomHelpers.h:981
Herwig::RandomHelpers::Piecewise
A piecewise defined density.
Definition:
RandomHelpers.h:600
Herwig::RandomHelpers::Power
The density |(x-z)|^p.
Definition:
RandomHelpers.h:1095
Herwig::RandomHelpers::Remap
Remap a density to a new interval.
Definition:
RandomHelpers.h:198
Herwig::RandomHelpers::Rescale
Rescale a density.
Definition:
RandomHelpers.h:328
Herwig::RandomHelpers::Sum
Add two densities.
Definition:
RandomHelpers.h:419
Herwig::RandomHelpers::ToBeDefined
Placeholder when constructing piecewise defined densities.
Definition:
RandomHelpers.h:607
Herwig::RandomHelpers::Zero
A zero density.
Definition:
RandomHelpers.h:907
Herwig::RandomHelpers::matcher
Indicate that the argument density should be matched to the previous one in a piecewise definition.
Definition:
RandomHelpers.h:551
Herwig::RandomHelpers::matcher::generator
Generator< Density > generator
The generator to be matched.
Definition:
RandomHelpers.h:556
Herwig::RandomHelpers::matcher::matcher
matcher(const Generator< Density > &gen)
Construct from generator.
Definition:
RandomHelpers.h:561
Herwig::RandomHelpers::on
Indicate remapping of a density.
Definition:
RandomHelpers.h:291
Herwig::RandomHelpers::on::lower
double lower
The new lower boundary.
Definition:
RandomHelpers.h:296
Herwig::RandomHelpers::on::upper
double upper
The new upper boundary.
Definition:
RandomHelpers.h:301
Herwig::RandomHelpers::on::on
on(double a, double b)
Construct from boundaries.
Definition:
RandomHelpers.h:306
Generated on Thu Jun 20 2024 17:50:53 for Herwig by
1.9.6