herwig
is hosted by
Hepforge
,
IPPP Durham
Herwig
7.3.0
Models
General
HPDiagram.h
1
// -*- C++ -*-
2
//
3
// HPDiagram.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_HPDiagram_H
10
#define HERWIG_HPDiagram_H
11
//
12
// This is the declaration of the HPDiagram struct.
13
//
14
15
#include "ThePEG/Persistency/PersistentOStream.h"
16
#include "ThePEG/Persistency/PersistentIStream.h"
17
#include "ThePEG/Helicity/Vertex/VertexBase.h"
18
19
namespace
Herwig
{
20
using namespace
ThePEG
;
21
using
Helicity::VertexBasePtr;
22
24
typedef
pair<long, long>
IDPair
;
25
27
typedef
pair<bool, bool>
BPair
;
28
30
typedef
VertexBasePtr
VBPtr
;
31
33
typedef
pair<VBPtr, VBPtr>
VBPair
;
34
36
typedef
pair<unsigned int, double>
CFPair
;
37
42
struct
HPDiagram
{
43
45
enum
Channel
{UNDEFINED = -1, sChannel, tChannel, fourPoint};
46
48
HPDiagram
() :
incoming
(make_pair(0, 0)),
outgoing
(make_pair(0, 0)),
49
ordered
(make_pair(true,true)),
channelType
(UNDEFINED),
50
colourFlow
(0),
ids
(4, 0) {}
51
53
HPDiagram
(
IDPair
a,
IDPair
b)
54
:
incoming
(a),
outgoing
(b),
ordered
(make_pair(true,true)),
55
channelType
(UNDEFINED),
colourFlow
(0),
ids
(4, 0){
56
ids
[0] =
incoming
.first;
57
ids
[1] =
incoming
.second;
58
ids
[2] =
outgoing
.first;
59
ids
[3] =
outgoing
.second;
60
}
61
63
IDPair
incoming
;
64
66
IDPair
outgoing
;
67
69
BPair
ordered
;
70
72
PDPtr
intermediate
;
73
75
VBPair
vertices
;
76
78
Channel
channelType
;
79
81
vector<CFPair>
colourFlow
;
82
84
vector<long>
ids
;
85
90
bool
sameProcess
(
const
HPDiagram
& x)
const
{
91
return
( x.
incoming
==
incoming
&& x.
outgoing
==
outgoing
);
92
}
93
};
94
98
inline
bool
operator==
(
const
HPDiagram
& x,
const
HPDiagram
& y) {
99
// check incoming
100
if
( x.
incoming
!= y.
incoming
)
return
false
;
101
// check type of diagram
102
if
( x.
channelType
!= y.
channelType
)
return
false
;
103
if
( x.
outgoing
== y.
outgoing
&&
104
x.
ordered
== y.
ordered
) {
105
// 4 point
106
if
(x.
channelType
==HPDiagram::fourPoint) {
107
// check vertex
108
return
x.
vertices
.first==y.
vertices
.first;
109
}
110
// all others
111
else
{
112
// check vertex
113
if
(x.
vertices
.first != y.
vertices
.first ||
114
x.
vertices
.second != y.
vertices
.second )
115
return
false
;
116
// check intermediate
117
return
x.
intermediate
== y.
intermediate
;
118
}
119
}
120
//diagram is also the same if the outgoing particles are
121
//swapped and the ordering is opposite
122
else
if
( x.
outgoing
.first != x.
outgoing
.second &&
123
y.
outgoing
.first != y.
outgoing
.second &&
124
x.
outgoing
.first == y.
outgoing
.second &&
125
x.
outgoing
.second == y.
outgoing
.first &&
126
x.
channelType
== y.
channelType
) {
127
// 4 point
128
if
(x.
channelType
==HPDiagram::fourPoint) {
129
// check vertex
130
return
x.
vertices
.first==y.
vertices
.first;
131
}
132
// t/u channel
133
else
if
(x.
channelType
==HPDiagram::tChannel) {
134
// check vertex and intermediate
135
if
(x.
vertices
.first == y.
vertices
.first &&
136
x.
vertices
.second == y.
vertices
.second &&
137
x.
intermediate
== y.
intermediate
)
138
return
true
;
139
tPDPtr
inter = x.
intermediate
;
140
if
(inter->CC()) inter = inter->CC();
141
if
(x.
vertices
.first == y.
vertices
.second &&
142
x.
vertices
.second == y.
vertices
.first &&
143
inter == y.
intermediate
)
144
return
true
;
145
}
146
// s-channel
147
else
{
148
// check vertex
149
if
(x.
vertices
.first != y.
vertices
.first ||
150
x.
vertices
.second != y.
vertices
.second )
151
return
false
;
152
// check intermediate
153
return
x.
intermediate
== y.
intermediate
;
154
}
155
}
156
return
false
;
157
}
158
163
inline
bool
operator<
(
const
HPDiagram
& x,
const
HPDiagram
& y) {
164
for
(
size_t
i = 0; i < 4; ++i ) {
165
if
( x.
ids
[i] < y.
ids
[i] )
166
return
true
;
167
else
if
( x.
ids
[i] > y.
ids
[i] )
168
return
false
;
169
}
170
return
false
;
171
}
172
176
inline
ostream &
operator<<
(ostream & os,
const
HPDiagram
& diag) {
177
os << diag.
incoming
.first <<
" "
<< diag.
incoming
.second <<
" -> "
;
178
if
(diag.
intermediate
)
179
os << diag.
intermediate
->id() <<
" -> "
;
180
os << diag.
outgoing
.first <<
" "
<< diag.
outgoing
.second
181
<<
" channel: "
<< diag.
channelType
<<
" "
;
182
if
(diag.
channelType
== HPDiagram::tChannel)
183
os <<
"ordering "
<< diag.
ordered
.first <<
" "
184
<< diag.
ordered
.second <<
" "
;
185
for
(
size_t
cf = 0; cf < diag.
colourFlow
.size(); ++cf)
186
os <<
"("
<< diag.
colourFlow
[cf].first <<
","
187
<<diag.
colourFlow
[cf].second <<
")"
;
188
os <<
'\n'
;
189
return
os;
190
}
191
197
inline
PersistentOStream
&
operator<<
(
PersistentOStream
& os,
198
const
HPDiagram
& x) {
199
os << x.
incoming
<< x.
outgoing
<< x.
ordered
<< x.
intermediate
200
<< x.
vertices
<< x.
channelType
<< x.
colourFlow
<< x.
ids
;
201
return
os;
202
}
203
209
inline
PersistentIStream
&
operator>>
(
PersistentIStream
& is,
210
HPDiagram
& x) {
211
int
chan = -1;
212
is >> x.
incoming
>> x.
outgoing
>> x.
ordered
>> x.
intermediate
213
>> x.
vertices
>> chan >> x.
colourFlow
>> x.
ids
;
214
x.
channelType
=
HPDiagram::Channel
(chan);
215
return
is;
216
}
217
}
218
219
#endif
/* HERWIG_HPDiagram_H */
ThePEG::PersistentIStream
ThePEG::PersistentOStream
Herwig
-*- C++ -*-
Definition:
BasicConsistency.h:17
Herwig::BPair
pair< bool, bool > BPair
Pair of bool's.
Definition:
HPDiagram.h:27
Herwig::CFPair
pair< unsigned int, double > CFPair
Pair of int,double.
Definition:
HPDiagram.h:36
Herwig::IDPair
pair< long, long > IDPair
Pair of particle ids.
Definition:
HPDiagram.h:24
Herwig::VBPtr
VertexBasePtr VBPtr
Convenient typedef of VertexBasePtr.
Definition:
HPDiagram.h:30
Herwig::operator<
bool operator<(const HPDiagram &x, const HPDiagram &y)
Test whether one diagram is 'less' than another.
Definition:
HPDiagram.h:163
Herwig::VBPair
pair< VBPtr, VBPtr > VBPair
Pair of VertexBasePtrs.
Definition:
HPDiagram.h:33
ThePEG
ThePEG::tPDPtr
ThePEG::Ptr< ParticleData >::transient_pointer tPDPtr
ThePEG::operator>>
PersistentIStream & operator>>(PersistentIStream &is, HandlerGroup< HDLR > &hg)
ThePEG::operator==
bool operator==(const LorentzVector< Value > &a, const LorentzVector< Value > &b)
ThePEG::PDPtr
ThePEG::Ptr< ParticleData >::pointer PDPtr
ThePEG::operator<<
ostream & operator<<(ostream &, const Collision &)
Herwig::HPDiagram
The HPDiagram struct contains information about a 2->2 hard-process that has been automatically gener...
Definition:
HPDiagram.h:42
Herwig::HPDiagram::intermediate
PDPtr intermediate
ParticleData pointer to intermediate, null for 4-point vertices.
Definition:
HPDiagram.h:72
Herwig::HPDiagram::incoming
IDPair incoming
Incoming particle id's.
Definition:
HPDiagram.h:63
Herwig::HPDiagram::ids
vector< long > ids
Store the ids in a vector for easy use of comparison operator.
Definition:
HPDiagram.h:84
Herwig::HPDiagram::sameProcess
bool sameProcess(const HPDiagram &x) const
Test whether this and x are the same process.
Definition:
HPDiagram.h:90
Herwig::HPDiagram::ordered
BPair ordered
Particle ordering for t-channel diagrams.
Definition:
HPDiagram.h:69
Herwig::HPDiagram::Channel
Channel
Enumeration for channel type.
Definition:
HPDiagram.h:45
Herwig::HPDiagram::vertices
VBPair vertices
The two vertices for the diagram.
Definition:
HPDiagram.h:75
Herwig::HPDiagram::outgoing
IDPair outgoing
Outgoing particle id's.
Definition:
HPDiagram.h:66
Herwig::HPDiagram::colourFlow
vector< CFPair > colourFlow
Store colour flow information.
Definition:
HPDiagram.h:81
Herwig::HPDiagram::HPDiagram
HPDiagram()
Standard Constructor.
Definition:
HPDiagram.h:48
Herwig::HPDiagram::channelType
Channel channelType
Enum of channel type.
Definition:
HPDiagram.h:78
Herwig::HPDiagram::HPDiagram
HPDiagram(IDPair a, IDPair b)
Constructor taking ids as arguments.
Definition:
HPDiagram.h:53
Generated on Thu Jun 20 2024 17:50:53 for Herwig by
1.9.6