Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-15 07:43:53

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /// \file ExGflashHomoShowerTuning.hh
0027 /// \brief Definition of the ExGflashHomoShowerTuning class
0028 
0029 // ---------------------------------------------------------------
0030 //  GEANT 4 class header file
0031 //
0032 //  ExGflashHomoShowerTuning
0033 //
0034 //  Class description:
0035 //
0036 //  Tuning class for GFlash homogeneous shower parameterisation.
0037 //  Definitions:
0038 //    <t>: shower center of gravity
0039 //      T: Depth at shower maximum
0040 //     Ec: Critical energy
0041 //     X0: Radiation length
0042 //     y = E/Ec
0043 //
0044 //  Homogeneous media:
0045 //    Average shower profile
0046 //    (1/E)(dE(t)/dt) = f(t)
0047 //                    = (beta*t)**(alpha-1)*beta*std::exp(-beta*t)/Gamma(alpha)
0048 //    where Gamma is the Gamma function
0049 //
0050 //    <t> = alpha/beta
0051 //      T = (alpha-1)/beta
0052 //    and
0053 //      T = ln(y) + t1
0054 //  alpha = a1+(a2+a3/Z)ln(y)
0055 
0056 // Author: J.P. Wellisch - October 2004
0057 //---------------------------------------------------------------
0058 
0059 #ifndef ExGflashHomoShowerTuning_hh
0060 #define ExGflashHomoShowerTuning_hh
0061 
0062 #include "GVFlashHomoShowerTuning.hh"
0063 
0064 class ExGflashHomoShowerTuning : public GVFlashHomoShowerTuning
0065 {
0066   public:
0067     ExGflashHomoShowerTuning() = default;
0068     ~ExGflashHomoShowerTuning() override = default;
0069 
0070   public:  // with description
0071     G4double ParAveT1() override { return -0.812; }  // t1
0072     G4double ParAveA1() override { return 0.81; }  // a1
0073     G4double ParAveA2() override { return 0.458; }  // a2
0074     G4double ParAveA3() override { return 2.26; }  // a3
0075 
0076     G4double ParSigLogT1() override { return -1.4; }  // t1
0077     G4double ParSigLogT2() override { return 1.26; }  // t2
0078     // std::sqrt(var(ln(T))) = 1/(t+t2*ln(y))
0079 
0080     G4double ParSigLogA1() override { return -0.58; }  // a1
0081     G4double ParSigLogA2() override { return 0.86; }  // a2
0082     // std::sqrt(var(ln(alpha))) = 1/(a1+a2*ln(y))
0083 
0084     G4double ParRho1() override { return 0.705; }  // r1
0085     G4double ParRho2() override { return -0.023; }  // r2
0086     // Correlation(ln(T),ln(alpha))=r1+r2*ln(y)
0087 
0088     // Radial profiles
0089     // f(r) := (1/dE(t))(dE(t,r)/dr)
0090     // Ansatz:
0091     // f(r) = p(2*r*Rc**2)/(r**2+Rc**2)**2+(1-p)*(2*r*Rt**2)/(r**2+Rt**2)**2,
0092     //        0<p<1
0093 
0094     G4double ParRC1() override { return 0.0251; }  // c1
0095     G4double ParRC2() override { return 0.00319; }  // c2
0096     G4double ParRC3() override { return 0.1162; }  // c3
0097     G4double ParRC4() override { return -0.000381; }  // c4
0098     // Rc (t/T)= z1 +z2*t/T
0099     // z1 = c1+c2*ln(E/GeV)
0100     // z2 = c3+c4*Z
0101 
0102     G4double ParRT1() override { return 0.659; }  // t1
0103     G4double ParRT2() override { return -0.00309; }  // t2
0104     G4double ParRT3() override { return 0.645; }  // k2
0105     G4double ParRT4() override { return -2.59; }  // k3
0106     G4double ParRT5() override { return 0.3585; }  // t5
0107     G4double ParRT6() override { return 0.0412; }  // t6
0108     // Rt (t/T)= k1*(std::exp(k3*(t/T-k2))+std::exp(k4*(t/T-k2)))
0109     // k1 = t1+t2*Z
0110     // k4 = t5+t6*ln(E/GeV)
0111 
0112     G4double ParWC1() override { return 2.632; }  // c1
0113     G4double ParWC2() override { return -0.00094; }  // c2
0114     G4double ParWC3() override { return 0.401; }  // c3
0115     G4double ParWC4() override { return 0.00187; }  // c4
0116     G4double ParWC5() override { return 1.313; }  // c5
0117     G4double ParWC6() override { return -0.0686; }  // c6
0118     // p(t/T) = p1*std::exp((p2-t/T)/p3 - std::exp((p2-t/T)/p3))
0119     // p1 = c1+c2*Z
0120     // p2 = c3+c4*Z
0121     // p3 = c5 + c6*ln(E/GeV)
0122 
0123     G4double ParSpotN1() override { return 93.; }  // n1
0124     G4double ParSpotN2() override { return 0.876; }  // n2
0125     // Fluctuations on radial profiles through number of spots
0126     // The total number of spots needed for a shower is
0127     // Ns = n1*ln(Z)(E/GeV)**n2
0128 
0129     // The number of spots per longitudinal interval is:
0130     // (1/Ns)(dNs(t)/dt) = f(t)
0131     //  = (beta*t)**(alpha-1)*beta*std::exp(-beta*t)/Gamma(alpha)
0132     // <t> = alpha_s/beta_s
0133     // Ts = (alpha_s-1)/beta_s
0134     // and
0135     // Ts = T*(t1+t2*Z)
0136     // alpha_s = alpha*(a1+a2*Z)
0137 
0138     G4double ParSpotT1() override { return 0.698; }  // t1
0139     G4double ParSpotT2() override { return 0.00212; }  // t2
0140 
0141     G4double ParSpotA1() override { return 0.639; }  // a1
0142     G4double ParSpotA2() override { return 0.00334; }  // a2
0143 };
0144 
0145 #endif