Import Geant4 6.1.0 source tree

This commit is contained in:
Gabriele Cosmo
2016-06-09 10:49:58 +02:00
parent 96686e0c8f
commit 1d812b78b1
4545 changed files with 24433 additions and 175005 deletions
@@ -1,4 +1,4 @@
$Id: History,v 1.191 2003/11/18 17:49:41 pia Exp $
$Id: History,v 1.200 2004/03/23 12:45:14 gcosmo Exp $
-------------------------------------------------------------------
=========================================================
@@ -17,6 +17,41 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
23.03.2004 G.Cosmo, tag emlowen-V06-00-09
Fix in G4PenelopeCompton for compilation on WIN32-VC.
15.03.2004 MGP, tag emlowen-V06-00-08
Fix in G4PenelopeRayleigh related to PR 605
Bug fix in G4PenelopeIonisation
Performance improvement in Penelope processes
15.03.2004 MGP, tag emlowen-V06-00-07
Performance improvement in G4Generator2BN
12.03.2004 MGP, tag emlowen-V06-00-06
Fixed compilation warnings
12.03.2004 MGP, tag emlowen-V06-00-05
G4PolarizedRayleigh removed
12.03.2004 MGP, tag emlowen-V06-00-04
Contains G4PolarizedRayleigh, which has compilation problems,
but no maintenance by authors, for future retrieval
11.03.2004 MGP, tag emlowen-V06-00-03
Bug fixes in G4PenelopeCompton and G4PenelopeIonisation
11.03.2004 MGP, tag emlowen-V06-00-02
Bug fix in G4IonisationParameters
26.01.2004 MGP, tag emlowen-V06-00-01
Optimization of Bremsstrahlung angular generators,
provided by LIP group
26.01.2004 MGP, tag emlowen-V06-00-00
Fixed memory leaks in G4PenepoleInterpolator and
G4PenelopeIonisation
18.11.2003 MGP, tag emlowen-V05-02-10
Performance optimization in Bremsstrahlung angular distribution
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicTransitionManager.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -72,7 +72,7 @@ private:
// Decides wether a radiative transition is possible and, if it is,
// returns the identity of the starting shell for the transition
const G4int SelectTypeOfTransition(G4int Z, G4int shellId);
G4int SelectTypeOfTransition(G4int Z, G4int shellId);
// Generates a particle from a radiative transition and returns it
G4DynamicParticle* GenerateFluorescence(G4int Z, G4int shellId,G4int provShellId);
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicShell.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -1,97 +0,0 @@
//
// ********************************************************************
// * DISCLAIMER *
// * *
// * The following disclaimer summarizes all the specific disclaimers *
// * of contributors to this software. The specific disclaimers,which *
// * govern, are listed with their locations in: *
// * http://cern.ch/geant4/license *
// * *
// * 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. *
// * *
// * This code implementation is the intellectual property of the *
// * GEANT4 collaboration. *
// * By copying, distributing or modifying the Program (or any work *
// * based on the Program) you indicate your acceptance of this *
// * statement, and all its terms. *
// ********************************************************************
//
//
// $Id: G4AtomicTransition.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
//
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
//
// History:
// -----------
// 16 Sept 2001 Modofied according to a design iteration in the
// LowEnergy category
//
// -------------------------------------------------------------------
// Class description:
// Low Energy Electromagnetic Physics, a data container
// Further documentation available from http://www.ge.infn.it/geant4/lowE
// -------------------------------------------------------------------
#ifndef G4AtomicTransition_h
#define G4AtomicTransition_h 1
#include "G4DataVector.hh"
#include "globals.hh"
#include <vector>
class G4AtomicTransition {
public:
G4AtomicTransition(G4int finalShell,
const std::vector<G4int>& ids,
const G4DataVector& energies,
const G4DataVector& probabilities);
~G4AtomicTransition();
// All the data stored and provided by this class are relative to a
// given vacancy, whose identity is provided by the FinalShellId() method,
// in an atom of a given material
// Returns the identities of the originating shells for the transitions
const std::vector<G4int>& OriginatingShellIds() const;
// Return the energies of the transitions
const G4DataVector& TransitionEnergies() const;
// Return the probabilities of the transitions
const G4DataVector& TransitionProbabilities() const;
// Return the identity if the vacancy
const G4int FinalShellId() const;
// Given the index of the originating shells returns its identity
G4int OriginatingShellId(G4int index) const;
// Given the index of the originating shells returns the energy
// of the transition starting from it
G4double TransitionEnergy(G4int index) const;
// Given the index of the originating shells returns the probability
// of the transition starting from it
G4double TransitionProbability(G4int index) const;
private:
G4int finalShellId;
std::vector<G4int> originatingShellIds;
G4DataVector transitionEnergies;
G4DataVector transitionProbabilities;
};
#endif
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicTransitionManager.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4AugerData.hh
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// Author: Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
//
@@ -85,7 +85,7 @@ public:
// returns the id of the shell in wich the transition electron arrives
const G4int FinalShellId() const;
G4int FinalShellId() const;
// Returns the id of the shell from wich come the auger electron , given the shell
// from wich the transition electron comes from and the index number.
@@ -22,7 +22,7 @@
//
//
// $Id: G4BremsstrahlungParameters.hh,v 1.9 2003/06/16 16:59:39 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// V. Ivanchenko (Vladimir.Ivantchenko@cern.ch)
@@ -22,7 +22,7 @@
//
//
// $Id: G4CompositeEMDataSet.hh,v 1.5 2003/06/16 16:59:40 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4CrossSectionHandler.hh,v 1.8 2003/06/16 16:59:41 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4EMDataSet.hh,v 1.4 2003/05/20 20:03:34 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4FluoTransition.hh,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-01 $
//
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
//
@@ -70,7 +70,7 @@ public:
const G4DataVector& TransitionProbabilities() const;
// Return the identity if the vacancy
const G4int FinalShellId() const;
G4int FinalShellId() const;
// Given the index of the originating shells returns its identity
G4int OriginatingShellId(G4int index) const;
@@ -36,6 +36,7 @@
//
// Modifications:
// 02 Jun 2003 First implementation acording with new design
// 07 Nov 2003 Lockup tables for fast initialization
//
//
// Class Description:
@@ -89,11 +90,11 @@ private:
G4double b;
G4int index_min, index_max;
G4double* Atab;
G4double* ctab;
G4double kmin, Ekmin;
G4double dtheta;
G4double kcut;
static G4double Atab[320];
static G4double ctab[320];
// hide assignment operator
G4Generator2BN & operator=(const G4Generator2BN &right);
@@ -22,7 +22,7 @@
//
//
// $Id: G4LinInterpolation.hh,v 1.2 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4LogLogInterpolation.hh,v 1.3 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,8 +22,8 @@
//
//
// -------------------------------------------------------------------
// $Id: G4LowEnergyBremsstrahlung.hh,v 1.35 2003/11/06 12:25:05 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4LowEnergyBremsstrahlung.hh,v 1.36 2003/11/10 17:50:46 trindade Exp $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// Author: A. Forti
//
@@ -111,6 +111,8 @@ private:
G4VEnergySpectrum* energySpectrum;
G4DataVector energyBins;
G4VBremAngularDistribution* angularDistribution;
G4VBremAngularDistribution* TsaiAngularDistribution;
G4String generatorName;
// Lower limit for generation of gamma in this model
G4DataVector cutForSecondaryPhotons;
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4LowEnergyCompton.hh,v 1.20 2003/12/09 15:36:37 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyGammaConversion.hh,v 1.14 2001/10/08 07:45:33 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -22,7 +22,7 @@
//
// -------------------------------------------------------------------
// $Id: G4LowEnergyIonisation.hh,v 1.40 2003/06/16 16:59:44 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: A. Forti
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyPhotoElectric.hh,v 1.25 2002/06/01 03:14:18 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyPolarizedCompton.hh,v 1.8 2002/05/31 18:11:45 flongo Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// ------------------------------------------------------------
// GEANT 4 class header file
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyRayleigh.hh,v 1.15 2001/10/08 07:45:35 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
//
//
@@ -23,7 +23,7 @@
//
// -------------------------------------------------------------------
// $Id: G4PenelopeBremsstrahlung.hh,v 1.7 2003/11/11 17:18:30 pandola Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// Author: L.Pandola
//
@@ -23,7 +23,7 @@
//
// -------------------------------------------------------------------
// $Id: G4PenelopeBremsstrahlungAngular.hh,v 1.2 2003/11/07 12:26:08 pandola Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// Author: L.Pandola
//
@@ -23,7 +23,7 @@
//
// -------------------------------------------------------------------
// $Id: G4PenelopeBremsstrahlungContinuous.hh,v 1.2 2003/03/19 10:28:28 pandola Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: L.Pandola
//
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4PenelopeCompton.hh,v 1.8 2003/12/09 15:36:38 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// Author: Luciano Pandola
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4PenelopeGammaConversion.hh,v 1.1 2002/12/06 16:25:00 pandola Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: L. Pandola
//
@@ -27,6 +27,7 @@
// History:
// -----------
// 17 Feb 2003 LP Created
// 17 Dec 2003 LP Bug fixed (removed memory leak)
//
// -------------------------------------------------------------------
// Class description:
@@ -46,7 +47,7 @@ public:
G4PenelopeInterpolator(G4double* pX, G4double* pY, G4int nbOfData, G4double S1=0, G4double SN=0);
~G4PenelopeInterpolator(){;}
~G4PenelopeInterpolator();
G4double CubicSplineInterpolation(G4double xx);
G4double FirstDerivative(G4double xx);
@@ -22,7 +22,7 @@
//
// -------------------------------------------------------------------
// $Id: G4PenelopeIonisation.hh,v 1.4 2003/07/09 12:36:46 pandola Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// Author: L. Pandola
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4PenelopePhotoElectric.hh,v 1.2 2003/02/23 23:42:52 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: L.Pandola
//
@@ -21,15 +21,16 @@
// ********************************************************************
//
//
// $Id: G4PenelopeRayleigh.hh,v 1.3 2003/03/13 16:53:50 pandola Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4PenelopeRayleigh.hh,v 1.4 2004/03/18 13:40:13 pandola Exp $
// GEANT4 tag $Name: geant4-06-01 $
//
// Author: Luciano Pandola
//
// History:
// -----------
// 01 Dec 2002 L.Pandola 1st implementation
// 14 Feb 2003 MG Pia Removed data member material
// 01 Dec 2002 L.Pandola 1st implementation
// 14 Feb 2003 MG Pia Removed data member material
// 18 Mar 2004 M.Mendenhall Introduced SamplingTable
//
// -------------------------------------------------------------------
// Class description:
@@ -54,7 +55,10 @@ class G4DataVector;
class G4PenelopeRayleigh : public G4VDiscreteProcess {
public:
typedef std::map<const G4Material *,std::pair<G4DataVector *, G4DataVector *> >
SamplingTablePair;
G4PenelopeRayleigh(const G4String& processName ="PenRayleigh");
~G4PenelopeRayleigh();
@@ -97,6 +101,8 @@ private:
G4DataVector* samplingFunction_x;
G4DataVector* samplingFunction_y;
SamplingTablePair SamplingTables;
G4double samplingConstant;
G4double facte; //cross section factor
@@ -22,7 +22,7 @@
//
//
// $Id: G4RangeNoTest.hh,v 1.3 2003/05/20 20:03:34 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4RangeTest.hh,v 1.3 2003/01/22 18:42:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4SemiLogInterpolation.hh,v 1.3 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4ShellData.hh,v 1.3 2003/06/16 16:59:48 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4ShellEMDataSet.hh,v 1.5 2003/06/16 16:59:49 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VCrossSectionHandler.hh,v 1.13 2003/06/16 16:59:51 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VDataSetAlgorithm.hh,v 1.6 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VEMDataSet.hh,v 1.6 2002/05/28 09:15:26 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VRangeTest.hh,v 1.2 2003/01/22 18:42:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VeLowEnergyLoss.hh,v 1.8 2003/01/22 18:42:24 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// 3.4.2000 Veronique Lefebure:
// Move utils/include/G4VEnergyLoss.hh to
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eBremsstrahlungSpectrum.hh,v 1.7 2003/12/09 15:36:39 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// -------------------------------------------------------------------
//
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eIonisationCrossSectionHandler.hh,v 1.5 2003/06/16 16:59:53 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -------------------------------------------------------------------
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4eIonisationParameters.hh,v 1.7 2003/06/16 16:59:54 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// V. Ivanchenko
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eIonisationSpectrum.hh,v 1.6 2003/12/09 15:36:40 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// -------------------------------------------------------------------
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4eLowEnergyLoss.hh,v 1.12 2003/06/16 16:59:55 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -------------------------------------------------------------------
@@ -22,7 +22,7 @@
//
//
// $Id: G4eLowEnergyLoss.icc,v 1.7 2003/06/16 16:59:56 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// ---------------------------------------------------------------
// GEANT 4 class inlined methods file
@@ -22,7 +22,7 @@
//
//
// $Id: G4hLowEnergyLoss.hh,v 1.15 2003/04/18 17:50:32 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// $Id:
// ------------------------------------------------------------
@@ -22,7 +22,7 @@
//
//
// $Id: G4hLowEnergyLoss.icc,v 1.2 2001/07/11 10:02:40 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// $Id:
// ---------------------------------------------------------------
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicDeexcitation.cc,v 1.11
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -110,7 +110,7 @@ do
return vectorOfParticles;
}
const G4int G4AtomicDeexcitation::SelectTypeOfTransition(G4int Z, G4int shellId)
G4int G4AtomicDeexcitation::SelectTypeOfTransition(G4int Z, G4int shellId)
{
if (shellId <=0 )
{G4Exception("G4AtomicDeexcitation: zero or negative shellId");}
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicShell.cc,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -22,7 +22,7 @@
//
//
// $Id: G4AtomicTransitionManager.cc,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Authors: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
// Alfonso Mantero (Alfonso.Mantero@ge.infn.it)
@@ -109,7 +109,7 @@ const G4DataVector* G4AugerTransition::AugerTransitionProbabilities(G4int startS
return dataSet;
}
const G4int G4AugerTransition::FinalShellId() const
G4int G4AugerTransition::FinalShellId() const
{
return finalShellId;
}
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4BremsstrahlungCrossSectionHandler.cc,v 1.8 2003/06/16 17:00:03 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -------------------------------------------------------------------
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4BremsstrahlungParameters.cc,v 1.17 2003/06/16 17:00:04 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
// V.Ivanchenko (Vladimir.Ivantchenko@cern.ch)
@@ -22,7 +22,7 @@
//
//
// $Id: G4CompositeEMDataSet.cc,v 1.7 2003/06/16 17:00:05 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4CrossSectionHandler.cc,v 1.16 2003/06/16 17:00:06 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4EMDataSet.cc,v 1.9 2003/06/16 17:00:07 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4FluoTransition.cc,v 1.2 ????
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-01 $
//
// Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
//
@@ -63,7 +63,7 @@ const G4DataVector& G4FluoTransition::TransitionProbabilities() const
return transitionProbabilities;
}
const G4int G4FluoTransition::FinalShellId() const
G4int G4FluoTransition::FinalShellId() const
{
return finalShellId;
}
@@ -37,6 +37,7 @@
// Modifications:
// 21 Jun 2003 First implementation acording with new design
// 05 Nov 2003 MGP Fixed compilation warning
// 14 Mar 2004 Code optimization
//
// Class Description:
//
@@ -52,6 +53,99 @@
#include "Randomize.hh"
//
G4double G4Generator2BN::Atab[320] =
{ 0.0264767, 0.0260006, 0.0257112, 0.0252475, 0.024792, 0.0243443, 0.0240726, 0.0236367,
0.023209, 0.0227892, 0.0225362, 0.0221284, 0.0217282,0.0214894, 0.0211005, 0.0207189,
0.0204935, 0.0201227, 0.0197588, 0.019546, 0.0191923,0.0188454, 0.0186445, 0.0183072,
0.0179763, 0.0177866, 0.0174649, 0.0172828, 0.0169702,0.0166634, 0.0164915, 0.0161933,
0.0160283, 0.0157384, 0.0155801, 0.0152981, 0.0151463,0.0148721, 0.0147263, 0.0144598,
0.01432, 0.0140607, 0.0139267, 0.0136744, 0.0135459,0.0133005, 0.0131773, 0.0129385,
0.0128205, 0.0125881, 0.012475, 0.0122488, 0.0121406,0.0119204, 0.0118167, 0.0117158,
0.0115032, 0.0114067, 0.0111995, 0.0111072, 0.0110175,0.0108173, 0.0107316, 0.0105365,
0.0104547, 0.0102646, 0.0101865, 0.010111, 0.00992684,0.0098548,0.00967532,0.00960671,
0.00943171,0.00936643,0.00930328,0.0091337, 0.00907372,0.00890831,0.00885141,0.00869003,
0.00863611,0.00858428,0.00842757,0.00837854,0.0082256,0.00817931,0.00803,0.00798639,
0.00784058,0.00779958,0.00776046,0.00761866,0.00758201,0.00744346,0.00740928,0.00727384,
0.00724201,0.00710969,0.00708004,0.00695074,0.00692333,0.00679688,0.00677166,0.00664801,
0.00662484,0.00650396,0.00648286,0.00636458,0.00634545,0.00622977,0.00621258,0.00609936,
0.00608412,0.00597331,0.00595991,0.00585143,0.00583988,0.0057337,0.0057239,0.00561991,
0.0056119, 0.00551005,0.00550377,0.00540399,0.00539938,0.00530162,0.00529872,0.00520292,
0.0051091, 0.00510777,0.00501582,0.00501608,0.00492594,0.00492781,0.00483942,0.0048429,
0.00475622,0.00476127,0.00467625,0.00468287,0.00459947,0.00451785,0.00452581,0.00444573,
0.00445522,0.00437664,0.00438768,0.00431057,0.00432316,0.00424745,0.0042616,0.00418726,
0.004203, 0.00413, 0.00405869,0.00407563,0.00400561,0.00402414,0.00395536,0.00397553,
0.00390795,0.00392975,0.00386339,0.00379862,0.00382167,0.00375805,0.00378276,0.00372031,
0.00374678,0.00368538,0.00371363,0.00365335,0.00359463,0.0036242, 0.00356653,0.003598,
0.00354139,0.00357481,0.00351921,0.00355464,0.00350005,0.0034471,0.00348403,0.00343208,
0.0034712, 0.00342026,0.00346165,0.00341172,0.00345548,0.00340657,0.00335944,0.00340491,
0.00335885,0.00340692,0.00336191,0.00341273,0.00336879,0.00342249,0.00337962,0.00333889,
0.00339463,0.00335506,0.00341401,0.00337558,0.00343797,0.00340067,0.00336584,0.00343059,
0.0033969, 0.00346557,0.00343302,0.00350594,0.00347448,0.00344563,0.00352163,0.00349383,
0.00357485,0.00354807,0.00352395,0.00360885,0.00358571,0.00367661,0.00365446,0.00375194,
0.00373078,0.00371234,0.00381532,0.00379787,0.00390882,0.00389241,0.00387881,0.00399675,
0.00398425,0.00411183,0.00410042,0.00409197,0.00422843,0.00422123,0.00436974,0.0043637,
0.00436082,0.00452075,0.00451934,0.00452125,0.00469406,0.00469756,0.00488741,0.00489221,
0.00490102,0.00510782,0.00511801,0.00513271,0.0053589, 0.00537524,0.00562643,0.00564452,
0.0056677, 0.00594482,0.00596999,0.0059999, 0.00630758,0.00634014,0.00637849,0.00672136,
0.00676236,0.00680914,0.00719407,0.0072439, 0.00730063,0.0077349, 0.00779494,0.00786293,
0.00835577,0.0084276, 0.00850759,0.00907162,0.00915592,0.00924925,0.00935226,0.00999779,
0.0101059, 0.0102249, 0.0109763, 0.0111003, 0.0112367, 0.0113862, 0.0122637, 0.0124196,
0.0125898, 0.0136311, 0.0138081, 0.0140011, 0.0142112, 0.0154536, 0.0156723, 0.0159099,
0.016168, 0.0176664, 0.0179339, 0.0182246, 0.0185396, 0.020381, 0.0207026, 0.0210558,
0.0214374, 0.0237377, 0.0241275, 0.0245528, 0.0250106, 0.0255038, 0.0284158, 0.0289213,
0.0294621, 0.0300526, 0.0338619, 0.0344537, 0.0351108, 0.0358099, 0.036554, 0.0416399
};
G4double G4Generator2BN::ctab[320] =
{ 0.482253, 0.482253, 0.489021, 0.489021, 0.489021, 0.489021, 0.495933,
0.495933, 0.495933, 0.495933, 0.502993, 0.502993, 0.502993, 0.510204,
0.510204, 0.510204, 0.517572, 0.517572, 0.517572, 0.5251, 0.5251,
0.5251, 0.532793, 0.532793, 0.532793, 0.540657, 0.540657, 0.548697,
0.548697, 0.548697, 0.556917, 0.556917, 0.565323, 0.565323, 0.573921,
0.573921, 0.582717, 0.582717, 0.591716, 0.591716, 0.600925, 0.600925,
0.610352, 0.610352, 0.620001, 0.620001, 0.629882, 0.629882, 0.64,
0.64, 0.650364, 0.650364, 0.660982, 0.660982, 0.671862, 0.683013,
0.683013, 0.694444, 0.694444, 0.706165, 0.718184, 0.718184, 0.730514,
0.730514, 0.743163, 0.743163, 0.756144, 0.769468, 0.769468, 0.783147,
0.783147, 0.797194, 0.797194, 0.811622, 0.826446, 0.826446, 0.84168,
0.84168, 0.857339, 0.857339, 0.873439, 0.889996, 0.889996, 0.907029,
0.907029, 0.924556, 0.924556, 0.942596, 0.942596, 0.961169, 0.980296,
0.980296, 1, 1, 1.0203, 1.0203, 1.04123, 1.04123,
1.06281, 1.06281, 1.08507, 1.08507, 1.10803, 1.10803, 1.13173,
1.13173, 1.1562, 1.1562, 1.18147, 1.18147, 1.20758, 1.20758,
1.23457, 1.23457, 1.26247, 1.26247, 1.29132, 1.29132, 1.32118,
1.32118, 1.35208, 1.35208, 1.38408, 1.38408, 1.41723, 1.41723,
1.45159, 1.45159, 1.45159, 1.48721, 1.48721, 1.52416, 1.52416,
1.5625, 1.5625, 1.60231, 1.60231, 1.64366, 1.64366, 1.68663,
1.68663, 1.68663, 1.7313, 1.7313, 1.77778, 1.77778, 1.82615,
1.82615, 1.87652, 1.87652, 1.92901, 1.92901, 1.98373, 1.98373,
1.98373, 2.04082, 2.04082, 2.1004, 2.1004, 2.16263, 2.16263,
2.22767, 2.22767, 2.22767, 2.29568, 2.29568, 2.36686, 2.36686,
2.44141, 2.44141, 2.51953, 2.51953, 2.51953, 2.60146, 2.60146,
2.68745, 2.68745, 2.77778, 2.77778, 2.87274, 2.87274, 2.87274,
2.97265, 2.97265, 3.07787, 3.07787, 3.18878, 3.18878, 3.30579,
3.30579, 3.30579, 3.42936, 3.42936, 3.55999, 3.55999, 3.69822,
3.69822, 3.84468, 3.84468, 3.84468, 4, 4, 4.16493,
4.16493, 4.34028, 4.34028, 4.34028, 4.52694, 4.52694, 4.7259,
4.7259, 4.93827, 4.93827, 4.93827, 5.16529, 5.16529, 5.40833,
5.40833, 5.40833, 5.66893, 5.66893, 5.94884, 5.94884, 6.25,
6.25, 6.25, 6.57462, 6.57462, 6.92521, 6.92521, 6.92521,
7.3046, 7.3046, 7.71605, 7.71605, 7.71605, 8.16327, 8.16327,
8.65052, 8.65052, 8.65052, 9.18274, 9.18274, 9.18274, 9.76562,
9.76562, 10.4058, 10.4058, 10.4058, 11.1111, 11.1111, 11.1111,
11.8906, 11.8906, 12.7551, 12.7551, 12.7551, 13.7174, 13.7174,
13.7174, 14.7929, 14.7929, 14.7929, 16, 16, 16,
17.3611, 17.3611, 17.3611, 18.9036, 18.9036, 18.9036, 20.6612,
20.6612, 20.6612, 22.6757, 22.6757, 22.6757, 22.6757, 25,
25, 25, 27.7008, 27.7008, 27.7008, 27.7008, 30.8642,
30.8642, 30.8642, 34.6021, 34.6021, 34.6021, 34.6021, 39.0625,
39.0625, 39.0625, 39.0625, 44.4444, 44.4444, 44.4444, 44.4444,
51.0204, 51.0204, 51.0204, 51.0204, 59.1716, 59.1716, 59.1716,
59.1716, 59.1716, 69.4444, 69.4444, 69.4444, 69.4444, 82.6446,
82.6446, 82.6446, 82.6446, 82.6446, 100
};
G4Generator2BN::G4Generator2BN(const G4String& name):G4VBremAngularDistribution(name)
{
b = 1.2;
@@ -66,23 +160,15 @@ G4Generator2BN::G4Generator2BN(const G4String& name):G4VBremAngularDistribution(
// Increment Theta value for surface interpolation
dtheta = 0.1*rad;
// Majorant Surface Values
Atab = new G4double[320];
ctab = new G4double[320];
// Construct Majorant Surface to 2BN cross-section
ConstructMajorantSurface();
// (we dont need this. Pre-calculated values are used instead due to performance issues
// ConstructMajorantSurface();
}
//
G4Generator2BN::~G4Generator2BN()
{
delete[] Atab;
delete[] ctab;
}
{;}
//
@@ -116,7 +202,7 @@ G4double G4Generator2BN::Calculatedsdkdt(G4double kout, G4double theta, G4double
// classic radius (in cm)
G4double r0 = 2.82E-13;
//squared classic radius (in barn)
G4double r02 = pow(r0,2)*1.0E+24;
G4double r02 = r0*r0*1.0E+24;
// Photon energy cannot be greater than electron kinetic energy
if(kout > (Eel-electron_mass_c2)){
@@ -133,29 +219,42 @@ G4double G4Generator2BN::Calculatedsdkdt(G4double kout, G4double theta, G4double
return dsdkdt_value;
}
G4double p0 = sqrt(E0*E0-1);
G4double p = sqrt(E*E-1);
G4double L = log((E*E0-1+p*p0)/(E*E0-1-p*p0));
G4double delta0 = E0 - p0*cos(theta);
G4double epsilon = log((E+p)/(E-p));
G4double Q = sqrt(pow(p0,2)+pow(k,2)-2*k*p0*cos(theta));
G4double Z2 = Z*Z;
G4double sintheta2 = sin(theta)*sin(theta);
G4double E02 = E0*E0;
G4double E2 = E*E;
G4double p02 = E0*E0-1;
G4double k2 = k*k;
G4double delta02 = delta0*delta0;
G4double delta04 = delta02* delta02;
G4double Q = sqrt(p02+k2-2*k*p0*cos(theta));
G4double Q2 = Q*Q;
G4double epsilonQ = log((Q+p)/(Q-p));
dsdkdt_value = pow(Z,2) * (r02/(8*M_PI*137)) * (1/k) * (p/p0) *
( (8 * (pow(sin (theta),2)*(2*pow(E0,2)+1))/(pow(p0,2)*pow(delta0,4))) -
((2*(5*pow(E0,2)+2*E*E0+3))/(pow(p0,2) * pow(delta0,2))) -
((2*(pow(p0,2)-pow(k,2)))/((pow(Q,2)*pow(delta0,2)))) +
((4*E)/(pow(p0,2)*delta0)) +
(L/(p*p0))*(
((4*E0*pow(sin(theta),2)*(3*k-pow(p0,2)*E))/(pow(p0,2)*pow(delta0,4))) +
((4*pow(E0,2)*(pow(E0,2)+pow(E,2)))/(pow(p0,2)*pow(delta0,2))) +
((2-2*(7*pow(E0,2)-3*E*E0+pow(E,2)))/(pow(p0,2)*pow(delta0,2))) +
(2*k*(pow(E0,2)+E*E0-1))/((pow(p0,2)*delta0))
) -
dsdkdt_value = Z2 * (r02/(8*M_PI*137)) * (1/k) * (p/p0) *
( (8 * (sintheta2*(2*E02+1))/(p02*delta04)) -
((2*(5*E02+2*E*E0+3))/(p02 * delta02)) -
((2*(p02-k2))/((Q2*delta02))) +
((4*E)/(p02*delta0)) +
(L/(p*p0))*(
((4*E0*sintheta2*(3*k-p02*E))/(p02*delta04)) +
((4*E02*(E02+E2))/(p02*delta02)) +
((2-2*(7*E02-3*E*E0+E2))/(p02*delta02)) +
(2*k*(E02+E*E0-1))/((p02*delta0))
) -
((4*epsilon)/(p*delta0)) +
((epsilonQ)/(p*Q))*
(4/pow(delta0,2)-(6*k/delta0)-(2*k*(pow(p0,2)-pow(k,2)))/(pow(Q,2)*delta0))
);
(4/delta02-(6*k/delta0)-(2*k*(p02-k2))/(Q2*delta0))
);
dsdkdt_value = dsdkdt_value*sin(theta);
return dsdkdt_value;
@@ -205,7 +304,7 @@ void G4Generator2BN::ConstructMajorantSurface()
c = 0;
A = 0;
}else{
c = 1/pow(thetamax,2);
c = 1/(thetamax*thetamax);
A = 2*sqrt(c)*dsmax/(pow(kmin,-b));
}
@@ -266,7 +365,8 @@ G4double G4Generator2BN::Generate2BN(G4double Ek, G4double k) const
G4double A2;
G4double A, c;
G4int trials, index;
G4int trials = 0;
G4int index;
// find table index
index = G4int(log10(Ek)*100) - index_min;
@@ -293,7 +393,7 @@ G4double G4Generator2BN::Generate2BN(G4double Ek, G4double k) const
// generate theta accordimg to theta/(1+c*pow(theta,2)
// Normalization constant
cte2 = 2*c/log(1+c*pow(M_PI,2));
cte2 = 2*c/log(1+c*M_PI*M_PI);
y = G4UniformRand();
t = sqrt((exp(2*c*y/cte2)-1)/c);
@@ -22,7 +22,7 @@
//
//
// $Id: G4LinInterpolation.cc,v 1.2 2002/05/28 09:20:19 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4LogLogInterpolation.cc,v 1.5 2003/06/25 14:24:12 gcosmo Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -20,8 +20,8 @@
// * statement, and all its terms. *
// ********************************************************************
//
// $Id: G4LowEnergyBremsstrahlung.cc,v 1.66 2003/11/06 12:53:04 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4LowEnergyBremsstrahlung.cc,v 1.68 2004/01/08 17:04:52 silvarod Exp $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// --------------------------------------------------------------
//
@@ -85,8 +85,10 @@ G4LowEnergyBremsstrahlung::G4LowEnergyBremsstrahlung(const G4String& nam)
{
cutForPhotons = 0.;
verboseLevel = 0;
generatorName = "tsai";
angularDistribution = new G4ModifiedTsai("TsaiGenerator"); // default generator
angularDistribution->PrintGeneratorInformation();
// angularDistribution->PrintGeneratorInformation();
TsaiAngularDistribution = new G4ModifiedTsai("TsaiGenerator");
}
/*
@@ -101,6 +103,8 @@ G4LowEnergyBremsstrahlung::G4LowEnergyBremsstrahlung(const G4String& nam, G4VBre
verboseLevel = 0;
angularDistribution->PrintGeneratorInformation();
TsaiAngularDistribution = new G4ModifiedTsai("TsaiGenerator");
}
*/
@@ -110,6 +114,7 @@ G4LowEnergyBremsstrahlung::~G4LowEnergyBremsstrahlung()
if(energySpectrum) delete energySpectrum;
if(theMeanFreePath) delete theMeanFreePath;
delete angularDistribution;
delete TsaiAngularDistribution;
energyBins.clear();
}
@@ -308,7 +313,13 @@ G4VParticleChange* G4LowEnergyBremsstrahlung::PostStepDoIt(const G4Track& track,
G4double tGamma = energySpectrum->SampleEnergy(Z, tCut, kineticEnergy, kineticEnergy);
G4double totalEnergy = kineticEnergy + electron_mass_c2;
G4double finalEnergy = kineticEnergy - tGamma; // electron/positron final energy
G4double theta = angularDistribution->PolarAngle(kineticEnergy,finalEnergy,Z);
G4double theta = 0;
if((kineticEnergy < 1*MeV && kineticEnergy > 1*keV && generatorName == "2bn")){
theta = angularDistribution->PolarAngle(kineticEnergy,finalEnergy,Z);
}else{
theta = TsaiAngularDistribution->PolarAngle(kineticEnergy,finalEnergy,Z);
}
G4double phi = twopi * G4UniformRand();
G4double dirZ = cos(theta);
@@ -396,16 +407,19 @@ void G4LowEnergyBremsstrahlung::SetAngularGenerator(const G4String& name)
{
delete angularDistribution;
angularDistribution = new G4ModifiedTsai("TsaiGenerator");
generatorName = name;
}
else if (name == "2bn")
{
delete angularDistribution;
angularDistribution = new G4Generator2BN("2BNGenerator");
generatorName = name;
}
else if (name == "2bs")
{
delete angularDistribution;
angularDistribution = new G4Generator2BS("2BSGenerator");
generatorName = name;
}
else
{
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4LowEnergyCompton.cc,v 1.37 2003/05/20 20:16:13 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -23,7 +23,7 @@
// --------------------------------------------------------------------
///
// $Id: G4LowEnergyGammaConversion.cc,v 1.32 2003/06/16 17:00:11 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
//
// --------------------------------------------------------------
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4LowEnergyIonisation.cc,v 1.95 2003/06/16 17:00:12 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// --------------------------------------------------------------
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyPhotoElectric.cc,v 1.51 2003/06/16 17:00:15 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -22,7 +22,7 @@
//
//
// $Id: G4LowEnergyPolarizedCompton.cc,v 1.17 2003/11/18 16:39:21 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// ------------------------------------------------------------
// GEANT 4 class implementation file
@@ -23,7 +23,7 @@
// --------------------------------------------------------------------
//
// $Id: G4LowEnergyRayleigh.cc,v 1.33 2003/05/20 20:16:13 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: A. Forti
// Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
@@ -25,6 +25,7 @@
// History:
// --------
// 02 Jul 2003 L.Pandola First implementation
// 16 Mar 2004 L.Pandola Removed unnecessary calls to pow(a,b)
#include "G4PenelopeAnnihilation.hh"
#include "Randomize.hh"
@@ -126,10 +127,10 @@ G4double G4PenelopeAnnihilation::calculateCrossSectionPerElectron
//Heitler dcs formula for annihilation with free electrons at rest
G4double crossSection=0.0;
G4double gamma = 1.0+std::max(ene,1.0*eV)/electron_mass_c2;
G4double gamma2 = pow(gamma,2);
G4double gamma2 = gamma*gamma;
G4double f2 = gamma2-1.0;
G4double f1 = sqrt(f2);
G4double pielr2 = pi*pow(classic_electr_radius,2);
G4double pielr2 = pi*classic_electr_radius*classic_electr_radius;
crossSection = pielr2*((gamma2+4.0*gamma+1.0)*log(gamma+f1)/f2
- (gamma+3.0)/f1)/(gamma+1.0);
return crossSection;
@@ -157,7 +158,7 @@ G4VParticleChange* G4PenelopeAnnihilation::PostStepDoIt(const G4Track& aTrack,
G4double ani = 1.0+gamma;
G4double chimin = 1.0/(ani+gamma21);
G4double rchi = (1.0-chimin)/chimin;
G4double gt0 = pow(ani,2)-2.0;
G4double gt0 = ani*ani-2.0;
G4double epsilon=0.0, reject=0.0, test=0.0;
do{
epsilon = chimin*pow(rchi,G4UniformRand());
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4PenelopeBremsstrahlung.cc,v 1.14 2003/11/18 17:29:43 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// --------------------------------------------------------------
//
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4PenelopeBremsstrahlungAngular.cc,v 1.5 2003/11/07 12:25:35 pandola Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-06-00-patch-01 $
//
// --------------------------------------------------------------
//
@@ -20,8 +20,8 @@
// * statement, and all its terms. *
// ********************************************************************
//
// $Id: G4PenelopeBremsstrahlungContinuous.cc,v 1.5 2003/06/16 17:00:18 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4PenelopeBremsstrahlungContinuous.cc,v 1.6 2004/03/17 08:57:26 pandola Exp $
// GEANT4 tag $Name: geant4-06-01 $
//
// --------------------------------------------------------------
//
@@ -35,6 +35,7 @@
// 20 Feb 2003 L. Pandola 1st implementation
// 17 Mar 2003 L. Pandola Added the correction for positrons
// 19 Mar 2003 L. Pandola Bugs fixed
// 17 Mar 2004 L. Pandola Removed unnecessary calls to pow(a,b)
//----------------------------------------------------------------
#include "G4PenelopeBremsstrahlungContinuous.hh"
@@ -135,7 +136,7 @@ void G4PenelopeBremsstrahlungContinuous::PrepareInterpolationTable()
delete interpolator;
G4double Fact = (millibarn/cm2)*(Energies[i]+electron_mass_c2)*(1.0/fine_structure_const)/
(pow(classic_electr_radius,2)*(Energies[i]+2.0*electron_mass_c2));
(classic_electr_radius*classic_electr_radius*(Energies[i]+2.0*electron_mass_c2));
G4double Normalization = TotalCS[i]/(Rsum*Fact);
G4double TST = abs(Normalization-100.0);
if (TST > 1.0) {
@@ -209,10 +210,8 @@ G4double G4PenelopeBremsstrahlungContinuous::CalculateStopping(G4double e1)
G4double Xek = Xe-Ke;
//Global x-section factor
G4double Fact=pow((G4double) Zmat,2)*(pow(e1+electron_mass_c2,2)/(e1*(e1+2.0*electron_mass_c2)))
*(millibarn/cm2);
//G4cout << "Particella: " << partName << ";Z: " << Zmat << ";Energia: " << e1 << "; fattore di correzione: "
// << PositronCorrection(e1) << G4endl;
G4double Fact=Zmat*Zmat*(e1+electron_mass_c2)*(e1+electron_mass_c2)/(e1*(e1+2.0*electron_mass_c2))
*(millibarn/cm2);
Fact=Fact*PositronCorrection(e1);
//Moments of the scaled bremss x-section
@@ -263,7 +262,7 @@ G4double G4PenelopeBremsstrahlungContinuous::PositronCorrection(G4double en)
return 1.0; //no correction for electrons
}
else if (partName == "e+"){
T=log(1+((1e6*en)/(pow( (G4double) Zmat,2)*electron_mass_c2)));
T=log(1+((1e6*en)/(Zmat*Zmat*electron_mass_c2)));
for (G4int i=0;i<7;i++){
correct += Coeff[i]*pow(T,i+1);
}
@@ -20,8 +20,8 @@
// * statement, and all its terms. *
// ********************************************************************
//
// $Id: G4PenelopeCompton.cc,v 1.16 2003/06/16 17:00:19 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4PenelopeCompton.cc,v 1.19 2004/03/23 12:44:22 gcosmo Exp $
// GEANT4 tag $Name: geant4-06-01 $
//
// Author: Luciano Pandola
//
@@ -37,6 +37,9 @@
// 20 Mar 2003 L.Pandola ReadData() changed (performance improved)
// 26 Mar 2003 L.Pandola Added fluorescence
// 24 May 2003 MGP Removed memory leak
// 09 Mar 2004 L.Pandola Bug fixed in the generation of final state
// (bug report # 585)
// 17 Mar 2004 L.Pandola Removed unnecessary calls to pow(a,b)
//
// -------------------------------------------------------------------
@@ -108,11 +111,17 @@ G4PenelopeCompton::~G4PenelopeCompton()
{
delete meanFreePathTable;
delete rangeTest;
for (size_t i1=0;i1<matCrossSections->size();i1++)
{
delete (*matCrossSections)[i1];
}
delete matCrossSections;
for (size_t i=0; i<ionizationEnergy->size(); i++)
for (size_t i2=0; i2<ionizationEnergy->size(); i2++)
{
delete (*ionizationEnergy)[i];
delete (*ionizationEnergy)[i2];
}
delete ionizationEnergy;
@@ -186,6 +195,8 @@ void G4PenelopeCompton::BuildPhysicsTable(const G4ParticleDefinition& )
matCrossSections->push_back(setForMat);
}
//Build the mean free path table!
G4double matCS = 0.0;
G4VEMDataSet* matCrossSet = new G4CompositeEMDataSet(algo,1.,1.);
G4VEMDataSet* materialSet = new G4CompositeEMDataSet(algo,1.,1.);
@@ -311,14 +322,14 @@ G4VParticleChange* G4PenelopeCompton::PostStepDoIt(const G4Track& aTrack,
harFunc = (*((*hartreeFunction)[Z-1]))[i]/fine_structure_const;
occupNb = (G4int) (*((*occupationNumber)[Z-1]))[i];
pzomc = harFunc*(aux-electron_mass_c2*ionEnergy)/
(electron_mass_c2*sqrt(2.0*aux+pow(ionEnergy,2)));
(electron_mass_c2*sqrt(2.0*aux+ionEnergy*ionEnergy));
if (pzomc > 0)
{
rni = 1.0-0.5*exp(0.5-pow(sqrt(0.5)+sqrt(2.0)*pzomc,2));
rni = 1.0-0.5*exp(0.5-(sqrt(0.5)+sqrt(2.0)*pzomc)*(sqrt(0.5)+sqrt(2.0)*pzomc));
}
else
{
rni = 0.5*exp(0.5-pow(sqrt(0.5)-sqrt(2.0)*pzomc,2));
rni = 0.5*exp(0.5-(sqrt(0.5)-sqrt(2.0)*pzomc)*(sqrt(0.5)-sqrt(2.0)*pzomc));
}
s0 = s0 + occupNb*rni;
}
@@ -347,14 +358,14 @@ G4VParticleChange* G4PenelopeCompton::PostStepDoIt(const G4Track& aTrack,
harFunc = (*((*hartreeFunction)[Z-1]))[i]/fine_structure_const;
occupNb = (G4int) (*((*occupationNumber)[Z-1]))[i];
pzomc = harFunc*(aux-electron_mass_c2*ionEnergy)/
(electron_mass_c2*sqrt(2.0*aux+pow(ionEnergy,2)));
(electron_mass_c2*sqrt(2.0*aux+ionEnergy*ionEnergy));
if (pzomc > 0)
{
rn[i] = 1.0-0.5*exp(0.5-pow(sqrt(0.5)+sqrt(2.0)*pzomc,2));
rn[i] = 1.0-0.5*exp(0.5-(sqrt(0.5)+sqrt(2.0)*pzomc)*(sqrt(0.5)+sqrt(2.0)*pzomc));
}
else
{
rn[i] = 0.5*exp(0.5-pow(sqrt(0.5)-sqrt(2.0)*pzomc,2));
rn[i] = 0.5*exp(0.5-(sqrt(0.5)-sqrt(2.0)*pzomc)*(sqrt(0.5)-sqrt(2.0)*pzomc));
}
S = S + occupNb*rn[i];
pac[i] = S;
@@ -409,7 +420,7 @@ G4VParticleChange* G4PenelopeCompton::PostStepDoIt(const G4Track& aTrack,
}while ((fpzmax*G4UniformRand())>fpz);
//Energy of the scattered photon
G4double T = pow(pzomc,2);
G4double T = pzomc*pzomc;
G4double b1 = 1.0-T*tau*tau;
G4double b2 = 1.0-T*tau*cosTheta;
if (pzomc > 0.0)
@@ -423,7 +434,7 @@ G4VParticleChange* G4PenelopeCompton::PostStepDoIt(const G4Track& aTrack,
}
G4double sinTheta = sqrt(1-pow(cosTheta,2));
G4double sinTheta = sqrt(1-cosTheta*cosTheta);
G4double phi = twopi * G4UniformRand() ;
G4double dirx = sinTheta * cos(phi);
G4double diry = sinTheta * sin(phi);
@@ -453,7 +464,7 @@ G4VParticleChange* G4PenelopeCompton::PostStepDoIt(const G4Track& aTrack,
G4double diffEnergy = photonEnergy0*(1-epsilon);
ionEnergy = (*((*ionizationEnergy)[Z-1]))[iosc];
//G4double eKineticEnergy = diffEnergy - ionEnergy;
G4double Q2 = pow(photonEnergy0,2)+photonEnergy1*(photonEnergy1-2.0*photonEnergy0*cosTheta);
G4double Q2 = photonEnergy0*photonEnergy0+photonEnergy1*(photonEnergy1-2.0*photonEnergy0*cosTheta);
G4double cosThetaE; //scattering angle for the electron
if (Q2 > 1.0e-12)
{
@@ -463,7 +474,7 @@ G4VParticleChange* G4PenelopeCompton::PostStepDoIt(const G4Track& aTrack,
{
cosThetaE = 1.0;
}
G4double sinThetaE = sqrt(1-pow(cosThetaE,2));
G4double sinThetaE = sqrt(1-cosThetaE*cosThetaE);
@@ -527,7 +538,7 @@ G4VParticleChange* G4PenelopeCompton::PostStepDoIt(const G4Track& aTrack,
G4double yEl = sinThetaE * sin(phi+pi);
G4double zEl = cosThetaE;
G4ThreeVector eDirection(xEl,yEl,zEl); //electron direction
eDirection.rotateUz(photonDirection0);
electron = new G4DynamicParticle (G4Electron::Electron(),
eDirection,eKineticEnergy) ;
nbOfSecondaries++;
@@ -693,23 +704,23 @@ G4double G4PenelopeCompton::DifferentialCrossSection(G4double cosTheta)
if (energy > ionEnergy)
{
G4double aux = energy * (energy-ionEnergy)*cdt1;
Pzimax = (aux - electron_mass_c2*ionEnergy)/(electron_mass_c2*sqrt(2*aux+pow(ionEnergy,2)));
Pzimax = (aux - electron_mass_c2*ionEnergy)/(electron_mass_c2*sqrt(2*aux+ionEnergy*ionEnergy));
harFunc = (*((*hartreeFunction)[Z-1]))[i]/fine_structure_const;
occupNb = (G4int) (*((*occupationNumber)[Z-1]))[i];
x = harFunc*Pzimax;
if (x > 0)
{
siap = 1.0-0.5*exp(k12-pow((k1+k2*x),2));
siap = 1.0-0.5*exp(k12-(k1+k2*x)*(k1+k2*x));
}
else
{
siap = 0.5*exp(k12-pow((k1-k2*x),2));
siap = 0.5*exp(k12-(k1-k2*x)*(k1-k2*x));
}
sia = sia + occupNb*siap; //sum of all contributions;
}
}
XKN = EOEC+ECOE-1+cosTheta*cosTheta;
diffCS = pi*pow(classic_electr_radius,2)*pow(ECOE,2)*XKN*sia;
diffCS = pi*classic_electr_radius*classic_electr_radius*ECOE*ECOE*XKN*sia;
return diffCS;
}
@@ -35,6 +35,7 @@
// 13 Mar 2003 L.Pandola Code "cleaned"
// 25 Mar 2003 L.Pandola Changed the name of the database file to read
// 24 Apr 2003 V.Ivanchenko Cut per region mfpt
// 17 Mar 2004 L.Pandola Removed unnecessary calls to pow(a,b)
// --------------------------------------------------------------
#include "G4PenelopeGammaConversion.hh"
@@ -326,8 +327,13 @@ G4double G4PenelopeGammaConversion::CoulombCorrection(G4double a)
{
G4double fc=0;
G4double b[7] = {0.202059,-0.03693,0.00835,-0.00201,0.00049,-0.00012,0.00003};
fc = ((1.0/(1.0+a*a))+b[0]+b[1]*pow(a,2)+b[2]*pow(a,4)+b[3]*pow(a,6)+b[4]*pow(a,8)+b[5]*pow(a,10)+b[6]*pow(a,12));
fc=pow(a,2)*fc;
G4double aSquared = a*a;
G4double aFourth = aSquared*aSquared;
G4double aEighth = aFourth*aFourth;
fc = ((1.0/(1.0+a*a))+b[0]+b[1]*aSquared+b[2]*aFourth+b[3]*(aSquared*aFourth)+
b[4]*aEighth+b[5]*(aEighth*aSquared)+b[6]*(aEighth*aFourth));
fc=aSquared*fc;
return fc;
}
@@ -336,8 +342,9 @@ G4double G4PenelopeGammaConversion::LowEnergyCorrection(G4double a,G4double eki)
G4double f0=0,t=0;
G4double b[12] = {-1.744,-12.10,11.18,8.523,73.26,-41.41,-13.52,-121.1,94.41,8.946,62.05,-63.41};
t=sqrt(2.0*eki);
f0=(b[0]+b[1]*a+b[2]*a*a)*t+(b[3]+b[4]*a+b[5]*a*a)*pow(t,2)+(b[6]+b[7]*a+b[8]*a*a)*pow(t,3)+
(b[9]+b[10]*a+b[11]*a*a)*pow(t,4);
G4double tSq = t*t;
f0=(b[0]+b[1]*a+b[2]*a*a)*t+(b[3]+b[4]*a+b[5]*a*a)*(tSq)+(b[6]+b[7]*a+b[8]*a*a)*(tSq*t)+
(b[9]+b[10]*a+b[11]*a*a)*(tSq*tSq);
return f0;
}
@@ -27,6 +27,8 @@
// History:
// -----------
// 17 Feb 2003 LP Created
// 17 Dec 2003 LP Removed memory leak
// 17 Mar 2004 LP Removed unnecessary calls to pow(a,b)
//
// -------------------------------------------------------------------
@@ -97,15 +99,20 @@ G4PenelopeInterpolator::G4PenelopeInterpolator(G4double* pX,G4double* pY,G4int n
G4double SI1=S1;
G4double SI=0,H=0,HI=0;
G4double store=0;
G4double help1=0;
G4double help2=0;
for (i=0;i<N1;i++){
SI=SI1;
SI1=D[i+1];
H=A[i];
HI=1.0/H;
store=HI*(SI*pow(pX[i+1],3)-SI1*pow(pX[i],3))/6.0+HI*(pY[i]*pX[i+1]-pY[i+1]*pX[i])+
help1 = pX[i+1]*pX[i+1]*pX[i+1];
help2 = pX[i]*pX[i]*pX[i];
store=HI*(SI*help1-SI1*help2)/6.0+HI*(pY[i]*pX[i+1]-pY[i+1]*pX[i])+
H*(SI1*pX[i]-SI*pX[i+1])/6.0;
a->push_back(store);
store=(HI/2.0)*(SI1*pow(pX[i],2)-SI*pow(pX[i+1],2))+HI*(pY[i+1]-pY[i])+(H/6.0)*(SI-SI1);
store=(HI/2.0)*(SI1*(pX[i]*pX[i])-SI*(pX[i+1]*pX[i+1]))+HI*(pY[i+1]-pY[i])+(H/6.0)*(SI-SI1);
b->push_back(store);
store=(HI/2.0)*(SI*pX[i+1]-SI1*pX[i]);
c->push_back(store);
@@ -130,6 +137,16 @@ G4PenelopeInterpolator::G4PenelopeInterpolator(G4double* pX,G4double* pY,G4int n
return;
}
G4PenelopeInterpolator::~G4PenelopeInterpolator()
{
delete a;
delete b;
delete c;
delete d;
delete x;
delete y;
}
G4double G4PenelopeInterpolator::CubicSplineInterpolation(G4double xx)
{
G4double interp=0;
@@ -20,8 +20,8 @@
// * statement, and all its terms. *
// ********************************************************************
//
// $Id: G4PenelopeIonisation.cc,v 1.8 2003/12/09 15:36:41 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4PenelopeIonisation.cc,v 1.12 2004/03/18 13:44:44 pandola Exp $
// GEANT4 tag $Name: geant4-06-01 $
//
// --------------------------------------------------------------
//
@@ -33,11 +33,19 @@
//
// Modifications:
//
// 25.03.03 L.Pandola First implementation
// 03.06.03 L.Pandola Added continuous part
// 30.06.03 L.Pandola Added positrons
// 01.07.03 L.Pandola Changed cross section files for e- and e+
// Interface with PenelopeCrossSectionHandler
// 25.03.03 L.Pandola First implementation
// 03.06.03 L.Pandola Added continuous part
// 30.06.03 L.Pandola Added positrons
// 01.07.03 L.Pandola Changed cross section files for e- and e+
// Interface with PenelopeCrossSectionHandler
// 18.01.04 M.Mendenhall (Vanderbilt University) [bug report 568]
// Changed returns in CalculateDiscreteForElectrons()
// to eliminate leaks
// 20.01.04 L.Pandola Changed returns in CalculateDiscreteForPositrons()
// to eliminate the same bug
// 10.03.04 L.Pandola Bug fixed with reference system of delta rays
// 17.03.04 L.Pandola Removed unnecessary calls to pow(a,b)
// 18.03.04 L.Pandola Bug fixed in the destructor
// --------------------------------------------------------------
#include "G4PenelopeIonisation.hh"
@@ -88,7 +96,7 @@ G4PenelopeIonisation::~G4PenelopeIonisation()
{
if (ionizationEnergy->count(Z)) delete (ionizationEnergy->find(Z)->second);
if (resonanceEnergy->count(Z)) delete (resonanceEnergy->find(Z)->second);
if (occupationNumber->count(Z)) delete (resonanceEnergy->find(Z)->second);
if (occupationNumber->count(Z)) delete (occupationNumber->find(Z)->second);
if (shellFlag->count(Z)) delete (shellFlag->find(Z)->second);
}
delete ionizationEnergy;
@@ -357,8 +365,6 @@ G4VParticleChange* G4PenelopeIonisation::PostStepDoIt(const G4Track& track,
std::vector<G4DynamicParticle*>* photonVector=0;
G4DynamicParticle* aPhoton;
// G4AtomicDeexciation deexcitationManager;
if (Z>5 && (ionEnergy > cutg || ionEnergy > cute))
{
photonVector = deexcitationManager.GenerateParticles(Z,shellId);
@@ -395,7 +401,7 @@ G4VParticleChange* G4PenelopeIonisation::PostStepDoIt(const G4Track& track,
G4double yEl = sin2 * sin(phi2);
G4double zEl = cosThetaSecondary;
G4ThreeVector eDirection(xEl,yEl,zEl); //electron direction
eDirection.rotateUz(electronDirection0);
electron = new G4DynamicParticle (G4Electron::Electron(),
eDirection,eKineticEnergy) ;
nbOfSecondaries++;
@@ -480,7 +486,7 @@ void G4PenelopeIonisation::CalculateDiscreteForElectrons(G4double ene,G4double c
G4double gamma = 1.0+ene/electron_mass_c2;
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double amol = pow((gamma-1.0)/gamma,2);
G4double amol = (gamma-1.0)*(gamma-1.0)/gamma2;
G4double cps = ene*rb;
G4double cp = sqrt(cps);
@@ -488,13 +494,14 @@ void G4PenelopeIonisation::CalculateDiscreteForElectrons(G4double ene,G4double c
G4double distantTransvCS0 = std::max(log(gamma2)-beta2-delta,0.0);
G4double rl,rl1;
if (cutoff > ene) return; //delta rays are not generated
G4DataVector* qm = new G4DataVector();
G4DataVector* cumulHardCS = new G4DataVector();
G4DataVector* typeOfInteraction = new G4DataVector();
G4DataVector* nbOfLevel = new G4DataVector();
if (cutoff > ene) return; //delta rays are not generated
//Hard close collisions with outer shells
G4double wmaxc = 0.5*ene;
G4double closeCS0 = 0.0;
@@ -541,11 +548,11 @@ void G4PenelopeIonisation::CalculateDiscreteForElectrons(G4double ene,G4double c
{
if (wi>(1e-6*ene)){
G4double cpp=sqrt((ene-wi)*(ene-wi+2.0*electron_mass_c2));
qm->push_back(sqrt(pow(cp-cpp,2)+electron_mass_c2*electron_mass_c2)-electron_mass_c2);
qm->push_back(sqrt((cp-cpp)*(cp-cpp)+electron_mass_c2*electron_mass_c2)-electron_mass_c2);
}
else
{
qm->push_back(pow(wi,2)/(beta2*2.0*electron_mass_c2));
qm->push_back((wi*wi)/(beta2*2.0*electron_mass_c2));
}
//verificare che quando arriva qui il vettore ha SEMPRE l'i-esimo elemento
if ((*qm)[i] < wi)
@@ -600,6 +607,10 @@ void G4PenelopeIonisation::CalculateDiscreteForElectrons(G4double ene,G4double c
energySecondary=0.0;
cosThetaSecondary=0.0;
iOsc=-1;
delete qm;
delete cumulHardCS;
delete typeOfInteraction;
delete nbOfLevel;
return;
}
@@ -701,7 +712,7 @@ void G4PenelopeIonisation::CalculateDiscreteForElectrons(G4double ene,G4double c
}
rk2 = rk*rk;
rkf = rk/(1.0-rk);
phi = 1.0+pow(rkf,2)-rkf+amol*(rk2+rkf);
phi = 1.0+(rkf*rkf)-rkf+amol*(rk2+rkf);
}while ((G4UniformRand()*(1.0+A*rk2)) > phi);
//Energy and scattering angle (primary electron);
kineticEnergy1 = ene*(1.0-rk);
@@ -796,6 +807,7 @@ G4double G4PenelopeIonisation::CalculateDeltaFermi(G4double ene,G4int Z,
G4double wl2 = 0.0;
G4double fdel=0.0;
G4double wr=0;
G4double help1=0.0;
size_t nbOsc = resonanceEnergy->find(Z)->second->size();
for(size_t i=0;i<nbOsc;i++)
{
@@ -804,7 +816,8 @@ G4double G4PenelopeIonisation::CalculateDeltaFermi(G4double ene,G4int Z,
fdel += occupNb/(wr*wr+wl2);
}
if (fdel < TST) return delta;
wl2 = pow((*(resonanceEnergy->find(Z)->second))[nbOsc-1],2);
help1 = (*(resonanceEnergy->find(Z)->second))[nbOsc-1];
wl2 = help1*help1;
do{
wl2=wl2*2.0;
fdel = 0.0;
@@ -854,7 +867,8 @@ G4double G4PenelopeIonisation::CalculateContinuous(G4double ene,G4double cutoff,
G4double gamma = 1.0+ene/electron_mass_c2;
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double constant = pi*pow(classic_electr_radius,2)*2.0*electron_mass_c2/beta2;
G4double constant = pi*classic_electr_radius*classic_electr_radius
*2.0*electron_mass_c2/beta2;
G4double delta = CalculateDeltaFermi(ene,Z,electronVolumeDensity);
@@ -886,7 +900,7 @@ G4double G4PenelopeIonisation::CalculateStoppingPowerForElectrons(G4double ene,G
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double cps = ene*(ene+2.0*electron_mass_c2);
G4double amol = pow((gamma-1.0)/gamma,2);
G4double amol = (gamma-1.0)*(gamma-1.0)/gamma2;
G4double sPower = 0.0;
if (ene < resEne) return sPower;
@@ -901,7 +915,7 @@ G4double G4PenelopeIonisation::CalculateStoppingPowerForElectrons(G4double ene,G
if (resEne > ene*(1e-6))
{
qm = sqrt(pow(cp-cp1,2)+pow(electron_mass_c2,2))-electron_mass_c2;
qm = sqrt((cp-cp1)*(cp-cp1)+(electron_mass_c2*electron_mass_c2))-electron_mass_c2;
}
else
{
@@ -934,7 +948,7 @@ G4double G4PenelopeIonisation::CalculateStoppingPowerForElectrons(G4double ene,G
if (wl > (wu-1*eV)) return sPower;
sPower += log(wu/wl)+(ene/(ene-wu))-(ene/(ene-wl))
+ (2.0 - amol)*log((ene-wu)/(ene-wl))
+ amol*(pow(wu,2)-pow(wl,2))/(2.0*pow(ene,2));
+ amol*((wu*wu)-(wl*wl))/(2.0*ene*ene);
return sPower;
}
@@ -947,11 +961,12 @@ G4double G4PenelopeIonisation::CalculateStoppingPowerForPositrons(G4double ene,G
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double cps = ene*(ene+2.0*electron_mass_c2);
G4double amol = pow(ene/(ene+electron_mass_c2),2);
G4double bha1 = amol*(2.0*pow(gamma+1.0,2)-1.0)/(gamma2-1.0);
G4double bha2 = amol*(3.0+1.0/pow(gamma+1.0,2));
G4double bha3 = amol*2.0*gamma*(gamma-1.0)/pow(gamma+1.0,2);
G4double bha4 = amol*pow(gamma-1.0,2)/pow(gamma+1.0,2);
G4double amol = (ene/(ene+electron_mass_c2)) * (ene/(ene+electron_mass_c2));
G4double help = (gamma+1.0)*(gamma+1.0);
G4double bha1 = amol*(2.0*help-1.0)/(gamma2-1.0);
G4double bha2 = amol*(3.0+1.0/help);
G4double bha3 = amol*2.0*gamma*(gamma-1.0)/help;
G4double bha4 = amol*(gamma-1.0)*(gamma-1.0)/help;
G4double sPower = 0.0;
if (ene < resEne) return sPower;
@@ -967,7 +982,7 @@ G4double G4PenelopeIonisation::CalculateStoppingPowerForPositrons(G4double ene,G
if (resEne > ene*(1e-6))
{
qm = sqrt(pow(cp-cp1,2)+pow(electron_mass_c2,2))-electron_mass_c2;
qm = sqrt((cp-cp1)*(cp-cp1)+(electron_mass_c2*electron_mass_c2))-electron_mass_c2;
}
else
{
@@ -999,9 +1014,9 @@ G4double G4PenelopeIonisation::CalculateStoppingPowerForPositrons(G4double ene,G
wl = resEne;
if (wl > (wu-1*eV)) return sPower;
sPower += log(wu/wl)-bha1*(wu-wl)/ene
+ bha2*(pow(wu,2)-pow(wl,2))/(2.0*pow(ene,2))
- bha3*(pow(wu,3)-pow(wl,3))/(3.0*pow(ene,3))
+ bha4*(pow(wu,4)-pow(wl,4))/(4.0*pow(ene,4));
+ bha2*((wu*wu)-(wl*wl))/(2.0*ene*ene)
- bha3*((wu*wu*wu)-(wl*wl*wl))/(3.0*ene*ene*ene)
+ bha4*((wu*wu*wu*wu)-(wl*wl*wl*wl))/(4.0*ene*ene*ene*ene);
return sPower;
}
@@ -1020,24 +1035,27 @@ void G4PenelopeIonisation::CalculateDiscreteForPositrons(G4double ene,G4double c
G4double gamma = 1.0+ene/electron_mass_c2;
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double amol = pow((gamma-1.0)/gamma,2);
G4double amol = (gamma-1.0)*(gamma-1.0)/gamma2;
G4double cps = ene*rb;
G4double cp = sqrt(cps);
G4double bha1 = amol*(2.0*pow(gamma+1.0,2)-1.0)/(gamma2-1.0);
G4double bha2 = amol*(3.0+1.0/pow(gamma+1.0,2));
G4double bha3 = amol*2.0*gamma*(gamma-1.0)/pow(gamma+1.0,2);
G4double bha4 = amol*pow(gamma-1.0,2)/pow(gamma+1.0,2);
G4double help = (gamma+1.0)*(gamma+1.0);
G4double bha1 = amol*(2.0*help-1.0)/(gamma2-1.0);
G4double bha2 = amol*(3.0+1.0/help);
G4double bha3 = amol*2.0*gamma*(gamma-1.0)/help;
G4double bha4 = amol*(gamma-1.0)*(gamma-1.0)/help;
G4double delta = CalculateDeltaFermi(ene,Z,electronVolumeDensity);
G4double distantTransvCS0 = std::max(log(gamma2)-beta2-delta,0.0);
G4double rl,rl1;
if (cutoff > ene) return; //delta rays are not generated
G4DataVector* qm = new G4DataVector();
G4DataVector* cumulHardCS = new G4DataVector();
G4DataVector* typeOfInteraction = new G4DataVector();
G4DataVector* nbOfLevel = new G4DataVector();
if (cutoff > ene) return; //delta rays are not generated
//Hard close collisions with outer shells
G4double wmaxc = ene;
@@ -1049,8 +1067,8 @@ void G4PenelopeIonisation::CalculateDiscreteForPositrons(G4double ene,G4double c
rl1=1.0-rl;
if (rl < 1.0)
closeCS0 = (((1.0/rl)-1.0) + bha1*log(rl) + bha2*rl1
+ (bha3/2.0)*(pow(rl,2)-1.0)
+ (bha4/3.0)*(1.0-pow(rl,3)))/ene;
+ (bha3/2.0)*((rl*rl)-1.0)
+ (bha4/3.0)*(1.0-(rl*rl*rl)))/ene;
}
// Cross sections for the different oscillators
@@ -1087,11 +1105,11 @@ void G4PenelopeIonisation::CalculateDiscreteForPositrons(G4double ene,G4double c
{
if (wi>(1e-6*ene)){
G4double cpp=sqrt((ene-wi)*(ene-wi+2.0*electron_mass_c2));
qm->push_back(sqrt(pow(cp-cpp,2)+electron_mass_c2*electron_mass_c2)-electron_mass_c2);
qm->push_back(sqrt((cp-cpp)*(cp-cpp)+ electron_mass_c2 * electron_mass_c2)-electron_mass_c2);
}
else
{
qm->push_back(pow(wi,2)/(beta2+2.0*electron_mass_c2));
qm->push_back(wi*wi/(beta2+2.0*electron_mass_c2));
}
//verificare che quando arriva qui il vettore ha SEMPRE l'i-esimo elemento
if ((*qm)[i] < wi)
@@ -1126,8 +1144,8 @@ void G4PenelopeIonisation::CalculateDiscreteForPositrons(G4double ene,G4double c
rl=wi/ene;
rl1=1.0-rl;
closeCS = occupNb*(((1.0/rl)-1.0)+bha1*log(rl)+bha2*rl1
+ (bha3/2.0)*(pow(rl,2)-1.0)
+ (bha4/3.0)*(1.0-pow(rl,3)))/ene;
+ (bha3/2.0)*((rl*rl)-1.0)
+ (bha4/3.0)*(1.0-(rl*rl*rl)))/ene;
cumulHardCS->push_back(totalHardCS);
typeOfInteraction->push_back(3.0); //close
nbOfLevel->push_back((G4double) i);
@@ -1148,6 +1166,10 @@ void G4PenelopeIonisation::CalculateDiscreteForPositrons(G4double ene,G4double c
energySecondary=0.0;
cosThetaSecondary=0.0;
iOsc=-1;
delete qm;
delete cumulHardCS;
delete typeOfInteraction;
delete nbOfLevel;
return;
}
@@ -1271,7 +1293,7 @@ G4double G4PenelopeIonisation::CalculateCrossSectionsRatio(G4double ene,G4double
G4double gamma = 1.0+ene/electron_mass_c2;
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double constant = pi*pow(classic_electr_radius,2)*2.0*electron_mass_c2/beta2;
G4double constant = pi*classic_electr_radius*classic_electr_radius*2.0*electron_mass_c2/beta2;
G4double delta = CalculateDeltaFermi(ene,Z,electronVolumeDensity);
G4int nbOsc = (G4int) resonanceEnergy->find(Z)->second->size();
G4double S0 = 0.0, H0=0.0;
@@ -1308,7 +1330,7 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForElectrons(G4double ene,G4dou
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double cps = ene*(ene+2.0*electron_mass_c2);
G4double amol = pow(ene/(ene+electron_mass_c2),2);
G4double amol = (ene/(ene+electron_mass_c2)) * (ene/(ene+electron_mass_c2)) ;
G4double hardCont = 0.0;
G4double softCont = 0.0;
if (ene < resEne) return 0.0;
@@ -1324,7 +1346,7 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForElectrons(G4double ene,G4dou
if (resEne > ene*(1e-6))
{
qm = sqrt(pow(cp-cp1,2)+pow(electron_mass_c2,2))-electron_mass_c2;
qm = sqrt((cp-cp1)*(cp-cp1)+(electron_mass_c2*electron_mass_c2))-electron_mass_c2;
}
else
{
@@ -1364,7 +1386,7 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForElectrons(G4double ene,G4dou
hardCont += (1.0/(ene-wu))-(1.0/(ene-wl))
- (1.0/wu)+(1.0/wl)
+ (1.0-amol)*log(((ene-wu)*wl)/((ene-wl)*wu))/ene
+ amol*(wu-wl)/pow(ene,2);
+ amol*(wu-wl)/(ene*ene);
wu=wl;
}
@@ -1376,7 +1398,7 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForElectrons(G4double ene,G4dou
softCont += (1.0/(ene-wu))-(1.0/(ene-wl))
- (1.0/wu)+(1.0/wl)
+ (1.0-amol)*log(((ene-wu)*wl)/((ene-wl)*wu))/ene
+ amol*(wu-wl)/pow(ene,2);
+ amol*(wu-wl)/(ene*ene);
if (index == 1) return softCont;
return hardCont;
}
@@ -1389,11 +1411,12 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForPositrons(G4double ene,G4dou
G4double gamma2 = gamma*gamma;
G4double beta2 = (gamma2-1.0)/gamma2;
G4double cps = ene*(ene+2.0*electron_mass_c2);
G4double amol = pow(ene/(ene+electron_mass_c2),2);
G4double bha1 = amol*(2.0*pow(gamma+1.0,2)-1.0)/(gamma2-1.0);
G4double bha2 = amol*(3.0+1.0/pow(gamma+1.0,2));
G4double bha3 = amol*2.0*gamma*(gamma-1.0)/pow(gamma+1.0,2);
G4double bha4 = amol*pow(gamma-1.0,2)/pow(gamma+1.0,2);
G4double amol = (ene/(ene+electron_mass_c2)) * (ene/(ene+electron_mass_c2)) ;
G4double help = (gamma+1.0)*(gamma+1.0);
G4double bha1 = amol*(2.0*help-1.0)/(gamma2-1.0);
G4double bha2 = amol*(3.0+1.0/help);
G4double bha3 = amol*2.0*gamma*(gamma-1.0)/help;
G4double bha4 = amol*(gamma-1.0)*(gamma-1.0)/help;
G4double hardCont = 0.0;
G4double softCont = 0.0;
if (ene < resEne) return 0.0;
@@ -1410,7 +1433,7 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForPositrons(G4double ene,G4dou
if (resEne > ene*(1e-6))
{
qm = sqrt(pow(cp-cp1,2)+pow(electron_mass_c2,2))-electron_mass_c2;
qm = sqrt((cp-cp1)*(cp-cp1)+(electron_mass_c2*electron_mass_c2))-electron_mass_c2;
}
else
{
@@ -1447,8 +1470,8 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForPositrons(G4double ene,G4dou
if (wl < (wu-1*eV)) {
hardCont += (1.0/wl)-(1.0/wu)-bha1*log(wu/wl)/ene
+ bha2*(wu-wl)/pow(ene,2) -bha3*(pow(wu,2)-pow(wl,2))/(2.0*pow(ene,3))
+ bha4*(pow(wu,3)-pow(wl,3))/(3.0*pow(ene,4));
+ bha2*(wu-wl)/(ene*ene) -bha3*((wu*wu)-(wl*wl))/(2.0*ene*ene*ene)
+ bha4*((wu*wu*wu)-(wl*wl*wl))/(3.0*ene*ene*ene*ene);
wu=wl;
}
wl = resEne;
@@ -1458,8 +1481,8 @@ G4double G4PenelopeIonisation::CrossSectionsRatioForPositrons(G4double ene,G4dou
if (index == 2) return hardCont;
}
softCont += (1.0/wl)-(1.0/wu)-bha1*log(wu/wl)/ene
+ bha2*(wu-wl)/pow(ene,2) -bha3*(pow(wu,2)-pow(wl,2))/(2.0*pow(ene,3))
+ bha4*(pow(wu,3)-pow(wl,3))/(3.0*pow(ene,4));
+ bha2*(wu-wl)/(ene*ene) -bha3*((wu*wu)-(wl*wl))/(2.0*ene*ene*ene)
+ bha4*((wu*wu*wu)-(wl*wl*wl))/(3.0*ene*ene*ene*ene);
if (index == 1) return softCont;
return hardCont;
@@ -22,7 +22,7 @@
//
//
// $Id: G4PenelopePhotoElectric.cc,v 1.7 2003/06/16 17:00:22 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: L. Pandola
//
@@ -22,8 +22,8 @@
//
// --------------------------------------------------------------------
//
// $Id: G4PenelopeRayleigh.cc,v 1.9 2003/06/16 17:00:23 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4PenelopeRayleigh.cc,v 1.11 2004/03/18 13:40:36 pandola Exp $
// GEANT4 tag $Name: geant4-06-01 $
//
// Author: L. Pandola (luciano.pandola@cern.ch)
//
@@ -33,6 +33,8 @@
// from SUN
// 10 Mar 2003 V.Ivanchenko Remove CutPerMaterial warning
// 12 Mar 2003 L.Pandola Code "cleaned" - Cuts per region
// 17 Mar 2004 L.Pandola Removed unnecessary calls to pow(a,b)
// 18 Mar 2004 M.Mendenhall Introduced SamplingTable (performance improvement)
// --------------------------------------------------------------------
#include "G4PenelopeRayleigh.hh"
@@ -72,8 +74,8 @@ G4PenelopeRayleigh::G4PenelopeRayleigh(const G4String& processName)
G4Exception("G4PenelopeRayleigh::G4PenelopeRayleigh - energy limit outside intrinsic process validity range");
}
samplingFunction_x = new G4DataVector();
samplingFunction_y = new G4DataVector();
samplingFunction_x = 0;
samplingFunction_y = 0;
meanFreePathTable = 0;
material = 0;
@@ -89,11 +91,16 @@ G4PenelopeRayleigh::G4PenelopeRayleigh(const G4String& processName)
G4PenelopeRayleigh::~G4PenelopeRayleigh()
{
delete meanFreePathTable;
delete samplingFunction_x;
delete samplingFunction_y;
delete meanFreePathTable;
SamplingTablePair::iterator i;
for(i=SamplingTables.begin(); i != SamplingTables.end(); i++) {
delete (*i).second.first;
delete (*i).second.second;
}
}
void G4PenelopeRayleigh::BuildPhysicsTable(const G4ParticleDefinition& )
{
@@ -140,16 +147,17 @@ void G4PenelopeRayleigh::BuildPhysicsTable(const G4ParticleDefinition& )
{
energies->push_back(energyVector[bin]);
G4double ec=std::min(energyVector[bin],0.5*IZZ);
facte=k1*pow(ec/electron_mass_c2,2);
G4double energyRatio = ec/electron_mass_c2;
facte = k1*energyRatio*energyRatio;
G4double cs=0;
G4PenelopeIntegrator<G4PenelopeRayleigh,G4double(G4PenelopeRayleigh::*)(G4double)> theIntegrator;
cs =
theIntegrator.Calculate(this,&G4PenelopeRayleigh::DifferentialCrossSection,-1.0,0.90,1e-06);
cs += theIntegrator.Calculate(this,&G4PenelopeRayleigh::DifferentialCrossSection,0.90,0.9999999,1e-06);
cs = cs*pow((ec/energyVector[bin]),2)*pi*pow(classic_electr_radius,2);
cs = cs*(ec/energyVector[bin])*(ec/energyVector[bin])*pi*classic_electr_radius*classic_electr_radius;
const G4double* vector_of_atoms = material->GetVecNbOfAtomsPerVolume();
const G4int* stechiometric = material->GetAtomsVector();
G4double density;
G4double density=0.;
if (stechiometric)
{
density = vector_of_atoms[iright]/stechiometric[iright]; //number of molecules per volume
@@ -317,33 +325,42 @@ G4double G4PenelopeRayleigh::GetMeanFreePath(const G4Track& track,
void G4PenelopeRayleigh::InizialiseSampling()
{
SamplingTablePair::iterator theTable=SamplingTables.find(material);
const G4int points=241;
samplingFunction_x->clear();
samplingFunction_y->clear();
G4double sum = 0.0;
G4double Xlow=0;
G4double Xlow = 0.;
G4double Xhigh=1e-04;
G4double fact = pow((1e06/Xhigh),(1/240.0));
G4PenelopeIntegrator<G4PenelopeRayleigh,G4double(G4PenelopeRayleigh::*)(G4double)> theIntegrator;
sum = theIntegrator.Calculate(this,&G4PenelopeRayleigh::MolecularFormFactor,
Xlow,Xhigh,1e-10);
samplingFunction_x->push_back(Xhigh);
samplingFunction_y->push_back(sum);
G4int i;
for (i=1;i<points;i++){
Xlow=Xhigh;
Xhigh=Xhigh*fact;
sum = theIntegrator.Calculate(this,
&G4PenelopeRayleigh::MolecularFormFactor,
Xlow,Xhigh,1e-10);
samplingFunction_x->push_back(Xhigh);
samplingFunction_y->push_back(sum+(*samplingFunction_y)[i-1]);
}
for (i=0;i<points;i++){
(*samplingFunction_x)[i]=log((*samplingFunction_x)[i]);
(*samplingFunction_y)[i]=log((*samplingFunction_y)[i]);
}
samplingConstant=log(fact);
if (theTable==SamplingTables.end()) { //material not inizialized yet
samplingFunction_x = new G4DataVector();
samplingFunction_y = new G4DataVector();
G4double sum = 0.0;
G4PenelopeIntegrator<G4PenelopeRayleigh,G4double(G4PenelopeRayleigh::*)(G4double)> theIntegrator;
sum = theIntegrator.Calculate(this,&G4PenelopeRayleigh::MolecularFormFactor,
Xlow,Xhigh,1e-10);
samplingFunction_x->push_back(Xhigh);
samplingFunction_y->push_back(sum);
G4int i;
for (i=1;i<points;i++){
Xlow=Xhigh;
Xhigh=Xhigh*fact;
sum = theIntegrator.Calculate(this,
&G4PenelopeRayleigh::MolecularFormFactor,
Xlow,Xhigh,1e-10);
samplingFunction_x->push_back(Xhigh);
samplingFunction_y->push_back(sum+(*samplingFunction_y)[i-1]);
}
for (i=0;i<points;i++){
(*samplingFunction_x)[i]=log((*samplingFunction_x)[i]);
(*samplingFunction_y)[i]=log((*samplingFunction_y)[i]);
}
SamplingTables[material] = std::pair<G4DataVector*,G4DataVector*> (samplingFunction_x,samplingFunction_y);
}
else { //material already inizialized
samplingFunction_x=(*theTable).second.first;
samplingFunction_y=(*theTable).second.second;
}
}
@@ -463,7 +480,8 @@ G4double G4PenelopeRayleigh::MolecularFormFactor(G4double y)
for (G4int i=0;i<nElements;i++){
G4int Z = (G4int) (*elementVector)[i]->GetZ();
if (Z>ntot) Z=95;
fa=Z*(1+y*(RA1[Z-1]+x*(RA2[Z-1]+x*RA3[Z-1])))/pow((1+y*(RA4[Z-1]+y*RA5[Z-1])),2);
G4double denomin = 1+y*(RA4[Z-1]+y*RA5[Z-1]);
fa=Z*(1+y*(RA1[Z-1]+x*(RA2[Z-1]+x*RA3[Z-1])))/(denomin*denomin);
G4bool a = ((Z>10) && (fa>2.0));
if (a)
{
@@ -471,7 +489,7 @@ G4double G4PenelopeRayleigh::MolecularFormFactor(G4double y)
G4double k1=0.3125;
G4double k2=2.426311e-02;
Pa=(Z-k1)*fine_structure_const;
Pg=sqrt(1-pow(Pa,2));
Pg=sqrt(1-(Pa*Pa));
Pq=k2*x/Pa;
fb=sin(2*Pg*atan(Pq))/(Pg*Pq*pow((1+Pq*Pq),Pg));
fa=std::max(fa,fb);
@@ -22,7 +22,7 @@
//
//
// $Id: G4RangeTest.cc,v 1.7 2003/06/16 17:00:24 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4SemiLogInterpolation.cc,v 1.4 2002/05/28 09:20:21 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4ShellData.cc,v 1.6 2003/06/16 17:00:25 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4ShellEMDataSet.cc,v 1.10 2003/06/16 17:00:26 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VCrossSectionHandler.cc,v 1.13 2003/06/16 17:00:28 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4VeLowEnergyLoss.cc,v 1.23 2003/06/16 17:00:29 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
//
// --------------------------------------------------------------
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eBremsstrahlungSpectrum.cc,v 1.11 2003/06/16 17:00:32 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -------------------------------------------------------------------
//
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eIonisationCrossSectionHandler.cc,v 1.10 2003/06/16 17:00:33 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -------------------------------------------------------------------
//
@@ -21,21 +21,22 @@
// ********************************************************************
//
//
// $Id: G4eIonisationParameters.cc,v 1.20 2003/06/16 17:00:34 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4eIonisationParameters.cc,v 1.21 2004/02/17 11:17:31 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-01 $
//
// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
//
// History:
// -----------
// 31 Jul 2001 MGP Created, with dummy implementation
// 12.09.01 V.Ivanchenko Add param and interpolation of parameters
// 04.10.01 V.Ivanchenko Add BindingEnergy method
// 25.10.01 MGP Many bug fixes, mostly related to the
// 12.09.01 V.Ivanchenko Add param and interpolation of parameters
// 04.10.01 V.Ivanchenko Add BindingEnergy method
// 25.10.01 MGP Many bug fixes, mostly related to the
// management of pointers
// 29.11.01 V.Ivanchenko New parametrisation + Excitation
// 29.11.01 V.Ivanchenko New parametrisation + Excitation
// 30.05.02 V.Ivanchenko Format and names of the data files were
// chenged to "ion-..."
// chenged to "ion-..."
// 17.02.04 V.Ivanchenko Increase buffer size
//
// -------------------------------------------------------------------
@@ -185,14 +186,14 @@ void G4eIonisationParameters::LoadData()
for (size_t i=0; i<nZ; i++) {
G4int Z = (G4int)activeZ[i];
char nameChar[100] = {""};
std::ostrstream ost(nameChar, 100, std::ios::out);
char nameChar[1000] = {""};
std::ostrstream ost(nameChar, 1000, std::ios::out);
ost << pathString << Z << ".dat";
G4String name(nameChar);
G4String name(nameChar);
std::ifstream file(name);
std::filebuf* lsdp = file.rdbuf();
if (! (lsdp->is_open()) ) {
G4String excep = G4String("G4IonisationParameters - data file: ")
+ name + G4String(" not found. The version 1.# of G4LEDATA should be used");
@@ -202,7 +203,7 @@ void G4eIonisationParameters::LoadData()
// The file is organized into:
// For each shell there are two lines:
// 1st line:
// 1st column is the energy of incident e-,
// 1st column is the energy of incident e-,
// 2d column is the parameter of screan term;
// 2d line:
// 3 energy (MeV) subdividing different approximation area of the spectrum
@@ -321,7 +322,7 @@ void G4eIonisationParameters::LoadData()
<< " ener1= " << ener1
<< G4endl;
}
// End of file
if (ener == -2) {
break;
@@ -21,7 +21,7 @@
// ********************************************************************
//
// $Id: G4eIonisationSpectrum.cc,v 1.22 2003/06/16 17:00:35 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -------------------------------------------------------------------
//
@@ -22,7 +22,7 @@
//
//
// $Id: G4eLowEnergyLoss.cc,v 1.31 2003/06/16 17:00:36 gunter Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -----------------------------------------------------------
// GEANT 4 class implementation file
@@ -22,7 +22,7 @@
//
//
// $Id: G4hLowEnergyLoss.cc,v 1.20 2003/05/20 20:16:14 pia Exp $
// GEANT4 tag $Name: geant4-06-00 $
// GEANT4 tag $Name: geant4-05-02-patch-01 $
//
// -----------------------------------------------------------
// GEANT 4 class implementation file
+11 -1
View File
@@ -1,4 +1,4 @@
$Id: History,v 1.63 2003/11/12 16:30:32 vnivanch Exp $
$Id: History,v 1.66 2004/03/02 17:45:03 vnivanch Exp $
-------------------------------------------------------------------
=========================================================
@@ -17,6 +17,16 @@ committal in the CVS repository !
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
02 March 04: V.Ivant (muons-V06-00-02)
- Minor fix in initialisation of MuPairProductionModel
17 Feb 04: V.Ivant (muons-V06-00-01)
- Update parameterizations in G4MuPairProductionModel
- Update radiative corrections for G4MuBetheBlochModel
22 Jan 04: V.Ivant (muons-V06-00-00)
- Migrade to G4ParticleChangeForLoss
11 Nov 03: V.Ivant (muons-V05-02-09)
- Remove force of verbose=0 for G4MuIonisation
- Substitute G4VEnergyLossSTD by G4VEnergyLossProcess
@@ -1,54 +0,0 @@
No.events=1000000
X=1000 g/cm2 Fe
T=100 GeV T=10000 GeV
bc b k n p b k n p
-.950 1015.9 155842.0 .0 80340.4 1018.8 165585.0 .0 281133.8
-.850 1015.2 123833.1 .0 75005.4 1018.8 131898.4 .0 284400.3
-.750 1014.3 98379.0 .0 68839.1 1018.8 105052.9 .0 285790.3
-.650 1013.1 78139.7 1002.2 62042.4 1018.8 83661.7 1760.4 285381.4
-.550 1011.6 62048.8 901.3 54844.3 1018.8 66618.6 1590.7 283275.9
-.450 1009.8 49257.4 811.0 47492.3 1018.8 53041.3 1439.8 279594.9
-.350 1007.5 39090.2 730.2 40236.1 1018.7 42226.3 1305.5 274473.0
-.250 1004.7 31009.8 657.6 33308.3 1018.7 33612.7 1186.1 268052.0
-.150 1001.1 24588.6 592.5 26906.0 1018.7 26753.0 1079.9 260475.6
-.050 996.7 19486.5 534.1 21179.8 1018.7 21290.8 985.6 251883.9
.050 991.2 15433.1 481.6 16229.7 1018.7 16941.9 901.9 242410.7
.150 984.5 12213.2 434.6 12102.7 1018.6 13479.8 827.8 232180.2
.250 976.1 9655.8 392.4 8790.1 1018.6 10723.9 762.4 221306.5
.350 965.9 7624.9 354.5 6229.3 1018.6 8530.4 704.6 209892.6
.450 953.5 6012.3 320.5 4317.9 1018.5 6784.8 653.6 198031.8
.550 938.4 4732.2 289.7 2934.4 1018.4 5395.7 608.8 185808.4
.650 920.3 3716.2 261.8 1959.1 1018.3 4290.5 569.3 173300.2
.750 898.6 2910.0 236.4 1286.7 1018.2 3411.2 534.5 160580.9
.850 873.0 2270.7 212.9 831.9 1018.1 2711.8 503.9 147723.5
.950 843.0 1764.0 191.1 529.5 1017.9 2155.4 476.9 134803.8
1.050 808.1 1362.6 170.7 331.4 1017.6 1712.9 452.9 121905.0
1.150 768.2 1045.2 151.3 203.8 1017.3 1361.1 431.7 109121.5
1.250 723.1 794.6 132.7 123.0 1017.0 1081.3 412.7 96562.6
1.350 672.9 597.4 114.8 72.7 1016.5 858.8 395.6 84354.7
1.450 618.4 442.8 97.6 42.1 1015.9 682.0 380.1 72639.3
1.550 560.7 322.7 81.1 23.9 1015.1 541.4 366.0 61567.2
1.650 501.8 230.4 65.5 13.5 1014.2 429.7 352.9 51286.6
1.750 444.1 160.9 51.1 7.7 1013.0 340.9 340.7 41928.2
1.850 387.1 110.4 37.8 4.6 1011.5 270.4 329.1 33591.5
1.950 300.1 75.6 22.1 2.8 1009.6 214.3 318.0 26338.0
2.050 .0 .0 .0 .0 1007.3 169.8 307.3 20189.6
2.150 .0 .0 .0 .0 1004.3 134.4 296.6 15126.5
2.250 .0 .0 .0 .0 1000.6 106.3 286.0 11085.2
2.350 .0 .0 .0 .0 996.0 84.0 275.3 7959.3
2.450 .0 .0 .0 .0 990.3 66.3 264.3 5611.7
2.550 .0 .0 .0 .0 983.1 52.2 253.0 3893.8
2.650 .0 .0 .0 .0 974.1 41.1 241.2 2663.7
2.750 .0 .0 .0 .0 963.0 32.2 228.8 1798.5
2.850 .0 .0 .0 .0 949.4 25.2 215.7 1199.0
2.950 .0 .0 .0 .0 932.7 19.6 201.9 788.9
3.050 .0 .0 .0 .0 912.4 15.2 187.2 511.9
3.150 .0 .0 .0 .0 887.9 11.7 171.6 327.1
3.250 .0 .0 .0 .0 859.0 8.9 155.1 205.6
3.350 .0 .0 .0 .0 825.4 6.8 137.7 126.8
3.450 .0 .0 .0 .0 787.7 5.1 119.8 76.7
3.550 .0 .0 .0 .0 747.4 3.7 101.5 45.6
3.650 .0 .0 .0 .0 707.8 2.7 83.5 26.8
3.750 .0 .0 .0 .0 675.1 2.0 66.1 15.8
3.850 .0 .0 .0 .0 658.6 1.4 49.5 9.8
3.950 .0 .0 .0 .0 655.9 1.0 29.2 6.6
@@ -1,21 +0,0 @@
COMMENTS ON IONISATION AND KNOCK-ON ELECTRONS WITH
CORRECTION
1) Let us introduce Tbound (? 100 KeV); below Tbound the correction to the
differential cross section is negligibly small.
2) There also exists Tmax (= function (E)) defined by kinematics. In this case, the
following possibilities appear:
3) Tmax < Tbound; usual BBS energy loss (and Bhabha cross section for Tcut <
Tmax, with correction or without it, it does not play any substantial role) may be
used, as it was earlier. But it takes place only for rather low muon energies.
4) Tmax > Tbound, with three possibilities for Tcut:
5) Tcut < Tbound: restricted BBS energy loss (< Tcut), numerical calculation of the total
cross section with accurate formula and sampling with accurate formula are needed.
6) Tbound < Tcut < Tmax: for energy loss it is necessary to take “usual” restricted BBS
(< Tbound) plus “twice restricted” numerically integrated energy loss for the interval
(Tbound,Tcut), total cross section and sampling being similar to preceding point.
7) Tcut > Tmax: restricted BBS (< Tbound) plus twice restricted numerical (Tbound,
Tmax); discrete interactions are not simulated.
RPK 10.05.2000
@@ -1,45 +0,0 @@
By R.P.Kokoulin, May 12th, 2000
Multiple Coulomb Scattering some questions and problems
Apart from the problems of creation and development of convenient
procedure for fast simulation of the effect, some principal questions are to be
answered (possibly, most of them have already been investigated)
General
Is it possible to use cross section formulae without magnetic formfactor and spin effects:
a) for nucleus (probably yes);
b) for proton (possibly yes);
c) for electron (probably no).
Should the scattering on the screened nucleus and on atomic electrons be considered
separately? (likely, they should; they probably can be combined later, but…)
Scattering on the nucleus:
a) influence of the choice of the elastic atomic formfactor (TF, HF, hydrogen-like, …);
there is a hope that the difference is small (with a proper choice of the parameters) but
it should be estimated;
b) influence of the nuclear size (it should influence RMS angle and distribution shape on
the tail);
c) influence of the choice of nuclear formfactor (exponential, Gaussian, Fermi model,
etc.); probably, it is small (only RMS nucleus radius is crucial) but it is better to
compare directly;
d) contribution of inelastic nucleus formfactor (incoherent scattering on protons of the
nucleus);
e) necessity of taking into account proton formfactor (for incoherent scattering); last two
points are expected to give small effect but need evaluation.
Scattering on atomic electrons:
a) introduction and influence of the choice of inelastic atomic formfactor (TH,
hydrogen-like exponential, what else?) it should be evaluated; more simple
approaches, such as Z(Z+1) substitutions, seem to be incorrect;
b) problem of a double account for scattering on electrons if explicit simulation of the
elastic scattering of the projectile on electrons (possibly, above the cut Tcut) is
included (knock-on electron production with full kinematics) the possible way is to
consider restricted multiple scattering (below Tcut).
@@ -1,27 +0,0 @@
Some references concerning multiple scattering (May, 2000; RPK)
1) S.Hayakawa. Cosmic Ray Physics.
2) S.Striganov. Nucl.Phys.B (Proc.Suppl.) 51A (1996) 172-178.
3) B.Rossi. High Energy Particles.
4) I.S.Baishev e.a. Sov.J.Nucl.Phys. 42 (1985) 745-749.
5) G.R.Lynch, O.I.Dahl. NIM B58 (1991) 6-10.
6) A.Van Ginneken. NIM A251 (1986) 21-39.
7) A.Van Ginneken. NIM A362 (1995) 213-223.
8) D.Liljequist. J.Appl.Phys. 62 (1987) 333-341.
9) D.Liljequist, M.Ismail. J.Appl.Phys. 62 (1987) 342-350.
10) D.Liljequist e.a. J.Appl.Phys. 68 (1990) 3061-3065.
11) G.Shen e.a. Phys.Rev.D 20 (1979) 1584-1588.
12) J.M.Fernandez-Varea e.a. NIM B73 (1993) 447-473.
13) P.Arce, M.Wadhwa. CMS Note 1999/000 (?).
14) L.Urban. G4 Phys.Ref.Manual (also G3toG4/quick overview and references).
15) G.Moliere. Z.Naturforsch. 2a (1947) 133-145.
16) G.Moliere. Z.Naturforsch. 3a (1948) 78-97.
17) H.A.Bethe. Phys.Rev. 89 (1953) 1256-1266.
18) W.T.Scott. Rev.Mod.Phys. 35 (1963) 231-313.
19) L.N.Cooper, J.Rainwater. Phys.Rev. 97 (1955) 492-504.
20) U.Fano. Phys.Rev. 93 (1954) 117-120.
21) H.W.Lewis. Phys.Rev. 78 (1950) 526-529.
22) S.Goudsmit, J.L.Sounderson. Phys.Rev. 57 (1940) 24-29.
23) S.Goudsmit, J.L.Sounderson. Phys.Rev. 58 (1940) 36-42.
24) Y.S.Tsai. Rev.Mod.Phys. 46 (1974) 815-851; ibid. 49 (1977) 421 - Errata.
25) L.V.Spencer, C.H.Blanchard. Phys.Rev. 93 (1954) 114-116.
@@ -1,47 +0,0 @@
Prepared by R.Kokoulin, May 22nd, 2000
Brief summary of G4 muon activity, May 2nd - May 23rd, 2000
S.Kelner, R.Kokoulin, M.Maire, A.Rybin, L.Urban
1. G4 muon tests
The test procedure of the verification of muon interaction simulation which allows to check
both mean free path calculation and energy transfer sampling has been suggested and
implemented.
First test results revealed appreciable deviations of the distributions of the energy loss from
theoretical dependencies (for bremsstrahlung, pair production, nuclear interaction). Several bugs
have been found and eliminated; it has greatly improved the agreement.
The program of further G4 muon tests has been prepared and agreed, including thin target
tests (extending the set of materials, energies, and increasing statistics), and thick target
simulation which will allow to verify the consistency of consideration of restricted continuous
energy loss.
2. Refinement of the processes already implemented
Simple formulae and algorithm for sampling photon and muon angles in muon
bremsstrahlung have been suggested and prepared for implementation in G4. It will be coded in
the nearest days.
Final states for other processes (pair production, photonuclear interaction) have been
clarified, fixed and introduced into documentation.
Logical scheme of a consistent inclusion of bremsstrahlung correction in high-energy knock-
on electron production and ionisation energy loss is prepared.
List of questions concerning the validity of multiple scattering model has been compiled.
After answering these questions, the "calibration" simulation of MCS for high-energy muons can
be performed.
3. Documentation
Sections concerning three basic muon interaction processes (bremsstrahlung, pair production,
photonuclear interaction) for PRM (Phys. Ref. Manual) have been extended, updated and
corrected.
Suggestions for improvements for the section in PRM about muon ionisation, and also
comments and corrections for "Electromagnetic Physics" gallery have been prepared.
4. Extension of the muon interactions in G4
List of muon processes for further inclusion in G4 has been discussed. The processes of
interest are: muon pair production by photon, muon pair production by muon, diffractive
bremsstrahlung (which leads to a difference in positive/negative muon energy loss). Refinement
of multiple scattering and introduction of the screening correction to bremsstrahlung and pair
production based on recent calculations of radiation logarithm in HF model are also important
and can improve the accuracy of G4-based simulations. The level of theoretical knowledge of
these processes is sufficient for their implementation into algorithms and codes.
Theoretical clarification of LPM and Coulomb corrections for electron pair production by
muons is needed; these are important both for accelerator and high-energy cosmic ray
applications.
@@ -1,36 +0,0 @@
List of problems with G4muons 15.05.00
(Rostislav, Andrew, Laszlo, Michel, Stas, …, May 15th May 22nd )
1) Tests electromagnetic (conduction, search of the possible
sources of disagreement,…)
a) brems
b) pairs
c) knock-on
2) Tests photonuclear
3) Physics Reference Manual
Brems, pairs, photonuclear, ionisation
a) to agree
b) to correct
c) to verify
d) to commission
4)”A Quick Overview” - corrections
5) Summary Note on HE muons in G4
a) to prepare draft
b) to discuss and to correct
c) to prepare the iteration (pre-final)
6) Discussions:
a) final states in the above processes
b) multiple scattering applicability for HE muons
c) muon pairs by photon
d) muon pairs by muon
e) diffractive bremsstrahlung
f) …
7) Concluding remarks and summary
@@ -1,47 +0,0 @@
List of tests of HE muon interactions in Geant4
(By RPK 20-21.05.00)
Thin target (to continue the works started):
10 TeV, 100 cm iron, 10^5 muons, 4 processes: delta, brems, pairs, photonuclear
(to compare with the expectation: X*?(T,?)*?*N?*?lg*log10)
Remaining problems found at the moment:
1) Knock-on electron production for high-energy muons has to be modified (including
contribution from electron bremsstrahlung diagrams and radiative corrections); now it
is not implemented properly;
2) There is a hint for a peak near the edge of the distribution of energy lost by muon in
photonuclear interaction (similar to that which was found and eliminated earlier in the
bremsstrahlung); - problem has been solved! (L.U.,May 22nd)
3) It is not clear whether the energy lost by muon is equal to the energy transferred to
secondary particles (kinetic energy of delta-electron, total energy of electron and
positron in pair production, etc.). There is a hint that they are different.
4) With high statistics simulation, an error appears sometimes in
G4HEInelastic::GenerateNBodyEvent (total mass >= total energy).
After the general agreement is reached, to extend these calculations (with additional
energy/material):
Muon energies: 100 GeV and 10 TeV
Materials: iron (100 cm, or 787 g/cm^2) and carbon (graphite, 500 cm x 2.265 g/cm^3)
Again, after the agreement is reached, to perform calculations for iron and carbon target
at 10 TeV energy with increased statistics (about 10^6 muons), to compare with
expectation (also in terms of the ratio "simulated/expected"), to prepare beautiful pictures
for inclusion in EM Physics gallery and other presentations.
Thick target (distribution of the total energy lost by muon in bulk matter, including
continuous energy loss and all 4 discrete processes), 3 m iron, 1 TeV muon energy,
statistics about 10^5, then 10^6 muons:
- histograms of the residual muon energy (in linear scale, 2 GeV bin) and of the energy
lost by muon (in log scale, 0.10 bin in common logarithm); comparison is possible
with Van Ginneken's TRAMU (the figure given by Particle Data Group) and with
Geant 3.21** (A.Rybin); also simulation with original Geant 3.21 is of interest - to
show, where it was wrong;
- cut variation: with cut = 1 - 100 MeV the distribution should be the same (in
particular, this is one of the tests of the consistency of continuous loss calculation);
- histograms of the scattering angle and lateral displacement (nothing to compare? may
be, Geant 3.21 ?).
@@ -20,8 +20,8 @@
// * statement, and all its terms. *
// ********************************************************************
//
// $Id: G4MuBetheBlochModel.hh,v 1.8 2003/07/21 12:52:35 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-00 $
// $Id: G4MuBetheBlochModel.hh,v 1.9 2004/02/10 18:07:23 vnivanch Exp $
// GEANT4 tag $Name: geant4-06-01 $
//
// -------------------------------------------------------------------
//
@@ -39,6 +39,7 @@
// 23-12-02 Change interface in order to move to cut per region (V.Ivanchenko)
// 24-01-03 Make models region aware (V.Ivanchenko)
// 13-02-03 Add Nama (V.Ivanchenko)
// 10-02-04 Calculation of radiative corrections using R.Kokoulin model (V.Ivanchenko)
//
//
@@ -113,30 +114,23 @@ private:
void SetParticle(const G4ParticleDefinition* p);
G4double CrossSectionPerAtom(G4double Z,
G4double kineticEnergy,
G4double tmin,
G4double tmax,
G4double tmaxSecondary);
G4double DifCrossSectionPerAtom(G4double kineticEnergy,
G4double knockonEnergy,
G4double tmaxSecondary);
// hide assignment operator
// hide assignment operator
G4MuBetheBlochModel & operator=(const G4MuBetheBlochModel &right);
G4MuBetheBlochModel(const G4MuBetheBlochModel&);
const G4ParticleDefinition* particle;
G4double limitKinEnergy;
G4double logLimitKinEnergy;
G4double mass;
G4double chargeSquare;
G4double massSquare;
G4double ratio;
G4double highKinEnergy;
G4double lowKinEnergy;
G4double twoln10;
G4double bg2lim;
G4double taulim;
G4double qc;
G4double alphaprime;
static G4double xgi[8],wgi[8];
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -145,11 +139,9 @@ inline G4double G4MuBetheBlochModel::MaxSecondaryEnergy(
const G4ParticleDefinition*,
G4double kinEnergy)
{
G4double gamma= kinEnergy/mass + 1.0;
G4double tmax = 2.0*electron_mass_c2*(gamma*gamma - 1.) /
(1. + 2.0*gamma*ratio + ratio*ratio);
G4double tau = kinEnergy/mass;
G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) /
(1. + 2.0*(tau + 1.)*ratio + ratio*ratio);
return tmax;
}
@@ -157,12 +149,9 @@ inline G4double G4MuBetheBlochModel::MaxSecondaryEnergy(
inline G4double G4MuBetheBlochModel::MaxSecondaryEnergy(const G4DynamicParticle* dp)
{
G4double kineticEnergy = dp->GetKineticEnergy();
G4double gamma= kineticEnergy/mass + 1.0;
G4double tmax = 2.0*electron_mass_c2*(gamma*gamma - 1.) /
(1. + 2.0*gamma*ratio + ratio*ratio);
G4double tau = dp->GetKineticEnergy()/mass;
G4double tmax = 2.0*electron_mass_c2*tau*(tau + 2.) /
(1. + 2.0*(tau + 1.)*ratio + ratio*ratio);
return tmax;
}

Some files were not shown because too many files have changed in this diff Show More