G4QProbability.hh

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 #ifndef G4QProbability_h
00027 #define G4QProbability_h 1
00028 //
00029 // $Id$
00030 //
00031 // ------------------------------------------------------------
00032 //      GEANT 4 class implementation file
00033 //
00034 //      ---------------- G4QProbability ----------------
00035 //      by Mikhail Kossov Oct, 2006
00036 //   class for Pomeron & Reggeon amplitudes used by CHIPS
00037 //   For comparison similar member functions are in the G4 class:
00038 //   G4PomeronCrossSection
00039 // ------------------------------------------------------------
00040 // Short description: Pomeron is one of the possible vacuum pole (the
00041 // second is Oderon, but they are identical in the present model), by
00042 // which particle exchang in the ellastic scattering process. Others
00043 // are Reggeons and, possibly Instantons (for spin-flip reactions).
00044 // Strings are cuts of Pomerons and Reggeons (optic theorem connects
00045 // the amplitude of scattering at zero angle with the total inelastic
00046 // cross-section). They describe inelastic processes at high energies.
00047 // ------------------------------------------------------------------
00048 
00049 #include <CLHEP/Units/PhysicalConstants.h>
00050 #include "globals.hh"
00051 
00052 class G4QProbability
00053 {
00054  public:
00055   G4QProbability(G4int PDGCode = 2212);
00056   ~G4QProbability(){;}
00057   void SetS0(G4double aS0)                        {S0 = aS0;}
00058   void SetPom_Gamma(G4double aPom_Gamma)          {pom_Gamma = aPom_Gamma;}
00059   void SetGamma(const G4double aGam)              {pom_Gamma=aGam/CLHEP::GeV/CLHEP::GeV;}// @@ Temporary?
00060   void SetPom_C(G4double aPom_C)                  {pom_C = aPom_C;}
00061   void SetPom_R2(G4double aPom_R2)                {pom_R2 = aPom_R2;}
00062   void SetPom_Alpha(G4double aPom_Alpha)          {pom_Alpha = aPom_Alpha;}
00063   void SetPom_Alphaprime(G4double aPom_Alphaprime){pom_Alphaprime = aPom_Alphaprime;}
00064   // Genegal (with low energies)
00065   G4double GetQexTotProbability(const G4double s, const G4double imp2);
00066   G4double GetQexCohProbability(const G4double s, const G4double imp2);
00067   G4double GetQexDiffProbability(const G4double s, const G4double imp2);
00068   G4double GetQexDubDiffProbability(const G4double s, const G4double imp2);
00069   G4double GetQexSinDiffProbability(const G4double s, const G4double imp2);//For each T & B
00070   G4double GetQexAbsProbability(const G4double s, const G4double imp2);
00071   G4double GetQexElProbability(const G4double s, const G4double imp2);
00072   G4double GetQexInelProbability(const G4double s, const G4double imp2);
00073   // Only Pomeron (high energies)
00074   G4double GetPomTotProbability(const G4double s_value, const G4double imp2)
00075          {return 2*(1.-std::exp(-PomEikonal(s_value,imp2)))/pom_C;}
00076   G4double GetPomCohProbability(const G4double s_value, const G4double imp2)
00077          {return sqr(1.-std::exp(-PomEikonal(s_value,imp2)))/pom_C;}
00078   G4double GetPomDiffProbability(const G4double s_value, const G4double imp2)
00079          {return ((pom_C-1.)/pom_C)*GetPomCohProbability(s_value,imp2);}
00080   G4double GetPomDubDiffProbability(const G4double s_value, const G4double imp2)
00081          {return (sqr(pom_sqC-1.)/pom_C)*GetPomCohProbability(s_value,imp2);}
00082   G4double GetPomSinDiffProbability(const G4double s_value, const G4double imp2) //For each T & B
00083          {return ((pom_sqC-1.)/pom_C)*GetPomCohProbability(s_value,imp2);}
00084   G4double GetPomAbsProbability(const G4double s_value, const G4double imp2)
00085          {return (1.-std::exp(-2*PomEikonal(s_value,imp2)))/pom_C;}
00086   G4double GetPomElProbability(const G4double s_value, const G4double imp2)
00087          {return GetPomCohProbability(s_value,imp2)/pom_C;}
00088   G4double GetPomInelProbability(const G4double s_value, const G4double imp2)
00089          {return GetPomDiffProbability(s_value,imp2) + GetPomAbsProbability(s_value,imp2);}
00090 
00091   G4double GetCutPomProbability(const G4double s, const G4double ip2, const G4int nPom);
00092   G4double GetCutQexProbability(const G4double s, const G4double ip2, const G4int nQex);
00093  private:   
00094   void InitForNucleon();
00095   void InitForHyperon();
00096   void InitForAntiBaryon();
00097   void InitForPion();
00098   void InitForKaon();
00099   void InitForGamma();
00100  
00101   G4double Expand(G4double z);
00102   G4double PowerQex(const G4double s_value)  {return qex_Gamma/(s_value/S0);} // qex_Alpha=0 (anti-p?)
00103   G4double PowerPom(const G4double s_value)  {return pom_Gamma*std::pow(s_value/S0, pom_Alpha-1.);}
00104   G4double SigQex(const G4double s_value)    {return 8*CLHEP::pi*CLHEP::hbarc_squared*PowerQex(s_value);}
00105   G4double SigPom(const G4double s_value)    {return 8*CLHEP::pi*CLHEP::hbarc_squared*PowerPom(s_value);}
00106   G4double LambdaQex(const G4double s_value) {return qex_R2+qex_Alphaprime*std::log(s_value/S0);}
00107   G4double LambdaPom(const G4double s_value) {return pom_R2+pom_Alphaprime*std::log(s_value/S0);}
00108   G4double ZQex(const G4double s_value)      {return 2*PowerQex(s_value)/LambdaQex(s_value);} // qex_C=1.
00109   G4double ZPom(const G4double s_value)      {return 2*pom_C*PowerPom(s_value)/LambdaPom(s_value);}
00110   G4double QexEikonal(const G4double s_value, const G4double imp2)
00111                          {return ZQex(s_value)*std::exp(-imp2/LambdaQex(s_value)/CLHEP::hbarc_squared/4)/2;}
00112   G4double PomEikonal(G4double s_value, G4double imp2)
00113                          {return ZPom(s_value)*std::exp(-imp2/LambdaPom(s_value)/CLHEP::hbarc_squared/4)/2;}
00114   // Body
00115   G4double S0;
00116   G4double pom_Gamma;
00117   G4double pom_C;
00118   G4double pom_sqC;
00119   G4double pom_R2;
00120   G4double pom_Alpha;
00121   G4double pom_Alphaprime;
00122   G4double qex_Gamma;
00123   G4double qex_R2;
00124   G4double qex_Alphaprime;
00125 };
00126 #endif

Generated on Mon May 27 17:49:39 2013 for Geant4 by  doxygen 1.4.7