ThePEG  1.8.0
Cuts.h
1 // -*- C++ -*-
2 //
3 // Cuts.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_Cuts_H
10 #define THEPEG_Cuts_H
11 //
12 // This is the declaration of the Cuts class.
13 //
14 
15 #include "ThePEG/Interface/Interfaced.h"
16 #include "Cuts.fh"
17 #include "OneCutBase.h"
18 #include "TwoCutBase.h"
19 #include "MultiCutBase.h"
20 #include "JetFinder.h"
21 
22 namespace ThePEG {
23 
52 class Cuts: public Interfaced {
53 
54 public:
55 
59  typedef vector<OneCutPtr> OneCutVector;
60 
64  typedef vector<TwoCutPtr> TwoCutVector;
65 
69  typedef vector<MultiCutPtr> MultiCutVector;
70 
71 public:
72 
78  Cuts(Energy MhatMin=2*GeV);
79 
83  virtual ~Cuts();
85 
86 public:
87 
98  virtual void initialize(Energy2 smax, double Y);
99 
106  virtual void initEvent();
107 
123  virtual bool
124  initSubProcess(Energy2 shat, double yhat, bool mirror = false) const;
126 
136  virtual bool passCuts(const tcPDVector & ptype, const vector<LorentzMomentum> & p,
137  tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const;
138 
146  bool passCuts(const tcPVector & p,
147  tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const;
148 
154  bool passCuts(const SubProcess & sub) const;
155 
160  bool passCuts(const Collision & coll) const;
162 
172  Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const;
173 
182  Energy2 minTij(tcPDPtr pi, tcPDPtr po) const;
183 
191  double minDeltaR(tcPDPtr pi, tcPDPtr pj) const;
192 
205  Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const;
206 
214  double minDurham(tcPDPtr pi, tcPDPtr pj) const;
215 
222  Energy minKT(tcPDPtr p) const;
223 
230  double minEta(tcPDPtr p) const;
231 
238  double maxEta(tcPDPtr p) const;
239 
246  double minRapidityMax(tcPDPtr p) const;
247 
254  double maxRapidityMin(tcPDPtr p) const;
255 
261  double minYStar(tcPDPtr p) const;
262 
268  double maxYStar(tcPDPtr p) const;
269 
277  Energy2 minS(const tcPDVector & pv) const;
278 
286  Energy2 maxS(const tcPDVector & pv) const;
288 
295  template <typename T>
296  vector<typename Ptr<T>::transient_const_pointer>
297  oneCutObjects() const;
298 
303  template <typename T>
304  vector<typename Ptr<T>::transient_const_pointer>
305  twoCutObjects() const;
306 
311  template <typename T>
312  vector<typename Ptr<T>::transient_const_pointer>
313  multiCutObjects() const;
314 
319  const OneCutVector& oneCuts() const { return theOneCuts; }
320 
325  const TwoCutVector& twoCuts() const { return theTwoCuts; }
326 
331  const MultiCutVector& multiCuts() const { return theMultiCuts; }
332 
337 
341  void add(tOneCutPtr c) { theOneCuts.push_back(c); }
342 
346  void add(tTwoCutPtr c) { theTwoCuts.push_back(c); }
347 
351  void add(tMultiCutPtr c) { theMultiCuts.push_back(c); }
353 
354 public:
355 
362  Energy2 SMax() const { return theSMax; }
363 
364 
369  double Y() const { return theY; }
370 
375  Energy2 currentSHat() const { return theCurrentSHat; }
376 
382  double currentYHat() const { return theCurrentYHat; }
383 
385 
391  Energy2 sHatMin() const { return max(sqr(theMHatMin), theX1Min*theX2Min*SMax()); }
392 
396  Energy2 sHatMax() const { return min(sqr(theMHatMax), theX1Max*theX2Max*SMax()); }
397 
401  bool sHat(Energy2 sh) const {
402  return sh > sHatMin() && sh <= sHatMax()*(1.0 + 1000.0*Constants::epsilon);
403  }
404 
408  Energy mHatMin() const { return max(theMHatMin, sqrt(theX1Min*theX2Min*SMax())); }
409 
413  Energy mHatMax() const { return min(theMHatMax, sqrt(theX1Max*theX2Max*SMax())); }
414 
419  double yHatMin() const;
420 
425  double yHatMax() const;
426 
430  bool yHat(double y) const;
431 
436  double x1Min() const;
437 
442  double x1Max() const;
443 
447  bool x1(double x) const;
448 
453  double x2Min() const;
454 
459  double x2Max() const;
460 
464  bool x2(double x) const;
465 
470  Energy2 scaleMin() const { return theScaleMin; }
471 
476  Energy2 scaleMax() const { return theScaleMax; }
477 
481  bool scale(Energy2 Q2) const { return Q2 > scaleMin() && Q2 < scaleMax(); }
482 
487  bool subMirror() const { return theSubMirror; }
489 
490 public:
491 
495  virtual void describe() const;
496 
497 protected:
498 
505  virtual void doinitrun();
507 
508 public:
509 
516  void persistentOutput(PersistentOStream & os) const;
517 
523  void persistentInput(PersistentIStream & is, int version);
525 
532  static void Init();
533 
534 protected:
535 
542  virtual IBPtr clone() const;
543 
548  virtual IBPtr fullclone() const;
550 
551 private:
552 
556  Energy maxMHatMin() const;
557 
561  Energy minMHatMax() const;
562 
566  double maxYHatMin() const;
567 
571  double minYHatMax() const;
572 
576  double maxX1Min() const;
577 
581  double minX1Max() const;
582 
586  double maxX2Min() const;
587 
591  double minX2Max() const;
592 
596  Energy2 maxScaleMin() const;
597 
601  Energy2 minScaleMax() const;
602 
603 private:
604 
609  Energy2 theSMax;
610 
615  double theY;
616 
621  mutable Energy2 theCurrentSHat;
622 
628  mutable double theCurrentYHat;
629 
634 
639 
644  double theYHatMin;
645 
650  double theYHatMax;
651 
656  double theX1Min;
657 
662  double theX1Max;
663 
668  double theX2Min;
669 
674  double theX2Max;
675 
680  Energy2 theScaleMin;
681 
686  Energy2 theScaleMax;
687 
693 
699 
705 
711 
716  mutable bool theSubMirror;
717 
718 private:
719 
725 
730  Cuts & operator=(const Cuts &);
731 
732 };
733 
734 }
735 
736 #include "ThePEG/Utilities/ClassTraits.h"
737 
738 namespace ThePEG {
739 
744 template <>
745 struct BaseClassTrait<Cuts,1> {
747  typedef Interfaced NthBase;
748 };
749 
752 template <>
753 struct ClassTraits<Cuts>
754  : public ClassTraitsBase<Cuts> {
756  static string className() { return "ThePEG::Cuts"; }
757 };
758 
761 }
762 
763 #endif /* THEPEG_Cuts_H */