Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:12

0001 #ifndef PHOTONS_Tools_Dipole_FI_H
0002 #define PHOTONS_Tools_Dipole_FI_H
0003 
0004 #include "PHOTONS++/Tools/Dress_Blob_Base.H"
0005 
0006 namespace PHOTONS {
0007   class Dipole_FI: public Dress_Blob_Base {
0008     protected:
0009       double DetermineMaximumPhotonEnergy();
0010 
0011       virtual void   CalculateAvaragePhotonNumber(const double&, const double&);
0012       virtual bool   CheckIfExceedingPhotonEnergyLimits();
0013       virtual void   CheckMomentumConservationInQCMS(const ATOOLS::Poincare&,
0014                                                      const ATOOLS::Poincare&);
0015       virtual void   CorrectMomenta();
0016       virtual void   DefineDipole();
0017       virtual double Func(const double&, const std::vector<double>&,
0018                           const std::vector<double>&,
0019                           const std::vector<ATOOLS::Vec3D>&, const double&);
0020       virtual void   ResetVariables();
0021       virtual void   ReturnMomenta();
0022       virtual void   DetermineKappa();
0023       virtual void   DetermineQAndKappa();
0024 
0025     public:
0026       Dipole_FI(const Particle_Vector_Vector&);
0027       virtual ~Dipole_FI();
0028 
0029       virtual void AddRadiation();
0030   };
0031 
0032 
0033   
0034 
0035   /*!
0036     \file Dipole_FI.H
0037     \brief contains the class Dipole_FI, the main treatment class for initial-final multipoles
0038   */
0039 
0040   /*!
0041     \class Dipole_FI
0042     \brief main treatment class for initial-final multipoles, daughter of Dress_Blob_Base
0043   */
0044   ////////////////////////////////////////////////////////////////////////////////////////////////////
0045   // Description of member methods of Dipole_FI
0046   ////////////////////////////////////////////////////////////////////////////////////////////////////
0047   /*!
0048     \fn Dipole_FI::Dipole_FI(Particle_Vector_Vector)
0049     \brief initialises main variables necessary for the treatment of initial-final multipoles
0050 
0051     At the moment the implementation is purely for single particle decays. Although 
0052     most of the treatment is general some points explicitely assume a single charged 
0053     initial state.
0054   */
0055 
0056   /*!
0057     \fn Dipole_FI::~Dipole_FI
0058     \brief deletes all copies of particles made
0059   */
0060 
0061   /*!
0062     \fn double Dipole_FI::DetermineMaximumPhotonEnergy()
0063     \brief determines the maximum energy of a single photon in the given configuration
0064   */
0065 
0066   /*!
0067     \fn void Dipole_FI::AddRadiation()
0068     \brief manages treatment method, at the end blob is dressed
0069 
0070     The course of action:
0071     -# call to <tt>Dress_Blob_Base::DefineDipole()</tt> to create the working 
0072        copies of all particles that may be modified
0073     -# boost into the \f$ Q_C \f$-system (multipole restframe) with the charged 
0074        initial state particle in \f$ -z \f$-direction (handy allways, necessary 
0075        in specialised dipole treatment), definition of \f$ Q,Q_N \f$
0076     -# calculation of the avarage photon number of the configuration; calls
0077        <tt>Avarage_Photon_Number</tt> class in case of a multipole or the specialised
0078        <tt>Dipole_FI::CalculateAvaragePhotonNumber(double,double)</tt> in case 
0079         of a dipole \n
0080        \f$ \bar{n}>0 \f$ if \f$ \omega_{max} > \omega_{min} \f$
0081     -# photon generation procedure (if \f$ \bar{n} > 0 \f$):
0082       - reset all variables that might have been edited in previous rejected 
0083         generation cycles to their values before generation
0084       - generate all photons according to the respective distributions of each property
0085         (<tt>Dress_Blob_Base::GeneratePhotons</tt>), define \f$ K \f$ and check 
0086         whether momentum restrictions are fulfilled, i.e. momentum reconstruction 
0087         is possible (<tt>Dipole_FI::CheckIfExceedingPhotonEnergyLimits()</tt>)
0088       - if \f$ n > 0 \f$, reconstruct the momenta of all other particles in the 
0089         new phase space (<tt>Dipole_FI::CorrectMomenta()</tt>), all momenta are now 
0090         in the \f$ P_C \f$ rest frame
0091       - calculate the weight of the generated event 
0092         (<tt>Dress_Blob_Base::CalculateWeights()</tt>) and accept or reject
0093       - if accepted boost all momenta back into the \f$ Q_C \f$ rest frame
0094       .
0095     -# call to <tt>Dipole_FI::CheckMomentumConservationInQCMS()</tt> to check 
0096        momentum conservation
0097     -# if \f$ n>0 \f$, boost all momenta back to original frame and paste the 
0098        modified momenta back into the original particles via 
0099        <tt>Dipole_FI::ReturnMomenta()</tt>
0100   */
0101 
0102   /*!
0103     \fn void Dipole_FI::CalculateAvaragePhotonNumber(double, double)
0104     \brief calculates the avarage photon number of the given dipole configuration
0105 
0106     This method is only called in case of a dipole. The values to be given are 
0107     both \f$ \beta \f$ 's in the dipole's rest frame.
0108   */
0109 
0110   /*!
0111     \fn bool Dipole_FI::CheckIfExceedingPhotonEnergyLimits()
0112     \brief checks whether momentum reconstruction is possible
0113   */
0114 
0115   /*!
0116     \fn void Dipole_FI::CheckMomentumConservationInQCMS()
0117     \brief checks momentum conservation in the \f$ Q_C \f$ rest frame, value written to m_success
0118   */
0119 
0120   /*!
0121     \fn void Dipole_FI::CorrectMomenta()
0122     \brief reconstructs all particles' momenta in the new phase space
0123 
0124     The scaling parameter is determined via <tt>Dress_Blob_Base::DetermineU()</tt>. 
0125     Then all momenta are reconstructed in the \f$ P_C \f$ rest frame.
0126   */
0127 
0128   /*!
0129     \fn void Dipole_FI::DefineDipole()
0130     \brief makes two copies of all charged and final state neutral particles
0131   */
0132 
0133   /*!
0134     \fn double Dipole_FI::Func(double, std::vector<double>, std::vector<double>, std::vector<Vec3D>, double)
0135     \brief returns the value of \f$ f(u) \f$, called by <tt>Dress_Blob_Base::DetermineU()</tt>
0136 
0137     Takes as arguments the squared mass of the initial state particle, the 
0138     charged final state particles, the neutral final state particles, the 
0139     3-vectors of all final state particles in the \f$ Q_C \f$ rest frame 
0140     and the value \f$ u \f$ where \f$ f(u) \f$ shall be evaluated.
0141   */
0142 
0143   /*!
0144     \fn void Dipole_FI::ResetVariables()
0145     \brief resets variables to their values before the correction procedure
0146   */
0147 
0148   /*!
0149     \fn void Dipole_FI::ReturnMomenta()
0150     \brief pastes the new momenta back into the original particles
0151   */
0152 
0153 }
0154 
0155 #endif