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: G4SynchrotronRadiation.hh,v 1.4 2006/06/29 19:55:43 gunter Exp $ >> 28 // GEANT4 tag $Name: geant4-09-01-patch-01 $ >> 29 // 26 // ------------------------------------------- 30 // ------------------------------------------------------------ 27 // GEANT 4 class header file 31 // GEANT 4 class header file >> 32 // CERN Geneva Switzerland >> 33 // 28 // 34 // 29 // History: 35 // History: 30 // 21-5-98 1 version , V. Grichine 36 // 21-5-98 1 version , V. Grichine 31 // 28-05-01, V.Ivanchenko minor changes t 37 // 28-05-01, V.Ivanchenko minor changes to provide ANSI -wall compilation 32 // 23-05-06, H. Burkhardt: Energy spectru 38 // 23-05-06, H. Burkhardt: Energy spectrum from function rather than table 33 // 39 // >> 40 // 34 // ------------------------------------------- 41 // ------------------------------------------------------------ 35 42 36 #ifndef G4SynchrotronRadiation_h 43 #ifndef G4SynchrotronRadiation_h 37 #define G4SynchrotronRadiation_h 1 44 #define G4SynchrotronRadiation_h 1 38 45 >> 46 #include "G4ios.hh" 39 #include "globals.hh" 47 #include "globals.hh" 40 #include "G4Step.hh" << 48 #include "Randomize.hh" >> 49 #include "G4VDiscreteProcess.hh" >> 50 #include "G4TransportationManager.hh" >> 51 #include "G4FieldManager.hh" >> 52 #include "G4Field.hh" 41 #include "G4ThreeVector.hh" 53 #include "G4ThreeVector.hh" >> 54 #include "G4PropagatorInField.hh" >> 55 42 #include "G4Track.hh" 56 #include "G4Track.hh" 43 #include "G4VDiscreteProcess.hh" << 57 #include "G4Step.hh" >> 58 >> 59 #include "G4Gamma.hh" >> 60 #include "G4Electron.hh" >> 61 #include "G4Positron.hh" 44 62 45 class G4LossTableManager; << 46 class G4ParticleDefinition; << 47 class G4PropagatorInField; << 48 class G4VEmAngularDistribution; << 49 63 50 class G4SynchrotronRadiation : public G4VDiscr 64 class G4SynchrotronRadiation : public G4VDiscreteProcess 51 { 65 { 52 public: << 66 public: 53 explicit G4SynchrotronRadiation(const G4Stri << 54 G4ProcessTyp << 55 67 56 virtual ~G4SynchrotronRadiation(); << 68 G4SynchrotronRadiation(const G4String& pName = "SynRad", >> 69 G4ProcessType type = fElectromagnetic); 57 70 58 G4SynchrotronRadiation& operator=(const G4Sy << 71 virtual ~G4SynchrotronRadiation(); 59 delete; << 60 G4SynchrotronRadiation(const G4SynchrotronRa << 61 72 62 virtual G4double GetMeanFreePath(const G4Tra << 73 G4double GetMeanFreePath( const G4Track& track, 63 G4double pr << 74 G4double previousStepSize, 64 G4ForceCond << 75 G4ForceCondition* condition ); 65 76 66 virtual G4VParticleChange* PostStepDoIt(cons << 77 G4VParticleChange *PostStepDoIt( const G4Track& track, 67 cons << 78 const G4Step& Step ); 68 79 69 G4double GetPhotonEnergy(const G4Track& trac << 80 G4double GetPhotonEnergy( const G4Track& trackData, >> 81 const G4Step& stepData ); 70 82 71 G4double GetRandomEnergySR(G4double, G4doubl << 83 G4double GetRandomEnergySR( G4double, G4double ); 72 84 73 G4double InvSynFracInt(G4double x); 85 G4double InvSynFracInt(G4double x); 74 G4double Chebyshev(G4double a, G4double b, c << 86 G4double Chebyshev(G4double a,G4double b,const G4double c[],G4int m,G4double x); 75 G4double x); << 87 G4bool IsApplicable(const G4ParticleDefinition&); 76 << 88 void BuildPhysicsTable(const G4ParticleDefinition& ); 77 virtual G4bool IsApplicable(const G4Particle << 89 void PrintInfoDefinition(); 78 virtual void BuildPhysicsTable(const G4Parti << 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 ) ); 98 114 99 inline G4double G4SynchrotronRadiation::Chebys << 115 // return ( particle.GetPDGCharge() != 0.0 ); 100 << 116 } 101 << 117 >> 118 inline G4double G4SynchrotronRadiation::Chebyshev(G4double a,G4double b,const G4double c[],G4int m,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=m-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