Back to home page

EIC code displayed by LXR

 
 

    


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

0001 // -*- C++ -*-
0002 #ifndef Herwig_ExperimentalOmnesFunction_H
0003 #define Herwig_ExperimentalOmnesFunction_H
0004 //
0005 // This is the declaration of the ExperimentalOmnesFunction class.
0006 //
0007 
0008 #include "OmnesFunction.h"
0009 
0010 namespace Herwig {
0011 
0012 using namespace ThePEG;
0013 
0014 /**
0015  * Here is the documentation of the ExperimentalOmnesFunction class.
0016  *
0017  * @see \ref ExperimentalOmnesFunctionInterfaces "The interfaces"
0018  * defined for ExperimentalOmnesFunction.
0019  */
0020 class ExperimentalOmnesFunction: public OmnesFunction {
0021 
0022 public:
0023   
0024   /**
0025    * The default constructor.
0026    */
0027   ExperimentalOmnesFunction();
0028 
0029   /**
0030    *  Method to return the function value
0031    */
0032   virtual Complex D(Energy2 s) const;
0033 
0034   /**
0035    * Output the setup information for the particle database
0036    * @param os The stream to output the information to
0037    * @param header Whether or not to output the information for MySQL
0038    * @param create Whether or not to add a statement creating the object
0039    */
0040   virtual void dataBaseOutput(ofstream & os,bool header,bool create) const;
0041 
0042 public:
0043 
0044   /**
0045    *  Integrand for the Omnes function
0046    */
0047   InvEnergy4 operator ()(Energy2 xpoint) const {
0048     InvEnergy4 output = InvEnergy4();
0049     Energy q(sqrt(xpoint));
0050     if(abs(xpoint-s_)>sqr(epsCut_)) 
0051       output= (*interpolator_)(q)/xpoint/(xpoint-s_);
0052     return output;
0053   }
0054   /** Return type for the GaussianIntegrator */
0055   typedef InvEnergy4 ValType;
0056   /** Argument type for the GaussianIntegrator */
0057   typedef Energy2 ArgType;
0058 
0059 public:
0060 
0061   /** @name Functions used by the persistent I/O system. */
0062   //@{
0063   /**
0064    * Function used to write out object persistently.
0065    * @param os the persistent output stream written to.
0066    */
0067   void persistentOutput(PersistentOStream & os) const;
0068 
0069   /**
0070    * Function used to read in object persistently.
0071    * @param is the persistent input stream read from.
0072    * @param version the version number of the object when written.
0073    */
0074   void persistentInput(PersistentIStream & is, int version);
0075   //@}
0076 
0077   /**
0078    * The standard Init function used to initialize the interfaces.
0079    * Called exactly once for each class by the class description system
0080    * before the main function starts or
0081    * when this class is dynamically loaded.
0082    */
0083   static void Init();
0084 
0085 protected:
0086 
0087   /** @name Clone Methods. */
0088   //@{
0089   /**
0090    * Make a simple clone of this object.
0091    * @return a pointer to the new object.
0092    */
0093   virtual IBPtr clone() const;
0094 
0095   /** Make a clone of this object, possibly modifying the cloned object
0096    * to make it sane.
0097    * @return a pointer to the new object.
0098    */
0099   virtual IBPtr fullclone() const;
0100   //@}
0101   
0102 protected:
0103 
0104   /** @name Standard Interfaced functions. */
0105   //@{
0106   /**
0107    * Initialize this object after the setup phase before saving an
0108    * EventGenerator to disk.
0109    * @throws InitException if object could not be initialized properly.
0110    */
0111   virtual void doinit();
0112   //@}
0113 
0114 private:
0115 
0116   /**
0117    * The assignment operator is private and must never be called.
0118    * In fact, it should not even be implemented.
0119    */
0120   ExperimentalOmnesFunction & operator=(const ExperimentalOmnesFunction &) = delete;
0121 
0122 private:
0123 
0124   /**
0125    *  Energy values for the experimental data on the phase shift
0126    */
0127   vector<Energy> energy_;
0128 
0129   /**
0130    *  Experimental values of the phase shift
0131    */
0132   vector<double> phase_;
0133 
0134   /**
0135    *  Energy values for the interpolation table for the Omnes function.
0136    */
0137   vector<Energy> omnesEnergy_;
0138 
0139   /**
0140    * Real part of the Omnes function for the interpolation table
0141    */
0142   vector<double> omnesFunctionRe_;
0143 
0144   /**
0145    * Imaginary part of the Omnes function for the interpolation table
0146    */
0147   vector<double> omnesFunctionIm_;
0148 
0149   /**
0150    * set up of the interpolation table
0151    */
0152   bool initialize_;
0153 
0154   /**
0155    * Number of points for the intepolation of the experimental Omnes function
0156    */
0157   unsigned int nPoints_;
0158 
0159   /**
0160    * Interpolators for the experimental Omnes function.
0161    */
0162   //@{
0163   /**
0164    *  The interpolator for the real part
0165    */
0166   mutable Interpolator<double,Energy>::Ptr oRe_;
0167 
0168   /**
0169    *  The interpolator for the imaginary part
0170    */
0171   mutable Interpolator<double,Energy>::Ptr oIm_;
0172   //@}
0173 
0174   /**
0175    *  Cut-off parameter for the integral of the experimental function
0176    */ 
0177   Energy epsCut_;
0178 
0179   /**
0180    *  Size of the vectors for the experimental data 
0181    */
0182   unsigned int nsizea_;
0183 
0184   /**
0185    * Size of the vectors for the interpolation tables
0186    */
0187   unsigned int nsizeb_;
0188 
0189   /**
0190    *  Interpolator and scale for the Omes function integral
0191    */
0192   //@
0193   /**
0194    *  The interpolator
0195    */
0196   Interpolator<double,Energy>::Ptr interpolator_;
0197 
0198   /**
0199    *  The scale
0200    */
0201   Energy2 s_;
0202   //@}
0203 
0204 };
0205 
0206 }
0207 
0208 #endif /* Herwig_ExperimentalOmnesFunction_H */