G4alphaIonisation.cc

Go to the documentation of this file.
00001 //
00002 // ********************************************************************
00003 // * License and Disclaimer                                           *
00004 // *                                                                  *
00005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
00006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
00007 // * conditions of the Geant4 Software License,  included in the file *
00008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
00009 // * include a list of copyright holders.                             *
00010 // *                                                                  *
00011 // * Neither the authors of this software system, nor their employing *
00012 // * institutes,nor the agencies providing financial support for this *
00013 // * work  make  any representation or  warranty, express or implied, *
00014 // * regarding  this  software system or assume any liability for its *
00015 // * use.  Please see the license in the file  LICENSE  and URL above *
00016 // * for the full disclaimer and the limitation of liability.         *
00017 // *                                                                  *
00018 // * This  code  implementation is the result of  the  scientific and *
00019 // * technical work of the GEANT4 collaboration.                      *
00020 // * By using,  copying,  modifying or  distributing the software (or *
00021 // * any work based  on the software)  you  agree  to acknowledge its *
00022 // * use  in  resulting  scientific  publications,  and indicate your *
00023 // * acceptance of all terms of the Geant4 Software license.          *
00024 // ********************************************************************
00025 //
00026 // $Id$
00027 //
00028 // -------------------------------------------------------------------
00029 //
00030 // GEANT4 Class file
00031 //
00032 //
00033 // File name:     G4alphaIonisation
00034 //
00035 // Author:        Vladimir Ivanchenko
00036 //
00037 // Creation date: 28.10.2009 created from G4ionIonisation
00038 //
00039 // Modifications:
00040 //
00041 //
00042 //
00043 // -------------------------------------------------------------------
00044 //
00045 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00046 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00047 
00048 #include "G4alphaIonisation.hh"
00049 
00050 #include "G4PhysicalConstants.hh"
00051 #include "G4SystemOfUnits.hh"
00052 #include "G4Electron.hh"
00053 #include "G4Alpha.hh"
00054 #include "G4BraggIonModel.hh"
00055 #include "G4BetheBlochModel.hh"
00056 #include "G4UnitsTable.hh"
00057 #include "G4LossTableManager.hh"
00058 #include "G4IonFluctuations.hh"
00059 #include "G4UniversalFluctuation.hh"
00060 
00061 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00062 
00063 using namespace std;
00064 
00065 G4alphaIonisation::G4alphaIonisation(const G4String& name)
00066   : G4VEnergyLossProcess(name),
00067     theParticle(0),
00068     isInitialised(false)
00069 {
00070   G4Exception("G4alphaIonisation::G4alphaIonisation","em0007",JustWarning,
00071               " The process is not ready for use - incorrect results are expected");
00072   SetLinearLossLimit(0.02);
00073   SetStepFunction(0.2, 0.01*mm);
00074   //  SetIntegral(true);
00075   SetProcessSubType(fIonisation);
00076   //  SetVerboseLevel(1);
00077   mass = 0.0;
00078   ratio = 0.0;
00079   eth = 8*MeV;
00080 }
00081 
00082 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00083 
00084 G4alphaIonisation::~G4alphaIonisation()
00085 {}
00086 
00087 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00088 
00089 G4bool G4alphaIonisation::IsApplicable(const G4ParticleDefinition& p)
00090 {
00091   return (!p.IsShortLived() &&
00092           std::fabs(p.GetPDGCharge()/CLHEP::eplus - 2) < 0.01);
00093 }
00094 
00095 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00096 
00097 G4double G4alphaIonisation::MinPrimaryEnergy(const G4ParticleDefinition*, 
00098                                              const G4Material*, 
00099                                              G4double cut)
00100 {
00101   G4double x = 0.5*cut/electron_mass_c2;
00102   G4double gam = x*ratio + std::sqrt((1. + x)*(1. + x*ratio*ratio));
00103   return mass*(gam - 1.0);
00104 }
00105 
00106 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00107 
00108 void G4alphaIonisation::InitialiseEnergyLossProcess(
00109                       const G4ParticleDefinition* part,
00110                       const G4ParticleDefinition* bpart)
00111 {
00112   if(!isInitialised) {
00113 
00114     theParticle = part;
00115     G4String pname = part->GetParticleName();
00116 
00117     // define base particle
00118     const G4ParticleDefinition* theBaseParticle = 0;
00119     if(bpart == 0) { 
00120       if(pname != "alpha") { theBaseParticle = G4Alpha::Alpha(); }
00121     } else { theBaseParticle = bpart; }
00122 
00123     mass  = part->GetPDGMass();
00124     ratio = electron_mass_c2/mass;
00125 
00126     SetBaseParticle(theBaseParticle);
00127     SetSecondaryParticle(G4Electron::Electron());
00128 
00129     if (!EmModel(1)) { SetEmModel(new G4BraggIonModel(), 1); }
00130     EmModel(1)->SetLowEnergyLimit(MinKinEnergy());
00131 
00132     // model limit defined for alpha
00133     eth = (EmModel(1)->HighEnergyLimit())*mass/proton_mass_c2;
00134     EmModel(1)->SetHighEnergyLimit(eth);
00135 
00136     if (!FluctModel()) { SetFluctModel(new G4UniversalFluctuation()); }
00137     AddEmModel(1, EmModel(1), new G4IonFluctuations());
00138 
00139     if (!EmModel(2)) { SetEmModel(new G4BetheBlochModel(),2); }  
00140     EmModel(2)->SetLowEnergyLimit(eth);
00141     EmModel(2)->SetHighEnergyLimit(MaxKinEnergy());
00142     AddEmModel(2, EmModel(2), FluctModel());    
00143 
00144     isInitialised = true;
00145   }
00146 }
00147 
00148 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
00149 
00150 void G4alphaIonisation::PrintInfo()
00151 {}
00152 
00153 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....

Generated on Mon May 27 17:47:38 2013 for Geant4 by  doxygen 1.4.7