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: ExthIonisation.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: G4hIonisation 00032 // 00033 // Author: Laszlo Urban 00034 // 00035 // Creation date: 30.05.1997 00036 // 00037 // Modifications: 00038 // 00039 // corrected by L.Urban on 24/09/97 00040 // corrected by L.Urban on 13/01/98 00041 // bugs fixed by L.Urban on 02/02/99 00042 // 10/02/00 modifications , new e.m. structure, L.Urban 00043 // 10-08-01 new methods Store/Retrieve PhysicsTable (mma) 00044 // 14-08-01 new function ComputeRestrictedMeandEdx() + 'cleanup' (mma) 00045 // 19-09-01 come back to previous process name "hIoni" 00046 // 29-10-01 all static functions no more inlined 00047 // 07-01-02 new design of em processes (V.Ivanchenko) 00048 // 26-12-02 secondary production moved to derived classes (VI) 00049 // 24-01-03 Make models region aware (V.Ivanchenko) 00050 // 05-02-03 Fix compilation warnings (V.Ivanchenko) 00051 // 13-02-03 SubCutoff regime is assigned to a region (V.Ivanchenko) 00052 // 15-02-03 Add control on delta pointer (V.Ivanchenko) 00053 // 23-05-03 Add fluctuation model as a member function (V.Ivanchenko) 00054 // 03-06-03 Fix initialisation problem for STD ionisation (V.Ivanchenko) 00055 // 16-06-03 ShortLived are not applicable any more (V.Ivanchenko) 00056 // 08-08-03 STD substitute standard (V.Ivanchenko) 00057 // 12-11-03 G4EnergyLossSTD -> G4EnergyLossProcess (V.Ivanchenko) 00058 // 21-01-04 Migrade to G4ParticleChangeForLoss (V.Ivanchenko) 00059 // ------------------------------------------------------------------------------------ 00060 // 15-04-05 Omit the correction of momentum direction due to production of secenderies. 00061 // This is needed for my Track Extrapotation. (L.L.Wang) 00062 // ------------------------------------------------------------------------------------ 00063 // 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko) 00064 // 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko) 00065 // 11-04-04 Move MaxSecondaryEnergy to models (V.Ivanchenko) 00066 // 00067 // Class Description: 00068 // 00069 // This class manages the ionisation process for hadrons. 00070 // it inherites from G4VContinuousDiscreteProcess via G4VEnergyLoss. 00071 // 00072 00073 // ------------------------------------------------------------------- 00074 // 00075 00076 #ifndef ExthIonisation_h 00077 #define ExthIonisation_h 1 00078 00079 #include "G4VEnergyLossProcess.hh" 00080 #include "G4Electron.hh" 00081 #include "G4Positron.hh" 00082 #include "globals.hh" 00083 #include "G4VEmModel.hh" 00084 00085 class G4Material; 00086 class G4VEmFluctuationModel; 00087 00088 class ExthIonisation : public G4VEnergyLossProcess 00089 { 00090 00091 public: 00092 00093 ExthIonisation(const G4String& name = "ExthIoni"); 00094 00095 ~ExthIonisation(); 00096 00097 G4bool IsApplicable(const G4ParticleDefinition& p); 00098 00099 G4double MinPrimaryEnergy(const G4ParticleDefinition* p, 00100 const G4Material*, G4double cut); 00101 00102 virtual void PrintInfo(); 00103 // Print out of the class parameters 00104 00105 protected: 00106 std::vector<G4DynamicParticle*>* SecondariesPostStep( 00107 G4VEmModel*, 00108 const G4MaterialCutsCouple*, 00109 const G4DynamicParticle*, 00110 G4double&); 00111 00112 virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*, 00113 const G4ParticleDefinition*); 00114 00115 private: 00116 00117 // hide assignment operator 00118 ExthIonisation & operator=(const ExthIonisation &right); 00119 ExthIonisation(const ExthIonisation&); 00120 00121 G4double mass; 00122 G4double ratio; 00123 00124 const G4ParticleDefinition* theParticle; 00125 const G4ParticleDefinition* theBaseParticle; 00126 G4VEmFluctuationModel* flucModel; 00127 00128 G4bool isInitialised; 00129 00130 G4double eth; 00131 }; 00132 00133 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00134 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00135 00136 inline G4bool ExthIonisation::IsApplicable(const G4ParticleDefinition& p) 00137 { 00138 return (p.GetPDGCharge() != 0.0 && 00139 p.GetPDGMass() > 10.0*MeV && 00140 !p.IsShortLived()); 00141 } 00142 00143 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00144 00145 inline G4double ExthIonisation::MinPrimaryEnergy(const G4ParticleDefinition*, 00146 const G4Material*, 00147 G4double cut) 00148 { 00149 G4double x = 0.5*cut/electron_mass_c2; 00150 G4double y = electron_mass_c2/mass; 00151 G4double g = x*y + sqrt((1. + x)*(1. + x*y*y)); 00152 return mass*(g - 1.0); 00153 } 00154 00155 00156 inline std::vector<G4DynamicParticle*>* ExthIonisation::SecondariesPostStep( 00157 G4VEmModel* model, 00158 const G4MaterialCutsCouple* couple, 00159 const G4DynamicParticle* dp, 00160 G4double& tcut) 00161 { 00162 // return model->SampleSecondaries(couple, dp, tcut); 00163 return NULL; 00164 }//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 00165 00166 #endif