Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 //
0003 // RealEmissionProcess.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_RealEmissionProcess_H
0010 #define HERWIG_RealEmissionProcess_H
0011 
0012 #include "ThePEG/Config/ThePEG.h"
0013 #include "ThePEG/EventRecord/Particle.h"
0014 #include "ThePEG/EventRecord/SubProcess.h"
0015 #include "ThePEG/Handlers/XComb.h"
0016 #include "ThePEG/Config/Pointers.h"
0017 #include "RealEmissionProcess.fh"
0018 #include "Herwig/Shower/ShowerInteraction.h"
0019 
0020 namespace Herwig {
0021 using namespace ThePEG;
0022 
0023 /**
0024  *  Simple struct for hard processes and decays
0025  */
0026 class RealEmissionProcess : public Base {
0027 
0028   friend ostream & operator<<(ostream & os, const RealEmissionProcess & proc);
0029 
0030 public:
0031 
0032   /**
0033    *  The incoming particles
0034    */
0035   ParticleVector & incoming() {
0036     return incoming_;
0037   }
0038 
0039   /**
0040    *  The outgoing particles
0041    */
0042   ParticleVector & outgoing() {
0043     return outgoing_;
0044   }
0045 
0046 public:
0047   
0048   /**
0049    *  The incoming particles
0050    */
0051   ParticleVector & bornIncoming() {
0052     return bornIncoming_;
0053   }
0054   
0055   /**
0056    *  The outgoing particles
0057    */
0058   ParticleVector & bornOutgoing() {
0059     return bornOutgoing_;
0060   }
0061   
0062   /**
0063    *  The hadrons
0064    */
0065   ParticleVector & hadrons() {
0066     return hadrons_;
0067   }
0068 
0069 public:
0070 
0071   /**
0072    *  The emitter
0073    */
0074   unsigned int emitter  () const {return emitter_;}
0075 
0076   /**
0077    *  The spectator
0078    */
0079   unsigned int spectator() const {return spectator_;}
0080 
0081   /**
0082    *  The emitted
0083    */
0084   unsigned int emitted  () const {return emitted_;}
0085 
0086   /**
0087    *  The emitter
0088    */
0089   void emitter  (unsigned int in) {emitter_=in;}
0090 
0091   /**
0092    *  The spectator
0093    */
0094   void spectator(unsigned int in) {spectator_=in;}
0095 
0096   /**
0097    *  The emitted
0098    */
0099   void emitted  (unsigned int in) {emitted_=in;}
0100 
0101 public:
0102 
0103   /**
0104    *  Lorentz Rotation to final-state for II dipoles
0105    */ 
0106   LorentzRotation transformation() const { return trans_;}
0107 
0108   /**
0109    *  Lorentz Rotation to final-state for II dipoles
0110    */ 
0111   void transformation(LorentzRotation in) {trans_=in;}
0112 
0113 public:
0114 
0115   /**
0116    *  Get the x values
0117    */
0118   pair<double,double> x() const {return x_;}
0119     
0120   /**
0121    *  Set the x values
0122    */
0123   void x(pair<double,double> in) {x_=in;}
0124 
0125 public:
0126 
0127   /**
0128    *  Type of interaction
0129    */
0130   ShowerInteraction interaction() {return interaction_;}
0131 
0132   /**
0133    *  Type of interaction
0134    */
0135   void interaction(ShowerInteraction in) {interaction_ = in;}
0136 
0137   /**
0138    *  Emission scales
0139    */
0140   map<ShowerInteraction,Energy> & pT() {return pT_;}
0141 
0142 private:
0143 
0144   /**
0145    *  The emitter
0146    */
0147   unsigned int emitter_;
0148 
0149   /**
0150    *  The spectator
0151    */
0152   unsigned int spectator_;
0153   /**
0154    *  The emitter
0155    */
0156   unsigned int emitted_;
0157 
0158 private:
0159 
0160   /**
0161    *  The incoming particles
0162    */
0163   ParticleVector incoming_;
0164 
0165   /*
0166    *   The outgoing particles
0167    */
0168   ParticleVector outgoing_;
0169 
0170 private:
0171 
0172   /**
0173    *  The hadrons
0174    */
0175   ParticleVector hadrons_;
0176 
0177 private:
0178 
0179   /**
0180    *  Incoming for the Born process
0181    */
0182   ParticleVector bornIncoming_;
0183 
0184   /**
0185    *  Outgoing for the Born process
0186    */
0187   ParticleVector bornOutgoing_;
0188 
0189 private:
0190 
0191   /**
0192    *  Lorentz transformation for spectators in II
0193    */
0194   LorentzRotation trans_;
0195 
0196   /**
0197    *  x values
0198    */
0199   pair<double,double> x_;
0200 
0201 private:
0202 
0203   /**
0204    *  Type of interaction
0205    */
0206   ShowerInteraction interaction_;
0207 
0208   /**
0209    *  Emission scales
0210    */
0211   map<ShowerInteraction,Energy> pT_;
0212 };
0213 
0214 /**
0215  * Output to a stream
0216  */
0217 inline ostream & operator<<(ostream & os, const RealEmissionProcess & proc) {
0218   os << "REAL EMISSION "
0219      << proc.emitter_   << " "
0220      << proc.spectator_ << " "
0221      << proc.emitted_   << "\n";
0222   os << "BORN\n";
0223   for(unsigned int ix=0;ix<proc.bornIncoming_.size();++ix)
0224     os << proc.bornIncoming_[ix]->colourLine() << " "
0225        << proc.bornIncoming_[ix]->antiColourLine() << " "
0226        << *proc.bornIncoming_[ix] << "\n";
0227   for(unsigned int ix=0;ix<proc.bornOutgoing_.size();++ix)
0228     os << proc.bornOutgoing_[ix]->colourLine() << " "
0229        << proc.bornOutgoing_[ix]->antiColourLine() << " "
0230        << *proc.bornOutgoing_[ix] << "\n";
0231   os << "REAL\n";
0232   for(unsigned int ix=0;ix<proc.incoming_.size();++ix)
0233     os << proc.incoming_[ix]->colourLine() << " "
0234        << proc.incoming_[ix]->antiColourLine() << " "
0235        << *proc.incoming_[ix] << "\n";
0236   for(unsigned int ix=0;ix<proc.outgoing_.size();++ix)
0237     os << proc.outgoing_[ix]->colourLine() << " "
0238        << proc.outgoing_[ix]->antiColourLine() << " "
0239        << *proc.outgoing_[ix] << "\n";
0240   return os;
0241 }
0242 
0243 }
0244 
0245 #endif