Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. 1 // 3 // 2 // ******************************************* << 4 // By copying, distributing or modifying the Program (or any work 3 // * License and Disclaimer << 5 // based on the Program) you indicate your acceptance of this statement, 4 // * << 6 // and all its terms. 5 // * The Geant4 software is copyright of th << 7 // 6 // * the Geant4 Collaboration. It is provided << 8 // $Id: G4eBremsstrahlung.hh,v 1.8 2001/01/11 10:39:48 urban Exp $ 7 // * conditions of the Geant4 Software License << 9 // GEANT4 tag $Name: geant4-03-01 $ 8 // * LICENSE and available at http://cern.ch/ << 10 // 9 // * include a list of copyright holders. << 11 // 10 // * << 12 // ------------------------------------------------------------ 11 // * Neither the authors of this software syst << 13 // GEANT 4 class header file 12 // * institutes,nor the agencies providing fin << 14 // CERN Geneva Switzerland 13 // * work make any representation or warran << 15 // 14 // * regarding this software system or assum << 16 // For information related to this code contact: 15 // * use. Please see the license in the file << 17 // CERN, IT Division, ASD group 16 // * for the full disclaimer and the limitatio << 18 // History: first implementation, based on object model of 17 // * << 19 // 2nd December 1995, G.Cosmo 18 // * This code implementation is the result << 20 // ------------ G4eBremsstrahlung physics process ------ 19 // * technical work of the GEANT4 collaboratio << 21 // by Michel Maire, 24 July 1996 20 // * By using, copying, modifying or distri << 22 // ************************************************************ 21 // * any work based on the software) you ag << 23 // 1-10-96 : new type G4OrderedTable; ComputePartialSumSigma() 22 // * use in resulting scientific publicati << 24 // 20/03/97: new energy loss+ionisation+brems scheme, L.Urban 23 // * acceptance of all terms of the Geant4 Sof << 25 // 01-09-98, new method PrintInfo() 24 // ******************************************* << 26 // 10/02/00 modifications , new e.m. structure, L.Urban 25 // << 27 // 07/08/00 new cross section/en.loss parametrisation, LPM flag , L.Urban 26 // << 28 // ------------------------------------------------------------ 27 // ------------------------------------------- << 28 // << 29 // GEANT4 Class header file << 30 // << 31 // << 32 // File name: G4eBremsstrahlung << 33 // << 34 // Author: Laszlo Urban << 35 // << 36 // Creation date: 24.06.1996 << 37 // << 38 // Modifications: << 39 // << 40 // 01-10-96 new type G4OrderedTable; ComputeP << 41 // 20-03-97 new energy loss+ionisation+brems s << 42 // 01-09-98 new method PrintInfo() << 43 // 10-02-00 modifications , new e.m. structure << 44 // 07-08-00 new cross section/en.loss parametr << 45 // 09-08-01 new methods Store/Retrieve Physics << 46 // 19-09-01 come back to previous process name << 47 // 29-10-01 all static functions no more inlin << 48 // 07-01-02 new design of em processes (V.Ivan << 49 // 26-12-02 secondary production moved to deri << 50 // 24-01-03 Make models region aware (V.Ivanch << 51 // 05-02-03 Fix compilation warnings (V.Ivanch << 52 // 08-08-03 STD substitute standard (V.Ivanch << 53 // 17-10-03 PrintInfoDefinition - virtual (V.I << 54 // 12-11-03 G4EnergyLossSTD -> G4EnergyLossPro << 55 // 21-01-04 Migrade to G4ParticleChangeForLoss << 56 // 04-11-04 add gamma threshold (V.Ivanchenko) << 57 // 08-11-04 Migration to new interface of Stor << 58 // 08-04-05 Major optimisation of internal int << 59 // 11-04-04 Move MaxSecondaryEnergy to models << 60 // << 61 // Class Description: << 62 // << 63 // This class manages the bremsstrahlung for e << 64 // it inherites from G4VContinuousDiscreteProc << 65 // << 66 << 67 // ------------------------------------------- << 68 // << 69 29 70 #ifndef G4eBremsstrahlung_h 30 #ifndef G4eBremsstrahlung_h 71 #define G4eBremsstrahlung_h 1 31 #define G4eBremsstrahlung_h 1 72 32 73 #include "G4VEnergyLossProcess.hh" << 33 #include "G4ios.hh" 74 #include "G4DynamicParticle.hh" << 34 #include "globals.hh" >> 35 #include "Randomize.hh" >> 36 #include "G4VeEnergyLoss.hh" >> 37 #include "G4Track.hh" >> 38 #include "G4Step.hh" >> 39 #include "G4Gamma.hh" 75 #include "G4Electron.hh" 40 #include "G4Electron.hh" 76 #include "G4Positron.hh" 41 #include "G4Positron.hh" >> 42 #include "G4OrderedTable.hh" >> 43 #include "G4PhysicsTable.hh" >> 44 #include "G4PhysicsLogVector.hh" >> 45 >> 46 class G4eBremsstrahlung : public G4VeEnergyLoss >> 47 >> 48 { >> 49 public: >> 50 >> 51 G4eBremsstrahlung(const G4String& processName = "eBrem"); >> 52 >> 53 ~G4eBremsstrahlung(); >> 54 >> 55 G4bool IsApplicable(const G4ParticleDefinition&); >> 56 >> 57 void PrintInfoDefinition(); >> 58 >> 59 void BuildPhysicsTable(const G4ParticleDefinition& ParticleType); >> 60 >> 61 void BuildLossTable(const G4ParticleDefinition& ParticleType); >> 62 >> 63 void BuildLambdaTable(const G4ParticleDefinition& ParticleType); >> 64 >> 65 G4double GetMeanFreePath(const G4Track& track, >> 66 G4double previousStepSize, >> 67 G4ForceCondition* condition ); >> 68 >> 69 G4VParticleChange *PostStepDoIt(const G4Track& track, >> 70 const G4Step& step); >> 71 >> 72 G4double GetLambda( >> 73 G4double KineticEnergy,G4Material* material); >> 74 >> 75 protected: >> 76 >> 77 G4double ComputeMeanFreePath( const G4ParticleDefinition* ParticleType, >> 78 G4double KineticEnergy, >> 79 const G4Material* aMaterial); >> 80 >> 81 void ComputePartialSumSigma( const G4ParticleDefinition* ParticleType, >> 82 G4double KineticEnergy, >> 83 const G4Material* aMaterial); >> 84 >> 85 virtual G4double ComputeMicroscopicCrossSection( >> 86 const G4ParticleDefinition* ParticleType, >> 87 G4double KineticEnergy, >> 88 G4double AtomicNumber, >> 89 G4double GammaEnergyCut); 77 90 78 class G4Material; << 91 private: >> 92 >> 93 G4double ComputeBremLoss(G4double Z,G4double natom,G4double T, >> 94 G4double Cut,G4double x); 79 95 80 class G4eBremsstrahlung : public G4VEnergyLoss << 96 G4double ComputePositronCorrFactorLoss(G4double AtomicNumber, 81 { << 97 G4double KineticEnergy, >> 98 G4double GammaEnergyCut); 82 99 83 public: << 100 G4double ComputePositronCorrFactorSigma(G4double AtomicNumber, >> 101 G4double KineticEnergy, >> 102 G4double GammaEnergyCut); 84 103 85 explicit G4eBremsstrahlung(const G4String& n << 104 G4Element* SelectRandomAtom(G4Material* aMaterial) const; 86 105 87 ~G4eBremsstrahlung() override; << 106 G4double ScreenFunction1(G4double ScreenVariable); 88 107 89 G4bool IsApplicable(const G4ParticleDefiniti << 108 G4double ScreenFunction2(G4double ScreenVariable); 90 << 91 // print documentation in html format << 92 void ProcessDescription(std::ostream&) const << 93 109 94 // hide assignment operator << 110 G4double SupressionFunction(const G4Material* aMaterial, 95 G4eBremsstrahlung & operator=(const G4eBrems << 111 G4double KineticEnergy, 96 G4eBremsstrahlung(const G4eBremsstrahlung&) << 112 G4double GammaEnergy) ; 97 113 98 protected: << 114 G4eBremsstrahlung & operator=(const G4eBremsstrahlung &right); >> 115 >> 116 G4eBremsstrahlung(const G4eBremsstrahlung&); >> 117 >> 118 private: 99 119 100 // Print out of the class parameters << 120 G4PhysicsTable* theMeanFreePathTable ; 101 void StreamProcessInfo(std::ostream& outFile << 102 121 103 void << 122 G4OrderedTable PartialSumSigma; // partial sum of total crosssection 104 InitialiseEnergyLossProcess(const G4Particle << 105 const G4ParticleDefinition*) overr << 106 123 107 private: << 124 static G4double LowerBoundLambda; // low energy limit of the crossection formula >> 125 static G4double UpperBoundLambda; // high energy limit of the crossection formula >> 126 static G4int NbinLambda; // number of bins in the tables >> 127 >> 128 G4double MinThreshold; // minimun value for the production threshold >> 129 >> 130 G4double LowestKineticEnergy,HighestKineticEnergy; // bining of the Eloss table >> 131 G4int TotBin; // (from G4VeEnergyLoss) 108 132 109 G4bool isInitialised = false; << 133 static G4double probsup ; 110 }; << 134 static G4bool LPMflag ; 111 135 112 //....oooOO0OOooo........oooOO0OOooo........oo << 136 public: 113 137 114 #endif << 138 static void SetLowerBoundLambda(G4double val) {LowerBoundLambda = val;}; >> 139 static void SetUpperBoundLambda(G4double val) {UpperBoundLambda = val;}; >> 140 static void SetNbinLambda(G4int n) {NbinLambda = n;}; >> 141 static G4double GetLowerBoundLambda() { return LowerBoundLambda;}; >> 142 static G4double GetUpperBoundLambda() { return UpperBoundLambda;}; >> 143 static G4int GetNbinLambda() {return NbinLambda;}; >> 144 >> 145 static void SetLPMflag(G4bool val) { LPMflag = val ; } ; >> 146 static G4bool GetLPMflag() { return LPMflag ; } ; >> 147 }; 115 148 >> 149 #include "G4eBremsstrahlung.icc" >> 150 >> 151 #endif 116 152