ThePEG  1.8.0
StandardXComb.h
1 // -*- C++ -*-
2 //
3 // StandardXComb.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2011 Leif Lonnblad
5 // Copyright (C) 2009-2011 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_StandardXComb_H
11 #define ThePEG_StandardXComb_H
12 // This is the declaration of the StandardXComb class.
13 
14 #include "ThePEG/Config/ThePEG.h"
15 #include "SubProcessHandler.fh"
16 #include "ThePEG/PDF/PartonExtractor.fh"
17 #include "ThePEG/PDF/PartonBin.h"
18 #include "ThePEG/PDF/PartonBinInstance.h"
19 #include "ThePEG/Utilities/VSelector.h"
20 #include "ThePEG/Utilities/ClassDescription.h"
21 #include "ThePEG/Utilities/Maths.h"
22 #include "ThePEG/Utilities/XSecStat.h"
23 #include "ThePEG/EventRecord/Particle.h"
24 #include "ThePEG/MatrixElement/MEBase.h"
25 #include "ThePEG/Handlers/XComb.h"
26 #include "ThePEG/Handlers/StandardEventHandler.h"
27 #include "ThePEG/Handlers/SubProcessHandler.fh"
28 #include "StandardXComb.fh"
29 
30 namespace ThePEG {
31 
53 class StandardXComb: public XComb {
54 
55 public:
56 
59 
62 
64  friend class MEBase;
65 
66 public:
67 
73  StandardXComb(Energy newMaxEnergy, const cPDPair & inc,
74  tEHPtr newEventHandler,tSubHdlPtr newSubProcessHandler,
75  tPExtrPtr newExtractor, tCascHdlPtr newCKKW,
76  const PBPair & newPartonBins, tCutsPtr newCuts, tMEPtr newME,
77  const DiagramVector & newDiagrams, bool mir,
78  tStdXCombPtr newHead = tStdXCombPtr());
79 
83  StandardXComb();
84 
88  virtual ~StandardXComb();
89 
93  StandardXComb(tMEPtr me, const tPVector & parts, DiagramIndex i);
94 
96 
104 
108  tMEPtr matrixElement() const { return theME; }
109 
115  tStdXCombPtr head() const { return theHead; }
116 
120  void head(tStdXCombPtr headXC) { theHead = headXC; }
122 
128  virtual bool checkInit();
129 
134  int nDim() const { return theNDim; }
135 
139  bool willPassCuts() const;
140 
146  virtual CrossSection dSigDR(const pair<double,double> ll, int nr, const double * r);
147 
151  double lastPDFWeight() const { return theLastPDFWeight; }
152 
157 
161  virtual tSubProPtr construct();
163 
169  virtual const XSecStat & stats() const { return theStats; }
170 
175  virtual void select(double weight) { theStats.select(weight); }
176 
180  virtual void accept() { theStats.accept(); }
181 
185  void reweight(double oldWeight, double newWeight) {
186  theStats.reweight(oldWeight,newWeight);
187  }
188 
194  virtual void reject(double weight = 1.0) { theStats.reject(weight); }
195 
199  virtual void reset() { theStats.reset(); }
201 
207  const DiagramVector & diagrams() const { return theDiagrams; }
208 
213  bool mirror() const { return isMirror; }
214 
220  const vector<Lorentz5Momentum> & meMomenta() const { return theMEMomenta; }
221 
226 
232  const cPDVector & mePartonData() const { return theMEPartonData; }
233 
238 
244  const DVector & meInfo() const { return theMEInfo; }
245 
251  void meInfo(const DVector & info) { theMEInfo = info; }
252 
258  const DVector& lastRandomNumbers() const { return theLastRandomNumbers; }
259 
264  double jacobian() const { return theLastJacobian; }
265 
271  double lastME2() const { return theLastME2; }
272 
279 
286  double lastMEPDFWeight() const { return theLastMEPDFWeight; }
288 
289 protected:
290 
295  virtual void newSubProcess(bool group = false);
296 
302  vector<Lorentz5Momentum> & meMomenta() { return theMEMomenta; }
303 
310 
317 
322 
326  void lastPDFWeight(double w) { theLastPDFWeight = w; }
327 
332 
337  void jacobian(double j) { theLastJacobian = j; }
338 
344  void lastME2(double v) { theLastME2 = v; }
345 
352 
359  void lastMEPDFWeight(double v) { theLastMEPDFWeight = v; }
360 
361 public:
362 
369  void persistentOutput(PersistentOStream & os) const;
370 
376  void persistentInput(PersistentIStream & is, int version);
378 
382  static void Init();
383 
384 private:
385 
390 
395 
400 
405 
410  bool isMirror;
411 
416  int theNDim;
417 
418 protected:
419 
424  pair<int,int> partonDims;
425 
426 private:
427 
433  vector<Lorentz5Momentum> theMEMomenta;
434 
441 
446 
453 
460 
465 
470 
476 
482  double theLastME2;
483 
490 
498 
505 
506 private:
507 
512 
517 
518 };
519 
526 template <>
527 struct BaseClassTrait<StandardXComb,1>: public ClassTraitsType {
529  typedef XComb NthBase;
530 };
531 
536 template <>
537 struct ClassTraits<StandardXComb>:
538  public ClassTraitsBase<StandardXComb> {
540  static string className() { return "ThePEG::StandardXComb"; }
541 };
542 
545 }
546 
547 #endif /* ThePEG_StandardXComb_H */