Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef HERWIG_IncomingPhotonEvolver_H
0003 #define HERWIG_IncomingPhotonEvolver_H
0004 //
0005 // This is the declaration of the IncomingPhotonEvolver class.
0006 //
0007 
0008 #include "ThePEG/Handlers/StepHandler.h"
0009 
0010 namespace Herwig {
0011 
0012 using namespace ThePEG;
0013 
0014 /**
0015  * The IncomingPhotonEvolver class performs the backward evolution
0016  * of a photon in a partonic process to a quark or antiquark so that
0017  * the event can be showered.
0018  *
0019  * @see \ref IncomingPhotonEvolverInterfaces "The interfaces"
0020  * defined for IncomingPhotonEvolver.
0021  */
0022 class IncomingPhotonEvolver: public StepHandler {
0023 
0024 public:
0025 
0026   /** @name Standard constructors and destructors. */
0027   //@{
0028   /**
0029    * The default constructor.
0030    */
0031   IncomingPhotonEvolver();
0032   //@}
0033 
0034 public:
0035 
0036   /** @name Virtual functions required by the StepHandler class. */
0037   //@{  
0038   /**
0039     * The main function called by the EventHandler class to
0040     * perform a step. Given the current state of an Event, this function
0041     * performs the event generation step and includes the result in a new
0042     * Step object int the Event record.
0043     * @param eh the EventHandler in charge of the Event generation.
0044     * @param tagged if not empty these are the only particles which should
0045     * be considered by the StepHandler.
0046     * @param hint a Hint object with possible information from previously
0047     * performed steps.
0048     * @throws Veto if the StepHandler requires the current step to be discarded.
0049     * @throws Stop if the generation of the current Event should be stopped
0050     * after this call.
0051     * @throws Exception if something goes wrong.
0052     */
0053   virtual void handle(EventHandler & eh, const tPVector & tagged,
0054               const Hint & hint);
0055   //@}
0056 
0057 public:
0058 
0059   /** @name Functions used by the persistent I/O system. */
0060   //@{
0061   /**
0062    * Function used to write out object persistently.
0063    * @param os the persistent output stream written to.
0064    */
0065   void persistentOutput(PersistentOStream & os) const;
0066 
0067   /**
0068    * Function used to read in object persistently.
0069    * @param is the persistent input stream read from.
0070    * @param version the version number of the object when written.
0071    */
0072   void persistentInput(PersistentIStream & is, int version);
0073   //@}
0074 
0075   /**
0076    * The standard Init function used to initialize the interfaces.
0077    * Called exactly once for each class by the class description system
0078    * before the main function starts or
0079    * when this class is dynamically loaded.
0080    */
0081   static void Init();
0082 
0083 protected:
0084 
0085   /**
0086    * Compute boost parameter along z axis to get (Ep, any perp, qp)
0087    * from (E, same perp, q).
0088    */
0089   inline double getBeta(const double E, const double q, 
0090             const double Ep, const double qp) const
0091   {return (q*E-qp*Ep)/(sqr(qp)+sqr(E));}
0092 
0093 protected:
0094 
0095   /** @name Clone Methods. */
0096   //@{
0097   /**
0098    * Make a simple clone of this object.
0099    * @return a pointer to the new object.
0100    */
0101   virtual IBPtr clone() const;
0102 
0103   /** Make a clone of this object, possibly modifying the cloned object
0104    * to make it sane.
0105    * @return a pointer to the new object.
0106    */
0107   virtual IBPtr fullclone() const;
0108   //@}
0109 
0110 protected:
0111 
0112   /** @name Standard Interfaced functions. */
0113   //@{
0114   /**
0115    * Initialize this object after the setup phase before saving an
0116    * EventGenerator to disk.
0117    * @throws InitException if object could not be initialized properly.
0118    */
0119   virtual void doinit();
0120   //@}
0121 
0122 private:
0123 
0124   /**
0125    * The assignment operator is private and must never be called.
0126    * In fact, it should not even be implemented.
0127    */
0128   IncomingPhotonEvolver & operator=(const IncomingPhotonEvolver &) = delete;
0129 
0130 private:
0131   /**
0132    * PDF set to use. Overrides the one that is associated with the beam particle.
0133    */
0134   PDFPtr PDF_;
0135 
0136   /**
0137    *  The maximum value of the PDF for the sample
0138    */
0139   double PDFMax_;
0140 
0141   /**
0142    *  The power for the sampling of the PDF
0143    */
0144   double PDFPower_;
0145 
0146   /**
0147    *  The minimum starting scale for the evolution
0148    */
0149   Energy minpT_;
0150 
0151   /**
0152    *  The minimum space-like virtuality of the photon
0153    */
0154   Energy minVirtuality_;
0155 
0156   /**
0157    *  Maximum number of attempts to generate the scale of the
0158    *  branching
0159    */
0160   unsigned int vetoTries_;
0161 
0162   /**
0163    *  Maximum number of attempts to regenerate the virtuality
0164    */
0165   unsigned int virtualityTries_;
0166 
0167   /**
0168    *   Photon ParticleData object
0169    */
0170   tcPDPtr photon_;
0171 
0172   /**
0173    *  Partons to backward evolve to
0174    */
0175   vector<tcPDPtr> partons_;
0176 };
0177 
0178 }
0179 
0180 #endif /* HERWIG_IncomingPhotonEvolver_H */