Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:25

0001 // -*- C++ -*-
0002 #ifndef HERWIG_HardTree_H
0003 #define HERWIG_HardTree_H
0004 //
0005 // This is the declaration of the HardTree class.
0006 //
0007 
0008 #include "ThePEG/Config/ThePEG.h"
0009 #include "Herwig/Shower/QTilde/Base/ShowerProgenitor.h"
0010 #include "Herwig/Shower/QTilde/Base/ShowerTree.h"
0011 #include "Herwig/Shower/QTilde/SplittingFunctions/SudakovFormFactor.h"
0012 #include "Herwig/Shower/RealEmissionProcess.fh"
0013 #include "HardBranching.h"
0014 #include "HardTree.fh"
0015 
0016 namespace Herwig {
0017 
0018 using namespace ThePEG;
0019 /**
0020  * The HardTree class is designed to contain the information required
0021  * to implement the POWHEG approach for Monte Carlo at next-to-leading order.
0022  */
0023 class HardTree : public Base {
0024 
0025   /**
0026    *  Output operator for testing
0027    */
0028   friend ostream & operator << (ostream &, const HardTree & );
0029 
0030 public:
0031 
0032   /**
0033    * The default constructor.
0034    */
0035   HardTree(vector<HardBranchingPtr>, vector<HardBranchingPtr>, ShowerInteraction);
0036 
0037   /**
0038    *  Contructor from Real emission process
0039    */
0040   HardTree(RealEmissionProcessPtr real);
0041 
0042   /**
0043    *  Match particles in the ShowerTree to branchings in the HardTree
0044    */
0045   bool connect(ShowerParticlePtr particle, HardBranchingPtr branching) {
0046     if(branchings_.find(branching)==branchings_.end()) return false;
0047     particles_[particle]=branching;
0048     return true;
0049   }
0050 
0051   /**
0052    *  Match the prticles in the ShowerTree to the branchings in the HardTree
0053    */
0054   bool connect(ShowerTreePtr);
0055   
0056   /**
0057    *  Access the map between the ShowerParticle and the HardBranching
0058    */
0059   map<ShowerParticlePtr,tHardBranchingPtr> & particles() 
0060   {return particles_;}
0061 
0062   /**
0063    *  Access the set of branchings
0064    */
0065   set<HardBranchingPtr> & branchings() {return branchings_;}
0066 
0067   /**
0068    * Access the incoming branchings
0069    */
0070   set<HardBranchingPtr> & incoming() {return spacelike_;}
0071 
0072   /**
0073    *  Type of interaction
0074    */
0075   ShowerInteraction interaction() {return interaction_;}
0076 
0077   /**
0078    *  Get the Rotation to be applied to the tree
0079    */
0080   LorentzRotation showerRot() { return showerRot_; }
0081 
0082   /**
0083    *  Set the Rotation to be applied to the tree
0084    */
0085   void showerRot( LorentzRotation r ) { showerRot_ = r; }
0086 
0087   /**
0088    *  Whether or not the evolution partners are set
0089    */
0090   bool partnersSet() const {return partnersSet_;}
0091 
0092   /**
0093    *  Whether or not the evolution partners are set
0094    */
0095   void partnersSet(bool in) {partnersSet_=in;}
0096 
0097 private:
0098 
0099   /**
0100    *  Type of interaction
0101    */
0102   ShowerInteraction interaction_;
0103 
0104   /**
0105    *  The ShowerTree
0106    */
0107   ShowerTreePtr _tree;
0108 
0109   /**
0110    *  Map from the particles in the ShowerTree to the HardBranchings
0111    */
0112   map<ShowerParticlePtr,tHardBranchingPtr> particles_;
0113 
0114   /**
0115    *  The HardBranchings in the hard process
0116    */
0117   set<HardBranchingPtr> branchings_;
0118 
0119   /**
0120    *  The HardBranchings which initiate the space-like showers
0121    */
0122   set<HardBranchingPtr> spacelike_;
0123 
0124   /**
0125    * Rotation to shower frame
0126    */
0127   LorentzRotation showerRot_;
0128 
0129   /**
0130    *  Whether or not partners are set
0131    */
0132   bool partnersSet_;
0133 
0134 };
0135 
0136   /**
0137    *  Output operator for testing
0138    */
0139   ostream & operator << (ostream &, const HardTree & );
0140 
0141 }
0142 
0143 #endif /* HERWIG_HardTree_H */