ThePEG  1.8.0
MEBase.h
1 // -*- C++ -*-
2 //
3 // MEBase.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_MEBase_H
10 #define ThePEG_MEBase_H
11 // This is the declaration of the MEBase class.
12 
13 #include "ThePEG/Handlers/HandlerBase.h"
14 #include "ThePEG/EventRecord/SubProcess.h"
15 #include "ThePEG/MatrixElement/DiagramBase.h"
16 #include "ThePEG/MatrixElement/ColourLines.h"
17 #include "ThePEG/MatrixElement/Amplitude.h"
18 #include "ThePEG/Handlers/LastXCombInfo.h"
19 #include "ThePEG/Handlers/StandardXComb.fh"
20 #include "ReweightBase.h"
21 
22 #include "MEBase.fh"
23 
24 namespace ThePEG {
25 
67 class MEBase: public HandlerBase, public LastXCombInfo<StandardXComb> {
68 
69 public:
70 
72  typedef vector<DiagPtr> DiagramVector;
74  typedef DiagramVector::size_type DiagramIndex;
76  typedef vector<ReweightPtr> ReweightVector;
77 
78 public:
79 
85  MEBase();
86 
90  virtual ~MEBase();
92 
93 public:
94 
101  virtual unsigned int orderInAlphaS() const = 0;
102 
107  virtual unsigned int orderInAlphaEW() const = 0;
108 
114  virtual double me2() const = 0;
115 
120  virtual Energy2 scale() const = 0;
121 
127  virtual double alphaS() const;
128 
134  virtual double alphaEM() const;
135 
140  void setKinematics(tPPair in, const PVector & out);
141 
149  virtual void setKinematics();
150 
154  virtual void constructVertex(tSubProPtr sub);
155 
160  virtual int nDim() const;
161 
170  virtual bool generateKinematics(const double * r) = 0;
171 
176  virtual bool wantCMS() const { return true; }
177 
184  virtual bool headCuts() const { return false; }
185 
190  virtual bool ignoreCuts() const { return false; }
191 
196  virtual bool apply() const { return true; }
197 
202  virtual CrossSection dSigHatDR() const = 0;
203 
212  virtual bool haveX1X2() const { return false; }
213 
218  virtual bool havePDFWeight1() const { return false; }
219 
224  virtual bool havePDFWeight2() const { return false; }
225 
231  virtual bool keepRandomNumbers() const { return false; }
232 
240  virtual void generateSubCollision(SubProcess &);
241 
246  virtual void clearKinematics();
247 
251  virtual void getDiagrams() const = 0;
252 
260  virtual bool noMirror () const { return false; }
261 
265  const DiagramVector & diagrams() const {
266  if ( theDiagrams.empty() ) getDiagrams();
267  return theDiagrams;
268  }
269 
275  colourGeometries(tcDiagPtr diag) const = 0;
276 
282  virtual const ColourLines &
283  selectColourGeometry(tcDiagPtr diag) const;
284 
292  return Selector<DiagramIndex>();
293  }
294 
295 
302  virtual DiagramIndex diagram(const DiagramVector &) const;
303 
308  inline bool reweighted() const {
309  return reweights.size() > 0 || preweights.size() > 0;
310  }
311 
317  double reWeight() const;
318 
324  double preWeight() const;
325 
329  void addReweighter(tReweightPtr rw);
330 
334  void addPreweighter(tReweightPtr rw);
335 
342 
348 
349 public:
350 
356  Energy2 sHat() const { return theLastSHat; }
357 
362  double preweight() const { return lastPreweight; }
363 
369  virtual void flushCaches() {}
370 
375  virtual void setXComb(tStdXCombPtr);
376 
381  const DVector & meInfo() const;
382 
387  void meInfo(const DVector & info) const;
388 
395  int maxMultCKKW() const { return theMaxMultCKKW; }
396 
403  int minMultCKKW() const { return theMinMultCKKW; }
404 
410  virtual void setVetoScales(tSubProPtr) const {}
412 
413 public:
414 
421  void persistentOutput(PersistentOStream & os) const;
422 
428  void persistentInput(PersistentIStream & is, int version);
430 
434  static void Init();
435 
436 protected:
437 
442  void add(DiagPtr dp) const { theDiagrams.push_back(dp); }
443 
447  vector<Lorentz5Momentum> & meMomenta();
449 
455  void lastME2(double v) const;
457 
463  void lastMECrossSection(CrossSection v) const;
465 
472  void lastMEPDFWeight(double v) const;
474 
479  void jacobian(double j);
481 
488  void use(tcMEPtr other);
489 
493  void useDiagrams(tcMEPtr other) const;
494 
495 private:
496 
501 
505  Energy2 theLastSHat;
506 
511 
516 
520  mutable double lastPreweight;
521 
526 
534 
542 
543 private:
544 
549 
553  MEBase & operator=(const MEBase &);
554 
555 };
556 
557 }
558 
559 
560 namespace ThePEG {
561 
568 template <>
569 struct BaseClassTrait<MEBase,1>: public ClassTraitsType {
571  typedef HandlerBase NthBase;
572 };
573 
578 template <>
579 struct ClassTraits<MEBase>: public ClassTraitsBase<MEBase> {
581  static string className() { return "ThePEG::MEBase"; }
582 };
583 
586 }
587 
588 #include "ThePEG/Handlers/StandardXComb.h"
589 
590 #endif /* ThePEG_MEBase_H */