|
|
|||
File indexing completed on 2026-08-06 09:38:20
0001 // -*- C++ -*- 0002 // 0003 // Cuts.h is a part of ThePEG - Toolkit for HEP Event Generation 0004 // Copyright (C) 1999-2019 Leif Lonnblad 0005 // 0006 // ThePEG is licenced under version 3 of the GPL, see COPYING for details. 0007 // Please respect the MCnet academic guidelines, see GUIDELINES for details. 0008 // 0009 #ifndef THEPEG_Cuts_H 0010 #define THEPEG_Cuts_H 0011 // 0012 // This is the declaration of the Cuts class. 0013 // 0014 0015 #include "ThePEG/Interface/Interfaced.h" 0016 #include "Cuts.fh" 0017 #include "OneCutBase.h" 0018 #include "TwoCutBase.h" 0019 #include "MultiCutBase.h" 0020 #include "JetFinder.h" 0021 #include "FuzzyTheta.h" 0022 0023 namespace ThePEG { 0024 0025 /** 0026 * Cuts is a class for implementing kinematical cuts in ThePEG. The 0027 * class itself only implements cuts on the total momentum of the hard 0028 * sub-process, implemented as minimum and maximum values of \f$x_1\f$ 0029 * and \f$x_2\f$ (or \f$\hat{s}=x_1x_2S_{tot}\f$ and 0030 * \f$\hat{y}=\log(x_1/x_2)/2\f$. Further cuts can be implemented 0031 * either by inheriting from this base class, in which the virtual 0032 * cut() function should be overridden, or by assigning objects of 0033 * class OneCutBase, TwoCutBase and MultiCutBase defining cuts on 0034 * single particles, pairs of particles and groups of particles in the 0035 * hard sub-process respectively. 0036 * 0037 * The Cuts object must be initialized specifying the overall 0038 * laboratory frame, giving the total squared invariant mass, \f$S\f$, 0039 * and the rapidity, \f$Y\f$, of the colliding particles in this 0040 * frame. The colliding particles are thus assumed to be directed 0041 * along the \f$z\f$-axis. 0042 * 0043 * For each event, the Cuts object must also be initialized giving the 0044 * squared invarint mass, \f$\hat{s}\f$, and the total rapidity, 0045 * \f$\hat{y}\f$, of the hard sub-process in the center-of-mass frame 0046 * of the colliding particles. Note that this means that the 0047 * transformation between the lab frame and the rest frame of the hard 0048 * sub-process is assumed to be a simple boost along the z-axis. 0049 * 0050 * @see \ref CutsInterfaces "The interfaces" 0051 * defined for Cuts. 0052 */ 0053 class Cuts: public Interfaced { 0054 0055 public: 0056 0057 /** 0058 * A vector of OneCutBase pointers. 0059 */ 0060 typedef vector<OneCutPtr> OneCutVector; 0061 0062 /** 0063 * A vector of TwoCutBase pointers. 0064 */ 0065 typedef vector<TwoCutPtr> TwoCutVector; 0066 0067 /** 0068 * A vector of MultiCutBase pointers. 0069 */ 0070 typedef vector<MultiCutPtr> MultiCutVector; 0071 0072 public: 0073 0074 /** @name Standard constructors and destructors. */ 0075 //@{ 0076 /** 0077 * The default constructor. 0078 */ 0079 Cuts(Energy MhatMin=2*GeV); 0080 //@} 0081 0082 public: 0083 0084 /** @name Initialization functions. */ 0085 //@{ 0086 /** 0087 * Initialize this object specifying the maximum total invariant 0088 * mass squared, \a smax, and the total rapidity, \a Y, of the 0089 * colliding particles (for the maximum invariant mass). A sub-class 0090 * overriding this function must make sure the base-class function 0091 * is called. This function should be called once in the beginning 0092 * of a run. 0093 */ 0094 virtual void initialize(Energy2 smax, double Y); 0095 0096 /** 0097 * Initialize this object for a new event. A sub-class overriding 0098 * this function must make sure the base-class function is called. 0099 * This function is called before the generation of a new 0100 * sub-process, before the incoming partons have been generated. 0101 */ 0102 virtual void initEvent(); 0103 0104 /** 0105 * Set information about the invariant mass squared, \a shat, and 0106 * rapidity, \a yhat, of the hard sub-process. The rapidity should 0107 * be given wrt. the center of mass of the colliding particles. A 0108 * sub-class overriding this function must make sure the base-class 0109 * function is called. This function is called before the generation 0110 * of a new sub-process, after the incoming partons have been 0111 * generated. If \a mirror is true any questions regarding cuts on 0112 * the sub-process in the functions minYStar(tcPDPtr), 0113 * maxYStar(tcPDPtr p), passCuts(const tcPDVector &, const 0114 * vector<LorentzMomentum> &, tcPDPtr, tcPDPtr) and passCuts(const 0115 * tcPVector &, tcPDPtr t1, tcPDPtr) will assume that the z-axis is 0116 * reversed in the sub-process rest frame. Returns false if the 0117 * given values were outside of the cuts. 0118 */ 0119 virtual bool 0120 initSubProcess(Energy2 shat, double yhat, bool mirror = false) const; 0121 //@} 0122 0123 /** @name Check functions to see if a state has passed the cuts or not. */ 0124 //@{ 0125 /** 0126 * Check if the outgoing particles, with the given types and 0127 * momenta, from a sub-process passes the cuts. The particles must 0128 * be given in the rest frame of tha hard sub-process, and the 0129 * initSubProcess must have been called before. Also the types of 0130 * the incoming partons, \a t1 and \a t2, may be given if availible. 0131 */ 0132 virtual bool passCuts(const tcPDVector & ptype, const vector<LorentzMomentum> & p, 0133 tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const; 0134 0135 /** 0136 * Check if the outgoing particles from a sub-process passes the 0137 * cuts. The particles must be given in the rest frame of tha hard 0138 * sub-process, and the initSubProcess must have been called 0139 * before. Also the types of the incoming partons, \a t1 and \a t2, 0140 * may be given if availible. 0141 */ 0142 bool passCuts(const tcPVector & p, 0143 tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const; 0144 0145 /** 0146 * Check if the incoming and outgoing particles in the given 0147 * sub-process passes the cuts. The sub-process must be given in its 0148 * rest frame, and the initSubProcess must have been called before. 0149 */ 0150 bool passCuts(const SubProcess & sub) const; 0151 0152 /** 0153 * Check if the given collision passes the cuts. The collision must 0154 * be given in its rest frame. 0155 */ 0156 bool passCuts(const Collision & coll) const; 0157 //@} 0158 0159 /** @name Access to cuts of the underlying cut objects. */ 0160 //@{ 0161 /** 0162 * Return the minimum allowed squared invariant mass of two outgoing 0163 * partons of type \a pi and \a pj. This function first determines 0164 * the minimum from the corresponding function from in TwoCutBase 0165 * objects. If no minimum was found, one is derived from 0166 * minKTClus(), minDurham(), minKT() and minDeltaR(), if possible. 0167 */ 0168 Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const; 0169 0170 /** 0171 * Return the minimum allowed value of the negative of the squared 0172 * invariant mass of an incoming parton of type \a pi and an 0173 * outgoing parton of type \a po. This function first determines the 0174 * minimum from the corresponding function from in TwoCutBase 0175 * objects. If no minimum was found, one is derived from minKT(), if 0176 * possible. 0177 */ 0178 Energy2 minTij(tcPDPtr pi, tcPDPtr po) const; 0179 0180 /** 0181 * Return the minimum allowed value of \f$\Delta 0182 * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two 0183 * outgoing partons of type \a pi and \a pj. Simply returns the 0184 * maximum of the results from calling the corresponding function in 0185 * the TwoCutBase objects. 0186 */ 0187 double minDeltaR(tcPDPtr pi, tcPDPtr pj) const; 0188 0189 /** 0190 * Return the minimum allowed value of the longitudinally invariant 0191 * \f$k_\perp\f$-algorithms distance measure. This is defined as 0192 * \f$\min(p_{\perp i}, p_{\perp 0193 * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing 0194 * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a 0195 * single outgoing parton. Returns 0 if both partons are incoming. A 0196 * null pointer indicates an incoming parton, hence the type of the 0197 * incoming parton is irrelevant. Simply returns the maximum of the 0198 * results from calling the corresponding function in the TwoCutBase 0199 * objects. 0200 */ 0201 Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const; 0202 0203 /** 0204 * Return the minimum allowed value of the Durham 0205 * \f$k_\perp\f$-algorithms distance measure. This is defined as 0206 * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two 0207 * outgoing partons. Simply returns the maximum of the results from 0208 * calling the corresponding function in the TwoCutBase objects. 0209 */ 0210 double minDurham(tcPDPtr pi, tcPDPtr pj) const; 0211 0212 /** 0213 * Return the minimum allowed value of the transverse momentum of an 0214 * outgoing parton. This function first determines the minimum from 0215 * the corresponding function from in OneCutBase objects. If no 0216 * minimum was found, one is derived from minKTClus(), if possible. 0217 */ 0218 Energy minKT(tcPDPtr p) const; 0219 0220 /** 0221 * Return the minimum allowed pseudo-rapidity of an outgoing parton 0222 * of the given type. The pseudo-rapidity is measured in the lab 0223 * system. Simply returns the maximum of the results from calling 0224 * the corresponding function in the OneCutBase objects. 0225 */ 0226 double minEta(tcPDPtr p) const; 0227 0228 /** 0229 * Return the maximum allowed pseudo-rapidity of an outgoing parton 0230 * of the given type. The pseudo-rapidity is measured in the lab 0231 * system. Simply returns the minimum of the results from calling 0232 * the corresponding function in the OneCutBase objects. 0233 */ 0234 double maxEta(tcPDPtr p) const; 0235 0236 /** 0237 * Return the minimum allowed rapidity of an outgoing parton 0238 * of the given type. The rapidity is measured in the lab 0239 * system. Simply returns the maximum of the results from calling 0240 * the corresponding function in the OneCutBase objects. 0241 */ 0242 double minRapidityMax(tcPDPtr p) const; 0243 0244 /** 0245 * Return the maximum allowed rapidity of an outgoing parton 0246 * of the given type. The rapidity is measured in the lab 0247 * system. Simply returns the minimum of the results from calling 0248 * the corresponding function in the OneCutBase objects. 0249 */ 0250 double maxRapidityMin(tcPDPtr p) const; 0251 0252 /** 0253 * Return the minimum allowed rapidity of an outgoing parton of the 0254 * given type in the center-of-mass system of the hard sub-process. 0255 * Only available after initSubProcess() has been called. 0256 */ 0257 double minYStar(tcPDPtr p) const; 0258 0259 /** 0260 * Return the minimum allowed rapidity of an outgoing parton of the 0261 * given type in the center-of-mass system of the hard sub-process. 0262 * Only available after initSubProcess() has been called. 0263 */ 0264 double maxYStar(tcPDPtr p) const; 0265 0266 /** 0267 * Return the minimum allowed value of the squared invariant mass of 0268 * a set of outgoing partons of the given types. Typically used to 0269 * cut off the tails of the mass of a resonance for 0270 * efficiency. Simply returns the maximum of the results from 0271 * calling the corresponding function in the MultiCutBase objects. 0272 */ 0273 Energy2 minS(const tcPDVector & pv) const; 0274 0275 /** 0276 * Return the maximum allowed value of the squared invariant mass of 0277 * a set of outgoing partons of the given types. Typically used to 0278 * cut off the tails of the mass of a resonance for 0279 * efficiency. Simply returns the minimum of the results from 0280 * calling the corresponding function in the MultiCutBase objects. 0281 */ 0282 Energy2 maxS(const tcPDVector & pv) const; 0283 //@} 0284 0285 /** @name Direct access to underlying cut objects. */ 0286 //@{ 0287 /** 0288 * Return a vector of pointers to objects of the given class (with 0289 * base class OneCutBase). 0290 */ 0291 template <typename T> 0292 vector<typename Ptr<T>::transient_const_pointer> 0293 oneCutObjects() const; 0294 0295 /** 0296 * Return a vector of pointers to objects of the given class (with 0297 * base class TwoCutBase). 0298 */ 0299 template <typename T> 0300 vector<typename Ptr<T>::transient_const_pointer> 0301 twoCutObjects() const; 0302 0303 /** 0304 * Return a vector of pointers to objects of the given class (with 0305 * base class MultiCutBase). 0306 */ 0307 template <typename T> 0308 vector<typename Ptr<T>::transient_const_pointer> 0309 multiCutObjects() const; 0310 0311 /** 0312 * Return the objects defining cuts on single outgoing partons from the 0313 * hard sub-process. 0314 */ 0315 const OneCutVector& oneCuts() const { return theOneCuts; } 0316 0317 /** 0318 * Return the objects defining cuts on pairs of particles in the hard 0319 * sub-process. 0320 */ 0321 const TwoCutVector& twoCuts() const { return theTwoCuts; } 0322 0323 /** 0324 * Return the objects defining cuts on sets of outgoing particles from the 0325 * hard sub-process. 0326 */ 0327 const MultiCutVector& multiCuts() const { return theMultiCuts; } 0328 0329 /** 0330 * Return the jet finder 0331 */ 0332 Ptr<JetFinder>::tptr jetFinder() const { return theJetFinder; } 0333 0334 /** 0335 * Add a OneCutBase object. 0336 */ 0337 void add(tOneCutPtr c) { theOneCuts.push_back(c); } 0338 0339 /** 0340 * Add a TwoCutBase object. 0341 */ 0342 void add(tTwoCutPtr c) { theTwoCuts.push_back(c); } 0343 0344 /** 0345 * Add a MultiCutBase object. 0346 */ 0347 void add(tMultiCutPtr c) { theMultiCuts.push_back(c); } 0348 //@} 0349 0350 public: 0351 0352 /** @name Simple access functions. */ 0353 //@{ 0354 /** 0355 * The maximum allowed total invariant mass squared allowed for 0356 * events to be considered. 0357 */ 0358 Energy2 SMax() const { return theSMax; } 0359 0360 0361 /** 0362 * The total rapidity of the colliding particles corresponding to 0363 * the maximum invariant mass squared, SMax(). 0364 */ 0365 double Y() const { return theY; } 0366 0367 /** 0368 * The invariant mass squared of the hard sub-process of the event 0369 * being considered. 0370 */ 0371 Energy2 currentSHat() const { return theCurrentSHat; } 0372 0373 /** 0374 * The total rapidity of hard sub-process (wrt. the rest system of 0375 * the colliding particles so that currentYHat() + Y() gives the 0376 * true rapidity) of the event being considered. 0377 */ 0378 double currentYHat() const { return theCurrentYHat; } 0379 0380 //@} 0381 0382 /** @name Functions to inquire about specific cuts. */ 0383 //@{ 0384 /** 0385 * The minimum allowed value of \f$\hat{s}\f$. 0386 */ 0387 Energy2 sHatMin() const { return max(sqr(theMHatMin), theX1Min*theX2Min*SMax()); } 0388 0389 /** 0390 * The maximum allowed value of \f$\hat{s}\f$. 0391 */ 0392 Energy2 sHatMax() const { return min(sqr(theMHatMax), theX1Max*theX2Max*SMax()); } 0393 0394 /** 0395 * Check if the given \f$\hat{s}\f$ is within the cuts. 0396 */ 0397 bool sHat(Energy2 sh) const { 0398 return sh > sHatMin() && sh <= sHatMax()*(1.0 + 1000.0*Constants::epsilon); 0399 } 0400 0401 /** 0402 * The minimum allowed value of \f$\sqrt{\hat{s}}\f$. 0403 */ 0404 Energy mHatMin() const { return max(theMHatMin, sqrt(theX1Min*theX2Min*SMax())); } 0405 0406 /** 0407 * The maximum allowed value of \f$\sqrt{\hat{s}}\f$. 0408 */ 0409 Energy mHatMax() const { return min(theMHatMax, sqrt(theX1Max*theX2Max*SMax())); } 0410 0411 /** 0412 * The minimum value of the rapidity of the hard sub-process 0413 * (wrt. the rest system of the colliding particles). 0414 */ 0415 double yHatMin() const; 0416 0417 /** 0418 * The maximum value of the rapidity of the hard sub-process 0419 * (wrt. the rest system of the colliding particles). 0420 */ 0421 double yHatMax() const; 0422 0423 /** 0424 * Check if the given \f$\hat{y}\f$ is within the cuts. 0425 */ 0426 bool yHat(double y) const; 0427 0428 /** 0429 * The minimum value of the positive light-cone fraction of the hard 0430 * sub-process. 0431 */ 0432 double x1Min() const; 0433 0434 /** 0435 * The maximum value of the positive light-cone fraction of the hard 0436 * sub-process. 0437 */ 0438 double x1Max() const; 0439 0440 /** 0441 * Check if the given \f$x_1\f$ is within the cuts. 0442 */ 0443 bool x1(double x) const; 0444 0445 /** 0446 * The minimum value of the negative light-cone fraction of the hard 0447 * sub-process. 0448 */ 0449 double x2Min() const; 0450 0451 /** 0452 * The maximum value of the negative light-cone fraction of the hard 0453 * sub-process. 0454 */ 0455 double x2Max() const; 0456 0457 /** 0458 * Check if the given \f$x_2\f$ is within the cuts. 0459 */ 0460 bool x2(double x) const; 0461 0462 /** 0463 * The minimum allowed value of the scale to be used in PDF's and 0464 * coupling constants. 0465 */ 0466 Energy2 scaleMin() const { return theScaleMin; } 0467 0468 /** 0469 * The maximum allowed value of the scale to be used in PDF's and 0470 * coupling constants. 0471 */ 0472 Energy2 scaleMax() const { return theScaleMax; } 0473 0474 /** 0475 * Check if the given scale is within the cuts. 0476 */ 0477 bool scale(Energy2 Q2) const { return Q2 > scaleMin() && Q2 < scaleMax(); } 0478 0479 /** 0480 * Set true if a matrix element is should be using this cut and is 0481 * mirrored along the z-axis . 0482 */ 0483 bool subMirror() const { return theSubMirror; } 0484 0485 /** 0486 * Return the overall cut weight 0487 */ 0488 double cutWeight() const { return theCutWeight; } 0489 0490 /** 0491 * Set the cut weight as appropriate from the call to the last n-cut 0492 * object. 0493 */ 0494 void lastCutWeight(double w) const { theLastCutWeight = w; } 0495 0496 /** 0497 * Return the fuzziness object 0498 */ 0499 Ptr<FuzzyTheta>::tcptr fuzzy() const { return theFuzzyTheta; } 0500 0501 /** 0502 * Check for value inside the given bounds and update the weight 0503 */ 0504 template<class CutType, class Value> 0505 bool isInside(const Value& v, const Value& lower, const Value& upper, double& weight) const { 0506 if ( !fuzzy() ) { 0507 if ( v >= lower && v <= upper ) 0508 return true; 0509 weight = 0.0; 0510 return false; 0511 } 0512 return fuzzy()->isInside<CutType>(v,lower,upper,weight); 0513 } 0514 0515 /** 0516 * Check for value inside the given bounds and update the weight 0517 */ 0518 template<class CutType, class Value> 0519 bool isLessThan(const Value& v, const Value& upper, double& weight) const { 0520 if ( !fuzzy() ) { 0521 if ( v <= upper ) 0522 return true; 0523 weight = 0.0; 0524 return false; 0525 } 0526 return fuzzy()->isLessThan<CutType>(v,upper,weight); 0527 } 0528 0529 /** 0530 * Check for value inside the given bounds and update the weight 0531 */ 0532 template<class CutType, class Value> 0533 bool isLargerThan(const Value& v, const Value& lower, double& weight) const { 0534 if ( !fuzzy() ) { 0535 if ( v >= lower ) 0536 return true; 0537 weight = 0.0; 0538 return false; 0539 } 0540 return fuzzy()->isLargerThan<CutType>(v,lower,weight); 0541 } 0542 //@} 0543 0544 public: 0545 0546 /** 0547 * Describe the currently active cuts in the log file. 0548 */ 0549 virtual void describe() const; 0550 0551 protected: 0552 0553 /** @name Standard Interfaced functions. */ 0554 //@{ 0555 /** 0556 * Initialize this object. Called in the run phase just before 0557 * a run begins. 0558 */ 0559 virtual void doinitrun(); 0560 //@} 0561 0562 public: 0563 0564 /** @name Functions used by the persistent I/O system. */ 0565 //@{ 0566 /** 0567 * Function used to write out object persistently. 0568 * @param os the persistent output stream written to. 0569 */ 0570 void persistentOutput(PersistentOStream & os) const; 0571 0572 /** 0573 * Function used to read in object persistently. 0574 * @param is the persistent input stream read from. 0575 * @param version the version number of the object when written. 0576 */ 0577 void persistentInput(PersistentIStream & is, int version); 0578 //@} 0579 0580 /** 0581 * The standard Init function used to initialize the interfaces. 0582 * Called exactly once for each class by the class description system 0583 * before the main function starts or 0584 * when this class is dynamically loaded. 0585 */ 0586 static void Init(); 0587 0588 protected: 0589 0590 /** @name Clone Methods. */ 0591 //@{ 0592 /** 0593 * Make a simple clone of this object. 0594 * @return a pointer to the new object. 0595 */ 0596 virtual IBPtr clone() const; 0597 0598 /** Make a clone of this object, possibly modifying the cloned object 0599 * to make it sane. 0600 * @return a pointer to the new object. 0601 */ 0602 virtual IBPtr fullclone() const; 0603 //@} 0604 0605 private: 0606 0607 /** 0608 * Helper function used by the interface. 0609 */ 0610 Energy maxMHatMin() const; 0611 0612 /** 0613 * Helper function used by the interface. 0614 */ 0615 Energy minMHatMax() const; 0616 0617 /** 0618 * Helper function used by the interface. 0619 */ 0620 double maxYHatMin() const; 0621 0622 /** 0623 * Helper function used by the interface. 0624 */ 0625 double minYHatMax() const; 0626 0627 /** 0628 * Helper function used by the interface. 0629 */ 0630 double maxX1Min() const; 0631 0632 /** 0633 * Helper function used by the interface. 0634 */ 0635 double minX1Max() const; 0636 0637 /** 0638 * Helper function used by the interface. 0639 */ 0640 double maxX2Min() const; 0641 0642 /** 0643 * Helper function used by the interface. 0644 */ 0645 double minX2Max() const; 0646 0647 /** 0648 * Helper function used by the interface. 0649 */ 0650 Energy2 maxScaleMin() const; 0651 0652 /** 0653 * Helper function used by the interface. 0654 */ 0655 Energy2 minScaleMax() const; 0656 0657 private: 0658 0659 /** 0660 * The maximum allowed total invariant mass squared allowed for 0661 * events to be considered. 0662 */ 0663 Energy2 theSMax; 0664 0665 /** 0666 * The total rapidity of the colliding particles corresponding to 0667 * the maximum invariant mass squared, SMax(). 0668 */ 0669 double theY; 0670 0671 /** 0672 * The invariant mass squared of the hard sub-process of the event 0673 * being considered. 0674 */ 0675 mutable Energy2 theCurrentSHat; 0676 0677 /** 0678 * The total rapidity of hard sub-process (wrt. the rest system of 0679 * the colliding particles so that currentYHat() + Y() gives the 0680 * true rapidity) of the event being considered. 0681 */ 0682 mutable double theCurrentYHat; 0683 0684 /** 0685 * The minimum allowed value of \f$\sqrt{\hat{s}}\f$. 0686 */ 0687 Energy theMHatMin; 0688 0689 /** 0690 * The maximum allowed value of \f$\sqrt{\hat{s}}\f$. 0691 */ 0692 Energy theMHatMax; 0693 0694 /** 0695 * The minimum value of the rapidity of the hard sub-process 0696 * (wrt. the rest system of the colliding particles). 0697 */ 0698 double theYHatMin; 0699 0700 /** 0701 * The maximum value of the rapidity of the hard sub-process 0702 * (wrt. the rest system of the colliding particles). 0703 */ 0704 double theYHatMax; 0705 0706 /** 0707 * The minimum value of the positive light-cone fraction of the hard 0708 * sub-process. 0709 */ 0710 double theX1Min; 0711 0712 /** 0713 * The maximum value of the positive light-cone fraction of the hard 0714 * sub-process. 0715 */ 0716 double theX1Max; 0717 0718 /** 0719 * The minimum value of the negative light-cone fraction of the hard 0720 * sub-process. 0721 */ 0722 double theX2Min; 0723 0724 /** 0725 * The maximum value of the negative light-cone fraction of the hard 0726 * sub-process. 0727 */ 0728 double theX2Max; 0729 0730 /** 0731 * The minimum allowed value of the scale to be used in PDF's and 0732 * coupling constants. 0733 */ 0734 Energy2 theScaleMin; 0735 0736 /** 0737 * The maximum allowed value of the scale to be used in PDF's and 0738 * coupling constants. 0739 */ 0740 Energy2 theScaleMax; 0741 0742 /** 0743 * The objects defining cuts on single outgoing partons from the 0744 * hard sub-process. 0745 */ 0746 OneCutVector theOneCuts; 0747 0748 /** 0749 * The objects defining cuts on pairs of particles in the hard 0750 * sub-process. 0751 */ 0752 TwoCutVector theTwoCuts; 0753 0754 /** 0755 * The objects defining cuts on sets of outgoing particles from the 0756 * hard sub-process. 0757 */ 0758 MultiCutVector theMultiCuts; 0759 0760 /** 0761 * An optional jet finder used to define cuts on the level of 0762 * reconstructed jets. 0763 */ 0764 Ptr<JetFinder>::ptr theJetFinder; 0765 0766 /** 0767 * Set to true if a matrix element is should be using this cut and is 0768 * mirrored along the z-axis . 0769 */ 0770 mutable bool theSubMirror; 0771 0772 /** 0773 * The overall cut weight 0774 */ 0775 mutable double theCutWeight; 0776 0777 /** 0778 * The cut weight as appropriate from the call to the last n-cut 0779 * object. 0780 */ 0781 mutable double theLastCutWeight; 0782 0783 /** 0784 * The fuzziness object 0785 */ 0786 Ptr<FuzzyTheta>::ptr theFuzzyTheta; 0787 0788 private: 0789 0790 /** 0791 * The static object used to initialize the description of this class. 0792 * Indicates that this is a concrete class with persistent data. 0793 */ 0794 static ClassDescription<Cuts> initCuts; 0795 0796 /** 0797 * The assignment operator is private and must never be called. 0798 * In fact, it should not even be implemented. 0799 */ 0800 Cuts & operator=(const Cuts &) = delete; 0801 0802 }; 0803 0804 } 0805 0806 #include "ThePEG/Utilities/ClassTraits.h" 0807 0808 namespace ThePEG { 0809 0810 /** @cond TRAITSPECIALIZATIONS */ 0811 0812 /** This template specialization informs ThePEG about the 0813 * base classes of Cuts. */ 0814 template <> 0815 struct BaseClassTrait<Cuts,1> { 0816 /** Typedef of the first base class of Cuts. */ 0817 typedef Interfaced NthBase; 0818 }; 0819 0820 /** This template specialization informs ThePEG about the name of 0821 * the Cuts class and the shared object where it is defined. */ 0822 template <> 0823 struct ClassTraits<Cuts> 0824 : public ClassTraitsBase<Cuts> { 0825 /** Return a platform-independent class name */ 0826 static string className() { return "ThePEG::Cuts"; } 0827 }; 0828 0829 /** @endcond */ 0830 0831 } 0832 0833 #endif /* THEPEG_Cuts_H */
| [ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
|
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
|