ThePEG  1.8.0
MEGroup.h
1 // -*- C++ -*-
2 //
3 // MEGroup.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2007 Leif Lonnblad
5 // Copyright (C) 2009-2010 Simon Platzer
6 //
7 // ThePEG is licenced under version 2 of the GPL, see COPYING for details.
8 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
9 //
10 #ifndef ThePEG_MEGroup_H
11 #define ThePEG_MEGroup_H
12 // This is the declaration of the MEGroup class.
13 
14 #include "ThePEG/MatrixElement/MEBase.h"
15 #include "ThePEG/Handlers/StdDependentXComb.fh"
16 #include "ThePEG/Cuts/Cuts.fh"
17 #include "MEGroup.fh"
18 
19 namespace ThePEG {
20 
32 class MEGroup: public MEBase {
33 
34 public:
35 
41  MEGroup();
42 
46  virtual ~MEGroup();
48 
49 public:
50 
57  virtual unsigned int orderInAlphaS() const { return head()->orderInAlphaS(); }
58 
63  virtual unsigned int orderInAlphaEW() const { return head()->orderInAlphaEW(); }
64 
70  virtual double me2() const { return head()->me2(); }
71 
76  virtual Energy2 scale() const { return head()->scale(); }
77 
83  virtual double alphaS() const { return head()->alphaS(); }
84 
90  virtual double alphaEM() const { return head()->alphaEM(); }
91 
99  virtual void setKinematics();
100 
104  virtual void constructVertex(tSubProPtr sub) { head()->constructVertex(sub); }
105 
110  virtual int nDim() const { return theNDim; }
111 
120  virtual bool generateKinematics(const double * r);
121 
126  virtual bool wantCMS () const { return head()->wantCMS(); }
127 
132  virtual CrossSection dSigHatDR() const { return head()->dSigHatDR(); }
133 
142  virtual bool haveX1X2() const { return head()->haveX1X2(); }
143 
148  virtual bool havePDFWeight1 () const { return head()->havePDFWeight1(); }
149 
154  virtual bool havePDFWeight2 () const { return head()->havePDFWeight2(); }
155 
161  virtual bool keepRandomNumbers() const { return head()->keepRandomNumbers(); }
162 
170  virtual void generateSubCollision(SubProcess & sub) { head()->generateSubCollision(sub); }
171 
176  virtual void clearKinematics();
177 
181  virtual void getDiagrams() const {
182  head()->diagrams();
183  useDiagrams(head());
184  }
185 
193  virtual bool noMirror () const { return head()->noMirror(); }
194 
200  colourGeometries(tcDiagPtr diag) const { return head()->colourGeometries(diag); }
201 
207  virtual const ColourLines &
208  selectColourGeometry(tcDiagPtr diag) const { return head()->selectColourGeometry(diag); }
209 
216  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const {
217  return head()->diagrams(dv);
218  }
219 
226  virtual DiagramIndex diagram(const DiagramVector & dv) const {
227  DiagramIndex res = head()->diagram(dv);
228  return res;
229  }
230 
235  virtual void setXComb(tStdXCombPtr);
236 
242  virtual void flushCaches();
243 
250  virtual void lastEventStatistics() {}
252 
253 public:
254 
258  tMEPtr head() const { return theHead; }
259 
263  const MEVector& dependent() const { return theDependent; }
264 
268  void head(tMEPtr me) { theHead = me; }
269 
274 
280  int dependentOffset(tMEPtr dep) const;
281 
288  const cPDVector& proc,
289  tMEPtr depME,
290  const PartonPairVec& allPBins) const;
291 
298  virtual bool subProcessGroups() const { return true; }
299 
304  virtual bool mcSumDependent() const { return false; }
305 
311 
312 protected:
313 
319 
320 public:
321 
327  virtual bool uniformAdditional() const = 0;
328 
335  tMEPtr depME) const = 0;
336 
337 public:
338 
345  void persistentOutput(PersistentOStream & os) const;
346 
352  void persistentInput(PersistentIStream & is, int version);
354 
358  static void Init();
359 
360 protected:
361 
369  virtual void doinit();
370 
380  virtual void rebind(const TranslationMap & trans);
381 
387  virtual IVector getReferences();
389 
390 private:
391 
396 
401 
406  map<tMEPtr,int> theNDimMap;
407 
411  int theNDim;
412 
418 
419 private:
420 
425 
429  MEGroup & operator=(const MEGroup &);
430 
431 };
432 
433 }
434 
435 
436 namespace ThePEG {
437 
444 template <>
445 struct BaseClassTrait<MEGroup,1> {
447  typedef MEBase NthBase;
448 };
449 
454 template <>
455 struct ClassTraits<MEGroup>: public ClassTraitsBase<MEGroup> {
457  static string className() { return "ThePEG::MEGroup"; }
458 };
459 
462 }
463 
464 #endif /* ThePEG_MEGroup_H */