00001 // 00002 // ******************************************************************** 00003 // * DISCLAIMER * 00004 // * * 00005 // * The following disclaimer summarizes all the specific disclaimers * 00006 // * of contributors to this software. The specific disclaimers,which * 00007 // * govern, are listed with their locations in: * 00008 // * http://cern.ch/geant4/license * 00009 // * * 00010 // * Neither the authors of this software system, nor their employing * 00011 // * institutes,nor the agencies providing financial support for this * 00012 // * work make any representation or warranty, express or implied, * 00013 // * regarding this software system or assume any liability for its * 00014 // * use. * 00015 // * * 00016 // * This code implementation is the intellectual property of the * 00017 // * GEANT4 collaboration. * 00018 // * By copying, distributing or modifying the Program (or any work * 00019 // * based on the Program) you indicate your acceptance of this * 00020 // * statement, and all its terms. * 00021 // ******************************************************************** 00022 // 00023 // $Id: ExteIonisation.h,v 1.6 2015/10/27 11:02:53 sunss Exp $ 00024 // GEANT4 tag $Name: TrkExtAlg-00-00-64 $ 00025 // 00026 // ------------------------------------------------------------------- 00027 // 00028 // GEANT4 Class header file 00029 // 00030 // 00031 // File name: ExteIonisation 00032 // 00033 // Author: Laszlo Urban 00034 // 00035 // Creation date: 20.03.1997 00036 // 00037 // Modifications: 00038 // 00039 // 10-02-00 modifications , new e.m. structure, L.Urban 00040 // 03-08-01 new methods Store/Retrieve PhysicsTable (mma) 00041 // 13-08-01 new function ComputeRestrictedMeandEdx() (mma) 00042 // 19-09-01 come back to previous ProcessName "eIoni" 00043 // 29-10-01 all static functions no more inlined (mma) 00044 // 07-01-02 new design of em processes (V.Ivanchenko) 00045 // 26-12-02 Secondary production moved to derived classes (VI) 00046 // 24-01-03 Make models region aware (V.Ivanchenko) 00047 // 05-02-03 Fix compilation warnings (V.Ivanchenko) 00048 // 13-02-03 SubCutoff regime is assigned to a region (V.Ivanchenko) 00049 // 23-05-03 Add fluctuation model as a member function (V.Ivanchenko) 00050 // 03-06-03 Fix initialisation problem for STD ionisation (V.Ivanchenko) 00051 // 08-08-03 STD substitute standard (V.Ivanchenko) 00052 // 12-11-03 G4EnergyLossSTD -> G4EnergyLossProcess (V.Ivanchenko) 00053 // 21-01-04 Migrade to G4ParticleChangeForLoss (V.Ivanchenko) 00054 // 00055 // ------------------------------------------------------------------------------------ 00056 // 15-04-05 Omit the correction of momentum direction due to production of secenderies. 00057 // This is needed for my Track Extrapotation. (L.L.Wang) 00058 // ------------------------------------------------------------------------------------ 00059 // 00060 // 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko) 00061 // 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko) 00062 // 11-04-04 Move MaxSecondaryEnergy to models (V.Ivanchenko) 00063 // 00064 // Class Description: 00065 // 00066 // This class manages the ionisation process for e-/e+ 00067 // it inherites from G4VContinuousDiscreteProcess via G4VEnergyLossProcess. 00068 // 00069 00070 // ------------------------------------------------------------------- 00071 // 00072 00073 #ifndef ExteIonisation_h 00074 #define ExteIonisation_h 1 00075 00076 #include "G4VEnergyLossProcess.hh" 00077 #include "G4Electron.hh" 00078 #include "G4Positron.hh" 00079 #include "G4VEmModel.hh" 00080 00081 class G4Material; 00082 class G4ParticleDefinition; 00083 class G4VEmFluctuationModel; 00084 00085 class ExteIonisation : public G4VEnergyLossProcess 00086 { 00087 00088 public: 00089 00090 ExteIonisation(const G4String& name = "ExteIoni"); 00091 00092 ~ExteIonisation(); 00093 00094 G4bool IsApplicable(const G4ParticleDefinition& p); 00095 00096 virtual void PrintInfo(); 00097 // Print out of the class parameters 00098 00099 protected: 00100 00101 std::vector<G4DynamicParticle*>* SecondariesPostStep( 00102 G4VEmModel*, 00103 const G4MaterialCutsCouple*, 00104 const G4DynamicParticle*, 00105 G4double&); 00106 00107 virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,const G4ParticleDefinition*); 00108 00109 virtual G4double MinPrimaryEnergy(const G4ParticleDefinition*, 00110 const G4Material*, G4double cut); 00111 00112 private: 00113 00114 // hide assignment operator 00115 ExteIonisation & operator=(const ExteIonisation &right); 00116 ExteIonisation(const ExteIonisation&); 00117 00118 const G4ParticleDefinition* theElectron; 00119 const G4ParticleDefinition* particle; 00120 G4VEmFluctuationModel* flucModel; 00121 00122 G4bool isElectron; 00123 G4bool isInitialised; 00124 }; 00125 00126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00127 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00128 00129 inline G4double ExteIonisation::MinPrimaryEnergy(const G4ParticleDefinition*, 00130 const G4Material*, 00131 G4double cut) 00132 { 00133 G4double x = cut; 00134 if(isElectron) x += cut; 00135 return x; 00136 } 00137 00138 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00139 00140 inline G4bool ExteIonisation::IsApplicable(const G4ParticleDefinition& p) 00141 { 00142 return (&p == G4Electron::Electron() || &p == G4Positron::Positron()); 00143 } 00144 00145 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00146 00147 inline std::vector<G4DynamicParticle*>* ExteIonisation::SecondariesPostStep( 00148 G4VEmModel* model, 00149 const G4MaterialCutsCouple* couple, 00150 const G4DynamicParticle* dp, 00151 G4double& tcut) 00152 { 00153 //return model->SampleSecondaries(couple,dp,tcut); 00154 return NULL; 00155 } 00156 00157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 00158 00159 #endif