ThePEG
1.8.0
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
EventRecord
SelectorBase.h
1
// -*- C++ -*-
2
//
3
// SelectorBase.h is a part of ThePEG - Toolkit for HEP Event Generation
4
// Copyright (C) 1999-2011 Leif Lonnblad
5
//
6
// ThePEG is licenced under version 2 of the GPL, see COPYING for details.
7
// Please respect the MCnet academic guidelines, see GUIDELINES for details.
8
//
9
#ifndef ThePEG_SelectorBase_H
10
#define ThePEG_SelectorBase_H
11
// This is the declaration of the SelectorBase class.
12
13
14
#include "
EventConfig.h
"
15
16
namespace
ThePEG {
17
45
class
SelectorBase
{
46
47
public
:
48
52
virtual
~SelectorBase
() {}
53
57
static
bool
Check
(
const
Particle
&) {
return
true
; }
58
62
static
bool
Intermediate
() {
return
true
; }
63
67
static
bool
FinalState
() {
return
true
; }
68
72
static
bool
AllSteps
() {
return
true
; }
73
77
static
bool
AllCollisions
() {
return
true
; }
78
82
virtual
bool
check
(
const
Particle
& p)
const
{
return
Check
(p); }
83
87
virtual
bool
finalState
()
const
{
return
FinalState
(); }
88
92
virtual
bool
intermediate
()
const
{
return
Intermediate
(); }
93
98
virtual
bool
allSteps
()
const
{
return
AllSteps
(); }
99
104
virtual
bool
allCollisions
()
const
{
return
AllCollisions
(); }
105
106
};
107
117
template
<
class
T>
118
struct
ParticleSelector
:
public
SelectorBase
{
119
123
static
bool
Check
(
const
Particle
& p) {
return
T::Check
(p); }
124
128
static
bool
Intermediate
() {
return
T::Intermediate
(); }
129
133
static
bool
FinalState
() {
return
T::FinalState
(); }
134
138
static
bool
AllSteps
() {
return
T::AllSteps
(); }
139
143
static
bool
AllCollisions
() {
return
T::AllCollisions
(); }
144
148
virtual
bool
check
(
const
Particle
& p)
const
{
return
Check
(p); }
149
153
virtual
bool
finalState
()
const
{
return
FinalState
(); }
154
158
virtual
bool
intermediate
()
const
{
return
Intermediate
(); }
159
164
virtual
bool
allSteps
()
const
{
return
AllSteps
(); }
165
170
virtual
bool
allCollisions
()
const
{
return
AllCollisions
(); }
171
172
};
173
178
class
SelectIfNot
:
public
SelectorBase
{
179
180
public
:
181
183
explicit
SelectIfNot
(
const
SelectorBase
& S) :
s
(S) {}
184
188
virtual
bool
check
(
const
Particle
& p)
const
{
return
!
s
.
check
(p); }
189
193
virtual
bool
finalState
()
const
{
return
!
s
.
finalState
(); }
194
198
virtual
bool
intermediate
()
const
{
return
!
s
.
intermediate
(); }
199
204
virtual
bool
allSteps
()
const
{
return
!
s
.
allSteps
(); }
205
210
virtual
bool
allCollisions
()
const
{
return
!
s
.
allCollisions
(); }
211
212
private
:
213
217
const
SelectorBase
&
s
;
218
};
219
225
class
SelectIfBoth
:
public
SelectorBase
{
226
227
public
:
228
232
SelectIfBoth
(
const
SelectorBase
& S1,
const
SelectorBase
& S2)
233
:
s1
(S1),
s2
(S2) {}
234
238
virtual
bool
check
(
const
Particle
& p)
const
{
239
return
s1
.
check
(p) &&
s2
.
check
(p);
240
}
241
245
virtual
bool
finalState
()
const
{
246
return
s1
.
finalState
() &&
s2
.
finalState
();
247
}
248
252
virtual
bool
intermediate
()
const
{
253
return
s1
.
intermediate
() &&
s2
.
intermediate
();
254
}
255
260
virtual
bool
allSteps
()
const
{
261
return
s1
.
allSteps
() &&
s2
.
allSteps
();
262
}
263
268
virtual
bool
allCollisions
()
const
{
269
return
s1
.
allCollisions
() &&
s2
.
allCollisions
();
270
}
271
272
private
:
273
277
const
SelectorBase
&
s1
;
278
282
const
SelectorBase
&
s2
;
283
284
};
285
291
class
SelectIfEither
:
public
SelectorBase
{
292
293
public
:
294
298
SelectIfEither
(
const
SelectorBase
& S1,
const
SelectorBase
& S2)
299
:
s1
(S1),
s2
(S2) {}
300
304
virtual
bool
check
(
const
Particle
& p)
const
{
305
return
s1
.
check
(p) ||
s2
.
check
(p);
306
}
307
311
virtual
bool
finalState
()
const
{
312
return
s1
.
finalState
() ||
s2
.
finalState
();
313
}
314
318
virtual
bool
intermediate
()
const
{
319
return
s1
.
intermediate
() ||
s2
.
intermediate
();
320
}
321
326
virtual
bool
allSteps
()
const
{
327
return
s1
.
allSteps
() ||
s2
.
allSteps
();
328
}
329
334
virtual
bool
allCollisions
()
const
{
335
return
s1
.
allCollisions
() ||
s2
.
allCollisions
();
336
}
337
338
private
:
339
343
const
SelectorBase
&
s1
;
344
348
const
SelectorBase
&
s2
;
349
350
};
351
353
template
<
typename
OutputIterator,
typename
Container>
354
inline
void
copyIfCheck
(OutputIterator r,
const
Container & c,
355
const
SelectorBase
& s) {
356
for
(
typename
Container::const_iterator it = c.begin();
357
it != c.end(); ++it )
358
if
( s.
check
(**it) ) *r++ = *it;
359
}
360
361
}
362
363
#endif
/* ThePEG_SelectorBase_H */
Generated on Sat Jun 16 2012 16:51:05 for ThePEG by
1.8.1.1