ThePEG  1.8.0
Matcher.h
1 // -*- C++ -*-
2 //
3 // Matcher.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_Matcher_H
10 #define ThePEG_Matcher_H
11 // This is the declaration of the Matcher class.
12 
13 #include "MatcherBase.h"
14 
15 namespace ThePEG {
16 
26 template <class T>
27 class Matcher: public MatcherBase {
28 
29 public:
30 
36  virtual ~Matcher();
38 
44  static PMPtr Create(const string & newName, string antiName);
48  virtual PMPtr pmclone() const;
50 
51 
52 protected:
53 
60  virtual IBPtr clone() const;
61 
66  virtual IBPtr fullclone() const;
68 
69 
76  virtual bool check(const ParticleData & pd) const { return T::Check(pd); }
77 
83  static bool Check(const ParticleData & pd) { return T::Check(pd); }
85 
86 protected:
87 
91  static void setCC(tPMPtr pm, tPMPtr apm) { MatcherBase::setCC(pm,apm); }
92 
93 private:
94 
100 
101 };
102 
107 struct MatcherType {};
108 
113 template <typename T>
114 struct BaseClassTrait<Matcher<T>,1>: public ClassTraitsType {
116  typedef MatcherBase NthBase;
117 };
118 
122 template <typename T>
123 struct ClassTraits< Matcher<T> >: public ClassTraitsBase< Matcher<T> > {
125  static string className() {
126  return "ThePEG::Matcher<" + T::className() + ">";
127  }
128 };
129 
132 }
133 
134 #ifndef ThePEG_TEMPLATES_IN_CC_FILE
135 #include "Matcher.tcc"
136 #endif
137 
138 #endif /* ThePEG_Matcher_H */