herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.2.1
MatrixElement
Matchbox
Phasespace
FlatInvertiblePhasespace.h
1
// -*- C++ -*-
2
//
3
// FlatInvertiblePhasespace.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_FlatInvertiblePhasespace_H
10
#define Herwig_FlatInvertiblePhasespace_H
11
//
12
// This is the declaration of the FlatInvertiblePhasespace class.
13
//
14
15
#include "Herwig/MatrixElement/Matchbox/Phasespace/MatchboxPhasespace.h"
16
17
namespace
Herwig
{
18
19
using namespace
ThePEG
;
20
28
class
FlatInvertiblePhasespace
:
public
MatchboxPhasespace
{
29
30
public
:
31
37
FlatInvertiblePhasespace
();
38
42
virtual
~
FlatInvertiblePhasespace
();
44
45
public
:
46
50
virtual
double
generateTwoToNKinematics(
const
double
*,
51
vector<Lorentz5Momentum>& momenta);
52
57
virtual
int
nDimPhasespace
(
int
nFinal)
const
{
58
if
( nFinal == 1 )
59
return
1;
60
return
3*nFinal - 4;
61
}
62
63
public
:
64
68
virtual
bool
isInvertible
()
const
{
return
true
; }
69
74
virtual
double
invertTwoToNKinematics
(
const
vector<Lorentz5Momentum>& momenta,
75
double
* r)
const
{
76
return
invertKinematics(momenta,(momenta[0]+momenta[1]).m(),r);
77
}
78
79
private
:
80
84
double
bisect(
double
v
,
double
n,
85
double
target = -16.,
double
maxLevel = 80.)
const
;
86
90
double
rho
(Energy M, Energy N, Energy m)
const
{
91
return
sqrt
((
sqr
(M)-
sqr
(N+m))*(
sqr
(M)-
sqr
(N-m)))/(8.*
sqr
(M));
92
}
93
97
double
generateIntermediates(vector<Energy>& K,
98
const
double
* r)
const
;
99
103
double
invertIntermediates(
const
vector<Energy>& K,
104
double
* r)
const
;
105
109
double
generateIntermediates(vector<Energy>& M,
110
const
vector<Energy>& m,
111
const
double
* r)
const
;
112
116
double
invertIntermediates(
const
vector<Energy>& M,
117
const
vector<Energy>& m,
118
double
* r)
const
;
119
123
double
generateKinematics(vector<Lorentz5Momentum>& P,
124
Energy Ecm,
125
const
double
* r)
const
;
126
130
double
invertKinematics(
const
vector<Lorentz5Momentum>& P,
131
Energy Ecm,
132
double
* r)
const
;
133
142
long
double
flatWeights(
int
n)
const
;
143
144
public
:
145
152
void
persistentOutput(
PersistentOStream
& os)
const
;
153
159
void
persistentInput(
PersistentIStream
& is,
int
version);
161
168
static
void
Init();
169
170
protected
:
171
178
virtual
IBPtr
clone()
const
;
179
184
virtual
IBPtr
fullclone()
const
;
186
187
188
// If needed, insert declarations of virtual function defined in the
189
// InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
190
191
192
private
:
193
198
FlatInvertiblePhasespace
& operator=(
const
FlatInvertiblePhasespace
&) =
delete
;
199
200
};
201
202
}
203
204
#endif
/* Herwig_FlatInvertiblePhasespace_H */
ThePEG::PersistentIStream
sqrt
double sqrt(int x)
ThePEG::PersistentOStream
ThePEG::IBPtr
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
sqr
constexpr auto sqr(const T &x) -> decltype(x *x)
Herwig::MatchboxPhasespace
MatchboxPhasespace defines an abstract interface to a phase space generator.
Definition:
MatchboxPhasespace.h:79
ThePEG
Herwig::FlatInvertiblePhasespace
FlatInvertiblePhasespace implements flat, invertible phase space generation.
Definition:
FlatInvertiblePhasespace.h:28
Herwig::FlatInvertiblePhasespace::invertTwoToNKinematics
virtual double invertTwoToNKinematics(const vector< Lorentz5Momentum > &momenta, double *r) const
Invert the given phase space point to the random numbers which would have generated it...
Definition:
FlatInvertiblePhasespace.h:74
SpinorType::v
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
Herwig::FlatInvertiblePhasespace::rho
double rho(Energy M, Energy N, Energy m) const
Return rho.
Definition:
FlatInvertiblePhasespace.h:90
Herwig::FlatInvertiblePhasespace::isInvertible
virtual bool isInvertible() const
Return true, if this phase space generator is invertible.
Definition:
FlatInvertiblePhasespace.h:68
Herwig::FlatInvertiblePhasespace::nDimPhasespace
virtual int nDimPhasespace(int nFinal) const
Return the number of random numbers required to produce a given multiplicity final state...
Definition:
FlatInvertiblePhasespace.h:57
Generated on Sat Apr 11 2020 14:50:29 for Herwig by
1.8.13