Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // >> 26 // >> 27 // $Id$ >> 28 // 26 // ------------------------------------------- 29 // ------------------------------------------------------------ 27 // GEANT 4 class header file 30 // GEANT 4 class header file >> 31 // CERN Geneva Switzerland >> 32 // 28 // 33 // 29 // History: 34 // History: 30 // 21-5-98 1 version , V. Grichine 35 // 21-5-98 1 version , V. Grichine 31 // 28-05-01, V.Ivanchenko minor changes t 36 // 28-05-01, V.Ivanchenko minor changes to provide ANSI -wall compilation 32 // 23-05-06, H. Burkhardt: Energy spectru 37 // 23-05-06, H. Burkhardt: Energy spectrum from function rather than table 33 // 38 // >> 39 // 34 // ------------------------------------------- 40 // ------------------------------------------------------------ 35 41 36 #ifndef G4SynchrotronRadiation_h 42 #ifndef G4SynchrotronRadiation_h 37 #define G4SynchrotronRadiation_h 1 43 #define G4SynchrotronRadiation_h 1 38 44 >> 45 #include "G4ios.hh" 39 #include "globals.hh" 46 #include "globals.hh" 40 #include "G4Step.hh" << 47 #include "Randomize.hh" >> 48 #include "G4VDiscreteProcess.hh" >> 49 #include "G4TransportationManager.hh" >> 50 #include "G4FieldManager.hh" >> 51 #include "G4Field.hh" 41 #include "G4ThreeVector.hh" 52 #include "G4ThreeVector.hh" >> 53 #include "G4PropagatorInField.hh" >> 54 42 #include "G4Track.hh" 55 #include "G4Track.hh" 43 #include "G4VDiscreteProcess.hh" << 56 #include "G4Step.hh" >> 57 >> 58 #include "G4Gamma.hh" >> 59 #include "G4Electron.hh" >> 60 #include "G4Positron.hh" 44 61 45 class G4LossTableManager; << 46 class G4ParticleDefinition; << 47 class G4PropagatorInField; << 48 class G4VEmAngularDistribution; << 49 62 50 class G4SynchrotronRadiation : public G4VDiscr 63 class G4SynchrotronRadiation : public G4VDiscreteProcess 51 { 64 { 52 public: << 65 public: 53 explicit G4SynchrotronRadiation(const G4Stri << 54 G4ProcessTyp << 55 66 56 virtual ~G4SynchrotronRadiation(); << 67 G4SynchrotronRadiation(const G4String& pName = "SynRad", >> 68 G4ProcessType type = fElectromagnetic); 57 69 58 G4SynchrotronRadiation& operator=(const G4Sy << 70 virtual ~G4SynchrotronRadiation(); 59 delete; << 60 G4SynchrotronRadiation(const G4SynchrotronRa << 61 71 62 virtual G4double GetMeanFreePath(const G4Tra << 72 G4double GetMeanFreePath( const G4Track& track, 63 G4double pr << 73 G4double previousStepSize, 64 G4ForceCond << 74 G4ForceCondition* condition ); 65 75 66 virtual G4VParticleChange* PostStepDoIt(cons << 76 G4VParticleChange *PostStepDoIt( const G4Track& track, 67 cons << 77 const G4Step& Step ); 68 78 69 G4double GetPhotonEnergy(const G4Track& trac << 79 G4double GetPhotonEnergy( const G4Track& trackData, >> 80 const G4Step& stepData ); 70 81 71 G4double GetRandomEnergySR(G4double, G4doubl << 82 G4double GetRandomEnergySR( G4double, G4double ); 72 83 73 G4double InvSynFracInt(G4double x); 84 G4double InvSynFracInt(G4double x); 74 G4double Chebyshev(G4double a, G4double b, c << 85 G4double Chebyshev(G4double a,G4double b,const G4double c[], 75 G4double x); << 86 G4int n, G4double x); 76 << 87 G4bool IsApplicable(const G4ParticleDefinition&); 77 virtual G4bool IsApplicable(const G4Particle << 88 void BuildPhysicsTable(const G4ParticleDefinition& ); 78 virtual void BuildPhysicsTable(const G4Parti << 89 void PrintInfoDefinition(); >> 90 >> 91 private: >> 92 >> 93 G4SynchrotronRadiation & operator=(const G4SynchrotronRadiation &right); >> 94 G4SynchrotronRadiation(const G4SynchrotronRadiation&); >> 95 >> 96 G4ParticleDefinition* theGamma; >> 97 const G4ParticleDefinition* theElectron; >> 98 const G4ParticleDefinition* thePositron; 79 99 80 void ProcessDescription(std::ostream&) const << 100 G4double fLambdaConst; 81 void DumpInfo() const override { ProcessDesc << 101 G4double fEnergyConst; 82 102 83 void SetAngularGenerator(G4VEmAngularDistrib << 84 << 85 private: << 86 G4LossTableManager* theManager; << 87 G4VEmAngularDistribution* genAngle; << 88 G4ParticleDefinition* theGamma; << 89 G4PropagatorInField* fFieldPropagator; 103 G4PropagatorInField* fFieldPropagator; 90 104 91 G4bool FirstTime; << 92 G4bool FirstTime1; << 93 << 94 G4int secID = -1; // creator modelID << 95 }; 105 }; 96 106 97 ////////////////////////// INLINE METHODS // 107 ////////////////////////// INLINE METHODS ///////////////////////////// >> 108 inline G4bool >> 109 G4SynchrotronRadiation::IsApplicable( const G4ParticleDefinition& particle ) >> 110 { >> 111 >> 112 return ( ( &particle == (const G4ParticleDefinition *)theElectron ) || >> 113 ( &particle == (const G4ParticleDefinition *)thePositron ) ); >> 114 } 98 115 99 inline G4double G4SynchrotronRadiation::Chebys << 116 inline G4double 100 << 117 G4SynchrotronRadiation::Chebyshev(G4double a, G4double b, const G4double c[], 101 << 118 G4int n, G4double x) 102 { 119 { 103 G4double y; 120 G4double y; 104 G4double y2 = 2.0 * (y = (2.0 * x - a - b) / << 121 G4double y2=2.0*(y=(2.0*x-a-b)/(b-a)); // Change of variable. 105 G4double d = 0., dd = 0.; << 122 G4double d=0,dd=0; 106 for(G4int j = n - 1; j >= 1; --j) // Clensh << 123 for (G4int j=n-1;j>=1;--j) // Clenshaw's recurrence. 107 { << 124 { G4double sv=d; 108 G4double sv = d; << 125 d=y2*d-dd+c[j]; 109 d = y2 * d - dd + c[j]; << 126 dd=sv; 110 dd = sv; << 111 } 127 } 112 return y * d - dd + 0.5 * c[0]; << 128 return y*d-dd+0.5*c[0]; 113 } 129 } 114 130 115 #endif // end of G4SynchrotronRadiation.hh 131 #endif // end of G4SynchrotronRadiation.hh >> 132 116 133