Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // PhasespaceHelpers.h is a part of Herwig - A multi-purpose Monte Carlo event generator
0004 // Copyright (C) 2002-2019 The Herwig Collaboration
0005 //
0006 // Herwig 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 HERWIG_PhasespaceHelpers_H
0010 #define HERWIG_PhasespaceHelpers_H
0011 
0012 #include "ThePEG/Config/ThePEG.h"
0013 #include "ThePEG/PDT/ParticleData.h"
0014 
0015 #include "ThePEG/Persistency/PersistentOStream.h"
0016 #include "ThePEG/Persistency/PersistentIStream.h"
0017 
0018 #include "Herwig/MatrixElement/Matchbox/Phasespace/MatchboxPhasespace.h"
0019 
0020 namespace Herwig {
0021 
0022 using namespace ThePEG;
0023 
0024   namespace PhasespaceHelpers {
0025 
0026     /**
0027      * \ingroup Matchbox
0028      * \author Simon Platzer
0029      * \brief General information for phase space generation
0030      */
0031     struct PhasespaceInfo {
0032 
0033       /**
0034        * The center of mass energy squared.
0035        */
0036       Energy2 sHat;
0037 
0038       /**
0039        * The center of mass energy.
0040        */
0041       Energy sqrtSHat;
0042 
0043       /**
0044        * The phase space weight.
0045        */
0046       double weight;
0047 
0048       /**
0049        * The random number generator.
0050        */
0051       StreamingRnd rnd;
0052 
0053       /**
0054        * Parameter steering from which on propagator virtualities are
0055        * sampled flat.
0056        */
0057       double x0;
0058 
0059       /**
0060        * Parameter steering at which virtuality singularities of
0061        * propagators are actually cut off.
0062        */
0063       double xc;
0064 
0065       /**
0066        * Parameter steering from which on propagator virtualities are
0067        * sampled flat.
0068        */
0069       Energy M0;
0070 
0071       /**
0072        * Parameter steering at which virtuality singularities of
0073        * propagators are actually cut off.
0074        */
0075       Energy Mc;
0076 
0077       /**
0078        * Generate a mass for the given particle type and mass range.
0079        */
0080       Energy generateMass(tcPDPtr, const pair<Energy,Energy>&);
0081 
0082       /**
0083        * Calculate a transverse momentum for the given momenta,
0084        * invariant pt and azimuth.
0085        */
0086       Lorentz5Momentum generateKt(const Lorentz5Momentum& p1,
0087                   const Lorentz5Momentum& p2,
0088                   Energy pt);
0089 
0090     };
0091 
0092     /**
0093      * \ingroup Matchbox
0094      * \author Simon Platzer, Ken Arnold
0095      * \brief A phase space tree.
0096      */
0097     struct PhasespaceTree {
0098 
0099       /**
0100        * Default constructor
0101        */
0102       PhasespaceTree()
0103     : massRange(ZERO,ZERO), externalId(-1), 
0104       spacelike(false) {}
0105 
0106       /**
0107        * The particle running along this line.
0108        */
0109       tcPDPtr data;
0110 
0111       /**
0112        * The allowed mass range for this line.
0113        */
0114       pair<Energy,Energy> massRange;
0115 
0116       /**
0117        * The momentum running along this line.
0118        */
0119       Lorentz5Momentum momentum;
0120 
0121       /**
0122        * A backward momentum, if needed
0123        */
0124       Lorentz5Momentum backwardMomentum;
0125 
0126       /**
0127        * The external leg id of this line, if external.
0128        */
0129       int externalId;
0130 
0131       /**
0132        * The children lines; if empty this is an external line.
0133        */
0134       vector<PhasespaceTree> children;
0135 
0136       /**
0137        * External lines originating from this line.
0138        */
0139       set<int> leafs;
0140 
0141       /**
0142        * Wether or not this is a spacelike line.
0143        */
0144       bool spacelike;
0145 
0146       /**
0147        * Wether or not this is a mirrored channel.
0148        */
0149       bool doMirror;
0150       
0151       /**
0152        * Setup from diagram at given position.
0153        */
0154       void setup(const Tree2toNDiagram&, int pos = 0);
0155 
0156       /**
0157        * Setup mirror from diagram at given position.
0158        */
0159       void setupMirrored(const Tree2toNDiagram& diag, int pos);
0160 
0161       /**
0162        * Initialize using masses as given by mass() members of the
0163        * final state momenta
0164        */
0165       void init(const vector<Lorentz5Momentum>&);
0166 
0167       /**
0168        * Generate kinematics for the children
0169        */
0170       void generateKinematics(PhasespaceInfo&,
0171                   vector<Lorentz5Momentum>&);
0172 
0173       /**
0174        * Write phase space tree to ostream
0175        */
0176       void put(PersistentOStream&) const;
0177 
0178       /**
0179        * Read phase space tree from istream
0180        */
0181       void get(PersistentIStream&);
0182 
0183       /**
0184        * Print tree, only for debugging purposes
0185        */
0186       void print(int in = 0);
0187 
0188     };
0189 
0190   }
0191 
0192 }
0193 
0194 #endif // HERWIG_PhasespaceHelpers_H