Import Geant4 9.4.0 source tree
This commit is contained in:
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4ASTARStopping.hh,v 1.6 2008/11/13 12:04:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4ASTARStopping.hh,v 1.8 2010/04/26 17:22:08 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
|
||||
#ifndef G4ASTARStopping_h
|
||||
#define G4ASTARStopping_h 1
|
||||
@@ -54,6 +54,8 @@
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4LPhysicsFreeVector.hh"
|
||||
#include <vector>
|
||||
|
||||
class G4Material;
|
||||
|
||||
@@ -75,16 +77,18 @@ private:
|
||||
|
||||
void Initialise();
|
||||
|
||||
void AddData(G4double* e, G4double* s, G4int idx);
|
||||
|
||||
// hide assignment operator
|
||||
G4ASTARStopping & operator=(const G4ASTARStopping &right);
|
||||
G4ASTARStopping(const G4ASTARStopping&);
|
||||
|
||||
G4int matIndex;
|
||||
const G4Material* currentMaterial;
|
||||
G4int index, matIndex;
|
||||
G4String name[74];
|
||||
G4double currentE, res;
|
||||
G4double e[74][78], kinE[78];
|
||||
G4double effZ[74];
|
||||
G4double emin;
|
||||
std::vector<G4String> name;
|
||||
std::vector<G4double> effZ;
|
||||
std::vector<G4LPhysicsFreeVector*> sdata;
|
||||
};
|
||||
|
||||
inline G4double G4ASTARStopping::GetElectronicDEDX(const G4Material* mat,
|
||||
@@ -96,6 +100,6 @@ inline G4double G4ASTARStopping::GetElectronicDEDX(const G4Material* mat,
|
||||
inline G4double G4ASTARStopping::GetEffectiveZ(G4int idx)
|
||||
{
|
||||
return effZ[idx];
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
+37
-34
@@ -23,56 +23,59 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BetheBlochIonGasModel.hh,v 1.1 2010/05/27 10:34:09 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// $Id: G4PolarizedComptonScattering.hh,v 1.9 2006/06/29 19:51:14 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// --------- G4PolarizedComptonScattering physics process ----------------------
|
||||
// by Vicente Lara, March 1998
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
// File name: G4BetheBlochIonGasModel
|
||||
//
|
||||
// Author: Vladimir Ivanchenko
|
||||
//
|
||||
// Creation date: 20.05.2010
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of Bethe-Bloch model energy loss and delta-electron production
|
||||
// by heavy positive partially stripted ion. Effective charge is not used,
|
||||
// dynamic charge should be sampled by a dedicated charge exchange process
|
||||
|
||||
// class description
|
||||
//
|
||||
// inherit from G4ComptonScattering
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
#ifndef G4BetheBlochIonGasModel_h
|
||||
#define G4BetheBlochIonGasModel_h 1
|
||||
|
||||
#ifndef G4PolarizedComptonScattering_h
|
||||
#define G4PolarizedComptonScattering_h 1
|
||||
#include "G4BetheBlochModel.hh"
|
||||
|
||||
#include "G4ComptonScattering52.hh"
|
||||
#include "G4EnergyLossTables.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4PolarizedComptonScattering : public G4ComptonScattering52
|
||||
class G4BetheBlochIonGasModel : public G4BetheBlochModel
|
||||
{
|
||||
public: // with description
|
||||
|
||||
G4PolarizedComptonScattering(const G4String& processName = "polarCompt");
|
||||
public:
|
||||
|
||||
G4VParticleChange* PostStepDoIt(const G4Track& aTrack, const G4Step& aStep);
|
||||
G4BetheBlochIonGasModel(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "BetheBlochGasIon");
|
||||
|
||||
private:
|
||||
|
||||
G4ThreeVector SetNewPolarization(G4double, G4double,
|
||||
G4double, G4double,
|
||||
G4ThreeVector& );
|
||||
virtual ~G4BetheBlochIonGasModel();
|
||||
|
||||
G4double SetPhi(G4double, G4double, G4double, G4double);
|
||||
virtual G4double ChargeSquareRatio(const G4Track& track);
|
||||
|
||||
virtual G4double GetParticleCharge(const G4ParticleDefinition* p,
|
||||
const G4Material* mat,
|
||||
G4double kineticEnergy);
|
||||
|
||||
void SystemOfRefChange(G4ThreeVector&, G4ThreeVector&, G4ThreeVector&,
|
||||
G4ThreeVector&);
|
||||
private:
|
||||
|
||||
// hide assignment operator as private
|
||||
G4PolarizedComptonScattering& operator=(const G4PolarizedComptonScattering &right);
|
||||
G4PolarizedComptonScattering(const G4PolarizedComptonScattering& );
|
||||
// hide assignment operator
|
||||
G4BetheBlochIonGasModel & operator=(const G4BetheBlochIonGasModel &right);
|
||||
G4BetheBlochIonGasModel(const G4BetheBlochIonGasModel&);
|
||||
|
||||
G4double currentCharge;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BetheBlochModel.hh,v 1.20 2009/04/23 17:44:43 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4BetheBlochModel.hh,v 1.23 2010/05/27 14:26:17 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -115,10 +115,10 @@ public:
|
||||
const G4Material* mat,
|
||||
G4double kineticEnergy);
|
||||
|
||||
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple* couple,
|
||||
const G4DynamicParticle* dp,
|
||||
G4double& eloss,
|
||||
G4double& niel,
|
||||
G4double&,
|
||||
G4double length);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
@@ -132,9 +132,13 @@ protected:
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
|
||||
inline G4double GetChargeSquareRatio() const;
|
||||
|
||||
inline void SetChargeSquareRatio(G4double val);
|
||||
|
||||
private:
|
||||
|
||||
inline void SetupParameters();
|
||||
void SetupParameters();
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition* p);
|
||||
|
||||
@@ -168,35 +172,12 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4BetheBlochModel::SetupParameters()
|
||||
{
|
||||
mass = particle->GetPDGMass();
|
||||
spin = particle->GetPDGSpin();
|
||||
G4double q = particle->GetPDGCharge()/eplus;
|
||||
chargeSquare = q*q;
|
||||
ratio = electron_mass_c2/mass;
|
||||
G4double magmom = particle->GetPDGMagneticMoment()*mass/(0.5*eplus*hbar_Planck*c_squared);
|
||||
magMoment2 = magmom*magmom - 1.0;
|
||||
formfact = 0.0;
|
||||
if(particle->GetLeptonNumber() == 0) {
|
||||
G4double x = 0.8426*GeV;
|
||||
if(spin == 0.0 && mass < GeV) {x = 0.736*GeV;}
|
||||
else if(mass > GeV) {
|
||||
x /= nist->GetZ13(mass/proton_mass_c2);
|
||||
// tlimit = 51.2*GeV*A13[iz]*A13[iz];
|
||||
}
|
||||
formfact = 2.0*electron_mass_c2/(x*x);
|
||||
tlimit = 2.0/formfact;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4BetheBlochModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if(particle != p) {
|
||||
particle = p;
|
||||
if (p->GetPDGCharge()/eplus > 1.5 && p->GetBaryonNumber() > 2) isIon = true;
|
||||
if (p->GetPDGCharge()/eplus > 1.5 && p->GetBaryonNumber() > 2)
|
||||
{ isIon = true; }
|
||||
SetupParameters();
|
||||
}
|
||||
}
|
||||
@@ -205,9 +186,25 @@ inline void G4BetheBlochModel::SetParticle(const G4ParticleDefinition* p)
|
||||
|
||||
inline void G4BetheBlochModel::SetGenericIon(const G4ParticleDefinition* p)
|
||||
{
|
||||
if(p && particle != p) {
|
||||
if(p->GetParticleName() == "GenericIon") isIon = true;
|
||||
if(p && particle != p) {
|
||||
if(p->GetParticleName() == "GenericIon") { isIon = true; }
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4BetheBlochModel::GetChargeSquareRatio() const
|
||||
{
|
||||
return chargeSquare;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4BetheBlochModel::SetChargeSquareRatio(G4double val)
|
||||
{
|
||||
chargeSquare = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BetheHeitlerModel.hh,v 1.6 2007/05/22 17:34:36 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4BetheHeitlerModel.hh,v 1.9 2010/10/26 10:35:22 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -62,7 +62,7 @@ class G4BetheHeitlerModel : public G4VEmModel
|
||||
public:
|
||||
|
||||
G4BetheHeitlerModel(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "Bethe-Heitler");
|
||||
const G4String& nam = "BetheHeitler");
|
||||
|
||||
virtual ~G4BetheHeitlerModel();
|
||||
|
||||
@@ -96,14 +96,6 @@ private:
|
||||
G4ParticleDefinition* theElectron;
|
||||
G4ParticleDefinition* thePositron;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4PhysicsTable* theCrossSectionTable;
|
||||
|
||||
G4double lowGammaEnergy;
|
||||
G4double highGammaEnergy;
|
||||
|
||||
G4int nbins;
|
||||
size_t indexZ[120];
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BraggIonGasModel.hh,v 1.1 2010/05/27 10:34:09 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4BraggIonGasModel
|
||||
//
|
||||
// Author: Vladimir Ivanchenko
|
||||
//
|
||||
// Creation date: 20.05.2010
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of energy loss using and delta-electron production
|
||||
// by heavy positive partially stripted ion using G4BraggModel. Effective
|
||||
// charge of ion is not used, dynamic charge should be sampled by a
|
||||
// dedicated charge exchange process
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4BraggIonGasModel_h
|
||||
#define G4BraggIonGasModel_h 1
|
||||
|
||||
#include "G4BraggModel.hh"
|
||||
|
||||
class G4BraggIonGasModel : public G4BraggModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4BraggIonGasModel(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "BraggIonGas");
|
||||
|
||||
virtual ~G4BraggIonGasModel();
|
||||
|
||||
// Access ion effective charge square ratio to unit charge
|
||||
virtual G4double ChargeSquareRatio(const G4Track&);
|
||||
|
||||
// Access ion effective charge
|
||||
virtual G4double GetParticleCharge(const G4ParticleDefinition*,
|
||||
const G4Material* mat,
|
||||
G4double kineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4BraggIonGasModel & operator=(const G4BraggIonGasModel &right);
|
||||
G4BraggIonGasModel(const G4BraggIonGasModel&);
|
||||
|
||||
G4double currentCharge;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4BraggModel.hh,v 1.14 2009/11/10 19:25:47 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4BraggModel.hh,v 1.15 2010/05/27 10:08:58 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -120,20 +120,16 @@ public:
|
||||
virtual G4double GetParticleCharge(const G4ParticleDefinition* p,
|
||||
const G4Material* mat,
|
||||
G4double kineticEnergy);
|
||||
/*
|
||||
// add correction to energy loss and compute non-ionizing energy loss
|
||||
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double& eloss,
|
||||
G4double& niel,
|
||||
G4double length);
|
||||
*/
|
||||
|
||||
protected:
|
||||
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
|
||||
inline G4double GetChargeSquareRatio() const;
|
||||
|
||||
inline void SetChargeSquareRatio(G4double val);
|
||||
|
||||
private:
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition* p);
|
||||
@@ -196,6 +192,16 @@ inline void G4BraggModel::SetParticle(const G4ParticleDefinition* p)
|
||||
ratio = electron_mass_c2/mass;
|
||||
}
|
||||
|
||||
inline G4double G4BraggModel::GetChargeSquareRatio() const
|
||||
{
|
||||
return chargeSquare;
|
||||
}
|
||||
|
||||
inline void G4BraggModel::SetChargeSquareRatio(G4double val)
|
||||
{
|
||||
chargeSquare = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,162 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4ComptonScattering52.hh,v 1.4 2007/05/16 14:00:56 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
//------------------ G4ComptonScattering52 physics process -----------------------
|
||||
// by Michel Maire, April 1996
|
||||
//
|
||||
// 10-06-96, updated by M.Maire
|
||||
// 21-06-96, SetCuts implementation, M.Maire
|
||||
// 06-01-97, crossection table + meanfreepath table, M.Maire
|
||||
// 17-02-97, New Physics scheme
|
||||
// 25-02-97, GetMeanFreePath() now is public function
|
||||
// 12-03-97, new physics scheme again
|
||||
// 13-08-98, new methods SetBining() PrintInfo()
|
||||
// 03-08-01, new methods Store/Retrieve PhysicsTable (mma)
|
||||
// 06-08-01, BuildThePhysicsTable() called from constructor (mma)
|
||||
// 19-09-01, come back to previous ProcessName "compt"
|
||||
// 20-09-01, DoIt: fminimalEnergy = 1*eV (mma)
|
||||
// 01-10-01, come back to BuildPhysicsTable(const G4ParticleDefinition&)
|
||||
// 13-08-04, suppress icc file; make public ComputeCrossSectionPerAtom() (mma)
|
||||
// 09-11-04, Remove Retrieve tables (V.Ivantchenko)
|
||||
// 04-05-05, Add 52 to class name (V.Ivanchenko)
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// class description
|
||||
//
|
||||
// inherit from G4VDiscreteProcess
|
||||
//
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#ifndef G4ComptonScattering52_h
|
||||
#define G4ComptonScattering52_h 1
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
#include "Randomize.hh"
|
||||
#include "G4VDiscreteProcess.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4PhysicsLogVector.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4Gamma.hh"
|
||||
#include "G4Electron.hh"
|
||||
#include "G4Step.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4ComptonScattering52 : public G4VDiscreteProcess
|
||||
|
||||
{
|
||||
public: // with description
|
||||
|
||||
G4ComptonScattering52(const G4String& processName ="compt",
|
||||
G4ProcessType type = fElectromagnetic);
|
||||
|
||||
~G4ComptonScattering52();
|
||||
|
||||
G4bool IsApplicable(const G4ParticleDefinition&);
|
||||
// true for Gamma only.
|
||||
|
||||
void SetPhysicsTableBining(G4double lowE, G4double highE, G4int nBins);
|
||||
// Allows to define the binning of the PhysicsTables,
|
||||
// before to build them.
|
||||
|
||||
void BuildPhysicsTable(const G4ParticleDefinition&);
|
||||
// It builds the total CrossSectionPerAtom table, for Gamma,
|
||||
// and for every element contained in the elementTable.
|
||||
// It builds the MeanFreePath table, for Gamma,
|
||||
// and for every material contained in the materialTable.
|
||||
|
||||
G4bool StorePhysicsTable(const G4ParticleDefinition* ,
|
||||
const G4String& directory, G4bool);
|
||||
// store CrossSection and MeanFreePath tables into an external file
|
||||
// specified by 'directory' (must exist before invokation)
|
||||
|
||||
//G4bool RetrievePhysicsTable(const G4ParticleDefinition* ,
|
||||
// const G4String& directory, G4bool);
|
||||
// retrieve CrossSection and MeanFreePath tables from an external file
|
||||
// specified by 'directory'
|
||||
|
||||
void PrintInfoDefinition();
|
||||
// Print few lines of informations about the process: validity range,
|
||||
// origine ..etc..
|
||||
// Invoked by BuildThePhysicsTable().
|
||||
|
||||
G4double GetMeanFreePath(const G4Track& aTrack,
|
||||
G4double previousStepSize,
|
||||
G4ForceCondition* condition);
|
||||
// It returns the MeanFreePath of the process for the current track :
|
||||
// (energy, material)
|
||||
// The previousStepSize and G4ForceCondition* are not used.
|
||||
// This function overloads a virtual function of the base class.
|
||||
// It is invoked by the ProcessManager of the Particle.
|
||||
|
||||
G4double GetCrossSectionPerAtom(G4DynamicParticle* aDynamicGamma,
|
||||
G4Element* anElement);
|
||||
// It returns the total CrossSectionPerAtom of the process,
|
||||
// for the current DynamicGamma (energy), in anElement.
|
||||
|
||||
G4VParticleChange* PostStepDoIt(const G4Track& aTrack,
|
||||
const G4Step& aStep);
|
||||
// It computes the final state of the process (at end of step),
|
||||
// returned as a ParticleChange object.
|
||||
// This function overloads a virtual function of the base class.
|
||||
// It is invoked by the ProcessManager of the Particle.
|
||||
|
||||
virtual
|
||||
G4double ComputeCrossSectionPerAtom(G4double GammaEnergy,
|
||||
G4double AtomicNumber);
|
||||
|
||||
G4double ComputeMeanFreePath(G4double GammaEnergy,
|
||||
G4Material* aMaterial);
|
||||
private:
|
||||
|
||||
// hide assignment operator as private
|
||||
G4ComptonScattering52& operator=(const G4ComptonScattering52 &right);
|
||||
G4ComptonScattering52(const G4ComptonScattering52& );
|
||||
|
||||
private:
|
||||
|
||||
G4PhysicsTable* theCrossSectionTable; // table for crosssection
|
||||
G4PhysicsTable* theMeanFreePathTable; // table for mean free path
|
||||
|
||||
G4double LowestEnergyLimit; // low energy limit of the tables
|
||||
G4double HighestEnergyLimit; // high energy limit of the tables
|
||||
G4int NumbBinTable; // number of bins in the tables
|
||||
|
||||
protected:
|
||||
|
||||
G4double fminimalEnergy; // minimalEnergy of produced particles
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4CoulombScattering.hh,v 1.13 2009/05/07 18:41:45 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4CoulombScattering.hh,v 1.15 2010/10/25 19:13:23 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -73,9 +73,6 @@ public:
|
||||
// Set energy above which high energy model will be used
|
||||
inline void SetHEModelLimit(G4double);
|
||||
|
||||
// obsolete method to be removed
|
||||
inline void SetBuildTableFlag(G4bool);
|
||||
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
|
||||
@@ -95,7 +92,6 @@ private:
|
||||
G4double thEnergy;
|
||||
G4double thEnergyElec;
|
||||
G4bool isInitialised;
|
||||
G4bool buildElmTableFlag;
|
||||
const G4ParticleDefinition* aParticle;
|
||||
|
||||
};
|
||||
@@ -124,11 +120,6 @@ inline void G4CoulombScattering::SetQ2Max(G4double val)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4CoulombScattering::SetBuildTableFlag(G4bool)
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4CoulombScattering::SetHEModelLimit(G4double val)
|
||||
{
|
||||
thEnergy = val;
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4CoulombScatteringModel.hh,v 1.15 2008/07/31 13:11:34 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4CoulombScatteringModel.hh,v 1.17 2010/05/27 14:22:05 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -44,6 +44,8 @@
|
||||
// 19.10.06 V.Ivanchenko use inheritance from G4eCoulombScatteringModel
|
||||
// 09.10.07 V.Ivanchenko reorganized methods, add cut dependence in scattering off e-
|
||||
// 09.06.08 V.Ivanchenko SelectIsotope is moved to the base class
|
||||
// 27.05.10 V.Ivanchenko added G4WentzelOKandVIxSection class to
|
||||
// compute cross sections and sample scattering angle
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4GoudsmitSaundersonMscModel.hh,v 1.2 2009/06/04 13:45:49 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4GoudsmitSaundersonMscModel.hh,v 1.5 2010/06/25 09:41:34 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -40,6 +40,7 @@
|
||||
//
|
||||
// Modifications:
|
||||
// 04.03.2009 V.Ivanchenko cleanup and format according to Geant4 EM style
|
||||
// 12.05.2010 O.Kadri: adding Qn1 and Qn12 as private doubles
|
||||
//
|
||||
// Class description:
|
||||
//
|
||||
@@ -53,7 +54,7 @@
|
||||
//Ref.4:I. Kawrakow et al.,"The EGSnrc code ... Transport",NRCC Report PIRS-701, Sept. 21, 2006;
|
||||
//Ref.5:F. Salvat et al.,"ELSEPA--Dirac partial ...molecules", Comp. Phys. Comm. 165 (2005) pp 157-190;
|
||||
//Ref.6:G4UrbanMscModel G4_v9.1Ref09;
|
||||
//Ref.7:G4eCoulombScatteringModel G4_v9.1Ref09.
|
||||
//Ref.7:G4WentzelVIModel G4_v9.3.
|
||||
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
#ifndef G4GoudsmitSaundersonMscModel_h
|
||||
@@ -62,7 +63,6 @@
|
||||
#include "G4VMscModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4DataInterpolation.hh"
|
||||
|
||||
class G4DataVector;
|
||||
class G4ParticleChangeForMSC;
|
||||
@@ -113,8 +113,8 @@ private:
|
||||
G4GoudsmitSaundersonMscModel & operator=(const G4GoudsmitSaundersonMscModel &right);
|
||||
G4GoudsmitSaundersonMscModel(const G4GoudsmitSaundersonMscModel&);
|
||||
|
||||
G4double lowKEnergy;
|
||||
G4double highKEnergy;
|
||||
G4double lowKEnergy;
|
||||
G4double highKEnergy;
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange;
|
||||
|
||||
@@ -124,9 +124,8 @@ private:
|
||||
G4double tausmall,taulim,tlimit,tlimitmin,geommin,geombig;
|
||||
G4double charge,lambdalimit;
|
||||
G4double tPathLength,stepmin ;
|
||||
G4double lambda1,lambda11;
|
||||
G4double lambda0,lambda1,lambda11,Qn1,Qn12;
|
||||
G4double mass;
|
||||
G4double lambda0;
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4bool inside;
|
||||
@@ -138,7 +137,6 @@ private:
|
||||
G4LossTableManager* theManager;
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
G4DataInterpolation* MyValue;
|
||||
const G4MaterialCutsCouple* currentCouple;
|
||||
|
||||
static G4double ener[106];
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4GoudsmitSaundersonTable.hh,v 1.3 2009/06/18 18:43:09 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4GoudsmitSaundersonTable.hh,v 1.5 2010/06/25 09:41:36 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4ICRU73QOModel.hh,v 1.3 2010/06/04 09:09:31 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4ICRU73QOModel
|
||||
//
|
||||
// Author: Alexander Bagulya
|
||||
//
|
||||
// Creation date: 21.05.2010
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Quantum Harmonic Oscillator Model for energy loss using atomic shell
|
||||
// structure of atoms taking into account Q^2 (main for projectile charge Q),
|
||||
// Q^3 and Q^4 terms for computation of energy loss due to binary collisions.
|
||||
// Can be applied on heavy negatively charged particles for the energy interval
|
||||
// 10 keV - 10 MeV scaled to the proton mass.
|
||||
//
|
||||
// Used data and formula of
|
||||
// 1. G4QAOLowEnergyLoss class, S.Chauvie, P.Nieminen, M.G.Pia. IEEE Trans.
|
||||
// Nucl. Sci. 54 (2007) 578.
|
||||
// 2. ShellStrength and ShellEnergy from ICRU'73 Report 2005,
|
||||
// 3. Data for Ta (Z=73) from P.Sigmund, A.Shinner. Eur. Phys. J. D15 (2001)
|
||||
// 165-172
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4ICRU73QOModel_h
|
||||
#define G4ICRU73QOModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
#include "G4AtomicShells.hh"
|
||||
#include "G4DensityEffectData.hh"
|
||||
|
||||
class G4ParticleChangeForLoss;
|
||||
|
||||
class G4ICRU73QOModel : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4ICRU73QOModel(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "ICRU73QO");
|
||||
|
||||
virtual ~G4ICRU73QOModel();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual G4double MinEnergyCut(const G4ParticleDefinition*,
|
||||
const G4MaterialCutsCouple*);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerElectron(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double Z, G4double A,
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual G4double CrossSectionPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual G4double ComputeDEDXPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
// add correction to energy loss and compute non-ionizing energy loss
|
||||
virtual void CorrectionsAlongStep(const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double& eloss,
|
||||
G4double& niel,
|
||||
G4double length);
|
||||
|
||||
protected:
|
||||
|
||||
virtual G4double MaxSecondaryEnergy(const G4ParticleDefinition*,
|
||||
G4double kinEnergy);
|
||||
|
||||
private:
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition* p);
|
||||
inline void SetLowestKinEnergy(const G4double val);
|
||||
|
||||
G4double DEDX(const G4Material* material, G4double kineticEnergy);
|
||||
|
||||
G4double DEDXPerElement(G4int Z, G4double kineticEnergy);
|
||||
|
||||
// hide assignment operator
|
||||
G4ICRU73QOModel & operator=(const G4ICRU73QOModel &right);
|
||||
G4ICRU73QOModel(const G4ICRU73QOModel&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleDefinition* theElectron;
|
||||
G4ParticleChangeForLoss* fParticleChange;
|
||||
G4DensityEffectData* denEffData;
|
||||
|
||||
G4double mass;
|
||||
G4double q;
|
||||
G4double chargeSquare;
|
||||
G4double massRate;
|
||||
G4double ratio;
|
||||
G4double lowestKinEnergy;
|
||||
|
||||
G4bool isInitialised;
|
||||
|
||||
// get number of shell, energy and oscillator strenghts for material
|
||||
G4int GetNumberOfShells(G4int Z) const;
|
||||
|
||||
G4double GetShellEnergy(G4int Z, G4int nbOfTheShell) const;
|
||||
G4double GetOscillatorEnergy(G4int Z, G4int nbOfTheShell) const;
|
||||
G4double GetShellStrength(G4int Z, G4int nbOfTheShell) const;
|
||||
|
||||
// calculate stopping number for L's term
|
||||
G4double GetL0(G4double normEnergy) const;
|
||||
// terms in Z^2
|
||||
G4double GetL1(G4double normEnergy) const;
|
||||
// terms in Z^3
|
||||
G4double GetL2(G4double normEnergy) const;
|
||||
// terms in Z^4
|
||||
|
||||
|
||||
// Z of element at now avaliable for the model
|
||||
static const G4int NQOELEM = 26;
|
||||
static const G4int NQODATA = 130;
|
||||
static const G4int ZElementAvailable[NQOELEM];
|
||||
|
||||
// number, energy and oscillator strenghts
|
||||
// for an harmonic oscillator model of material
|
||||
static const G4int startElemIndex[NQOELEM];
|
||||
static const G4int nbofShellsForElement[NQOELEM];
|
||||
static const G4double ShellEnergy[NQODATA];
|
||||
static const G4double SubShellOccupation[NQODATA]; // Z * ShellStrength
|
||||
|
||||
G4int indexZ[100];
|
||||
|
||||
// variable for calculation of stopping number of L's term
|
||||
static const G4double L0[67][2];
|
||||
static const G4double L1[22][2];
|
||||
static const G4double L2[14][2];
|
||||
|
||||
G4int sizeL0;
|
||||
G4int sizeL1;
|
||||
G4int sizeL2;
|
||||
|
||||
static const G4double factorBethe[99];
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4ICRU73QOModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
particle = p;
|
||||
mass = particle->GetPDGMass();
|
||||
q = particle->GetPDGCharge()/eplus;
|
||||
chargeSquare = q*q;
|
||||
massRate = mass/proton_mass_c2;
|
||||
ratio = electron_mass_c2/mass;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4int G4ICRU73QOModel::GetNumberOfShells(G4int Z) const
|
||||
{
|
||||
G4int nShell = 0;
|
||||
|
||||
if(indexZ[Z] >= 0) { nShell = nbofShellsForElement[indexZ[Z]];
|
||||
} else { nShell = G4AtomicShells::GetNumberOfShells(Z); }
|
||||
|
||||
return nShell;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4ICRU73QOModel::GetShellEnergy(G4int Z,
|
||||
G4int nbOfTheShell) const
|
||||
{
|
||||
G4double shellEnergy = 0.;
|
||||
|
||||
G4int idx = indexZ[Z];
|
||||
|
||||
if(indexZ[Z] >= 0) { shellEnergy = ShellEnergy[startElemIndex[idx] + nbOfTheShell]*eV;
|
||||
} else { shellEnergy = GetOscillatorEnergy(Z, nbOfTheShell); }
|
||||
|
||||
return shellEnergy;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4ICRU73QOModel::GetShellStrength(G4int Z,
|
||||
G4int nbOfTheShell) const
|
||||
{
|
||||
G4double shellStrength = 0.;
|
||||
|
||||
G4int idx = indexZ[Z];
|
||||
|
||||
if(indexZ[Z] >= 0) { shellStrength = SubShellOccupation[startElemIndex[idx] + nbOfTheShell] / Z;
|
||||
} else { shellStrength = 1.0 / Z * G4AtomicShells::GetNumberOfElectrons(Z,nbOfTheShell); }
|
||||
|
||||
return shellStrength;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4ICRU73QOModel::SetLowestKinEnergy(const G4double val)
|
||||
{
|
||||
lowestKinEnergy = val;
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,182 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4IonCoulombCrossSection.hh
|
||||
//-------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
// File name: G4IonCoulombCrossSection
|
||||
//
|
||||
// Author: Cristina Consolandi
|
||||
//
|
||||
// Creation date: 05.10.2010 from G4eCoulombScatteringModel
|
||||
//
|
||||
// Class Description:
|
||||
// Computation of Screen-Coulomb Cross Section
|
||||
// for protons, alpha and heavy Ions
|
||||
//
|
||||
//
|
||||
// Reference:
|
||||
// M.J. Boschini et al. "Nuclear and Non-Ionizing Energy-Loss
|
||||
// for Coulomb Scattered Particles from Low Energy up to Relativistic
|
||||
// Regime in Space Radiation Environment"
|
||||
// Accepted for publication in the Proceedings of the ICATPP Conference
|
||||
// on Cosmic Rays for Particle and Astroparticle Physics, Villa Olmo, 7-8
|
||||
// October, 2010, to be published by World Scientific (Singapore).
|
||||
//
|
||||
// Available for downloading at:
|
||||
// http://arxiv.org/abs/1011.4822
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
//
|
||||
#ifndef G4IonCoulombCrossSection_h
|
||||
#define G4IonCoulombCrossSection_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4Material.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4ElementVector.hh"
|
||||
#include "G4NistManager.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4Pow.hh"
|
||||
#include "G4LossTableManager.hh"
|
||||
|
||||
class G4ParticleDefinition;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4IonCoulombCrossSection
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4IonCoulombCrossSection();
|
||||
|
||||
virtual ~G4IonCoulombCrossSection();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, G4double cosThetaLim);
|
||||
|
||||
G4double NuclearCrossSection();
|
||||
|
||||
G4double SampleCosineTheta();
|
||||
|
||||
inline void SetupParticle(const G4ParticleDefinition*);
|
||||
|
||||
void SetupKinematic(G4double kinEnergy, G4double cut,G4int iz);
|
||||
|
||||
void SetupTarget(G4double Z, G4double kinEnergy,G4int heavycorr);
|
||||
|
||||
inline G4double GetMomentum2();
|
||||
|
||||
private:
|
||||
void SetScreenRSquare(G4int iz);
|
||||
|
||||
|
||||
G4IonCoulombCrossSection & operator=(const G4IonCoulombCrossSection &right);
|
||||
G4IonCoulombCrossSection(const G4IonCoulombCrossSection&);
|
||||
|
||||
|
||||
|
||||
const G4ParticleDefinition* theProton;
|
||||
|
||||
G4NistManager* fNistManager;
|
||||
|
||||
protected:
|
||||
G4double coeff;
|
||||
|
||||
//cost - min - max
|
||||
G4double cosThetaMin;// def 1.0
|
||||
G4double cosThetaMax;// def -1.0
|
||||
|
||||
//SetupTarget
|
||||
G4double cosTetMinNuc;// -->cosThetaMin
|
||||
G4double cosTetMaxNuc;// -->cosThetaMax
|
||||
|
||||
|
||||
//cross section
|
||||
G4double nucXSection;
|
||||
|
||||
//energy cut
|
||||
G4double ecut;
|
||||
G4double etag;
|
||||
|
||||
// projectile........................
|
||||
const G4ParticleDefinition* particle;
|
||||
|
||||
G4double chargeSquare;
|
||||
G4double spin;
|
||||
G4double mass;
|
||||
|
||||
//lab of incedent particle
|
||||
G4double tkinLab;
|
||||
G4double momLab2;
|
||||
G4double invbetaLab2;
|
||||
|
||||
//relative system with nucleus
|
||||
G4double tkin;
|
||||
G4double mom2;
|
||||
G4double invbeta2;
|
||||
|
||||
// target nucleus
|
||||
G4double targetZ;
|
||||
G4double targetMass;
|
||||
G4double screenZ;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
G4double alpha2;
|
||||
G4double ScreenRSquare;
|
||||
|
||||
};
|
||||
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4IonCoulombCrossSection::SetupParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
particle = p;
|
||||
mass = particle->GetPDGMass();
|
||||
spin = particle->GetPDGSpin();
|
||||
if(0.0 != spin) { spin = 0.5; }
|
||||
G4double q = std::fabs(particle->GetPDGCharge()/eplus);
|
||||
chargeSquare = q*q;
|
||||
tkin = 0.0;
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
|
||||
inline G4double G4IonCoulombCrossSection::GetMomentum2(){
|
||||
return mom2;
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// G4IonCoulombScatteringModel.hh
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
// File name: G4IonCoulombScatteringModel
|
||||
//
|
||||
// Author: Cristina Consolandi
|
||||
//
|
||||
// Creation date: 05.10.2010 from G4eCoulombScatteringModel
|
||||
// & G4CoulombScatteringModel
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
// Single Scattering Model for
|
||||
// for protons, alpha and heavy Ions
|
||||
//
|
||||
// Reference:
|
||||
// M.J. Boschini et al. "Nuclear and Non-Ionizing Energy-Loss
|
||||
// for Coulomb ScatteredParticles from Low Energy up to Relativistic
|
||||
// Regime in Space Radiation Environment"
|
||||
// Accepted for publication in the Proceedings of the ICATPP Conference
|
||||
// on Cosmic Rays for Particle and Astroparticle Physics, Villa Olmo, 7-8
|
||||
// October, 2010, to be published by World Scientific (Singapore).
|
||||
//
|
||||
// Available for downloading at:
|
||||
// http://arxiv.org/abs/1011.4822
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4IonCoulombScatteringModel_h
|
||||
#define G4IonCoulombScatteringModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4NistManager.hh"
|
||||
#include "G4IonCoulombCrossSection.hh"
|
||||
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
class G4ParticleChangeForGamma;
|
||||
class G4ParticleDefinition;
|
||||
|
||||
class G4IonCoulombScatteringModel : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4IonCoulombScatteringModel(const G4String& nam = "IonCoulombScattering");
|
||||
|
||||
virtual ~G4IonCoulombScatteringModel();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double cut,
|
||||
G4double emax);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
|
||||
|
||||
inline void SetRecoilThreshold(G4double eth);
|
||||
void SetHeavyIonCorr(G4int b) {heavycorr=b; };
|
||||
G4int GetHeavyIonCorr() {return heavycorr; };
|
||||
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
inline void DefineMaterial(const G4MaterialCutsCouple*);
|
||||
|
||||
inline void SetupParticle(const G4ParticleDefinition*);
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
|
||||
// hide assignment operator
|
||||
G4IonCoulombScatteringModel & operator=(const G4IonCoulombScatteringModel &right);
|
||||
G4IonCoulombScatteringModel(const G4IonCoulombScatteringModel&);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
G4ParticleTable* theParticleTable;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4NistManager* fNistManager;
|
||||
G4IonCoulombCrossSection* ioncross;
|
||||
|
||||
const std::vector<G4double>* pCuts;
|
||||
const G4MaterialCutsCouple* currentCouple;
|
||||
const G4Material* currentMaterial;
|
||||
const G4Element* currentElement;
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
|
||||
G4int heavycorr;
|
||||
|
||||
G4double cosThetaMin;
|
||||
G4double recoilThreshold;
|
||||
|
||||
|
||||
// projectile
|
||||
const G4ParticleDefinition* particle;
|
||||
const G4ParticleDefinition* theProton;
|
||||
G4double mass;
|
||||
G4double lowEnergyLimit;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
G4bool isInitialised;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
void G4IonCoulombScatteringModel::DefineMaterial(const G4MaterialCutsCouple* cup)
|
||||
{
|
||||
if(cup != currentCouple) {
|
||||
currentCouple = cup;
|
||||
currentMaterial = cup->GetMaterial();
|
||||
currentMaterialIndex = currentCouple->GetIndex();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline
|
||||
void G4IonCoulombScatteringModel::SetupParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if(p != particle) {
|
||||
particle = p;
|
||||
mass = particle->GetPDGMass();
|
||||
ioncross->SetupParticle(p);
|
||||
}
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4IonCoulombScatteringModel::SetRecoilThreshold(G4double eth)
|
||||
{
|
||||
recoilThreshold = eth;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,104 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4KleinNishinaModel.hh,v 1.1 2010/09/03 14:11:58 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4KleinNishinaModel
|
||||
//
|
||||
// Author: Vladimir Ivanchenko on base of G4KleinNishinaCompton
|
||||
//
|
||||
// Creation date: 13.06.2010
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of gamma Compton scattering with atomic effects
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4KleinNishinaModel_h
|
||||
#define G4KleinNishinaModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
#include <vector>
|
||||
|
||||
class G4ParticleChangeForGamma;
|
||||
class G4VAtomDeexcitation;
|
||||
|
||||
class G4KleinNishinaModel : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4KleinNishinaModel(const G4String& nam = "KleinNishina");
|
||||
|
||||
virtual ~G4KleinNishinaModel();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double cut,
|
||||
G4double emax);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
protected:
|
||||
|
||||
G4ParticleDefinition* theGamma;
|
||||
G4ParticleDefinition* theElectron;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4double lowestGammaEnergy;
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4KleinNishinaModel & operator=(const G4KleinNishinaModel &right);
|
||||
G4KleinNishinaModel(const G4KleinNishinaModel&);
|
||||
|
||||
G4VAtomDeexcitation* fAtomDeexcitation;
|
||||
G4bool isInitialized;
|
||||
std::vector<G4double> fProbabilities;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,90 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4ModifiedTsai.hh,v 1.1 2010/10/14 15:17:48 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4ModifiedTsai
|
||||
//
|
||||
// Author: Andreia Trindade (andreia@lip.pt)
|
||||
// Pedro Rodrigues (psilva@lip.pt)
|
||||
// Luis Peralta (luis@lip.pt)
|
||||
//
|
||||
// Creation date: 21 March 2003
|
||||
//
|
||||
// Modifications:
|
||||
// 21 Mar 2003 A.Trindade First implementation acording with new design
|
||||
// 24 Mar 2003 A.Trindade Fix in Tsai generator in order to prevent theta
|
||||
// generation above pi
|
||||
// 13 Oct 2010 V.Ivanchenko Moved to standard and improved comment
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Bremsstrahlung Angular Distribution Generation
|
||||
// suggested by L.Urban (Geant3 manual (1993) Phys211)
|
||||
// Derived from Tsai distribution (Rev Mod Phys 49,421(1977))
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4ModifiedTsai_h
|
||||
#define G4ModifiedTsai_h 1
|
||||
|
||||
#include "G4ios.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4VBremAngularDistribution.hh"
|
||||
|
||||
class G4ModifiedTsai : public G4VBremAngularDistribution
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4ModifiedTsai(const G4String& name = "");
|
||||
|
||||
virtual ~G4ModifiedTsai();
|
||||
|
||||
G4double PolarAngle(const G4double initial_energy,
|
||||
const G4double final_energy,
|
||||
const G4int Z);
|
||||
|
||||
void PrintGeneratorInformation() const;
|
||||
|
||||
protected:
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4ModifiedTsai & operator=(const G4ModifiedTsai &right);
|
||||
G4ModifiedTsai(const G4ModifiedTsai&);
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,171 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4MscModel71.hh,v 1.6 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4MscMOdel71
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
// Creation date: 01.03.2001
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 27-03-03 Move model part from G4MultipleScattering (V.Ivanchenko)
|
||||
// 27-03-03 Rename (V.Ivanchenko)
|
||||
//
|
||||
// 05-08-03 angle distribution has been modified (L.Urban)
|
||||
// 26-11-03 new data member currentRange (L.Urban)
|
||||
// 01-03-04 changes in data members + signature changed in SampleCosineTheta
|
||||
// 11-03-04 changes in data members (L.Urban)
|
||||
// 23-04-04 changes in data members and in signature of SampleCosineTheta
|
||||
// (L.Urban)
|
||||
// 17-08-04 name of data member facxsi changed to factail (L.Urban)
|
||||
// 08-04-05 Major optimisation of internal interfaces (V.Ivantchenko)
|
||||
// 15-04-05 optimize internal interface - add SampleSecondaries method (V.Ivanchenko)
|
||||
// 03-10-05 Model is freezed with the name McsModel71 (V.Ivanchenko)
|
||||
// 17-02-06 Save table of transport cross sections not mfp (V.Ivanchenko)
|
||||
// 07-03-06 Create G4UrbanMscModel and move there step limit calculation (V.Ivanchenko)
|
||||
//
|
||||
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the model of multiple scattering based on
|
||||
// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4MscModel71_h
|
||||
#define G4MscModel71_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4Navigator;
|
||||
|
||||
class G4MscModel71 : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4MscModel71(G4double&, G4double&, G4double&, G4double&, G4bool&,
|
||||
const G4String& nam = "UrbanMsc71");
|
||||
|
||||
virtual ~G4MscModel71();
|
||||
|
||||
virtual void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual G4double ComputeCrossSectionPerAtom(
|
||||
const G4ParticleDefinition* particle,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight=0.,
|
||||
G4double cut =0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double length,
|
||||
G4double safety);
|
||||
|
||||
G4double GeomPathLength(G4PhysicsTable* theLambdaTable,
|
||||
const G4MaterialCutsCouple* couple,
|
||||
const G4ParticleDefinition* particle,
|
||||
G4double& kineticEnergy,
|
||||
G4double lambda,
|
||||
G4double range,
|
||||
G4double truePathLength);
|
||||
|
||||
G4double TrueStepLength(G4double geomStepLength);
|
||||
|
||||
G4double SampleCosineTheta(G4double trueStepLength,G4double KineticEnergy);
|
||||
|
||||
G4double SampleDisplacement();
|
||||
|
||||
void SetLateralDisplasmentFlag(G4bool val);
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4MscModel71 & operator=(const G4MscModel71 &right);
|
||||
G4MscModel71(const G4MscModel71&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
G4Navigator* navigator;
|
||||
|
||||
G4double mass;
|
||||
G4double charge;
|
||||
G4double massRate;
|
||||
|
||||
G4double taubig;
|
||||
G4double tausmall;
|
||||
G4double taulim;
|
||||
G4double currentTau;
|
||||
G4double dtrl;
|
||||
G4double NuclCorrPar;
|
||||
G4double FactPar;
|
||||
G4double factail ;
|
||||
|
||||
G4double sigmafactor;
|
||||
G4double b;
|
||||
G4double xsi;
|
||||
|
||||
G4double lambda0;
|
||||
G4double tPathLength;
|
||||
G4double par1,par2,par3 ;
|
||||
|
||||
G4double stepmin ;
|
||||
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange ;
|
||||
G4double currentRadLength;
|
||||
|
||||
G4bool samplez;
|
||||
G4bool latDisplasment;
|
||||
G4bool isInitialized;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4MscModel71::SetLateralDisplasmentFlag(G4bool val)
|
||||
{
|
||||
latDisplasment = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,147 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4MultipleScattering.hh,v 1.36 2008/03/10 10:39:21 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
// File name: G4MultipleScattering
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
// Creation date: March 2001
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 07-08-01 new methods Store/Retrieve PhysicsTable
|
||||
// 23-08-01 new angle and z distribution,energy dependence reduced,
|
||||
// Store,Retrieve methods commented out temporarily, L.Urban
|
||||
// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering
|
||||
// Store,Retrieve methods reactived (mma)
|
||||
// 13-09-01 Unused TrueToGeomTransformation method deleted,
|
||||
// class description (L.Urban)
|
||||
// 19-09-01 come back to previous process name msc
|
||||
// 17-04-02 NEW angle distribution + boundary algorithm modified, L.Urban
|
||||
// 22-04-02 boundary algorithm modified -> important improvement in timing !!!!
|
||||
// (L.Urban)
|
||||
// 24-05-02 changes in data members, L.Urban
|
||||
// 30-10-02 changes in data members, L.Urban
|
||||
// 20-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
// 05-02-03 changes in data members, L.Urban
|
||||
// 28-03-03 Move to model design (V.Ivanchenko)
|
||||
// 18-04-03 Change name (V.Ivanchenko)
|
||||
// 16-06-03: ShortLived are not applicable any more (V.Ivanchenko)
|
||||
// 17-08-04 name of data member facxsi changed to factail together
|
||||
// with the corresponding set function (L.Urban)
|
||||
// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
|
||||
// 15-04-05 optimize internal interfaces (V.Ivanchenko)
|
||||
// 02-10-05 new algorithm for step limitation, new data members (L.Urban)
|
||||
// 05-10-05 value of data member tlimitmin has been changed (L.Urban)
|
||||
// 23-10-05 new Boolean data member prec (false ~ 7.1 like, true new step
|
||||
// limit in TruePathLengthLimit, L.Urban)
|
||||
// 25-10-05 prec renamed to steppingAlgorithm, set function triggers
|
||||
// 'default' facrange too, true - 0.02, false - 0.2 (L.Urban)
|
||||
// 26-10-05 the above is put in the function MscStepLimitation() (mma)
|
||||
// 05-11-05 new data member rangecut (L.Urban)
|
||||
// 13-11-05 some code cleaning (L.Urban)
|
||||
// 07-12-05 GeomLimit is protected instead of public
|
||||
// 11-12-05 data menber rangecut removed (L.Urban)
|
||||
// 19-01-07 tlimitmin = facrange*50*micrometer, i.e. it depends on the
|
||||
// value of facrange (L.Urban)
|
||||
// 16-02-06 set function for data member factail (L.Urban)
|
||||
// 13-10-06 data member factail removed, new data member skin
|
||||
// together with set function, data member tkinlimit
|
||||
// changed to lambdalimit (L.Urban)
|
||||
// 07-03-07 remove method SetSkin, because it is now in the base class (VI)
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
// class description
|
||||
//
|
||||
// The class simulates the multiple scattering for any kind
|
||||
// of charged particle.
|
||||
//
|
||||
// class description - end
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#ifndef G4MultipleScattering_h
|
||||
#define G4MultipleScattering_h 1
|
||||
|
||||
#include "G4VMultipleScattering.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4VMscModel;
|
||||
|
||||
class G4MultipleScattering : public G4VMultipleScattering
|
||||
|
||||
{
|
||||
public: // with description
|
||||
|
||||
G4MultipleScattering(const G4String& processName="msc");
|
||||
|
||||
virtual ~G4MultipleScattering();
|
||||
|
||||
// returns true for charged particles, false otherwise
|
||||
G4bool IsApplicable (const G4ParticleDefinition& p);
|
||||
|
||||
// Print few lines of informations about the process: validity range,
|
||||
void PrintInfo();
|
||||
|
||||
// geom. step length distribution should be sampled or not
|
||||
void Setsamplez(G4bool value) { samplez = value;};
|
||||
|
||||
// to reduce the energy/step dependence
|
||||
void Setdtrl(G4double value) { dtrl = value;};
|
||||
|
||||
// 'soften' step limitation above lambdalimit
|
||||
void SetLambdalimit(G4double value) { lambdalimit = value;};
|
||||
|
||||
protected:
|
||||
|
||||
// This function initialise models
|
||||
void InitialiseProcess(const G4ParticleDefinition*);
|
||||
|
||||
private: // data members
|
||||
|
||||
G4VMscModel* mscUrban;
|
||||
|
||||
G4double lambdalimit;
|
||||
G4double dtrl;
|
||||
|
||||
G4bool samplez;
|
||||
G4bool isInitialized;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
@@ -1,252 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4MultipleScattering71.hh,v 1.6 2008/07/16 11:27:41 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
//
|
||||
//
|
||||
//------------- G4MultipleScattering71 physics process --------------------------
|
||||
// by Laszlo Urban, March 2001
|
||||
//
|
||||
// 07-08-01 new methods Store/Retrieve PhysicsTable
|
||||
// 23-08-01 new angle and z distribution,energy dependence reduced,
|
||||
// Store,Retrieve methods commented out temporarily, L.Urban
|
||||
// 11-09-01 G4MultipleScatteringx put as default: G4MultipleScattering
|
||||
// Store,Retrieve methods reactived (mma)
|
||||
// 13-09-01 Unused TrueToGeomTransformation method deleted,
|
||||
// class description (L.Urban)
|
||||
// 19-09-01 come back to previous process name msc
|
||||
// 17-04-02 NEW angle distribution + boundary algorithm modified, L.Urban
|
||||
// 22-04-02 boundary algorithm modified -> important improvement in timing !!!!
|
||||
// (L.Urban)
|
||||
// 24-05-02 changes in data members, L.Urban
|
||||
// 30-10-02 changes in data members, L.Urban
|
||||
// 20-01-03 Migrade to cut per region (V.Ivanchenko)
|
||||
// 05-02-03 changes in data members, L.Urban
|
||||
// 28-03-03 Move to model design (V.Ivanchenko)
|
||||
// 18-04-03 Change name (V.Ivanchenko)
|
||||
// 16-06-03: ShortLived are not applicable any more (V.Ivanchenko)
|
||||
// 17-08-04 name of data member facxsi changed to factail together
|
||||
// with the corresponding set function (L.Urban)
|
||||
// 08-11-04 Migration to new interface of Store/Retrieve tables (V.Ivantchenko)
|
||||
// 15-04-05 optimize internal interfaces (V.Ivanchenko)
|
||||
// 03-10-05 Process is freezed with the name 71 (V.Ivanchenko)
|
||||
// 07-03-06 Create G4UrbanMscModel and move there step limit calculation (V.Ivanchenko)
|
||||
//
|
||||
//------------------------------------------------------------------------------
|
||||
//
|
||||
// $Id: G4MultipleScattering71.hh,v 1.6 2008/07/16 11:27:41 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
|
||||
// class description
|
||||
//
|
||||
// The class simulates the multiple scattering for any kind
|
||||
// of charged particle.
|
||||
//
|
||||
// class description - end
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#ifndef G4MultipleScattering71_h
|
||||
#define G4MultipleScattering71_h 1
|
||||
|
||||
#include "G4VMultipleScattering.hh"
|
||||
#include "G4MscModel71.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4MultipleScattering71 : public G4VMultipleScattering
|
||||
|
||||
{
|
||||
public: // with description
|
||||
|
||||
G4MultipleScattering71(const G4String& processName="msc");
|
||||
|
||||
virtual ~G4MultipleScattering71();
|
||||
|
||||
// returns true for charged particles, false otherwise
|
||||
G4bool IsApplicable (const G4ParticleDefinition& p);
|
||||
|
||||
virtual G4VParticleChange* AlongStepDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
virtual G4VParticleChange* PostStepDoIt(const G4Track&, const G4Step&);
|
||||
|
||||
G4double TruePathLengthLimit(const G4Track& track,
|
||||
G4double& lambda,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
// Print few lines of informations about the process: validity range,
|
||||
void PrintInfo();
|
||||
|
||||
// geom. step length distribution should be sampled or not
|
||||
void Setsamplez(G4bool value);
|
||||
|
||||
// activate boundary algorithm
|
||||
void SetBoundary(G4bool value);
|
||||
|
||||
// to reduce the energy/step dependence
|
||||
void Setdtrl(G4double value);
|
||||
|
||||
void Setfactail(G4double value);
|
||||
|
||||
// Steplimit after boundary crossing = facrange*range
|
||||
// estimated nb of steps at boundary nsmallstep = 1/facrange
|
||||
void SetFacrange(G4double val);
|
||||
|
||||
// corrs to transport cross section for high energy
|
||||
void SetNuclCorrPar(G4double val);
|
||||
void SetFactPar(G4double val);
|
||||
|
||||
protected:
|
||||
|
||||
// This function initialise models
|
||||
void InitialiseProcess(const G4ParticleDefinition*);
|
||||
|
||||
// This method is used for tracking, it returns step limit
|
||||
virtual G4double GetContinuousStepLimit(const G4Track& track,
|
||||
G4double previousStepSize,
|
||||
G4double currentMinimalStep,
|
||||
G4double& currentSafety);
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator as private
|
||||
G4MultipleScattering71 & operator = (const G4MultipleScattering71 &right);
|
||||
G4MultipleScattering71 ( const G4MultipleScattering71 &);
|
||||
|
||||
private: // data members
|
||||
|
||||
G4MscModel71* model;
|
||||
|
||||
G4double lowKineticEnergy;
|
||||
G4double highKineticEnergy;
|
||||
G4int totBins;
|
||||
|
||||
G4double truePathLength;
|
||||
G4double geomPathLength;
|
||||
G4double trueStepLength;
|
||||
G4double range;
|
||||
|
||||
G4double facrange;
|
||||
G4double tlimit;
|
||||
G4double tlimitmin;
|
||||
G4double dtrl;
|
||||
G4double NuclCorrPar;
|
||||
G4double FactPar;
|
||||
G4double factail;
|
||||
G4double cf;
|
||||
|
||||
G4int stepnolastmsc;
|
||||
G4int nsmallstep;
|
||||
|
||||
G4bool samplez;
|
||||
G4bool boundary;
|
||||
G4bool isInitialized;
|
||||
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// inline methods
|
||||
//--------------------------------------------------------------------
|
||||
|
||||
inline G4bool G4MultipleScattering71::IsApplicable (const G4ParticleDefinition& p)
|
||||
{
|
||||
return (p.GetPDGCharge() != 0.0 && !p.IsShortLived());
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4VParticleChange* G4MultipleScattering71::AlongStepDoIt(
|
||||
const G4Track&,
|
||||
const G4Step& step)
|
||||
{
|
||||
G4double geomStepLength = step.GetStepLength();
|
||||
if((geomStepLength == geomPathLength) && (truePathLength <= range))
|
||||
trueStepLength = truePathLength;
|
||||
else
|
||||
trueStepLength = model->TrueStepLength(geomStepLength);
|
||||
fParticleChange.ProposeTrueStepLength(trueStepLength);
|
||||
return &fParticleChange;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4VParticleChange* G4MultipleScattering71::PostStepDoIt(const G4Track& track,
|
||||
const G4Step& step)
|
||||
{
|
||||
fParticleChange.Initialize(track);
|
||||
std::vector<G4DynamicParticle*>* p = 0;
|
||||
model->SampleSecondaries(p, CurrentMaterialCutsCouple(),track.GetDynamicParticle(),
|
||||
step.GetStepLength(),step.GetPostStepPoint()->GetSafety());
|
||||
return &fParticleChange;
|
||||
}
|
||||
|
||||
// geom. step length distribution should be sampled or not
|
||||
inline void G4MultipleScattering71::Setsamplez(G4bool value)
|
||||
{
|
||||
samplez = value;
|
||||
}
|
||||
|
||||
// activate boundary algorithm
|
||||
inline void G4MultipleScattering71::SetBoundary(G4bool value)
|
||||
{
|
||||
boundary = value;
|
||||
}
|
||||
|
||||
// to reduce the energy/step dependence
|
||||
inline void G4MultipleScattering71::Setdtrl(G4double value)
|
||||
{
|
||||
dtrl = value;
|
||||
}
|
||||
|
||||
inline void G4MultipleScattering71::Setfactail(G4double value)
|
||||
{
|
||||
factail = value;
|
||||
}
|
||||
|
||||
// Steplimit after boundary crossing = facrange*range
|
||||
// estimated nb of steps at boundary nsmallstep = 1/facrange
|
||||
inline void G4MultipleScattering71::SetFacrange(G4double val)
|
||||
{
|
||||
facrange = val;
|
||||
nsmallstep = G4int(std::log((cf+facrange-1.)/facrange)/std::log(cf))+1;
|
||||
}
|
||||
|
||||
// corrs to transport cross section for high energy
|
||||
inline void G4MultipleScattering71::SetNuclCorrPar(G4double val)
|
||||
{
|
||||
NuclCorrPar = val;
|
||||
}
|
||||
|
||||
inline void G4MultipleScattering71::SetFactPar(G4double val)
|
||||
{
|
||||
FactPar = val;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
// $Id: G4PAIySection.hh,v 1.1 2007/10/01 17:45:14 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4PAIySection.hh,v 1.3 2010/11/21 10:55:44 grichine Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
//
|
||||
// G4PAIySection.hh -- header file
|
||||
@@ -38,6 +38,7 @@
|
||||
// History:
|
||||
//
|
||||
// 01.10.07, V.Ivanchenko create using V.Grichine G4PAIxSection class
|
||||
// 21.11.10, V.Grichine, fVerbose and SetVerbose added
|
||||
|
||||
#ifndef G4PAIYSECTION_HH
|
||||
#define G4PAIYSECTION_HH
|
||||
@@ -60,131 +61,134 @@ public:
|
||||
G4double maxEnergyTransfer,
|
||||
G4double betaGammaSq);
|
||||
|
||||
void InitPAI() ;
|
||||
void InitPAI();
|
||||
|
||||
void NormShift( G4double betaGammaSq ) ;
|
||||
void NormShift( G4double betaGammaSq );
|
||||
|
||||
void SplainPAI( G4double betaGammaSq ) ;
|
||||
void SplainPAI( G4double betaGammaSq );
|
||||
|
||||
// Physical methods
|
||||
G4double RutherfordIntegral( G4int intervalNumber,
|
||||
G4double limitLow,
|
||||
G4double limitHigh ) ;
|
||||
G4double limitHigh );
|
||||
|
||||
G4double ImPartDielectricConst( G4int intervalNumber,
|
||||
G4double energy ) ;
|
||||
G4double energy );
|
||||
|
||||
G4double RePartDielectricConst(G4double energy) ;
|
||||
G4double RePartDielectricConst(G4double energy);
|
||||
|
||||
G4double DifPAIySection( G4int intervalNumber,
|
||||
G4double betaGammaSq ) ;
|
||||
G4double betaGammaSq );
|
||||
|
||||
G4double PAIdNdxCerenkov( G4int intervalNumber,
|
||||
G4double betaGammaSq ) ;
|
||||
G4double betaGammaSq );
|
||||
|
||||
G4double PAIdNdxPlasmon( G4int intervalNumber,
|
||||
G4double betaGammaSq ) ;
|
||||
G4double betaGammaSq );
|
||||
|
||||
void IntegralPAIySection() ;
|
||||
void IntegralCerenkov() ;
|
||||
void IntegralPlasmon() ;
|
||||
void IntegralPAIySection();
|
||||
void IntegralCerenkov();
|
||||
void IntegralPlasmon();
|
||||
|
||||
G4double SumOverInterval(G4int intervalNumber) ;
|
||||
G4double SumOverIntervaldEdx(G4int intervalNumber) ;
|
||||
G4double SumOverInterCerenkov(G4int intervalNumber) ;
|
||||
G4double SumOverInterPlasmon(G4int intervalNumber) ;
|
||||
G4double SumOverInterval(G4int intervalNumber);
|
||||
G4double SumOverIntervaldEdx(G4int intervalNumber);
|
||||
G4double SumOverInterCerenkov(G4int intervalNumber);
|
||||
G4double SumOverInterPlasmon(G4int intervalNumber);
|
||||
|
||||
G4double SumOverBorder( G4int intervalNumber,
|
||||
G4double energy ) ;
|
||||
G4double energy );
|
||||
G4double SumOverBorderdEdx( G4int intervalNumber,
|
||||
G4double energy ) ;
|
||||
G4double energy );
|
||||
G4double SumOverBordCerenkov( G4int intervalNumber,
|
||||
G4double energy ) ;
|
||||
G4double energy );
|
||||
G4double SumOverBordPlasmon( G4int intervalNumber,
|
||||
G4double energy ) ;
|
||||
G4double energy );
|
||||
|
||||
G4double GetStepEnergyLoss( G4double step ) ;
|
||||
G4double GetStepCerenkovLoss( G4double step ) ;
|
||||
G4double GetStepPlasmonLoss( G4double step ) ;
|
||||
G4double GetStepEnergyLoss( G4double step );
|
||||
G4double GetStepCerenkovLoss( G4double step );
|
||||
G4double GetStepPlasmonLoss( G4double step );
|
||||
|
||||
// Inline access functions
|
||||
|
||||
G4int GetNumberOfGammas() const { return fNumberOfGammas ; }
|
||||
inline G4int GetNumberOfGammas() const { return fNumberOfGammas; }
|
||||
|
||||
G4int GetSplineSize() const { return fSplineNumber ; }
|
||||
inline G4int GetSplineSize() const { return fSplineNumber; }
|
||||
|
||||
G4int GetIntervalNumber() const { return fIntervalNumber ; }
|
||||
inline G4int GetIntervalNumber() const { return fIntervalNumber; }
|
||||
|
||||
G4double GetEnergyInterval(G4int i){ return fEnergyInterval[i] ; }
|
||||
inline G4double GetEnergyInterval(G4int i){ return fEnergyInterval[i]; }
|
||||
|
||||
G4double GetDifPAIySection(G4int i){ return fDifPAIySection[i] ; }
|
||||
G4double GetPAIdNdxCrenkov(G4int i){ return fdNdxCerenkov[i] ; }
|
||||
G4double GetPAIdNdxPlasmon(G4int i){ return fdNdxPlasmon[i] ; }
|
||||
inline G4double GetDifPAIySection(G4int i){ return fDifPAIySection[i]; }
|
||||
inline G4double GetPAIdNdxCrenkov(G4int i){ return fdNdxCerenkov[i]; }
|
||||
inline G4double GetPAIdNdxPlasmon(G4int i){ return fdNdxPlasmon[i]; }
|
||||
|
||||
G4double GetMeanEnergyLoss() const {return fIntegralPAIySection[0] ; }
|
||||
G4double GetMeanCerenkovLoss() const {return fIntegralCerenkov[0] ; }
|
||||
G4double GetMeanPlasmonLoss() const {return fIntegralPlasmon[0] ; }
|
||||
inline G4double GetMeanEnergyLoss() const {return fIntegralPAIySection[0]; }
|
||||
inline G4double GetMeanCerenkovLoss() const {return fIntegralCerenkov[0]; }
|
||||
inline G4double GetMeanPlasmonLoss() const {return fIntegralPlasmon[0]; }
|
||||
|
||||
G4double GetNormalizationCof() const { return fNormalizationCof ; }
|
||||
inline G4double GetNormalizationCof() const { return fNormalizationCof; }
|
||||
|
||||
inline G4double GetPAItable(G4int i,G4int j) const ;
|
||||
inline G4double GetPAItable(G4int i,G4int j) const;
|
||||
|
||||
inline G4double GetLorentzFactor(G4int i) const ;
|
||||
inline G4double GetLorentzFactor(G4int i) const;
|
||||
|
||||
inline G4double GetSplineEnergy(G4int i) const ;
|
||||
inline G4double GetSplineEnergy(G4int i) const;
|
||||
|
||||
inline G4double GetIntegralPAIySection(G4int i) const ;
|
||||
inline G4double GetIntegralPAIdEdx(G4int i) const ;
|
||||
inline G4double GetIntegralCerenkov(G4int i) const ;
|
||||
inline G4double GetIntegralPlasmon(G4int i) const ;
|
||||
inline G4double GetIntegralPAIySection(G4int i) const;
|
||||
inline G4double GetIntegralPAIdEdx(G4int i) const;
|
||||
inline G4double GetIntegralCerenkov(G4int i) const;
|
||||
inline G4double GetIntegralPlasmon(G4int i) const;
|
||||
|
||||
void SetVerbose(G4int v){fVerbose = v;};
|
||||
|
||||
private :
|
||||
|
||||
// Local class constants
|
||||
|
||||
static const G4double fDelta ; // energy shift from interval border = 0.001
|
||||
static const G4double fError ; // error in lin-log approximation = 0.005
|
||||
static const G4double fDelta; // energy shift from interval border = 0.001
|
||||
static const G4double fError; // error in lin-log approximation = 0.005
|
||||
|
||||
static G4int fNumberOfGammas ; // = 111 ;
|
||||
static const G4double fLorentzFactor[112] ; // static gamma array
|
||||
static G4int fNumberOfGammas; // = 111;
|
||||
static const G4double fLorentzFactor[112]; // static gamma array
|
||||
|
||||
static
|
||||
const G4int fRefGammaNumber ; // The number of gamma for creation of spline (15)
|
||||
const G4int fRefGammaNumber ; // The number of gamma for creation of spline (15)
|
||||
|
||||
G4int fIntervalNumber ; // The number of energy intervals
|
||||
G4double fNormalizationCof ; // Normalization cof for PhotoAbsorptionXsection
|
||||
G4int fIntervalNumber ; // The number of energy intervals
|
||||
G4double fNormalizationCof; // Normalization cof for PhotoAbsorptionXsection
|
||||
|
||||
G4double fDensity ; // Current density
|
||||
G4double fElectronDensity ; // Current electron (number) density
|
||||
G4int fSplineNumber ; // Current size of spline
|
||||
G4double fDensity; // Current density
|
||||
G4double fElectronDensity; // Current electron (number) density
|
||||
G4int fSplineNumber; // Current size of spline
|
||||
G4int fVerbose; // verbose flag
|
||||
|
||||
G4SandiaTable* fSandia;
|
||||
|
||||
G4double fEnergyInterval[500] ;
|
||||
G4double fA1[500] ;
|
||||
G4double fA2[500] ;
|
||||
G4double fA3[500] ;
|
||||
G4double fA4[500] ;
|
||||
G4double fEnergyInterval[500];
|
||||
G4double fA1[500];
|
||||
G4double fA2[500];
|
||||
G4double fA3[500];
|
||||
G4double fA4[500];
|
||||
|
||||
static
|
||||
const G4int fMaxSplineSize ; // Max size of output splain arrays = 500
|
||||
const G4int fMaxSplineSize ; // Max size of output splain arrays = 500
|
||||
|
||||
G4double fSplineEnergy[500] ; // energy points of splain
|
||||
G4double fRePartDielectricConst[500] ; // Real part of dielectric const
|
||||
G4double fImPartDielectricConst[500] ; // Imaginary part of dielectric const
|
||||
G4double fIntegralTerm[500] ; // Integral term in PAI cross section
|
||||
G4double fDifPAIySection[500] ; // Differential PAI cross section
|
||||
G4double fdNdxCerenkov[500] ; // dNdx of Cerenkov collisions
|
||||
G4double fdNdxPlasmon[500] ; // dNdx of Plasmon collisions
|
||||
G4double fSplineEnergy[500]; // energy points of splain
|
||||
G4double fRePartDielectricConst[500]; // Real part of dielectric const
|
||||
G4double fImPartDielectricConst[500]; // Imaginary part of dielectric const
|
||||
G4double fIntegralTerm[500]; // Integral term in PAI cross section
|
||||
G4double fDifPAIySection[500]; // Differential PAI cross section
|
||||
G4double fdNdxCerenkov[500]; // dNdx of Cerenkov collisions
|
||||
G4double fdNdxPlasmon[500]; // dNdx of Plasmon collisions
|
||||
|
||||
G4double fIntegralPAIySection[500] ; // Integral PAI cross section ?
|
||||
G4double fIntegralPAIdEdx[500] ; // Integral PAI dEdx ?
|
||||
G4double fIntegralCerenkov[500] ; // Integral Cerenkov N>omega ?
|
||||
G4double fIntegralPlasmon[500] ; // Integral Plasmon N>omega ?
|
||||
G4double fIntegralPAIySection[500]; // Integral PAI cross section ?
|
||||
G4double fIntegralPAIdEdx[500]; // Integral PAI dEdx ?
|
||||
G4double fIntegralCerenkov[500]; // Integral Cerenkov N>omega ?
|
||||
G4double fIntegralPlasmon[500]; // Integral Plasmon N>omega ?
|
||||
|
||||
G4double fPAItable[500][112] ; // Output array
|
||||
G4double fPAItable[500][112]; // Output array
|
||||
|
||||
} ;
|
||||
};
|
||||
|
||||
//////////////// Inline methods //////////////////////////////////
|
||||
//
|
||||
@@ -192,12 +196,12 @@ private :
|
||||
|
||||
inline G4double G4PAIySection::GetPAItable(G4int i, G4int j) const
|
||||
{
|
||||
return fPAItable[i][j] ;
|
||||
return fPAItable[i][j];
|
||||
}
|
||||
|
||||
inline G4double G4PAIySection::GetLorentzFactor(G4int j) const
|
||||
{
|
||||
return fLorentzFactor[j] ;
|
||||
return fLorentzFactor[j];
|
||||
}
|
||||
|
||||
inline G4double G4PAIySection::GetSplineEnergy(G4int i) const
|
||||
@@ -206,7 +210,7 @@ inline G4double G4PAIySection::GetSplineEnergy(G4int i) const
|
||||
{
|
||||
G4Exception("Invalid argument in G4PAIySection::GetSplineEnergy");
|
||||
}
|
||||
return fSplineEnergy[i] ;
|
||||
return fSplineEnergy[i];
|
||||
}
|
||||
|
||||
inline G4double G4PAIySection::GetIntegralPAIySection(G4int i) const
|
||||
@@ -215,7 +219,7 @@ inline G4double G4PAIySection::GetIntegralPAIySection(G4int i) const
|
||||
{
|
||||
G4Exception("Invalid argument in G4PAIySection::GetIntegralPAIySection");
|
||||
}
|
||||
return fIntegralPAIySection[i] ;
|
||||
return fIntegralPAIySection[i];
|
||||
}
|
||||
|
||||
inline G4double G4PAIySection::GetIntegralPAIdEdx(G4int i) const
|
||||
@@ -224,7 +228,7 @@ inline G4double G4PAIySection::GetIntegralPAIdEdx(G4int i) const
|
||||
{
|
||||
G4Exception("Invalid argument in G4PAIySection::GetIntegralPAIySection");
|
||||
}
|
||||
return fIntegralPAIdEdx[i] ;
|
||||
return fIntegralPAIdEdx[i];
|
||||
}
|
||||
|
||||
inline G4double G4PAIySection::GetIntegralCerenkov(G4int i) const
|
||||
@@ -233,7 +237,7 @@ inline G4double G4PAIySection::GetIntegralCerenkov(G4int i) const
|
||||
{
|
||||
G4Exception("Invalid argument in G4PAIySection::GetIntegralCerenkov");
|
||||
}
|
||||
return fIntegralCerenkov[i] ;
|
||||
return fIntegralCerenkov[i];
|
||||
}
|
||||
|
||||
inline G4double G4PAIySection::GetIntegralPlasmon(G4int i) const
|
||||
@@ -242,7 +246,7 @@ inline G4double G4PAIySection::GetIntegralPlasmon(G4int i) const
|
||||
{
|
||||
G4Exception("Invalid argument in G4PAIySection::GetIntegralPlasmon");
|
||||
}
|
||||
return fIntegralPlasmon[i] ;
|
||||
return fIntegralPlasmon[i];
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4PEEffectFluoModel.hh,v 1.1 2010/09/03 14:11:16 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4PEEffectFluoModel
|
||||
//
|
||||
// Author: Vladimir Ivanchenko on base of G4PEEffectModel
|
||||
//
|
||||
// Creation date: 13.06.2010
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the photo-electric effect with deexcitation
|
||||
//
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4PEEffectFluoModel_h
|
||||
#define G4PEEffectFluoModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
|
||||
class G4ParticleChangeForGamma;
|
||||
class G4VAtomDeexcitation;
|
||||
|
||||
class G4PEEffectFluoModel : public G4VEmModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4PEEffectFluoModel(const G4String& nam = "PhotoElectric");
|
||||
|
||||
virtual ~G4PEEffectFluoModel();
|
||||
|
||||
virtual
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
virtual
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition*,
|
||||
G4double kinEnergy,
|
||||
G4double Z,
|
||||
G4double A,
|
||||
G4double, G4double);
|
||||
|
||||
virtual G4double CrossSectionPerVolume(const G4Material*,
|
||||
const G4ParticleDefinition*,
|
||||
G4double kineticEnergy,
|
||||
G4double cutEnergy,
|
||||
G4double maxEnergy);
|
||||
|
||||
virtual void SampleSecondaries(std::vector<G4DynamicParticle*>*,
|
||||
const G4MaterialCutsCouple*,
|
||||
const G4DynamicParticle*,
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
protected:
|
||||
|
||||
virtual G4double ElecCosThetaDistribution(G4double ElecKineEnergy);
|
||||
|
||||
private:
|
||||
|
||||
G4ParticleDefinition* theGamma;
|
||||
G4ParticleDefinition* theElectron;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4VAtomDeexcitation* fAtomDeexcitation;
|
||||
|
||||
G4double fminimalEnergy;
|
||||
G4bool isInitialized;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4PSTARStopping.hh,v 1.5 2008/11/13 12:04:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-02 $
|
||||
// $Id: G4PSTARStopping.hh,v 1.7 2010/04/26 17:22:08 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
|
||||
#ifndef G4PSTARStopping_h
|
||||
#define G4PSTARStopping_h 1
|
||||
@@ -55,6 +55,8 @@
|
||||
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4LPhysicsFreeVector.hh"
|
||||
#include <vector>
|
||||
|
||||
class G4Material;
|
||||
|
||||
@@ -75,15 +77,17 @@ private:
|
||||
|
||||
void Initialise();
|
||||
|
||||
void AddData(G4double* e, G4double* s, G4int idx);
|
||||
|
||||
// hide assignment operator
|
||||
G4PSTARStopping & operator=(const G4PSTARStopping &right);
|
||||
G4PSTARStopping(const G4PSTARStopping&);
|
||||
|
||||
G4int matIndex;
|
||||
const G4Material* currentMaterial;
|
||||
G4int index, matIndex;
|
||||
G4String name[74];
|
||||
G4double currentE, res;
|
||||
G4double e[74][60], kinE[60];
|
||||
G4double emin;
|
||||
std::vector<G4String> name;
|
||||
std::vector<G4LPhysicsFreeVector*> sdata;
|
||||
};
|
||||
|
||||
inline G4double G4PSTARStopping::GetElectronicDEDX(const G4Material* mat,
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4PairProductionRelModel.hh,v 1.3 2009/06/04 13:45:53 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4PairProductionRelModel.hh,v 1.9 2010/10/26 10:35:22 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -63,7 +63,7 @@ class G4PairProductionRelModel : public G4VEmModel
|
||||
public:
|
||||
|
||||
G4PairProductionRelModel(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "Bethe-Heitler");
|
||||
const G4String& nam = "BetheHeitlerLPM");
|
||||
|
||||
virtual ~G4PairProductionRelModel();
|
||||
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
const G4Material*,G4double);
|
||||
|
||||
// * fast inline functions *
|
||||
inline void SetCurrentElement(const G4double);
|
||||
inline void SetCurrentElement(G4double /*Z*/);
|
||||
|
||||
// set / get methods
|
||||
inline void SetLPMconstant(G4double val);
|
||||
@@ -109,9 +109,6 @@ protected:
|
||||
G4double ScreenFunction1(G4double ScreenVariable);
|
||||
G4double ScreenFunction2(G4double ScreenVariable);
|
||||
|
||||
|
||||
|
||||
|
||||
G4double ComputeXSectionPerAtom(G4double totalEnergy, G4double Z);
|
||||
|
||||
G4double ComputeDXSectionPerAtom(G4double eplusEnergy, G4double totalEnergy, G4double Z);
|
||||
@@ -127,13 +124,6 @@ protected:
|
||||
G4ParticleDefinition* theElectron;
|
||||
G4ParticleDefinition* thePositron;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4PhysicsTable* theCrossSectionTable;
|
||||
|
||||
G4double lowGammaEnergy;
|
||||
G4double highGammaEnergy;
|
||||
|
||||
G4int nbins;
|
||||
size_t indexZ[120];
|
||||
|
||||
G4double fLPMconstant;
|
||||
G4bool fLPMflag;
|
||||
@@ -195,7 +185,7 @@ G4bool G4PairProductionRelModel::LPMflag() const
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4PairProductionRelModel::SetCurrentElement(const G4double Z)
|
||||
inline void G4PairProductionRelModel::SetCurrentElement(G4double Z)
|
||||
{
|
||||
if(Z != currentZ) {
|
||||
currentZ = Z;
|
||||
@@ -213,10 +203,10 @@ inline void G4PairProductionRelModel::SetCurrentElement(const G4double Z)
|
||||
Fel = facFel - lnZ/3. ;
|
||||
Finel = facFinel - 2.*lnZ/3. ;
|
||||
}
|
||||
|
||||
fCoulomb=GetCurrentElement()->GetfCoulomb();
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4PairProductionRelModel::Phi1(G4double delta) const
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UniversalFluctuation.hh,v 1.10 2009/03/19 14:15:17 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4UniversalFluctuation.hh,v 1.12 2010/08/08 08:19:59 urban Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -33,7 +33,7 @@
|
||||
//
|
||||
// File name: G4UniversalFluctuation
|
||||
//
|
||||
// Author: Vladimir Ivanchenko
|
||||
// Author: V.Ivanchenko make a class with the Laszlo Urban model
|
||||
//
|
||||
// Creation date: 03.01.2002
|
||||
//
|
||||
@@ -109,14 +109,16 @@ private:
|
||||
G4double e2LogFluct;
|
||||
G4double ipotLogFluct;
|
||||
G4double e0;
|
||||
G4double esmall;
|
||||
|
||||
G4double e1,e2;
|
||||
|
||||
G4double minNumberInteractionsBohr;
|
||||
G4double theBohrBeta2;
|
||||
G4double minLoss;
|
||||
G4double nmaxCont1;
|
||||
G4double nmaxCont2;
|
||||
G4double nmaxCont;
|
||||
G4double rate,fw;
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,127 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UniversalFluctuation93.hh,v 1.2 2010/10/26 10:06:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4UniversalFluctuation93
|
||||
//
|
||||
// Author: V.Ivanchenko make a class with the Laszlo Urban model
|
||||
//
|
||||
// Creation date: 03.01.2002
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 09-12-02 remove warnings (V.Ivanchenko)
|
||||
// 28-12-02 add method Dispersion (V.Ivanchenko)
|
||||
// 07-02-03 change signature (V.Ivanchenko)
|
||||
// 13-02-03 Add name (V.Ivanchenko)
|
||||
// 16-10-03 Changed interface to Initialisation (V.Ivanchenko)
|
||||
// 07-02-05 define problim = 5.e-3 (mma)
|
||||
// 14-06-10 saved version of 9.3 model with the name G4UniversalFluctuation93
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of energy loss fluctuations
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4UniversalFluctuation93_h
|
||||
#define G4UniversalFluctuation93_h 1
|
||||
|
||||
|
||||
#include "G4VEmFluctuationModel.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
|
||||
class G4UniversalFluctuation93 : public G4VEmFluctuationModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4UniversalFluctuation93(const G4String& nam = "UniFluc93");
|
||||
|
||||
virtual ~G4UniversalFluctuation93();
|
||||
|
||||
virtual G4double SampleFluctuations(const G4Material*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
virtual G4double Dispersion( const G4Material*,
|
||||
const G4DynamicParticle*,
|
||||
G4double&,
|
||||
G4double&);
|
||||
|
||||
virtual void InitialiseMe(const G4ParticleDefinition*);
|
||||
|
||||
// Initialisation prestep
|
||||
virtual void SetParticleAndCharge(const G4ParticleDefinition*, G4double q2);
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
G4UniversalFluctuation93 & operator=(const G4UniversalFluctuation93 &right);
|
||||
G4UniversalFluctuation93(const G4UniversalFluctuation93&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
const G4Material* lastMaterial;
|
||||
|
||||
G4double particleMass;
|
||||
G4double chargeSquare;
|
||||
|
||||
// data members to speed up the fluctuation calculation
|
||||
G4double ipotFluct;
|
||||
G4double electronDensity;
|
||||
|
||||
G4double f1Fluct;
|
||||
G4double f2Fluct;
|
||||
G4double e1Fluct;
|
||||
G4double e2Fluct;
|
||||
G4double e1LogFluct;
|
||||
G4double e2LogFluct;
|
||||
G4double ipotLogFluct;
|
||||
G4double e0;
|
||||
|
||||
G4double e1,e2;
|
||||
|
||||
G4double minNumberInteractionsBohr;
|
||||
G4double theBohrBeta2;
|
||||
G4double minLoss;
|
||||
G4double nmaxCont1;
|
||||
G4double nmaxCont2;
|
||||
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,229 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel.hh,v 1.35 2009/04/29 13:30:22 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4UrbanMscModel
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
// Creation date: 06.03.2008
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 28-04-09 move G4UrbanMscModel2 from the g49.2 to G4UrbanMscModel.
|
||||
// now it is frozen (V.Ivanchenk0)
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the model of multiple scattering based on
|
||||
// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4UrbanMscModel_h
|
||||
#define G4UrbanMscModel_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4VMscModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4MscStepLimitType.hh"
|
||||
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4SafetyHelper;
|
||||
class G4LossTableManager;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4UrbanMscModel : public G4VMscModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4UrbanMscModel(const G4String& nam = "UrbanMscUni");
|
||||
|
||||
virtual ~G4UrbanMscModel();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight=0.,
|
||||
G4double cut =0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
void SampleScattering(const G4DynamicParticle*,
|
||||
G4double safety);
|
||||
|
||||
G4double ComputeTruePathLengthLimit(const G4Track& track,
|
||||
G4PhysicsTable* theLambdaTable,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
G4double ComputeGeomPathLength(G4double truePathLength);
|
||||
|
||||
G4double ComputeTrueStepLength(G4double geomStepLength);
|
||||
|
||||
G4double ComputeTheta0(G4double truePathLength,
|
||||
G4double KineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
G4double SimpleScattering(G4double xmeanth, G4double x2meanth);
|
||||
|
||||
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
|
||||
|
||||
G4double SampleDisplacement();
|
||||
|
||||
G4double LatCorrelation();
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition*);
|
||||
|
||||
inline void UpdateCache();
|
||||
|
||||
// hide assignment operator
|
||||
G4UrbanMscModel & operator=(const G4UrbanMscModel &right);
|
||||
G4UrbanMscModel(const G4UrbanMscModel&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
const G4MaterialCutsCouple* couple;
|
||||
G4LossTableManager* theManager;
|
||||
|
||||
G4double mass;
|
||||
G4double charge,ChargeSquare;
|
||||
G4double masslimite,lambdalimit,fr;
|
||||
|
||||
G4double taubig;
|
||||
G4double tausmall;
|
||||
G4double taulim;
|
||||
G4double currentTau;
|
||||
G4double tlimit;
|
||||
G4double tlimitmin;
|
||||
G4double tlimitminfix;
|
||||
G4double tgeom;
|
||||
|
||||
G4double geombig;
|
||||
G4double geommin;
|
||||
G4double geomlimit;
|
||||
G4double skindepth;
|
||||
G4double smallstep;
|
||||
|
||||
G4double presafety;
|
||||
|
||||
G4double lambda0;
|
||||
G4double lambdaeff;
|
||||
G4double tPathLength;
|
||||
G4double zPathLength;
|
||||
G4double par1,par2,par3;
|
||||
|
||||
G4double stepmin;
|
||||
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange;
|
||||
G4double rangeinit;
|
||||
G4double currentRadLength;
|
||||
|
||||
G4double theta0max,rellossmax;
|
||||
G4double third;
|
||||
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4double y;
|
||||
G4double Zold;
|
||||
G4double Zeff,Z2,Z23,lnZ;
|
||||
G4double coeffth1,coeffth2;
|
||||
G4double coeffc1,coeffc2;
|
||||
G4double scr1ini,scr2ini,scr1,scr2;
|
||||
|
||||
G4bool isInitialized;
|
||||
G4bool inside;
|
||||
G4bool insideskin;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4UrbanMscModel::GetLambda(G4double e)
|
||||
{
|
||||
G4double x;
|
||||
if(theLambdaTable) {
|
||||
G4bool b;
|
||||
x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
|
||||
} else {
|
||||
x = CrossSection(couple,particle,e);
|
||||
}
|
||||
if(x > DBL_MIN) x = 1./x;
|
||||
else x = DBL_MAX;
|
||||
return x;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if (p != particle) {
|
||||
particle = p;
|
||||
mass = p->GetPDGMass();
|
||||
charge = p->GetPDGCharge()/eplus;
|
||||
ChargeSquare = charge*charge;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel::UpdateCache()
|
||||
{
|
||||
lnZ = std::log(Zeff);
|
||||
coeffth1 = 0.885+lnZ*(0.104-0.0170*lnZ);
|
||||
coeffth2 = 0.028+lnZ*(0.012-0.00125*lnZ);
|
||||
coeffc1 = 2.134-lnZ*(0.1045-0.00602*lnZ);
|
||||
coeffc2 = 0.001126-lnZ*(0.0001089+0.0000247*lnZ);
|
||||
Z2 = Zeff*Zeff;
|
||||
Z23 = std::exp(2.*lnZ/3.);
|
||||
scr1 = scr1ini*Z23;
|
||||
scr2 = scr2ini*Z2*ChargeSquare;
|
||||
// lastMaterial = couple->GetMaterial();
|
||||
Zold = Zeff;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,232 +0,0 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel2.hh,v 1.17 2009/05/15 09:26:42 urban Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4UrbanMscModel2
|
||||
//
|
||||
// Author: Laszlo Urban
|
||||
//
|
||||
// Creation date: 06.03.2008
|
||||
//
|
||||
// Modifications:
|
||||
// 23.04.2009 L.Urban updated parameterization in UpdateCache method
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the model of multiple scattering based on
|
||||
// H.W.Lewis Phys Rev 78 (1950) 526 and L.Urban model
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4UrbanMscModel2_h
|
||||
#define G4UrbanMscModel2_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "G4VMscModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4MscStepLimitType.hh"
|
||||
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4SafetyHelper;
|
||||
class G4LossTableManager;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4UrbanMscModel2 : public G4VMscModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4UrbanMscModel2(const G4String& nam = "UrbanMscUni2");
|
||||
|
||||
virtual ~G4UrbanMscModel2();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, const G4DataVector&);
|
||||
|
||||
G4double ComputeCrossSectionPerAtom(const G4ParticleDefinition* particle,
|
||||
G4double KineticEnergy,
|
||||
G4double AtomicNumber,
|
||||
G4double AtomicWeight=0.,
|
||||
G4double cut =0.,
|
||||
G4double emax=DBL_MAX);
|
||||
|
||||
void SampleScattering(const G4DynamicParticle*,
|
||||
G4double safety);
|
||||
|
||||
G4double ComputeTruePathLengthLimit(const G4Track& track,
|
||||
G4PhysicsTable* theLambdaTable,
|
||||
G4double currentMinimalStep);
|
||||
|
||||
G4double ComputeGeomPathLength(G4double truePathLength);
|
||||
|
||||
G4double ComputeTrueStepLength(G4double geomStepLength);
|
||||
|
||||
G4double ComputeTheta0(G4double truePathLength,
|
||||
G4double KineticEnergy);
|
||||
|
||||
private:
|
||||
|
||||
G4double SimpleScattering(G4double xmeanth, G4double x2meanth);
|
||||
|
||||
G4double SampleCosineTheta(G4double trueStepLength, G4double KineticEnergy);
|
||||
|
||||
G4double SampleDisplacement();
|
||||
|
||||
G4double LatCorrelation();
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetParticle(const G4ParticleDefinition*);
|
||||
|
||||
inline void UpdateCache();
|
||||
|
||||
// hide assignment operator
|
||||
G4UrbanMscModel2 & operator=(const G4UrbanMscModel2 &right);
|
||||
G4UrbanMscModel2(const G4UrbanMscModel2&);
|
||||
|
||||
const G4ParticleDefinition* particle;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
const G4MaterialCutsCouple* couple;
|
||||
G4LossTableManager* theManager;
|
||||
|
||||
G4double mass;
|
||||
G4double charge,ChargeSquare;
|
||||
G4double masslimite,lambdalimit,fr;
|
||||
|
||||
G4double taubig;
|
||||
G4double tausmall;
|
||||
G4double taulim;
|
||||
G4double currentTau;
|
||||
G4double tlimit;
|
||||
G4double tlimitmin;
|
||||
G4double tlimitminfix;
|
||||
G4double tgeom;
|
||||
|
||||
G4double geombig;
|
||||
G4double geommin;
|
||||
G4double geomlimit;
|
||||
G4double skindepth;
|
||||
G4double smallstep;
|
||||
|
||||
G4double presafety;
|
||||
|
||||
G4double lambda0;
|
||||
G4double lambdaeff;
|
||||
G4double tPathLength;
|
||||
G4double zPathLength;
|
||||
G4double par1,par2,par3;
|
||||
|
||||
G4double stepmin;
|
||||
|
||||
G4double currentKinEnergy;
|
||||
G4double currentRange;
|
||||
G4double rangeinit;
|
||||
G4double currentRadLength;
|
||||
|
||||
G4double theta0max,rellossmax;
|
||||
G4double third;
|
||||
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4double y;
|
||||
G4double Zold;
|
||||
G4double Zeff,Z2,Z23,lnZ;
|
||||
G4double coeffth1,coeffth2;
|
||||
G4double coeffc1,coeffc2;
|
||||
G4double scr1ini,scr2ini,scr1,scr2;
|
||||
|
||||
G4bool isInitialized;
|
||||
G4bool inside;
|
||||
G4bool insideskin;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
G4double G4UrbanMscModel2::GetLambda(G4double e)
|
||||
{
|
||||
G4double x;
|
||||
if(theLambdaTable) {
|
||||
G4bool b;
|
||||
x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
|
||||
} else {
|
||||
x = CrossSection(couple,particle,e);
|
||||
}
|
||||
if(x > DBL_MIN) x = 1./x;
|
||||
else x = DBL_MAX;
|
||||
return x;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel2::SetParticle(const G4ParticleDefinition* p)
|
||||
{
|
||||
if (p != particle) {
|
||||
particle = p;
|
||||
mass = p->GetPDGMass();
|
||||
charge = p->GetPDGCharge()/eplus;
|
||||
ChargeSquare = charge*charge;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline
|
||||
void G4UrbanMscModel2::UpdateCache()
|
||||
{
|
||||
lnZ = std::log(Zeff);
|
||||
//new correction in theta0 formula
|
||||
coeffth1 = (1.-8.7780e-2/Zeff)*(0.87+0.03*lnZ);
|
||||
coeffth2 = (4.0780e-2+1.7315e-4*Zeff)*(0.87+0.03*lnZ);
|
||||
// tail parameters
|
||||
G4double lnZ1 = std::log(Zeff+1.);
|
||||
coeffc1 = 2.943-0.197*lnZ1;
|
||||
coeffc2 = 0.0987-0.0143*lnZ1;
|
||||
// for single scattering
|
||||
Z2 = Zeff*Zeff;
|
||||
Z23 = std::exp(2.*lnZ/3.);
|
||||
scr1 = scr1ini*Z23;
|
||||
scr2 = scr2ini*Z2*ChargeSquare;
|
||||
|
||||
Zold = Zeff;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4UrbanMscModel93.hh,v 1.1 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4UrbanMscModel93.hh,v 1.4 2009/12/14 06:57:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4WaterStopping.hh,v 1.7 2009/06/19 10:39:48 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4WaterStopping.hh,v 1.8 2010/04/26 17:22:08 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
|
||||
#ifndef G4WaterStopping_h
|
||||
#define G4WaterStopping_h 1
|
||||
@@ -78,6 +78,7 @@ private:
|
||||
G4bool spline;
|
||||
G4int Z[17];
|
||||
G4double A[17];
|
||||
G4double emin;
|
||||
std::vector<G4LPhysicsFreeVector*> dedx;
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,259 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4WentzelOKandVIxSection.hh,v 1.6 2010/06/25 09:41:38 gunter Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
// GEANT4 Class header file
|
||||
//
|
||||
//
|
||||
// File name: G4WentzelOKandVIxSection
|
||||
//
|
||||
// Authors: V.Ivanchenko and O.Kadri
|
||||
//
|
||||
// Creation date: 21.05.2010
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
// Implementation of the computation of total and transport cross sections,
|
||||
// sample scattering angle for the single scattering case.
|
||||
// to be used by single and multiple scattering models. References:
|
||||
// 1) G.Wentzel, Z. Phys. 40 (1927) 590.
|
||||
// 2) J.M. Fernandez-Varea et al., NIM B73 (1993) 447.
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4WentzelOKandVIxSection_h
|
||||
#define G4WentzelOKandVIxSection_h 1
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4Material.hh"
|
||||
#include "G4Element.hh"
|
||||
#include "G4ElementVector.hh"
|
||||
#include "G4NistManager.hh"
|
||||
#include "G4ThreeVector.hh"
|
||||
#include "G4Pow.hh"
|
||||
|
||||
class G4ParticleDefinition;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4WentzelOKandVIxSection
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
G4WentzelOKandVIxSection();
|
||||
|
||||
virtual ~G4WentzelOKandVIxSection();
|
||||
|
||||
void Initialise(const G4ParticleDefinition*, G4double CosThetaLim);
|
||||
|
||||
void SetupParticle(const G4ParticleDefinition*);
|
||||
|
||||
// return cos(ThetaMax) for msc and cos(thetaMin) for single scattering
|
||||
// cut = DBL_MAX means no scattering off electrons
|
||||
G4double SetupTarget(G4int Z, G4double cut = DBL_MAX);
|
||||
|
||||
G4double ComputeTransportCrossSectionPerAtom(G4double CosThetaMax);
|
||||
|
||||
G4ThreeVector SampleSingleScattering(G4double CosThetaMin,
|
||||
G4double CosThetaMax,
|
||||
G4double elecRatio = 0.0);
|
||||
|
||||
inline G4double ComputeNuclearCrossSection(G4double CosThetaMin,
|
||||
G4double CosThetaMax);
|
||||
|
||||
inline G4double ComputeElectronCrossSection(G4double CosThetaMin,
|
||||
G4double CosThetaMax);
|
||||
|
||||
inline G4double SetupKinematic(G4double kinEnergy, const G4Material* mat);
|
||||
|
||||
inline void SetTargetMass(G4double value);
|
||||
|
||||
inline void SetRelativisticMass(G4double value);
|
||||
|
||||
inline G4double GetMomentumSquare() const;
|
||||
|
||||
inline G4double GetCosThetaNuc() const;
|
||||
|
||||
inline G4double GetCosThetaElec() const;
|
||||
|
||||
private:
|
||||
|
||||
void ComputeMaxElectronScattering(G4double cut);
|
||||
|
||||
// hide assignment operator
|
||||
G4WentzelOKandVIxSection & operator=(const G4WentzelOKandVIxSection &right);
|
||||
G4WentzelOKandVIxSection(const G4WentzelOKandVIxSection&);
|
||||
|
||||
const G4ParticleDefinition* theProton;
|
||||
const G4ParticleDefinition* theElectron;
|
||||
const G4ParticleDefinition* thePositron;
|
||||
const G4Material* currentMaterial;
|
||||
|
||||
G4NistManager* fNistManager;
|
||||
G4Pow* fG4pow;
|
||||
|
||||
G4double numlimit;
|
||||
|
||||
G4double elecXSRatio;
|
||||
|
||||
// integer parameters
|
||||
G4int nwarnings;
|
||||
G4int nwarnlimit;
|
||||
|
||||
// single scattering parameters
|
||||
G4double coeff;
|
||||
G4double cosTetMaxElec;
|
||||
G4double cosTetMaxNuc;
|
||||
G4double cosThetaMax;
|
||||
G4double alpha2;
|
||||
|
||||
// projectile
|
||||
const G4ParticleDefinition* particle;
|
||||
|
||||
G4double chargeSquare;
|
||||
G4double charge3;
|
||||
G4double spin;
|
||||
G4double mass;
|
||||
G4double tkin;
|
||||
G4double mom2;
|
||||
G4double invbeta2;
|
||||
G4double kinFactor;
|
||||
G4double etag;
|
||||
G4double ecut;
|
||||
G4double lowEnergyLimit;
|
||||
|
||||
// target
|
||||
G4int targetZ;
|
||||
G4double targetMass;
|
||||
G4double screenZ;
|
||||
G4double formfactA;
|
||||
G4double factorA2;
|
||||
G4double factB;
|
||||
G4double factD;
|
||||
|
||||
static G4double ScreenRSquare[100];
|
||||
static G4double FormFactor[100];
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double
|
||||
G4WentzelOKandVIxSection::SetupKinematic(G4double ekin, const G4Material* mat)
|
||||
{
|
||||
if(ekin != tkin || mat != currentMaterial) {
|
||||
currentMaterial = mat;
|
||||
tkin = ekin;
|
||||
mom2 = tkin*(tkin + 2.0*mass);
|
||||
invbeta2 = 1.0 + mass*mass/mom2;
|
||||
factB = spin/invbeta2;
|
||||
cosTetMaxNuc = cosThetaMax;
|
||||
if(std::fabs(cosThetaMax) < 1.0) {
|
||||
cosTetMaxNuc =
|
||||
std::max(cosThetaMax,1.-factorA2*mat->GetIonisation()->GetInvA23()/mom2);
|
||||
}
|
||||
}
|
||||
return cosTetMaxNuc;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4WentzelOKandVIxSection::SetTargetMass(G4double value)
|
||||
{
|
||||
targetMass = value;
|
||||
factD = std::sqrt(mom2)/value;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline void G4WentzelOKandVIxSection::SetRelativisticMass(G4double value)
|
||||
{
|
||||
mass = value;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4WentzelOKandVIxSection::GetMomentumSquare() const
|
||||
{
|
||||
return mom2;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4WentzelOKandVIxSection::GetCosThetaNuc() const
|
||||
{
|
||||
return cosTetMaxNuc;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double G4WentzelOKandVIxSection::GetCosThetaElec() const
|
||||
{
|
||||
return cosTetMaxElec;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double
|
||||
G4WentzelOKandVIxSection::ComputeNuclearCrossSection(G4double cosTMin,
|
||||
G4double cosTMax)
|
||||
{
|
||||
G4double xsec = 0.0;
|
||||
if(cosTMax < cosTMin) {
|
||||
xsec = targetZ*kinFactor*(cosTMin - cosTMax)/
|
||||
((1.0 - cosTMin + screenZ)*(1.0 - cosTMax + screenZ));
|
||||
}
|
||||
return xsec;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
inline G4double
|
||||
G4WentzelOKandVIxSection::ComputeElectronCrossSection(G4double cosTMin,
|
||||
G4double cosTMax)
|
||||
{
|
||||
G4double xsec = 0.0;
|
||||
G4double cost1 = std::max(cosTMin,cosTetMaxElec);
|
||||
G4double cost2 = std::max(cosTMax,cosTetMaxElec);
|
||||
if(cost1 > cost2) {
|
||||
xsec = kinFactor*(cost1 - cost2)/((1.0 - cost1 + screenZ)*(1.0 - cost2 + screenZ));
|
||||
}
|
||||
return xsec;
|
||||
}
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4WentzelVIModel.hh,v 1.21 2009/10/10 15:16:57 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4WentzelVIModel.hh,v 1.29 2010/05/27 14:22:05 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -39,7 +39,8 @@
|
||||
// Creation date: 09.04.2008 from G4MuMscModel
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// 27-05-2010 V.Ivanchenko added G4WentzelOKandVIxSection class to
|
||||
// compute cross sections and sample scattering angle
|
||||
//
|
||||
// Class Description:
|
||||
//
|
||||
@@ -59,13 +60,12 @@
|
||||
|
||||
#include "G4VMscModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "G4MscStepLimitType.hh"
|
||||
#include "G4MaterialCutsCouple.hh"
|
||||
#include "G4NistManager.hh"
|
||||
#include "G4WentzelOKandVIxSection.hh"
|
||||
|
||||
class G4LossTableManager;
|
||||
class G4ParticleChangeForMSC;
|
||||
class G4ParticleDefinition;
|
||||
class G4LossTableManager;
|
||||
class G4Pow;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -99,103 +99,58 @@ public:
|
||||
|
||||
private:
|
||||
|
||||
G4double ComputeTransportXSectionPerAtom();
|
||||
|
||||
G4double ComputeXSectionPerVolume();
|
||||
|
||||
void ComputeMaxElectronScattering(G4double cut);
|
||||
|
||||
inline G4double GetLambda(G4double kinEnergy);
|
||||
|
||||
inline void SetupParticle(const G4ParticleDefinition*);
|
||||
|
||||
inline void SetupKinematic(G4double kinEnergy, G4double cut);
|
||||
|
||||
inline void SetupTarget(G4double Z, G4double kinEnergy);
|
||||
|
||||
inline void DefineMaterial(const G4MaterialCutsCouple*);
|
||||
|
||||
// hide assignment operator
|
||||
G4WentzelVIModel & operator=(const G4WentzelVIModel &right);
|
||||
G4WentzelVIModel(const G4WentzelVIModel&);
|
||||
|
||||
const G4ParticleDefinition* theProton;
|
||||
const G4ParticleDefinition* theElectron;
|
||||
const G4ParticleDefinition* thePositron;
|
||||
|
||||
G4LossTableManager* theManager;
|
||||
G4ParticleChangeForMSC* fParticleChange;
|
||||
G4WentzelOKandVIxSection* wokvi;
|
||||
G4Pow* fG4pow;
|
||||
|
||||
G4PhysicsTable* theLambdaTable;
|
||||
G4PhysicsTable* theLambda2Table;
|
||||
G4LossTableManager* theManager;
|
||||
const G4DataVector* currentCuts;
|
||||
|
||||
G4NistManager* fNistManager;
|
||||
|
||||
G4double numlimit;
|
||||
G4double tlimitminfix;
|
||||
G4double invsqrt12;
|
||||
|
||||
// cash
|
||||
// cache kinematics
|
||||
G4double preKinEnergy;
|
||||
G4double ecut;
|
||||
G4double lambda0;
|
||||
G4double tPathLength;
|
||||
G4double zPathLength;
|
||||
G4double lambdaeff;
|
||||
G4double currentRange;
|
||||
G4double par1;
|
||||
G4double par2;
|
||||
G4double par3;
|
||||
|
||||
// data for single scattering mode
|
||||
G4double xtsec;
|
||||
std::vector<G4double> xsecn;
|
||||
std::vector<G4double> prob;
|
||||
G4int nelments;
|
||||
|
||||
G4int nbins;
|
||||
G4int nwarnings;
|
||||
G4int nwarnlimit;
|
||||
G4double numlimit;
|
||||
|
||||
// cache material
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
const G4MaterialCutsCouple* currentCouple;
|
||||
const G4Material* currentMaterial;
|
||||
|
||||
// single scattering parameters
|
||||
G4double coeff;
|
||||
G4double cosThetaMin;
|
||||
G4double cosThetaMax;
|
||||
G4double cosTetMaxNuc;
|
||||
G4double cosTetMaxNuc2;
|
||||
G4double cosTetMaxElec;
|
||||
G4double cosTetMaxElec2;
|
||||
G4double q2Limit;
|
||||
G4double alpha2;
|
||||
|
||||
// projectile
|
||||
const G4ParticleDefinition* particle;
|
||||
|
||||
G4double chargeSquare;
|
||||
G4double spin;
|
||||
G4double mass;
|
||||
G4double tkin;
|
||||
G4double mom2;
|
||||
G4double invbeta2;
|
||||
G4double kinFactor;
|
||||
G4double etag;
|
||||
G4double lowEnergyLimit;
|
||||
|
||||
// target
|
||||
G4double targetZ;
|
||||
G4double targetMass;
|
||||
G4double screenZ;
|
||||
G4double formfactA;
|
||||
G4int iz;
|
||||
|
||||
static G4double ScreenRSquare[100];
|
||||
static G4double FormFactor[100];
|
||||
|
||||
// flags
|
||||
G4bool isInitialized;
|
||||
G4bool inside;
|
||||
@@ -221,14 +176,13 @@ G4double G4WentzelVIModel::GetLambda(G4double e)
|
||||
{
|
||||
G4double x;
|
||||
if(theLambdaTable) {
|
||||
G4bool b;
|
||||
x = ((*theLambdaTable)[currentMaterialIndex])->GetValue(e, b);
|
||||
x = ((*theLambdaTable)[currentMaterialIndex])->Value(e);
|
||||
} else {
|
||||
x = CrossSection(currentCouple,particle,e,
|
||||
(*currentCuts)[currentMaterialIndex]);
|
||||
}
|
||||
if(x > DBL_MIN) x = 1./x;
|
||||
else x = DBL_MAX;
|
||||
if(x > DBL_MIN) { x = 1./x; }
|
||||
else { x = DBL_MAX; }
|
||||
return x;
|
||||
}
|
||||
|
||||
@@ -239,51 +193,10 @@ inline void G4WentzelVIModel::SetupParticle(const G4ParticleDefinition* p)
|
||||
// Initialise mass and charge
|
||||
if(p != particle) {
|
||||
particle = p;
|
||||
mass = particle->GetPDGMass();
|
||||
spin = particle->GetPDGSpin();
|
||||
G4double q = particle->GetPDGCharge()/eplus;
|
||||
chargeSquare = q*q;
|
||||
tkin = 0.0;
|
||||
wokvi->SetupParticle(p);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4WentzelVIModel::SetupKinematic(G4double ekin, G4double cut)
|
||||
{
|
||||
if(ekin != tkin || ecut != cut) {
|
||||
tkin = ekin;
|
||||
mom2 = tkin*(tkin + 2.0*mass);
|
||||
invbeta2 = 1.0 + mass*mass/mom2;
|
||||
cosTetMaxNuc = cosThetaMax;
|
||||
if(mass < MeV && ekin <= 10.*cut) {
|
||||
cosTetMaxNuc = ekin*(cosThetaMax + 1.0)/(10.*cut) - 1.0;
|
||||
}
|
||||
ComputeMaxElectronScattering(cut);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4WentzelVIModel::SetupTarget(G4double Z, G4double e)
|
||||
{
|
||||
if(Z != targetZ || e != etag) {
|
||||
etag = e;
|
||||
targetZ = Z;
|
||||
iz = G4int(Z);
|
||||
if(iz > 99) iz = 99;
|
||||
targetMass = fNistManager->GetAtomicMassAmu(iz)*amu_c2;
|
||||
screenZ = ScreenRSquare[iz]/mom2;
|
||||
G4double meff = targetMass/(mass+targetMass);
|
||||
kinFactor = coeff*targetZ*chargeSquare*invbeta2/(mom2*meff*meff);
|
||||
screenZ *=(1.13 + std::min(1.0,3.76*Z*Z*invbeta2*alpha2));
|
||||
if(mass > MeV) { screenZ *= 2.0; }
|
||||
formfactA = FormFactor[iz]*mom2;
|
||||
cosTetMaxNuc2 = cosTetMaxNuc;
|
||||
cosTetMaxElec2 = cosTetMaxElec;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4alphaIonisation.hh,v 1.1 2009/11/10 11:50:30 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4alphaIonisation.hh,v 1.3 2010/10/26 10:06:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -70,8 +70,6 @@ public:
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
|
||||
void ActivateNuclearStopping(G4bool);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,
|
||||
@@ -82,8 +80,6 @@ protected:
|
||||
|
||||
inline G4double BetheBlochEnergyThreshold();
|
||||
|
||||
inline G4bool NuclearStoppingFlag();
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
@@ -97,19 +93,11 @@ private:
|
||||
G4double eth;
|
||||
|
||||
G4bool isInitialised;
|
||||
G4bool nuclearStopping;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4alphaIonisation::ActivateNuclearStopping(G4bool val)
|
||||
{
|
||||
nuclearStopping = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4alphaIonisation::BetheBlochEnergyThreshold()
|
||||
{
|
||||
return eth;
|
||||
@@ -117,11 +105,4 @@ inline G4double G4alphaIonisation::BetheBlochEnergyThreshold()
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4alphaIonisation::NuclearStoppingFlag()
|
||||
{
|
||||
return nuclearStopping;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eBremsstrahlungRelModel.hh,v 1.11 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4eBremsstrahlungRelModel.hh,v 1.14 2010/10/26 10:35:22 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -64,7 +64,7 @@ class G4eBremsstrahlungRelModel : public G4VEmModel
|
||||
public:
|
||||
|
||||
G4eBremsstrahlungRelModel(const G4ParticleDefinition* p = 0,
|
||||
const G4String& nam = "eBremRel");
|
||||
const G4String& nam = "eBremLPM");
|
||||
|
||||
virtual ~G4eBremsstrahlungRelModel();
|
||||
|
||||
@@ -158,8 +158,8 @@ protected:
|
||||
G4bool isElectron;
|
||||
|
||||
private:
|
||||
|
||||
// consts
|
||||
G4double highKinEnergy;
|
||||
G4double lowKinEnergy;
|
||||
G4double fMigdalConstant;
|
||||
G4double fLPMconstant;
|
||||
@@ -194,8 +194,8 @@ inline void G4eBremsstrahlungRelModel::SetCurrentElement(const G4double Z)
|
||||
Finel = facFinel - 2.*lnZ/3. ;
|
||||
}
|
||||
|
||||
fCoulomb=GetCurrentElement()->GetfCoulomb();
|
||||
fMax = Fel-fCoulomb + Finel/currentZ + (1.+1./currentZ)/12.;
|
||||
fCoulomb = GetCurrentElement()->GetfCoulomb();
|
||||
fMax = Fel-fCoulomb + Finel/currentZ + (1.+1./currentZ)/12.;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eCoulombScatteringModel.hh,v 1.49 2009/10/10 15:16:57 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4eCoulombScatteringModel.hh,v 1.56 2010/05/27 14:22:05 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -46,6 +46,8 @@
|
||||
// 09.10.07 V.Ivanchenko reorganized methods, add cut dependence in scattering off e-
|
||||
// 09.06.08 V.Ivanchenko add SelectIsotope and sampling of the recoil ion
|
||||
// 17.06.09 C.Consoalndi modified SetupTarget method - remove kinFactor
|
||||
// 27.05.10 V.Ivanchenko added G4WentzelOKandVIxSection class to
|
||||
// compute cross sections and sample scattering angle
|
||||
//
|
||||
//
|
||||
// Class Description:
|
||||
@@ -65,13 +67,14 @@
|
||||
#define G4eCoulombScatteringModel_h 1
|
||||
|
||||
#include "G4VEmModel.hh"
|
||||
#include "G4PhysicsTable.hh"
|
||||
#include "globals.hh"
|
||||
#include "G4NistManager.hh"
|
||||
#include <vector>
|
||||
#include "G4MaterialCutsCouple.hh"
|
||||
#include "G4WentzelOKandVIxSection.hh"
|
||||
|
||||
class G4ParticleChangeForGamma;
|
||||
class G4ParticleDefinition;
|
||||
class G4ParticleTable;
|
||||
class G4NistManager;
|
||||
|
||||
class G4eCoulombScatteringModel : public G4VEmModel
|
||||
{
|
||||
@@ -98,38 +101,29 @@ public:
|
||||
G4double tmin,
|
||||
G4double maxEnergy);
|
||||
|
||||
// defines low energy limit of the model
|
||||
inline void SetLowEnergyLimit(G4double val);
|
||||
|
||||
// obsolete method
|
||||
inline void SetRecoilThreshold(G4double eth);
|
||||
|
||||
protected:
|
||||
|
||||
G4double CrossSectionPerAtom();
|
||||
|
||||
G4double SampleCosineTheta();
|
||||
|
||||
inline void DefineMaterial(const G4MaterialCutsCouple*);
|
||||
|
||||
inline void SetupParticle(const G4ParticleDefinition*);
|
||||
|
||||
inline void SetupKinematic(G4double kinEnergy, G4double cut);
|
||||
|
||||
inline void SetupTarget(G4double Z, G4double kinEnergy);
|
||||
|
||||
private:
|
||||
|
||||
void ComputeMaxElectronScattering(G4double cut);
|
||||
|
||||
// hide assignment operator
|
||||
G4eCoulombScatteringModel & operator=(const G4eCoulombScatteringModel &right);
|
||||
G4eCoulombScatteringModel(const G4eCoulombScatteringModel&);
|
||||
|
||||
protected:
|
||||
|
||||
const G4ParticleDefinition* theProton;
|
||||
const G4ParticleDefinition* theElectron;
|
||||
const G4ParticleDefinition* thePositron;
|
||||
|
||||
G4ParticleTable* theParticleTable;
|
||||
G4ParticleTable* theParticleTable;
|
||||
G4ParticleChangeForGamma* fParticleChange;
|
||||
G4WentzelOKandVIxSection* wokvi;
|
||||
G4NistManager* fNistManager;
|
||||
|
||||
const std::vector<G4double>* pCuts;
|
||||
@@ -139,48 +133,22 @@ protected:
|
||||
const G4Element* currentElement;
|
||||
G4int currentMaterialIndex;
|
||||
|
||||
G4double coeff;
|
||||
G4double cosThetaMin;
|
||||
G4double cosThetaMax;
|
||||
G4double cosTetMinNuc;
|
||||
G4double cosTetMaxNuc;
|
||||
G4double cosTetMaxNuc2;
|
||||
G4double cosTetMaxElec;
|
||||
G4double cosTetMaxElec2;
|
||||
G4double q2Limit;
|
||||
G4double recoilThreshold;
|
||||
G4double elecXSection;
|
||||
G4double nucXSection;
|
||||
G4double ecut;
|
||||
G4double elecRatio;
|
||||
G4double mass;
|
||||
|
||||
// projectile
|
||||
const G4ParticleDefinition* particle;
|
||||
const G4ParticleDefinition* theProton;
|
||||
|
||||
G4double chargeSquare;
|
||||
G4double spin;
|
||||
G4double mass;
|
||||
G4double tkin;
|
||||
G4double mom2;
|
||||
G4double invbeta2;
|
||||
G4double etag;
|
||||
G4double lowEnergyLimit;
|
||||
|
||||
// target
|
||||
G4double targetZ;
|
||||
G4double targetMass;
|
||||
G4double screenZ;
|
||||
G4double formfactA;
|
||||
G4int idxelm;
|
||||
G4int iz;
|
||||
|
||||
private:
|
||||
|
||||
G4double alpha2;
|
||||
G4double faclim;
|
||||
|
||||
static G4double ScreenRSquare[100];
|
||||
static G4double FormFactor[100];
|
||||
|
||||
G4bool isInitialised;
|
||||
};
|
||||
|
||||
@@ -205,53 +173,17 @@ void G4eCoulombScatteringModel::SetupParticle(const G4ParticleDefinition* p)
|
||||
if(p != particle) {
|
||||
particle = p;
|
||||
mass = particle->GetPDGMass();
|
||||
spin = particle->GetPDGSpin();
|
||||
G4double q = particle->GetPDGCharge()/eplus;
|
||||
chargeSquare = q*q;
|
||||
tkin = 0.0;
|
||||
wokvi->SetupParticle(p);
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4eCoulombScatteringModel::SetupKinematic(G4double ekin,
|
||||
G4double cut)
|
||||
inline void G4eCoulombScatteringModel::SetLowEnergyLimit(G4double val)
|
||||
{
|
||||
if(ekin != tkin || ecut != cut) {
|
||||
tkin = ekin;
|
||||
mom2 = tkin*(tkin + 2.0*mass);
|
||||
invbeta2 = 1.0 + mass*mass/mom2;
|
||||
cosTetMinNuc = cosThetaMin;
|
||||
cosTetMaxNuc = cosThetaMax;
|
||||
if(mass < MeV && cosThetaMin < 1.0 && ekin <= 10.*cut) {
|
||||
cosTetMinNuc = ekin*(cosThetaMin + 1.0)/(10.*cut) - 1.0;
|
||||
}
|
||||
ComputeMaxElectronScattering(cut);
|
||||
}
|
||||
lowEnergyLimit = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4eCoulombScatteringModel::SetupTarget(G4double Z, G4double e)
|
||||
{
|
||||
if(Z != targetZ || e != etag) {
|
||||
etag = e;
|
||||
targetZ = Z;
|
||||
iz= G4int(Z);
|
||||
if(iz > 99) iz = 99;
|
||||
targetMass = fNistManager->GetAtomicMassAmu(iz)*amu_c2;
|
||||
screenZ = ScreenRSquare[iz]/mom2;
|
||||
screenZ *=(1.13 + std::min(1.0,3.76*Z*Z*invbeta2*alpha2));
|
||||
if(mass > MeV) { screenZ *= 2.0; }
|
||||
formfactA = FormFactor[iz]*mom2;
|
||||
cosTetMaxNuc2 = cosTetMaxNuc;
|
||||
if(1 == iz && particle == theProton && cosTetMaxNuc2 < 0.0) {
|
||||
cosTetMaxNuc2 = 0.0;
|
||||
}
|
||||
cosTetMaxElec2 = cosTetMaxElec;
|
||||
}
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4eCoulombScatteringModel::SetRecoilThreshold(G4double eth)
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4eMultipleScattering.hh,v 1.3 2009/11/01 13:04:12 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4eMultipleScattering.hh,v 1.4 2010/10/26 10:39:02 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -----------------------------------------------------------------------------
|
||||
//
|
||||
@@ -63,7 +63,7 @@ class G4eMultipleScattering : public G4VMultipleScattering
|
||||
{
|
||||
public: // with description
|
||||
|
||||
G4eMultipleScattering(const G4String& processName="msc");
|
||||
G4eMultipleScattering(const G4String& processName = "msc");
|
||||
|
||||
virtual ~G4eMultipleScattering();
|
||||
|
||||
@@ -74,13 +74,13 @@ public: // with description
|
||||
void PrintInfo();
|
||||
|
||||
// geom. step length distribution should be sampled or not
|
||||
void Setsamplez(G4bool value) { samplez = value;};
|
||||
//void Setsamplez(G4bool value) { samplez = value;};
|
||||
|
||||
// to reduce the energy/step dependence
|
||||
void Setdtrl(G4double value) { dtrl = value;};
|
||||
//void Setdtrl(G4double value) { dtrl = value;};
|
||||
|
||||
// 'soften' step limitation above lambdalimit
|
||||
void SetLambdalimit(G4double value) { lambdalimit = value;};
|
||||
//void SetLambdalimit(G4double value) { lambdalimit = value;};
|
||||
|
||||
protected:
|
||||
|
||||
@@ -89,10 +89,10 @@ protected:
|
||||
|
||||
private: // data members
|
||||
|
||||
G4double lambdalimit;
|
||||
G4double dtrl;
|
||||
// G4double lambdalimit;
|
||||
//G4double dtrl;
|
||||
|
||||
G4bool samplez;
|
||||
//G4bool samplez;
|
||||
G4bool isInitialized;
|
||||
|
||||
};
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4hIonisation.hh,v 1.42 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4hIonisation.hh,v 1.44 2010/05/27 10:25:23 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04-beta-01 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -100,6 +100,7 @@ public:
|
||||
// Print out of the class parameters
|
||||
virtual void PrintInfo();
|
||||
|
||||
// obsolete method
|
||||
void ActivateNuclearStopping(G4bool);
|
||||
|
||||
protected:
|
||||
@@ -114,7 +115,6 @@ private:
|
||||
G4hIonisation(const G4hIonisation&);
|
||||
|
||||
G4bool isInitialised;
|
||||
G4bool nuclearStopping;
|
||||
|
||||
G4double mass;
|
||||
G4double ratio;
|
||||
@@ -123,11 +123,4 @@ private:
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4hIonisation::ActivateNuclearStopping(G4bool val)
|
||||
{
|
||||
nuclearStopping = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
@@ -23,8 +23,8 @@
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// $Id: G4ionIonisation.hh,v 1.57 2009/02/20 12:06:37 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-03 $
|
||||
// $Id: G4ionIonisation.hh,v 1.58 2010/09/28 15:50:00 vnivanch Exp $
|
||||
// GEANT4 tag $Name: geant4-09-04 $
|
||||
//
|
||||
// -------------------------------------------------------------------
|
||||
//
|
||||
@@ -94,8 +94,6 @@ public:
|
||||
|
||||
void ActivateStoppingData(G4bool);
|
||||
|
||||
void ActivateNuclearStopping(G4bool);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void InitialiseEnergyLossProcess(const G4ParticleDefinition*,
|
||||
@@ -106,8 +104,6 @@ protected:
|
||||
|
||||
inline G4double BetheBlochEnergyThreshold();
|
||||
|
||||
inline G4bool NuclearStoppingFlag();
|
||||
|
||||
private:
|
||||
|
||||
// hide assignment operator
|
||||
@@ -122,7 +118,6 @@ private:
|
||||
|
||||
G4bool isInitialised;
|
||||
G4bool stopDataActive;
|
||||
G4bool nuclearStopping;
|
||||
};
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
@@ -135,13 +130,6 @@ inline void G4ionIonisation::ActivateStoppingData(G4bool val)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline void G4ionIonisation::ActivateNuclearStopping(G4bool val)
|
||||
{
|
||||
nuclearStopping = val;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4double G4ionIonisation::BetheBlochEnergyThreshold()
|
||||
{
|
||||
return eth;
|
||||
@@ -149,11 +137,4 @@ inline G4double G4ionIonisation::BetheBlochEnergyThreshold()
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
inline G4bool G4ionIonisation::NuclearStoppingFlag()
|
||||
{
|
||||
return nuclearStopping;
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user