Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 09:59:04

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 //  G4ScreeningMottCrossSection.hh
0027 //-------------------------------------------------------------------
0028 //
0029 // GEANT4 Class header file
0030 //
0031 // File name:    G4ScreeningMottCrossSection
0032 //
0033 // Author:      Cristina Consolandi
0034 //
0035 // Creation date: 20.10.2011
0036 //
0037 // Modifications:
0038 //
0039 // Class Description:
0040 //      Computation of electron Coulomb Scattering Cross Section.
0041 //      Suitable for high energy electrons and light target materials.
0042 //
0043 //      Reference:
0044 //      M.J. Boschini et al.
0045 //     "Non Ionizing Energy Loss induced by Electrons in the Space Environment"
0046 //      Proc. of the 13th Int. Conf. on Particle Physics and Advanced Technology
0047 //      (13th ICPPAT, Como 3-7/10/2011), World Scientific (Singapore).
0048 //      Available at: http://arxiv.org/abs/1111.4042v4
0049 //
0050 //      1) Mott Differential Cross Section Approximation:
0051 //         For Target material up to Z=92 (U):
0052 //         As described in http://arxiv.org/abs/1111.4042v4
0053 //         par. 2.1 , eq. (16)-(17)
0054 //         Else (Z>92):
0055 //         W. A. McKinley and H. Fashbach, Phys. Rev. 74, (1948) 1759.
0056 //      2) Screening coefficient:
0057 //      vomn G. Moliere, Z. Naturforsh A2 (1947), 133-145; A3 (1948), 78.
0058 //      3) Nuclear Form Factor:
0059 //      A.V. Butkevich et al. Nucl. Instr. Meth. A488 (2002), 282-294.
0060 //
0061 // -----------------------------------------------------------------------------
0062 
0063 //
0064 #ifndef G4ScreeningMottCrossSection_h
0065 #define G4ScreeningMottCrossSection_h 1
0066 
0067 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0068 
0069 #include "globals.hh"
0070 #include "G4ParticleDefinition.hh"
0071 #include <vector>
0072 
0073 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0074 
0075 static const G4int DIMMOTT = 750;
0076 
0077 class G4NistManager;
0078 class G4Pow;
0079 
0080 class G4ScreeningMottCrossSection
0081 {
0082 
0083 public:
0084 
0085   explicit G4ScreeningMottCrossSection();
0086 
0087   ~G4ScreeningMottCrossSection();
0088 
0089   void Initialise(const G4ParticleDefinition*, G4double cosThetaLim);
0090 
0091   void SetupKinematic(G4double kinEnergy, G4int Z);
0092 
0093   G4double NuclearCrossSection(G4int form, G4int fast);
0094   G4double GetScatteringAngle(G4int form, G4int fast);
0095 
0096   G4double RatioMottRutherford(G4double tet);
0097   G4double RatioMottRutherfordCosT(G4double sin2t2);
0098 
0099   G4double McFcorrection(G4double sin2t2);
0100   inline void SetupParticle(const G4ParticleDefinition*);
0101 
0102   G4ScreeningMottCrossSection & operator=
0103   (const G4ScreeningMottCrossSection &right) = delete;
0104   G4ScreeningMottCrossSection(const G4ScreeningMottCrossSection&) = delete;
0105 
0106 private:
0107 
0108   G4double ComputeAngle(G4int idx, G4double& rand);
0109 
0110   G4double FormFactor2ExpHof(G4double sin2t2);
0111   G4double FormFactor2Gauss(G4double sin2t2);
0112   G4double FormFactor2UniformHelm(G4double sin2t2);
0113   G4double DifferentialXSection(G4int idx, G4int form);
0114 
0115   G4double  GetTransitionRandom();
0116 
0117   G4NistManager*  fNistManager;
0118   G4Pow*          fG4pow;
0119 
0120   const G4ParticleDefinition* particle;
0121 
0122   G4double          fTotalCross;
0123   //cost - min - max
0124   G4double              cosThetaMin;// def 1.0
0125   G4double              cosThetaMax;// def -1.0
0126 
0127   G4double          cosTetMinNuc;
0128   G4double          cosTetMaxNuc;
0129 
0130   //energy cut
0131   G4double              ecut;
0132   G4double              etag;
0133 
0134   G4double              spin;
0135   G4double              mass;
0136 
0137   //lab of incedent particle
0138   G4double              tkinLab;
0139   G4double              momLab2;
0140   G4double              invbetaLab2;
0141 
0142   //relative system with nucleus
0143   G4double      mu_rel;
0144   G4double              tkin;
0145   G4double              mom2;
0146   G4double              invbeta2;
0147   G4double      beta;
0148   G4double      gamma;
0149 
0150   //constants
0151   G4double              alpha;
0152   G4double              htc2;
0153   G4double              e2;
0154 
0155   // target nucleus
0156   G4double              targetMass;
0157   G4double      As;
0158   G4int                 targetZ;
0159   G4int             targetA;
0160 
0161   // working array
0162   std::vector<G4double> cross;
0163 };
0164 
0165 
0166 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
0167 
0168 inline 
0169 void G4ScreeningMottCrossSection::SetupParticle(const G4ParticleDefinition* p)
0170 {
0171   particle = p;
0172   mass = particle->GetPDGMass();
0173   spin = particle->GetPDGSpin();
0174   if(0.0 != spin) { spin = 0.5; }
0175   tkin = 0.0;
0176 }
0177 
0178 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
0179 
0180 #endif