ThePEG  1.8.0
XComb.h
1 // -*- C++ -*-
2 //
3 // XComb.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_XComb_H
10 #define ThePEG_XComb_H
11 // This is the declaration of the XComb class.
12 
13 #include "ThePEG/Config/ThePEG.h"
14 #include "ThePEG/PDF/PartonExtractor.fh"
15 #include "ThePEG/PDF/PartonBin.h"
16 #include "ThePEG/PDF/PartonBinInstance.h"
17 #include "ThePEG/Utilities/AnyReference.h"
18 #include "ThePEG/Utilities/VSelector.h"
19 #include "ThePEG/Utilities/ClassDescription.h"
20 #include "ThePEG/Utilities/Maths.h"
21 #include "ThePEG/EventRecord/Particle.h"
22 #include "ThePEG/Handlers/EventHandler.fh"
23 #include "ThePEG/Cuts/Cuts.fh"
24 
25 namespace ThePEG {
26 
43 class XComb: public Base {
44 
45 public:
46 
52  XComb(Energy newMaxEnergy, const cPDPair & inc,
53  tEHPtr newEventHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW,
54  const PBPair & newPartonBins, tCutsPtr newCuts);
55 
59  XComb();
60 
64  virtual ~XComb();
66 
67 
68 
74  const EventHandler & eventHandler() const { return *theEventHandler; }
75 
80 
85 
89  tCutsPtr cuts() const { return theCuts; }
90 
95  tCascHdlPtr CKKWHandler() const { return theCKKW; }
97 
103  const cPDPair & particles() const { return theParticles; }
104 
108  const cPDPair & partons() const { return thePartons; }
109 
113  const PBPair & partonBins() const { return thePartonBins; }
114 
118  Energy maxEnergy() const { return theMaxEnergy; }
119 
126  bool empty() const { return !theEventHandler; }
128 
132 
136  void clean();
137 
141  void setPartonBinInstances(PBIPair pbis, Energy2 scale);
142 
146  void prepare(const PPair &);
147 
151  const PPair & lastParticles() const { return theLastParticles; }
152 
156  const PPair & lastPartons() const { return theLastPartons; }
157 
161  void lastPartons(PPair pp) { theLastPartons = pp; }
162 
167  tSubProPtr subProcess() const { return theSub; }
168 
173  void subProcess(tSubProPtr);
174 
179 
184 
190 
194  Energy2 lastS() const { return theLastS; }
195 
200  void lastS(Energy2 s) { theLastS = s; }
201 
205  Energy2 lastSHat() const { return theLastSHat; }
206 
211  void lastSHat(Energy2 sh) { theLastSHat = sh; }
212 
216  double lastTau() const { return lastSHat()/lastS(); }
217 
221  double lastY() const { return theLastY; }
222 
226  void lastY(double y) { theLastY = y; }
227 
232  double lastP1() const { return theLastP1P2.first; }
233 
238  double lastP2() const { return theLastP1P2.second; }
239 
244  void lastP1P2(pair<double,double> pp) { theLastP1P2 = pp; }
245 
250  double lastL1() const { return theLastL1L2.first; }
251 
256  double lastL2() const { return theLastL1L2.second; }
257 
262  void lastL1L2(pair<double,double>);
263 
268  double lastX1() const { return theLastX1X2.first; }
269 
274  double lastX2() const { return theLastX1X2.second; }
275 
280  void lastX1X2(pair<double,double>);
281 
286  double lastE1() const { return theLastE1E2.first; }
287 
292  double lastE2() const { return theLastE1E2.second; }
293 
298  void lastE1E2(pair<double,double>);
299 
303  Energy2 lastScale() const { return theLastScale; }
304 
308  void lastScale(Energy2 Q2) { theLastScale = Q2; }
309 
314  double lastAlphaS() const { return theLastAlphaS; }
315 
319  void lastAlphaS(double a) { theLastAlphaS = a; }
320 
325  double lastAlphaEM() const { return theLastAlphaEM; }
326 
330  void lastAlphaEM(double a) { theLastAlphaEM = a; }
332 
333 public:
334 
338  bool hasMeta(int id) const {
339  return theMeta.find(id) != theMeta.end();
340  }
341 
345  template<class T>
346  void meta(int id, T& ref) {
347  theMeta[id] = AnyReference(ref);
348  }
349 
353  void eraseMeta(int id) {
354  theMeta.erase(id);
355  }
356 
360  template<class T>
361  T& meta(int id) const {
362  return theMeta.find(id)->second.cast<T>();
363  }
364 
365 protected:
366 
370  void setPartonBinInfo();
371 
376 
377 public:
378 
385  void persistentOutput(PersistentOStream & os) const;
386 
392  void persistentInput(PersistentIStream & is, int version);
394 
398  static void Init();
399 
400 protected:
401 
405  void lastParticles(const PPair & p) { theLastParticles = p; }
406 
410  void resetPartonBinInstances(const PBIPair & newBins) { thePartonBinInstances = newBins; }
411 
412 private:
413 
418 
423 
428 
433 
438 
443 
448 
453 
458 
463 
468 
472  Energy2 theLastS;
473 
477  Energy2 theLastSHat;
478 
482  double theLastY;
483 
488 
494 
500 
506 
510  Energy2 theLastScale;
511 
516 
521 
526 
533 
539 
543  map<int,AnyReference> theMeta;
544 
545 private:
546 
551 
555  XComb & operator=(const XComb &);
556 
557 };
558 
565 template <>
566 struct BaseClassTrait<XComb,1>: public ClassTraitsType {
568  typedef Base NthBase;
569 };
570 
575 template <>
576 struct ClassTraits<XComb>:
577  public ClassTraitsBase<XComb> {
579  static string className() { return "ThePEG::XComb"; }
580 };
581 
584 }
585 
586 #endif /* ThePEG_XComb_H */