Import Geant4 10.4.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2017-06-30 10:49:55 +02:00
parent 3a5407696b
commit 1a1316fea4
2180 changed files with 237880 additions and 59109 deletions
@@ -1,4 +1,4 @@
$Id: History 102586 2017-02-09 09:51:41Z gcosmo $
$Id: History 104632 2017-06-08 13:51:09Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,13 +14,19 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
23-Dec-2016, Laurent Desorgher (phys-ctor-decay-V10-02-09)
27-Feb-2017, Vladimir Ivanchenko (phys-ctor-decay-V10-03-02)
- G4RadioactiveDecayPhysics - set time limit for the de-excitation module
the same as in G4NuclideTable, so only states from this table will
be created as ions
23-Dec-2016, Laurent Desorgher (phys-ctor-decay-V10-03-01)
-G4RadioactiveDecayPhysics switch on the storing of all internal conversion data vector
(G4NuclearLevelData::GetInstance()->GetParameters()->SetStoreAllLevels(true)) for
correct gamma deexcitation modeling in radioactive decay.
16-Dec-2016, Vladimir Ivanchenko (phys-ctor-decay-V10-02-08)
- G4RadioactiveDecayPhysics - simplified list of EM parameters.
16-Dec-2016, Vladimir Ivanchenko (phys-ctor-decay-V10-03-00)
- G4RadioactiveDecayPhysics - simplified list of EM parameters;
use a new method AddPhysics() instead of old AddMsc()
02-Dec-2016, Vladimir Ivanchenko (phys-ctor-decay-V10-02-07)
- G4RadioactiveDecayPhysics - fixed initialisation (also for the
@@ -38,6 +38,7 @@
#include "G4LossTableManager.hh"
#include "G4NuclearLevelData.hh"
#include "G4DeexPrecoParameters.hh"
#include "G4NuclideTable.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -52,10 +53,13 @@ G4RadioactiveDecayPhysics::G4RadioactiveDecayPhysics(G4int)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetAugerCascade(true);
param->AddMsc("world","G4RadioactiveDecay");
param->AddPhysics("world","G4RadioactiveDecay");
G4NuclearLevelData::GetInstance()->GetParameters()->SetUseFilesNEW(true);
G4NuclearLevelData::GetInstance()->GetParameters()->SetStoreAllLevels(true);
G4DeexPrecoParameters* deex = G4NuclearLevelData::GetInstance()->GetParameters();
deex->SetUseFilesNEW(true);
deex->SetStoreAllLevels(true);
deex->SetMaxLifeTime(G4NuclideTable::GetInstance()->GetThresholdOfHalfLife()
/std::log(2.));
}
G4RadioactiveDecayPhysics::G4RadioactiveDecayPhysics(const G4String&)
@@ -1,4 +1,4 @@
$Id: History 102543 2017-02-08 14:16:52Z gcosmo $
$Id: History 104571 2017-06-06 13:45:47Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,10 +14,60 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
19-January-2017 P. Gumplinger (phys-ctor-em-V10-02-39)
06-June-2017 V.Ivanchenko (phys-ctor-em-V10-03-12)
- G4EmStandardPhysics_option3 - use G4UniversalFluctuation2017
for energy loss fluctuation of e+-, protons, anti_protons
01-June-2017 V.Ivanchenko (phys-ctor-em-V10-03-11)
- G4EmStandardPhysicsSS - use G4hCoulombScatteringModel to take into
account relativistic corrections
01-June-2017 V.Ivanchenko (phys-ctor-em-V10-03-10)
- G4EmStandardPhysicsWVI - use G4WentzelVIRelModel and
G4hCoulombScatteringModel to take into account relativistic
corrections
08-May-2017 V.Ivanchenko (phys-ctor-em-V10-03-09)
- G4EmStandardPhysics - use RayleighScattering and LivermorePhotoElectricModel
04-May-2017 V.Ivanchenko (phys-ctor-em-V10-03-08)
- G4EmStandardPhysics_option4 - set finalStep for all changed
10 um (except GenericIon), this will somehow slow down the
simulation but increase accuracy of range simulation
- G4EmParticleList - new class with the list of particles,
for whichg EM processes are instantiated
- G4EmModelActivator - fixed Opt4 and SS per region
29-April-2017 S.Incerti (phys-ctor-em-V10-03-07)
- added stationary Geant4-DNA constructors
25-April-2017 V.Ivanchenko (phys-ctor-em-V10-03-06)
- G4EmStandardPhysicsWVI - revert back
- G4EmStandardPhysicsSS - apply single scattering to all particles
(bug fix #1966)
27-March-2017 V.Ivanchenko (phys-ctor-em-V10-03-05)
- G4EmStandardPhysicsWVI - use G4WentzelVIRelModel and
G4hCoulombScatteringModel to take into account relativistic
corrections
19-January-2017 P. Gumplinger (phys-ctor-em-V10-03-04)
- add setCerenkov/ScintillationStackPhotons commands to
G4OpticalPhysicsMessenger and use them in G4OpticalPhysics
02-January-2017 S. Incerti (phys-ctor-em-V10-03-03)
- added elastic scattering process for ions to all DNA constructors
27-December-2016 S. Incerti (phys-ctor-em-V10-03-02)
- fixed compilation error
27-December-2016 S. Incerti (phys-ctor-em-V10-03-01)
- added G4EmDNAPhysics_option6
16-December-2016 V.Ivanchenko (phys-ctor-em-V10-03-00)
- G4EmModelActivator - use new access methods RegionsPhysics() and
TypesPhysics() instead of RegionsMsc() and TypesMsc()
02-December-2016 V.Ivanchenko (phys-ctor-em-V10-02-38)
- G4EmModelActivator - added initialisation of atomic deexcitation
for radioactive decay (also for the cases when radioactive
@@ -0,0 +1,70 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Based on the work of M. Terrissol and M. C. Bordage
//
// Users are requested to cite the following papers:
// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177
// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries,
// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840
//
// Authors of this class:
// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti
//
// 15.01.2014: creation
//
#ifndef G4EmDNAPhysics_option6_h
#define G4EmDNAPhysics_option6_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4EmDNAPhysics_option6 : public G4VPhysicsConstructor
{
public:
G4EmDNAPhysics_option6(G4int ver=1, const G4String& name="");
virtual ~G4EmDNAPhysics_option6();
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
G4int verbose;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
#endif
@@ -0,0 +1,57 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#ifndef G4EmDNAPhysics_stationary_h
#define G4EmDNAPhysics_stationary_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4EmDNAPhysics_stationary : public G4VPhysicsConstructor
{
public:
G4EmDNAPhysics_stationary(G4int ver = 1);
G4EmDNAPhysics_stationary(G4int ver, const G4String& name);
virtual ~G4EmDNAPhysics_stationary();
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
G4int verbose;
};
#endif
@@ -0,0 +1,57 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#ifndef G4EmDNAPhysics_stationary_option2_h
#define G4EmDNAPhysics_stationary_option2_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4EmDNAPhysics_stationary_option2 : public G4VPhysicsConstructor
{
public:
G4EmDNAPhysics_stationary_option2(G4int ver = 1);
G4EmDNAPhysics_stationary_option2(G4int ver, const G4String& name);
virtual ~G4EmDNAPhysics_stationary_option2();
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
G4int verbose;
};
#endif
@@ -0,0 +1,57 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#ifndef G4EmDNAPhysics_stationary_option4_h
#define G4EmDNAPhysics_stationary_option4_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4EmDNAPhysics_stationary_option4 : public G4VPhysicsConstructor
{
public:
G4EmDNAPhysics_stationary_option4(G4int ver = 1);
G4EmDNAPhysics_stationary_option4(G4int ver, const G4String& name);
virtual ~G4EmDNAPhysics_stationary_option4();
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
G4int verbose;
};
#endif
@@ -0,0 +1,57 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#ifndef G4EmDNAPhysics_stationary_option6_h
#define G4EmDNAPhysics_stationary_option6_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4EmDNAPhysics_stationary_option6 : public G4VPhysicsConstructor
{
public:
G4EmDNAPhysics_stationary_option6(G4int ver = 1);
G4EmDNAPhysics_stationary_option6(G4int ver, const G4String& name);
virtual ~G4EmDNAPhysics_stationary_option6();
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
G4int verbose;
};
#endif
@@ -0,0 +1,67 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmParticleList 99930 2016-10-11 16:34:52Z gunter $
//
//---------------------------------------------------------------------------
//
// ClassName: G4EmParticleList
//
// Author: V.Ivanchenko 04.05.2017
//
// Modified:
//
//----------------------------------------------------------------------------
//
// class description
//
// The class provides list of particles which have EM interactions
//
// class description - end
#ifndef G4EmParticleList_h
#define G4EmParticleList_h 1
#include "globals.hh"
#include <vector>
class G4EmParticleList {
public:
explicit G4EmParticleList();
~G4EmParticleList();
const std::vector<G4String>& PartNames() const;
private:
std::vector<G4String> pNames;
};
#endif
@@ -11,7 +11,7 @@
#
# Generated on : 10/01/2013
#
# $Id: sources.cmake 98736 2016-08-09 10:55:12Z gcosmo $
# $Id: sources.cmake 104020 2017-05-08 07:34:58Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -75,13 +75,19 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_em
G4EmDNAPhysics_option3.hh
G4EmDNAPhysics_option4.hh
G4EmDNAPhysics_option5.hh
G4EmDNAPhysics_option6.hh
G4EmDNAPhysics_option7.hh
G4EmDNAPhysics_stationary.hh
G4EmDNAPhysics_stationary_option2.hh
G4EmDNAPhysics_stationary_option4.hh
G4EmDNAPhysics_stationary_option6.hh
G4EmDNAPhysicsActivator.hh
G4EmLEPTSPhysics.hh
G4EmLivermorePhysics.hh
G4EmLivermorePolarizedPhysics.hh
G4EmLowEPPhysics.hh
G4EmModelActivator.hh
G4EmParticleList.hh
G4EmPenelopePhysics.hh
G4EmStandardPhysics.hh
G4EmStandardPhysicsGS.hh
@@ -102,13 +108,19 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_em
G4EmDNAPhysics_option3.cc
G4EmDNAPhysics_option4.cc
G4EmDNAPhysics_option5.cc
G4EmDNAPhysics_option6.cc
G4EmDNAPhysics_option7.cc
G4EmDNAPhysics_stationary.cc
G4EmDNAPhysics_stationary_option2.cc
G4EmDNAPhysics_stationary_option4.cc
G4EmDNAPhysics_stationary_option6.cc
G4EmDNAPhysicsActivator.cc
G4EmLEPTSPhysics.cc
G4EmLivermorePhysics.cc
G4EmLivermorePolarizedPhysics.cc
G4EmLowEPPhysics.cc
G4EmModelActivator.cc
G4EmParticleList.cc
G4EmPenelopePhysics.cc
G4EmStandardPhysics.cc
G4EmStandardPhysicsGS.cc
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmDNAPhysics.cc 99938 2016-10-12 08:06:52Z gcosmo $
// $Id: G4EmDNAPhysics.cc 102173 2017-01-09 13:19:42Z gcosmo $
// add elastic scattering processes of proton, hydrogen, helium, alpha+, alpha++
#include "G4EmDNAPhysics.hh"
@@ -182,39 +182,36 @@ void G4EmDNAPhysics::ConstructProcess()
ph->RegisterProcess(new G4DNAAttachment("e-_G4DNAAttachment"), particle);
} else if ( particleName == "proton" ) {
//ph->RegisterProcess(new G4DNAElastic("proton_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAElastic("proton_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("proton_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("proton_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("proton_G4DNAChargeDecrease"), particle);
} else if ( particleName == "hydrogen" ) {
//ph->RegisterProcess(new G4DNAElastic("hydrogen_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAElastic("hydrogen_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("hydrogen_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("hydrogen_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease"), particle);
} else if ( particleName == "alpha" ) {
//ph->RegisterProcess(new G4DNAElastic("alpha_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAElastic("alpha_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("alpha_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease"), particle);
} else if ( particleName == "alpha+" ) {
//ph->RegisterProcess(new G4DNAElastic("alpha+_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAElastic("alpha+_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha+_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("alpha+_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease"), particle);
} else if ( particleName == "helium" ) {
//ph->RegisterProcess(new G4DNAElastic("helium_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAElastic("helium_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("helium_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("helium_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("helium_G4DNAChargeIncrease"), particle);
// Extension to HZE proposed by Z. Francis
//SEB
} else if ( particleName == "GenericIon" ) {
ph->RegisterProcess(new G4DNAIonisation("GenericIon_G4DNAIonisation"), particle);
@@ -184,6 +184,8 @@ void G4EmDNAPhysics_option2::ConstructProcess()
} else if ( particleName == "proton" ) {
ph->RegisterProcess(new G4DNAElastic("proton_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("proton_G4DNAExcitation"), particle);
G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("proton_G4DNAIonisation");
@@ -208,6 +210,8 @@ void G4EmDNAPhysics_option2::ConstructProcess()
} else if ( particleName == "hydrogen" ) {
ph->RegisterProcess(new G4DNAElastic("hydrogen_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("hydrogen_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("hydrogen_G4DNAIonisation"), particle);
@@ -219,6 +223,8 @@ void G4EmDNAPhysics_option2::ConstructProcess()
} else if ( particleName == "alpha" ) {
ph->RegisterProcess(new G4DNAElastic("alpha_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("alpha_G4DNAIonisation"), particle);
@@ -230,6 +236,8 @@ void G4EmDNAPhysics_option2::ConstructProcess()
} else if ( particleName == "alpha+" ) {
ph->RegisterProcess(new G4DNAElastic("alpha+_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha+_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("alpha+_G4DNAIonisation"), particle);
@@ -242,6 +250,8 @@ void G4EmDNAPhysics_option2::ConstructProcess()
} else if ( particleName == "helium" ) {
ph->RegisterProcess(new G4DNAElastic("helium_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("helium_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("helium_G4DNAIonisation"), particle);
@@ -189,27 +189,32 @@ void G4EmDNAPhysics_option4::ConstructProcess()
//ph->RegisterProcess(new G4DNAAttachment("e-_G4DNAAttachment"), particle);
} else if ( particleName == "proton" ) {
ph->RegisterProcess(new G4DNAElastic("proton_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("proton_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("proton_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("proton_G4DNAChargeDecrease"), particle);
} else if ( particleName == "hydrogen" ) {
ph->RegisterProcess(new G4DNAElastic("hydrogen_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("hydrogen_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("hydrogen_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease"), particle);
} else if ( particleName == "alpha" ) {
ph->RegisterProcess(new G4DNAElastic("alpha_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("alpha_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease"), particle);
} else if ( particleName == "alpha+" ) {
ph->RegisterProcess(new G4DNAElastic("alpha+_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha+_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("alpha+_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease"), particle);
} else if ( particleName == "helium" ) {
ph->RegisterProcess(new G4DNAElastic("helium_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("helium_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("helium_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("helium_G4DNAChargeIncrease"), particle);
@@ -189,6 +189,8 @@ void G4EmDNAPhysics_option5::ConstructProcess()
} else if ( particleName == "proton" ) {
ph->RegisterProcess(new G4DNAElastic("proton_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("proton_G4DNAExcitation"), particle);
G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("proton_G4DNAIonisation");
@@ -213,6 +215,8 @@ void G4EmDNAPhysics_option5::ConstructProcess()
} else if ( particleName == "hydrogen" ) {
ph->RegisterProcess(new G4DNAElastic("hydrogen_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("hydrogen_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("hydrogen_G4DNAIonisation"), particle);
@@ -224,6 +228,8 @@ void G4EmDNAPhysics_option5::ConstructProcess()
} else if ( particleName == "alpha" ) {
ph->RegisterProcess(new G4DNAElastic("alpha_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("alpha_G4DNAIonisation"), particle);
@@ -235,6 +241,8 @@ void G4EmDNAPhysics_option5::ConstructProcess()
} else if ( particleName == "alpha+" ) {
ph->RegisterProcess(new G4DNAElastic("alpha+_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha+_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("alpha+_G4DNAIonisation"), particle);
@@ -247,6 +255,8 @@ void G4EmDNAPhysics_option5::ConstructProcess()
} else if ( particleName == "helium" ) {
ph->RegisterProcess(new G4DNAElastic("helium_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("helium_G4DNAExcitation"), particle);
//ph->RegisterProcess(new G4DNAIonisation("helium_G4DNAIonisation"), particle);
@@ -0,0 +1,302 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// Based on the work of M. Terrissol and M. C. Bordage
//
// Users are requested to cite the following papers:
// - M. Terrissol, A. Baudre, Radiat. Prot. Dosim. 31 (1990) 175-177
// - M.C. Bordage, J. Bordes, S. Edel, M. Terrissol, X. Franceries,
// M. Bardies, N. Lampe, S. Incerti, Phys. Med. 32 (2016) 1833-1840
//
// Authors of this class:
// M.C. Bordage, M. Terrissol, S. Edel, J. Bordes, S. Incerti
//
// 15.01.2014: creation
//
#include "G4EmDNAPhysics_option6.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAGenericIonsManager.hh"
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAOneStepThermalizationModel.hh"
#include "G4DNAElastic.hh"
#include "G4DNACPA100ElasticModel.hh"
#include "G4DNAIonisation.hh"
#include "G4DNACPA100IonisationModel.hh"
#include "G4DNAExcitation.hh"
#include "G4DNACPA100ExcitationModel.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNAChargeDecrease.hh"
#include "G4DNAChargeIncrease.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
// Warning : the following is needed in order to use EM Physics builders
// e+
#include "G4Positron.hh"
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
// gamma
#include "G4Gamma.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermoreComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermoreRayleighModel.hh"
#include "G4EmParameters.hh"
// end of warning
#include "G4LossTableManager.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option6);
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_option6::G4EmDNAPhysics_option6(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmDNAPhysics_option6"), verbose(ver)
{
// G4EmParameters::Instance()->SetDefaults();
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_option6::~G4EmDNAPhysics_option6()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_option6::ConstructParticle()
{
// bosons
G4Gamma::Gamma();
// leptons
G4Electron::Electron();
G4Positron::Positron();
// baryons
G4Proton::Proton();
G4GenericIon::GenericIonDefinition();
G4DNAGenericIonsManager * genericIonsManager;
genericIonsManager=G4DNAGenericIonsManager::Instance();
genericIonsManager->GetIon("alpha++");
genericIonsManager->GetIon("alpha+");
genericIonsManager->GetIon("helium");
genericIonsManager->GetIon("hydrogen");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_option6::ConstructProcess()
{
if(verbose > 1) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
//OLD
//aParticleIterator->reset();
//while( (*aParticleIterator)() )
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
while( (*myParticleIterator)() )
{
G4ParticleDefinition* particle = myParticleIterator->value();
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
// *** Solvation ***
G4DNAElectronSolvation* solvation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
G4DNAOneStepThermalizationModel* therm =
new G4DNAOneStepThermalizationModel();
therm->SetHighEnergyLimit(11.*eV); // limit of the CPA100 elastic model
solvation->SetEmModel(therm);
ph->RegisterProcess(solvation, particle);
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNACPA100ElasticModel());
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("e-_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(new G4DNACPA100ExcitationModel());
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("e-_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNACPA100IonisationModel());
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Vibrational excitation ***
//ph->RegisterProcess(new G4DNAVibExcitation("e-_G4DNAVibExcitation"), particle);
// *** Attachment ***
//ph->RegisterProcess(new G4DNAAttachment("e-_G4DNAAttachment"), particle);
} else if ( particleName == "proton" ) {
ph->RegisterProcess(new G4DNAElastic("proton_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("proton_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("proton_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("proton_G4DNAChargeDecrease"), particle);
} else if ( particleName == "hydrogen" ) {
ph->RegisterProcess(new G4DNAElastic("hydrogen_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("hydrogen_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("hydrogen_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease"), particle);
} else if ( particleName == "alpha" ) {
ph->RegisterProcess(new G4DNAElastic("alpha_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("alpha_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease"), particle);
} else if ( particleName == "alpha+" ) {
ph->RegisterProcess(new G4DNAElastic("alpha+_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("alpha+_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("alpha+_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease"), particle);
} else if ( particleName == "helium" ) {
ph->RegisterProcess(new G4DNAElastic("helium_G4DNAElastic"), particle);
ph->RegisterProcess(new G4DNAExcitation("helium_G4DNAExcitation"), particle);
ph->RegisterProcess(new G4DNAIonisation("helium_G4DNAIonisation"), particle);
ph->RegisterProcess(new G4DNAChargeIncrease("helium_G4DNAChargeIncrease"), particle);
} else if ( particleName == "GenericIon" ) {
ph->RegisterProcess(new G4DNAIonisation("GenericIon_G4DNAIonisation"), particle);
}
// Warning : the following particles and processes are needed by EM Physics builders
// They are taken from the default Livermore Physics list
// These particles are currently not handled by Geant4-DNA
// e+
else if (particleName == "e+") {
// Identical to G4EmStandardPhysics_option3
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
} else if (particleName == "gamma") {
G4double LivermoreHighEnergyLimit = GeV;
G4PhotoElectricEffect* thePhotoElectricEffect = new G4PhotoElectricEffect();
G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
new G4LivermorePhotoElectricModel();
theLivermorePhotoElectricModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
ph->RegisterProcess(thePhotoElectricEffect, particle);
G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
G4LivermoreComptonModel* theLivermoreComptonModel =
new G4LivermoreComptonModel();
theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
ph->RegisterProcess(theComptonScattering, particle);
G4GammaConversion* theGammaConversion = new G4GammaConversion();
G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
new G4LivermoreGammaConversionModel();
theLivermoreGammaConversionModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
ph->RegisterProcess(theGammaConversion, particle);
G4RayleighScattering* theRayleigh = new G4RayleighScattering();
G4LivermoreRayleighModel* theRayleighModel = new G4LivermoreRayleighModel();
theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theRayleigh->AddEmModel(0, theRayleighModel);
ph->RegisterProcess(theRayleigh, particle);
}
// Warning : end of particles and processes are needed by EM Physics builders
}
// Deexcitation
//
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -0,0 +1,535 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#include "G4EmDNAPhysics_stationary.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAGenericIonsManager.hh"
// *** Processes and models for Geant4-DNA
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAIonElasticModel.hh"
#include "G4DNAExcitation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNAIonisation.hh"
#include "G4DNAChargeDecrease.hh"
#include "G4DNAChargeIncrease.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
// Warning : the following is needed in order to use EM Physics builders
// e+
#include "G4Positron.hh"
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
// gamma
#include "G4Gamma.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermoreComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermoreRayleighModel.hh"
#include "G4EmParameters.hh"
// end of warning
#include "G4LossTableManager.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary);
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary::G4EmDNAPhysics_stationary(G4int ver)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary::G4EmDNAPhysics_stationary(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary::~G4EmDNAPhysics_stationary()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary::ConstructParticle()
{
// bosons
G4Gamma::Gamma();
// leptons
G4Electron::Electron();
G4Positron::Positron();
// baryons
G4Proton::Proton();
G4GenericIon::GenericIonDefinition();
G4DNAGenericIonsManager * genericIonsManager;
genericIonsManager=G4DNAGenericIonsManager::Instance();
genericIonsManager->GetIon("alpha++");
genericIonsManager->GetIon("alpha+");
genericIonsManager->GetIon("helium");
genericIonsManager->GetIon("hydrogen");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary::ConstructProcess()
{
if(verbose > 1) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
while( (*myParticleIterator)() )
{
G4ParticleDefinition* particle = myParticleIterator->value();
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAChampionElasticModel());
// or alternative model
//theDNAElasticProcess
//->SetEmModel(new G4DNAScreenedRutherfordElasticModel());
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("e-_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(new G4DNABornExcitationModel());
((G4DNABornExcitationModel*)(theDNAExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("e-_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNABornIonisationModel());
((G4DNABornIonisationModel*)(theDNAIonisationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Vibrational excitation ***
G4DNAVibExcitation* theDNAVibExcitationProcess =
new G4DNAVibExcitation("e-_G4DNAVibExcitation");
theDNAVibExcitationProcess->SetEmModel(new G4DNASancheExcitationModel());
((G4DNASancheExcitationModel*)(theDNAVibExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAVibExcitationProcess, particle);
// *** Attachment ***
G4DNAAttachment* theDNAAttachmentProcess =
new G4DNAAttachment("e-_G4DNAAttachment");
theDNAAttachmentProcess->SetEmModel(new G4DNAMeltonAttachmentModel());
((G4DNAMeltonAttachmentModel*)(theDNAAttachmentProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAAttachmentProcess, particle);
} else if ( particleName == "proton" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("proton_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)(theDNAElasticProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("proton_G4DNAExcitation");
theDNAExcitationProcess
->SetEmModel(new G4DNAMillerGreenExcitationModel(),1);
theDNAExcitationProcess
->SetEmModel(new G4DNABornExcitationModel(),2);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SetLowEnergyLimit(10*eV);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SetHighEnergyLimit(500*keV);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SelectStationary(true);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SetLowEnergyLimit(500*keV);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SetHighEnergyLimit(100*MeV);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("proton_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNARuddIonisationModel,1);
theDNAIonisationProcess->SetEmModel(new G4DNABornIonisationModel,2);
((G4DNARuddIonisationModel*)(theDNAIonisationProcess->EmModel(1)))
->SetLowEnergyLimit(0*eV);
((G4DNARuddIonisationModel*)(theDNAIonisationProcess->EmModel(1)))
->SetHighEnergyLimit(500*keV);
((G4DNARuddIonisationModel*)(theDNAIonisationProcess->EmModel(1)))
->SelectStationary(true);
((G4DNABornIonisationModel*)(theDNAIonisationProcess->EmModel(2)))
->SetLowEnergyLimit(500*keV);
((G4DNABornIonisationModel*)(theDNAIonisationProcess->EmModel(2)))
->SetHighEnergyLimit(100*MeV);
((G4DNABornIonisationModel*)(theDNAIonisationProcess->EmModel(2)))
->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("proton_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess
->SetEmModel(new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "hydrogen" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("hydrogen_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)(theDNAElasticProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("hydrogen_G4DNAExcitation");
theDNAExcitationProcess
->SetEmModel(new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)(theDNAExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("hydrogen_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNARuddIonisationModel());
((G4DNARuddIonisationModel*)(theDNAIonisationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess
->SetEmModel(new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "alpha" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)(theDNAElasticProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel
(new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)(theDNAExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNARuddIonisationModel());
((G4DNARuddIonisationModel*)(theDNAIonisationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel
(new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "alpha+" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha+_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)(theDNAElasticProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha+_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel
(new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha+_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNARuddIonisationModel());
((G4DNARuddIonisationModel*)(theDNAIonisationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel
(new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel
(new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "helium" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("helium_G4DNAElastic");
theDNAElasticProcess->SetEmModel
(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)(theDNAElasticProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("helium_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel
(new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)(theDNAExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("helium_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel
(new G4DNARuddIonisationModel());
((G4DNARuddIonisationModel*)(theDNAIonisationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("helium_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel
(new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "GenericIon" ) {
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("GenericIon_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)(theDNAIonisationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
}
// Warning : the following particles and processes are needed by EM Physics
// builders
// They are taken from the default Livermore Physics list
// These particles are currently not handled by Geant4-DNA
// e+
else if (particleName == "e+") {
// Identical to G4EmStandardPhysics_stationary
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
} else if (particleName == "gamma") {
G4double LivermoreHighEnergyLimit = GeV;
G4PhotoElectricEffect*
thePhotoElectricEffect = new G4PhotoElectricEffect();
G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
new G4LivermorePhotoElectricModel();
theLivermorePhotoElectricModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
ph->RegisterProcess(thePhotoElectricEffect, particle);
G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
G4LivermoreComptonModel* theLivermoreComptonModel =
new G4LivermoreComptonModel();
theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
ph->RegisterProcess(theComptonScattering, particle);
G4GammaConversion* theGammaConversion = new G4GammaConversion();
G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
new G4LivermoreGammaConversionModel();
theLivermoreGammaConversionModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
ph->RegisterProcess(theGammaConversion, particle);
G4RayleighScattering* theRayleigh = new G4RayleighScattering();
G4LivermoreRayleighModel* theRayleighModel =
new G4LivermoreRayleighModel();
theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theRayleigh->AddEmModel(0, theRayleighModel);
ph->RegisterProcess(theRayleigh, particle);
}
// Warning : end of particles and processes are needed by EM Physics build.
}
// Deexcitation
//
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
}
@@ -0,0 +1,547 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#include "G4EmDNAPhysics_stationary_option2.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAGenericIonsManager.hh"
// *** Processes and models for Geant4-DNA
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAIonElasticModel.hh"
#include "G4DNAExcitation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNAIonisation.hh"
#include "G4DNAChargeDecrease.hh"
#include "G4DNAChargeIncrease.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
// Warning : the following is needed in order to use EM Physics builders
// e+
#include "G4Positron.hh"
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
// gamma
#include "G4Gamma.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermoreComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermoreRayleighModel.hh"
#include "G4EmParameters.hh"
// end of warning
#include "G4LossTableManager.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option2);
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option2::G4EmDNAPhysics_stationary_option2(G4int ver)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option2"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option2::G4EmDNAPhysics_stationary_option2(G4int ver,
const G4String&)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option2"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option2::~G4EmDNAPhysics_stationary_option2()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary_option2::ConstructParticle()
{
// bosons
G4Gamma::Gamma();
// leptons
G4Electron::Electron();
G4Positron::Positron();
// baryons
G4Proton::Proton();
G4GenericIon::GenericIonDefinition();
G4DNAGenericIonsManager * genericIonsManager;
genericIonsManager=G4DNAGenericIonsManager::Instance();
genericIonsManager->GetIon("alpha++");
genericIonsManager->GetIon("alpha+");
genericIonsManager->GetIon("helium");
genericIonsManager->GetIon("hydrogen");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary_option2::ConstructProcess()
{
if(verbose > 1) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
while( (*myParticleIterator)() )
{
G4ParticleDefinition* particle = myParticleIterator->value();
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAChampionElasticModel());
// or alternative model
//theDNAElasticProcess
//->SetEmModel(new G4DNAScreenedRutherfordElasticModel());
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("e-_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(new G4DNABornExcitationModel());
((G4DNABornExcitationModel*)(theDNAExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("e-_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNABornIonisationModel());
((G4DNABornIonisationModel*)(theDNAIonisationProcess->EmModel()))
->SelectStationary(true);
//
((G4DNABornIonisationModel*)(theDNAIonisationProcess->EmModel()))
->SelectFasterComputation(true);
//
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Vibrational excitation ***
G4DNAVibExcitation* theDNAVibExcitationProcess =
new G4DNAVibExcitation("e-_G4DNAVibExcitation");
theDNAVibExcitationProcess->SetEmModel(new G4DNASancheExcitationModel());
((G4DNASancheExcitationModel*)(theDNAVibExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAVibExcitationProcess, particle);
// *** Attachment ***
G4DNAAttachment* theDNAAttachmentProcess =
new G4DNAAttachment("e-_G4DNAAttachment");
theDNAAttachmentProcess->SetEmModel(new G4DNAMeltonAttachmentModel());
((G4DNAMeltonAttachmentModel*)(theDNAAttachmentProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAAttachmentProcess, particle);
} else if ( particleName == "proton" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("proton_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)(theDNAElasticProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("proton_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel
(new G4DNAMillerGreenExcitationModel(),1);
theDNAExcitationProcess->SetEmModel
(new G4DNABornExcitationModel(),2);
((G4DNAMillerGreenExcitationModel*)(theDNAExcitationProcess->EmModel(1)))
->SetLowEnergyLimit(10*eV);
((G4DNAMillerGreenExcitationModel*)(theDNAExcitationProcess->EmModel(1)))
->SetHighEnergyLimit(500*keV);
((G4DNAMillerGreenExcitationModel*)(theDNAExcitationProcess->EmModel(1)))
->SelectStationary(true);
((G4DNABornExcitationModel*)(theDNAExcitationProcess->EmModel(2)))
->SetLowEnergyLimit(500*keV);
((G4DNABornExcitationModel*)(theDNAExcitationProcess->EmModel(2)))
->SetHighEnergyLimit(100*MeV);
((G4DNABornExcitationModel*)(theDNAExcitationProcess->EmModel(2)))
->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("proton_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel,1);
theDNAIonisationProcess->SetEmModel(
new G4DNABornIonisationModel,2);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SetLowEnergyLimit(0*eV);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SetHighEnergyLimit(500*keV);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SelectStationary(true);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SetLowEnergyLimit(500*keV);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SetHighEnergyLimit(100*MeV);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SelectStationary(true);
//
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SelectFasterComputation(true);
//
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("proton_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "hydrogen" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("hydrogen_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)(theDNAElasticProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("hydrogen_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)(theDNAExcitationProcess->EmModel()))
->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("hydrogen_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "alpha" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "alpha+" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha+_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha+_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha+_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "helium" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("helium_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("helium_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("helium_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("helium_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "GenericIon" ) {
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("GenericIon_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
}
// Warning : the following particles and processes are needed by EM Physics
// builders
// They are taken from the default Livermore Physics list
// These particles are currently not handled by Geant4-DNA
// e+
else if (particleName == "e+") {
// Identical to G4EmStandardPhysics_stationary
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
} else if (particleName == "gamma") {
G4double LivermoreHighEnergyLimit = GeV;
G4PhotoElectricEffect* thePhotoElectricEffect =
new G4PhotoElectricEffect();
G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
new G4LivermorePhotoElectricModel();
theLivermorePhotoElectricModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
ph->RegisterProcess(thePhotoElectricEffect, particle);
G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
G4LivermoreComptonModel* theLivermoreComptonModel =
new G4LivermoreComptonModel();
theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
ph->RegisterProcess(theComptonScattering, particle);
G4GammaConversion* theGammaConversion = new G4GammaConversion();
G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
new G4LivermoreGammaConversionModel();
theLivermoreGammaConversionModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
ph->RegisterProcess(theGammaConversion, particle);
G4RayleighScattering* theRayleigh = new G4RayleighScattering();
G4LivermoreRayleighModel* theRayleighModel =
new G4LivermoreRayleighModel();
theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theRayleigh->AddEmModel(0, theRayleighModel);
ph->RegisterProcess(theRayleigh, particle);
}
// Warning : end of particles and processes are needed by EM Physics build.
}
// Deexcitation
//
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
de->SetFluo(true);
}
@@ -0,0 +1,549 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#include "G4EmDNAPhysics_stationary_option4.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAGenericIonsManager.hh"
// *** Processes and models for Geant4-DNA
#include "G4DNAElastic.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAIonElasticModel.hh"
#include "G4DNAExcitation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNAIonisation.hh"
#include "G4DNAChargeDecrease.hh"
#include "G4DNAChargeIncrease.hh"
#include "G4DNAEmfietzoglouIonisationModel.hh"
#include "G4DNAEmfietzoglouExcitationModel.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
// Warning : the following is needed in order to use EM Physics builders
// e+
#include "G4Positron.hh"
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
// gamma
#include "G4Gamma.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermoreComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermoreRayleighModel.hh"
#include "G4EmParameters.hh"
// end of warning
#include "G4LossTableManager.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option4);
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option4::G4EmDNAPhysics_stationary_option4(G4int ver)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option4"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option4::G4EmDNAPhysics_stationary_option4(G4int ver,
const G4String&)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option4"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option4::~G4EmDNAPhysics_stationary_option4()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary_option4::ConstructParticle()
{
// bosons
G4Gamma::Gamma();
// leptons
G4Electron::Electron();
G4Positron::Positron();
// baryons
G4Proton::Proton();
G4GenericIon::GenericIonDefinition();
G4DNAGenericIonsManager * genericIonsManager;
genericIonsManager=G4DNAGenericIonsManager::Instance();
genericIonsManager->GetIon("alpha++");
genericIonsManager->GetIon("alpha+");
genericIonsManager->GetIon("helium");
genericIonsManager->GetIon("hydrogen");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary_option4::ConstructProcess()
{
if(verbose > 1) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
while( (*myParticleIterator)() )
{
G4ParticleDefinition* particle = myParticleIterator->value();
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("e-_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAUeharaScreenedRutherfordElasticModel());
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("e-_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAEmfietzoglouExcitationModel());
((G4DNAEmfietzoglouExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("e-_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNAEmfietzoglouIonisationModel());
((G4DNAEmfietzoglouIonisationModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Vibrational excitation ***
G4DNAVibExcitation* theDNAVibExcitationProcess =
new G4DNAVibExcitation("e-_G4DNAVibExcitation");
theDNAVibExcitationProcess->SetEmModel(
new G4DNASancheExcitationModel());
((G4DNASancheExcitationModel*)
(theDNAVibExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAVibExcitationProcess, particle);
// *** Attachment ***
G4DNAAttachment* theDNAAttachmentProcess =
new G4DNAAttachment("e-_G4DNAAttachment");
theDNAAttachmentProcess->SetEmModel(
new G4DNAMeltonAttachmentModel());
((G4DNAMeltonAttachmentModel*)
(theDNAAttachmentProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAAttachmentProcess, particle);
} else if ( particleName == "proton" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("proton_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("proton_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel(),1);
theDNAExcitationProcess->SetEmModel(
new G4DNABornExcitationModel(),2);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SetLowEnergyLimit(10*eV);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SetHighEnergyLimit(500*keV);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SelectStationary(true);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SetLowEnergyLimit(500*keV);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SetHighEnergyLimit(100*MeV);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("proton_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel,1);
theDNAIonisationProcess->SetEmModel(
new G4DNABornIonisationModel,2);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SetLowEnergyLimit(0*eV);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SetHighEnergyLimit(500*keV);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SelectStationary(true);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SetLowEnergyLimit(500*keV);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SetHighEnergyLimit(100*MeV);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SelectStationary(true);
//
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SelectFasterComputation(true);
//
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("proton_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "hydrogen" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("hydrogen_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("hydrogen_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("hydrogen_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "alpha" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "alpha+" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha+_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha+_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha+_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "helium" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("helium_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("helium_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("helium_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("helium_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "GenericIon" ) {
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("GenericIon_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
}
// Warning : the following particles and processes are needed by EM Physics
// builders
// They are taken from the default Livermore Physics list
// These particles are currently not handled by Geant4-DNA
// e+
else if (particleName == "e+") {
// Identical to G4EmStandardPhysics_stationary
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
} else if (particleName == "gamma") {
G4double LivermoreHighEnergyLimit = GeV;
G4PhotoElectricEffect* thePhotoElectricEffect =
new G4PhotoElectricEffect();
G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
new G4LivermorePhotoElectricModel();
theLivermorePhotoElectricModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
ph->RegisterProcess(thePhotoElectricEffect, particle);
G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
G4LivermoreComptonModel* theLivermoreComptonModel =
new G4LivermoreComptonModel();
theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
ph->RegisterProcess(theComptonScattering, particle);
G4GammaConversion* theGammaConversion = new G4GammaConversion();
G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
new G4LivermoreGammaConversionModel();
theLivermoreGammaConversionModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
ph->RegisterProcess(theGammaConversion, particle);
G4RayleighScattering* theRayleigh = new G4RayleighScattering();
G4LivermoreRayleighModel* theRayleighModel =
new G4LivermoreRayleighModel();
theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theRayleigh->AddEmModel(0, theRayleighModel);
ph->RegisterProcess(theRayleigh, particle);
}
// Warning : end of particles and processes are needed by EM Physics build.
}
// Deexcitation
//
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
}
@@ -0,0 +1,544 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
#include "G4EmDNAPhysics_stationary_option6.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAGenericIonsManager.hh"
// *** Processes and models for Geant4-DNA
#include "G4DNAElastic.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAIonElasticModel.hh"
#include "G4DNAExcitation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNAIonisation.hh"
#include "G4DNAChargeDecrease.hh"
#include "G4DNAChargeIncrease.hh"
#include "G4DNACPA100IonisationModel.hh"
#include "G4DNACPA100ExcitationModel.hh"
#include "G4DNACPA100ElasticModel.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
// Warning : the following is needed in order to use EM Physics builders
// e+
#include "G4Positron.hh"
#include "G4eMultipleScattering.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
#include "G4eplusAnnihilation.hh"
// gamma
#include "G4Gamma.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4ComptonScattering.hh"
#include "G4LivermoreComptonModel.hh"
#include "G4GammaConversion.hh"
#include "G4LivermoreGammaConversionModel.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermoreRayleighModel.hh"
#include "G4EmParameters.hh"
// end of warning
#include "G4LossTableManager.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option6);
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option6::G4EmDNAPhysics_stationary_option6(G4int ver)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option6"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option6::G4EmDNAPhysics_stationary_option6(G4int ver,
const G4String&)
: G4VPhysicsConstructor("G4EmDNAPhysics_stationary_option6"), verbose(ver)
{
G4EmParameters* param = G4EmParameters::Instance();
param->SetDefaults();
param->SetFluo(true);
param->SetAuger(true);
param->SetAugerCascade(true);
param->SetDeexcitationIgnoreCut(true);
SetPhysicsType(bElectromagnetic);
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAPhysics_stationary_option6::~G4EmDNAPhysics_stationary_option6()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary_option6::ConstructParticle()
{
// bosons
G4Gamma::Gamma();
// leptons
G4Electron::Electron();
G4Positron::Positron();
// baryons
G4Proton::Proton();
G4GenericIon::GenericIonDefinition();
G4DNAGenericIonsManager * genericIonsManager;
genericIonsManager=G4DNAGenericIonsManager::Instance();
genericIonsManager->GetIon("alpha++");
genericIonsManager->GetIon("alpha+");
genericIonsManager->GetIon("helium");
genericIonsManager->GetIon("hydrogen");
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAPhysics_stationary_option6::ConstructProcess()
{
if(verbose > 1) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
while( (*myParticleIterator)() )
{
G4ParticleDefinition* particle = myParticleIterator->value();
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("e-_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNACPA100ElasticModel());
((G4DNACPA100ElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("e-_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(new G4DNACPA100ExcitationModel());
((G4DNACPA100ExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("e-_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNACPA100IonisationModel());
((G4DNACPA100IonisationModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Vibrational excitation ***
G4DNAVibExcitation* theDNAVibExcitationProcess =
new G4DNAVibExcitation("e-_G4DNAVibExcitation");
theDNAVibExcitationProcess->SetEmModel(new G4DNASancheExcitationModel());
((G4DNASancheExcitationModel*)
(theDNAVibExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAVibExcitationProcess, particle);
// *** Attachment ***
G4DNAAttachment* theDNAAttachmentProcess =
new G4DNAAttachment("e-_G4DNAAttachment");
theDNAAttachmentProcess->SetEmModel(new G4DNAMeltonAttachmentModel());
((G4DNAMeltonAttachmentModel*)
(theDNAAttachmentProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAAttachmentProcess, particle);
} else if ( particleName == "proton" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("proton_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("proton_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel(),1);
theDNAExcitationProcess->SetEmModel(
new G4DNABornExcitationModel(),2);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SetLowEnergyLimit(10*eV);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SetHighEnergyLimit(500*keV);
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel(1)))->SelectStationary(true);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SetLowEnergyLimit(500*keV);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SetHighEnergyLimit(100*MeV);
((G4DNABornExcitationModel*)
(theDNAExcitationProcess->EmModel(2)))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("proton_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel,1);
theDNAIonisationProcess->SetEmModel(
new G4DNABornIonisationModel,2);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SetLowEnergyLimit(0*eV);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SetHighEnergyLimit(500*keV);
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel(1)))->SelectStationary(true);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SetLowEnergyLimit(500*keV);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SetHighEnergyLimit(100*MeV);
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SelectStationary(true);
//
((G4DNABornIonisationModel*)
(theDNAIonisationProcess->EmModel(2)))->SelectFasterComputation(true);
//
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("proton_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "hydrogen" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("hydrogen_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("hydrogen_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("hydrogen_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)(
theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("hydrogen_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)(
theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "alpha" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
} else if ( particleName == "alpha+" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("alpha+_G4DNAElastic");
theDNAElasticProcess->SetEmModel(
new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("alpha+_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("alpha+_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge decrease ***
G4DNAChargeDecrease* theDNAChargeDecreaseProcess =
new G4DNAChargeDecrease("alpha+_G4DNAChargeDecrease");
theDNAChargeDecreaseProcess->SetEmModel(
new G4DNADingfelderChargeDecreaseModel());
((G4DNADingfelderChargeDecreaseModel*)
(theDNAChargeDecreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeDecreaseProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("alpha+_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "helium" ) {
// *** Elastic ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("helium_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAIonElasticModel());
((G4DNAIonElasticModel*)
(theDNAElasticProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("helium_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(
new G4DNAMillerGreenExcitationModel());
((G4DNAMillerGreenExcitationModel*)
(theDNAExcitationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAExcitationProcess, particle);
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("helium_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
// *** Charge increase ***
G4DNAChargeIncrease* theDNAChargeIncreaseProcess =
new G4DNAChargeIncrease("helium_G4DNAChargeIncrease");
theDNAChargeIncreaseProcess->SetEmModel(
new G4DNADingfelderChargeIncreaseModel());
((G4DNADingfelderChargeIncreaseModel*)
(theDNAChargeIncreaseProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAChargeIncreaseProcess, particle);
} else if ( particleName == "GenericIon" ) {
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("GenericIon_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(
new G4DNARuddIonisationExtendedModel());
((G4DNARuddIonisationExtendedModel*)
(theDNAIonisationProcess->EmModel()))->SelectStationary(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
}
// Warning : the following particles and processes are needed by EM Physics
// builders
// They are taken from the default Livermore Physics list
// These particles are currently not handled by Geant4-DNA
// e+
else if (particleName == "e+") {
// Identical to G4EmStandardPhysics_stationary
G4eMultipleScattering* msc = new G4eMultipleScattering();
msc->SetStepLimitType(fUseDistanceToBoundary);
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
} else if (particleName == "gamma") {
G4double LivermoreHighEnergyLimit = GeV;
G4PhotoElectricEffect* thePhotoElectricEffect =
new G4PhotoElectricEffect();
G4LivermorePhotoElectricModel* theLivermorePhotoElectricModel =
new G4LivermorePhotoElectricModel();
theLivermorePhotoElectricModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
thePhotoElectricEffect->AddEmModel(0, theLivermorePhotoElectricModel);
ph->RegisterProcess(thePhotoElectricEffect, particle);
G4ComptonScattering* theComptonScattering = new G4ComptonScattering();
G4LivermoreComptonModel* theLivermoreComptonModel =
new G4LivermoreComptonModel();
theLivermoreComptonModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theComptonScattering->AddEmModel(0, theLivermoreComptonModel);
ph->RegisterProcess(theComptonScattering, particle);
G4GammaConversion* theGammaConversion = new G4GammaConversion();
G4LivermoreGammaConversionModel* theLivermoreGammaConversionModel =
new G4LivermoreGammaConversionModel();
theLivermoreGammaConversionModel
->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theGammaConversion->AddEmModel(0, theLivermoreGammaConversionModel);
ph->RegisterProcess(theGammaConversion, particle);
G4RayleighScattering* theRayleigh = new G4RayleighScattering();
G4LivermoreRayleighModel* theRayleighModel =
new G4LivermoreRayleighModel();
theRayleighModel->SetHighEnergyLimit(LivermoreHighEnergyLimit);
theRayleigh->AddEmModel(0, theRayleighModel);
ph->RegisterProcess(theRayleigh, particle);
}
// Warning : end of particles and processes are needed by EM Physics build.
}
// Deexcitation
//
G4VAtomDeexcitation* de = new G4UAtomicDeexcitation();
G4LossTableManager::Instance()->SetAtomDeexcitation(de);
}
@@ -67,6 +67,7 @@
#include "G4DummyModel.hh"
#include "G4EmProcessSubType.hh"
#include "G4PhysicsListHelper.hh"
#include "G4EmParticleList.hh"
#include "G4MicroElecElastic.hh"
#include "G4MicroElecElasticModel.hh"
@@ -86,6 +87,7 @@
#include "G4eCoulombScatteringModel.hh"
#include "G4IonCoulombScatteringModel.hh"
#include "G4ionIonisation.hh"
#include "G4KleinNishinaModel.hh"
#include "G4CoulombScattering.hh"
#include "G4eCoulombScatteringModel.hh"
@@ -94,6 +96,7 @@
#include "G4RayleighScattering.hh"
#include "G4UrbanMscModel.hh"
#include "G4GoudsmitSaundersonMscModel.hh"
#include "G4LowEPComptonModel.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4LivermoreComptonModel.hh"
@@ -142,15 +145,15 @@ G4EmModelActivator::G4EmModelActivator(const G4String& emphys)
void G4EmModelActivator::ActivateEmOptions()
{
const std::vector<G4String> regnamesMSC = theParameters->RegionsMsc();
G4int nreg = regnamesMSC.size();
const std::vector<G4String> regnamesPhys = theParameters->RegionsPhysics();
G4int nreg = regnamesPhys.size();
if(0 == nreg) { return; }
G4int verbose = theParameters->Verbose() - 1;
if(verbose > 0) {
G4cout << "### G4EmModelActivator::ActivateEmOptions for " << nreg << " regions"
<< G4endl;
}
const std::vector<G4String> typesMSC = theParameters->TypesMsc();
const std::vector<G4String> typesPhys = theParameters->TypesMsc();
// start configuration of models
const G4ParticleDefinition* elec = G4Electron::Electron();
@@ -159,18 +162,19 @@ void G4EmModelActivator::ActivateEmOptions()
G4LossTableManager* man = G4LossTableManager::Instance();
G4EmConfigurator* em_config = man->EmConfigurator();
G4VAtomDeexcitation* adeexc = man->AtomDeexcitation();
G4ParticleTable* table = G4ParticleTable::GetParticleTable();
G4VEmModel* mod;
for(G4int i=0; i<nreg; ++i) {
G4String reg = regnamesMSC[i];
G4String reg = regnamesPhys[i];
if(verbose > 0) {
G4cout << i << ". region <" << reg << ">; type <" << typesMSC[i] << "> "
G4cout << i << ". region <" << reg << ">; type <" << typesPhys[i] << "> "
<< G4endl;
}
if(baseName == typesMSC[i]) { continue; }
if(baseName == typesPhys[i]) { continue; }
if("G4EmStandard" == typesMSC[i]) {
if("G4EmStandard" == typesPhys[i]) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetLocked(true);
em_config->SetExtraEmModel("e-", "msc", msc, reg, 0.0, 100*MeV);
@@ -178,8 +182,8 @@ void G4EmModelActivator::ActivateEmOptions()
msc->SetLocked(true);
em_config->SetExtraEmModel("e+", "msc", msc, reg, 0.0, 100*MeV);
} else if("G4EmStandard_opt1" == typesMSC[i] ||
"G4EmStandard_opt2" == typesMSC[i]) {
} else if("G4EmStandard_opt1" == typesPhys[i] ||
"G4EmStandard_opt2" == typesPhys[i]) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetStepLimitType(fMinimal);
msc->SetRangeFactor(0.2);
@@ -191,7 +195,7 @@ void G4EmModelActivator::ActivateEmOptions()
msc->SetLocked(true);
em_config->SetExtraEmModel("e+", "msc", msc, reg, 0.0, 100*MeV);
} else if("G4EmStandard_opt3" == typesMSC[i]) {
} else if("G4EmStandard_opt3" == typesPhys[i]) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetStepLimitType(fUseDistanceToBoundary);
msc->SetLocked(true);
@@ -212,8 +216,14 @@ void G4EmModelActivator::ActivateEmOptions()
FindOrAddProcess(phot, "Rayl");
mod = new G4LivermoreRayleighModel();
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
FindOrAddProcess(phot, "phot");
mod = new G4LivermorePhotoElectricModel();
em_config->SetExtraEmModel("gamma", "phot", mod, reg);
FindOrAddProcess(phot, "compt");
mod = new G4KleinNishinaModel();
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
} else if("G4EmStandard_opt4" == typesMSC[i]) {
} else if("G4EmStandard_opt4" == typesPhys[i]) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetStepLimitType(fUseDistanceToBoundary);
msc->SetRangeFactor(0.02);
@@ -226,13 +236,24 @@ void G4EmModelActivator::ActivateEmOptions()
em_config->SetExtraEmModel("e+", "msc", msc, reg, 0.0, 100*MeV);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(reg, true, false, false);
theParameters->SetStepFunction(0.2, 10*um);
theParameters->SetStepFunctionMuHad(0.2, 10*um);
}
theParameters->DefineRegParamForDeex(adeexc);
FindOrAddProcess(phot, "Rayl");
mod = new G4LivermoreRayleighModel();
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
FindOrAddProcess(phot, "phot");
mod = new G4LivermorePhotoElectricModel();
em_config->SetExtraEmModel("gamma", "phot", mod, reg);
FindOrAddProcess(phot, "compt");
mod = new G4KleinNishinaModel();
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
mod = new G4LowEPComptonModel();
mod->SetHighEnergyLimit(20*MeV);
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
} else if("G4EmStandardGS" == typesMSC[i]) {
} else if("G4EmStandardGS" == typesPhys[i]) {
G4GoudsmitSaundersonMscModel* msc = new G4GoudsmitSaundersonMscModel();
msc->SetStepLimitType(fUseSafetyPlus);
msc->SetRangeFactor(0.1);
@@ -244,7 +265,7 @@ void G4EmModelActivator::ActivateEmOptions()
msc->SetLocked(true);
em_config->SetExtraEmModel("e+", "msc", msc, reg, 0.0, 100*MeV);
} else if("G4EmStandardWVI" == typesMSC[i]) {
} else if("G4EmStandardWVI" == typesPhys[i]) {
G4WentzelVIModel* msc = new G4WentzelVIModel();
msc->SetLocked(true);
em_config->SetExtraEmModel("e-", "msc", msc, reg, 0.0, 100*MeV);
@@ -260,48 +281,36 @@ void G4EmModelActivator::ActivateEmOptions()
em_config->SetExtraEmModel("e+", "CoulombScat", mod, reg, 0.0, 100*MeV);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(regnamesMSC[i], true, false, false);
theParameters->SetDeexActiveRegion(regnamesPhys[i], true, false, false);
}
theParameters->DefineRegParamForDeex(adeexc);
} else if("G4EmStandardSS" == typesMSC[i] &&
} else if("G4EmStandardSS" == typesPhys[i] &&
baseName != "G4EmStandard_opt3") {
G4eCoulombScatteringModel* sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel("e-", "CoulombScat", sc, reg);
sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel("e+", "CoulombScat", sc, reg);
sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel("mu+", "CoulombScat", sc, reg);
sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel("pi+", "CoulombScat", sc, reg);
sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel("kaon+", "CoulombScat", sc, reg);
sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel("proton", "CoulombScat", sc, reg);
G4EmParticleList emList;
for(const auto& particleName : emList.PartNames()) {
G4ParticleDefinition* particle = table->FindParticle(particleName);
if(particle && 0.0 != particle->GetPDGCharge()) {
FindOrAddProcess(particle, "CoulombScat");
G4eCoulombScatteringModel* sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel(particleName, "CoulombScat", sc, reg);
if(particleName == "mu+" || particleName == "mu-") {
em_config->SetExtraEmModel(particleName, "muMsc",
new G4DummyModel(), reg);
} else {
em_config->SetExtraEmModel(particleName, "msc",
new G4DummyModel(), reg);
}
}
}
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(regnamesMSC[i], true, true, true);
theParameters->SetDeexActiveRegion(regnamesPhys[i], true, true, true);
}
theParameters->DefineRegParamForDeex(adeexc);
} else if("G4EmLivermore" == typesMSC[i]) {
} else if("G4EmLivermore" == typesPhys[i]) {
mod = new G4LivermorePhotoElectricModel();
em_config->SetExtraEmModel("gamma", "phot", mod, reg);
@@ -321,11 +330,11 @@ void G4EmModelActivator::ActivateEmOptions()
em_config->SetExtraEmModel("e-", "eBrem", mod, reg, 0.0, 1*GeV);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(regnamesMSC[i], true, false, false);
theParameters->SetDeexActiveRegion(regnamesPhys[i], true, false, false);
}
theParameters->DefineRegParamForDeex(adeexc);
} else if("G4EmPenelope" == typesMSC[i]) {
} else if("G4EmPenelope" == typesPhys[i]) {
mod = new G4PenelopePhotoElectricModel();
em_config->SetExtraEmModel("gamma", "phot", mod, reg);
mod = new G4PenelopeComptonModel();
@@ -352,11 +361,11 @@ void G4EmModelActivator::ActivateEmOptions()
em_config->SetExtraEmModel("e+", "annihil", mod, reg, 0.0, 1*GeV);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(regnamesMSC[i], true, false, false);
theParameters->SetDeexActiveRegion(regnamesPhys[i], true, false, false);
}
theParameters->DefineRegParamForDeex(adeexc);
} else if("G4RadioactiveDecay" == typesMSC[i]) {
} else if("G4RadioactiveDecay" == typesPhys[i]) {
if(G4Threading::IsMasterThread()) {
theParameters->SetFluo(true);
@@ -369,7 +378,7 @@ void G4EmModelActivator::ActivateEmOptions()
} else {
if(verbose > 0 && G4Threading::IsMasterThread()) {
G4cout << "### G4EmModelActivator::ActivateEmOptions WARNING: \n"
<< " EM Physics configuration name <" << typesMSC[i]
<< " EM Physics configuration name <" << typesPhys[i]
<< "> is not known - ignored" << G4endl;
}
}
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmParticleList 99930 2016-10-11 16:34:52Z gunter $
//
//---------------------------------------------------------------------------
//
// ClassName: G4EmParticleList
//
// Author: V.Ivanchenko 04.05.2017
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4EmParticleList.hh"
G4EmParticleList::G4EmParticleList()
{
pNames =
{
"gamma", "e-", "e+", "mu+", "mu-",
"pi+", "pi-", "kaon+", "kaon-", "proton",
"anti_proton", "alpha", "He3", "GenericIon", "B+",
"B-", "D+", "D-", "Ds+", "Ds-",
"anti_He3", "anti_alpha","anti_deuteron","anti_lambda_c+","anti_omega-",
"anti_sigma_c+","anti_sigma_c++", "anti_sigma+", "anti_sigma-","anti_triton",
"anti_xi_c+", "anti_xi-", "deuteron", "lambda_c+", "omega-",
"sigma_c+", "sigma_c++", "sigma+", "sigma-", "tau+",
"tau-", "triton", "xi_c+", "xi-"
};
}
G4EmParticleList::~G4EmParticleList()
{}
const std::vector<G4String>& G4EmParticleList::PartNames() const
{
return pNames;
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics.cc 99938 2016-10-12 08:06:52Z gcosmo $
// $Id: G4EmStandardPhysics.cc 104043 2017-05-09 07:47:10Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -51,6 +51,8 @@
#include "G4ComptonScattering.hh"
#include "G4GammaConversion.hh"
#include "G4PhotoElectricEffect.hh"
#include "G4RayleighScattering.hh"
#include "G4LivermorePhotoElectricModel.hh"
#include "G4eMultipleScattering.hh"
#include "G4MuMultipleScattering.hh"
@@ -203,9 +205,13 @@ void G4EmStandardPhysics::ConstructProcess()
if (particleName == "gamma") {
ph->RegisterProcess(new G4PhotoElectricEffect(), particle);
G4PhotoElectricEffect* pee = new G4PhotoElectricEffect();
pee->SetEmModel(new G4LivermorePhotoElectricModel(), 1);
ph->RegisterProcess(pee, particle);
ph->RegisterProcess(new G4ComptonScattering(), particle);
ph->RegisterProcess(new G4GammaConversion(), particle);
ph->RegisterProcess(new G4RayleighScattering(), particle);
} else if (particleName == "e-") {
@@ -60,6 +60,7 @@
#include "G4hMultipleScattering.hh"
#include "G4CoulombScattering.hh"
#include "G4eCoulombScatteringModel.hh"
#include "G4hCoulombScatteringModel.hh"
#include "G4WentzelVIModel.hh"
#include "G4UrbanMscModel.hh"
@@ -181,14 +182,15 @@ void G4EmStandardPhysicsSS::ConstructProcess()
G4hBremsstrahlung* pb = new G4hBremsstrahlung();
G4hPairProduction* pp = new G4hPairProduction();
// muon & hadron multiple scattering
// muon & hadron scattering
G4CoulombScattering* muss = new G4CoulombScattering();
muss->SetEmModel(new G4hCoulombScatteringModel(), 1);
G4CoulombScattering* piss = new G4CoulombScattering();
piss->SetEmModel(new G4hCoulombScatteringModel(), 1);
G4CoulombScattering* kss = new G4CoulombScattering();
kss->SetEmModel(new G4hCoulombScatteringModel(), 1);
G4CoulombScattering* pss = new G4CoulombScattering();
G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
pss->SetEmModel(new G4hCoulombScatteringModel(), 1);
// Add standard EM Processes
auto myParticleIterator=GetParticleIterator();
@@ -304,8 +306,8 @@ void G4EmStandardPhysicsSS::ConstructProcess()
particleName == "xi_c+" ||
particleName == "xi-" ) {
ph->RegisterProcess(hmsc, particle);
ph->RegisterProcess(new G4hIonisation(), particle);
ph->RegisterProcess(new G4CoulombScattering(), particle);
}
}
@@ -60,6 +60,8 @@
#include "G4hMultipleScattering.hh"
#include "G4CoulombScattering.hh"
#include "G4WentzelVIModel.hh"
#include "G4WentzelVIRelModel.hh"
#include "G4hCoulombScatteringModel.hh"
#include "G4MuBremsstrahlungModel.hh"
#include "G4MuPairProductionModel.hh"
@@ -181,20 +183,24 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
// muon & hadron multiple scattering
G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
mumsc->SetEmModel(new G4WentzelVIModel());
mumsc->SetEmModel(new G4WentzelVIRelModel());
G4CoulombScattering* muss = new G4CoulombScattering();
muss->SetEmModel(new G4hCoulombScatteringModel(), 1);
G4MuMultipleScattering* pimsc = new G4MuMultipleScattering();
pimsc->SetEmModel(new G4WentzelVIModel());
pimsc->SetEmModel(new G4WentzelVIRelModel());
G4CoulombScattering* piss = new G4CoulombScattering();
piss->SetEmModel(new G4hCoulombScatteringModel(), 1);
G4MuMultipleScattering* kmsc = new G4MuMultipleScattering();
kmsc->SetEmModel(new G4WentzelVIModel());
kmsc->SetEmModel(new G4WentzelVIRelModel());
G4CoulombScattering* kss = new G4CoulombScattering();
kss->SetEmModel(new G4hCoulombScatteringModel(), 1);
G4MuMultipleScattering* pmsc = new G4MuMultipleScattering();
pmsc->SetEmModel(new G4WentzelVIModel());
pmsc->SetEmModel(new G4WentzelVIRelModel());
G4CoulombScattering* pss = new G4CoulombScattering();
pss->SetEmModel(new G4hCoulombScatteringModel(), 1);
G4hMultipleScattering* hmsc = new G4hMultipleScattering("ionmsc");
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics_option3.cc 99938 2016-10-12 08:06:52Z gcosmo $
// $Id: G4EmStandardPhysics_option3.cc 104571 2017-06-06 13:45:47Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -61,6 +61,7 @@
#include "G4DummyModel.hh"
#include "G4WentzelVIModel.hh"
#include "G4CoulombScattering.hh"
#include "G4UniversalFluctuation2017.hh"
#include "G4eIonisation.hh"
#include "G4eBremsstrahlung.hh"
@@ -227,7 +228,8 @@ void G4EmStandardPhysics_option3::ConstructProcess()
G4eMultipleScattering* msc = new G4eMultipleScattering();
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
eIoni->SetStepFunction(0.2, 100*um);
eIoni->SetFluctModel(new G4UniversalFluctuation2017());
G4eBremsstrahlung* brem = new G4eBremsstrahlung();
G4SeltzerBergerModel* br1 = new G4SeltzerBergerModel();
@@ -250,6 +252,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
eIoni->SetFluctModel(new G4UniversalFluctuation2017());
G4eBremsstrahlung* brem = new G4eBremsstrahlung();
G4SeltzerBergerModel* br1 = new G4SeltzerBergerModel();
@@ -331,6 +334,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
G4hMultipleScattering* pmsc = new G4hMultipleScattering();
G4hIonisation* hIoni = new G4hIonisation();
hIoni->SetStepFunction(0.2, 50*um);
hIoni->SetFluctModel(new G4UniversalFluctuation2017());
ph->RegisterProcess(pmsc, particle);
ph->RegisterProcess(hIoni, particle);
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics_option4.cc 99938 2016-10-12 08:06:52Z gcosmo $
// $Id: G4EmStandardPhysics_option4.cc 104020 2017-05-08 07:34:58Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -275,7 +275,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
// ionisation
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
eIoni->SetStepFunction(0.2, 10*um);
G4PenelopeIonisationModel* pen = new G4PenelopeIonisationModel();
pen->SetHighEnergyLimit(penEnergyLimit);
eIoni->AddEmModel(0, pen, new G4UniversalFluctuation());
@@ -317,7 +317,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
// ionisation
G4eIonisation* eIoni = new G4eIonisation();
eIoni->SetStepFunction(0.2, 100*um);
eIoni->SetStepFunction(0.2, 10*um);
G4PenelopeIonisationModel* pen = new G4PenelopeIonisationModel();
pen->SetHighEnergyLimit(penEnergyLimit);
eIoni->AddEmModel(0, pen, new G4UniversalFluctuation());
@@ -344,7 +344,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
particleName == "mu-" ) {
G4MuIonisation* muIoni = new G4MuIonisation();
muIoni->SetStepFunction(0.2, 50*um);
muIoni->SetStepFunction(0.2, 10*um);
ph->RegisterProcess(mumsc, particle);
ph->RegisterProcess(muIoni, particle);
@@ -376,9 +376,8 @@ void G4EmStandardPhysics_option4::ConstructProcess()
} else if (particleName == "pi+" ||
particleName == "pi-" ) {
//G4hMultipleScattering* pimsc = new G4hMultipleScattering();
G4hIonisation* hIoni = new G4hIonisation();
hIoni->SetStepFunction(0.2, 50*um);
hIoni->SetStepFunction(0.2, 10*um);
ph->RegisterProcess(pimsc, particle);
ph->RegisterProcess(hIoni, particle);
@@ -389,9 +388,8 @@ void G4EmStandardPhysics_option4::ConstructProcess()
} else if (particleName == "kaon+" ||
particleName == "kaon-" ) {
//G4hMultipleScattering* kmsc = new G4hMultipleScattering();
G4hIonisation* hIoni = new G4hIonisation();
hIoni->SetStepFunction(0.2, 50*um);
hIoni->SetStepFunction(0.2, 10*um);
ph->RegisterProcess(kmsc, particle);
ph->RegisterProcess(hIoni, particle);
@@ -402,9 +400,8 @@ void G4EmStandardPhysics_option4::ConstructProcess()
} else if (particleName == "proton" ||
particleName == "anti_proton") {
//G4hMultipleScattering* pmsc = new G4hMultipleScattering();
G4hIonisation* hIoni = new G4hIonisation();
hIoni->SetStepFunction(0.1, 20*um);
hIoni->SetStepFunction(0.1, 10*um);
ph->RegisterProcess(pmsc, particle);
ph->RegisterProcess(hIoni, particle);
@@ -14,6 +14,9 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
01-May-2017, Sebastien Incerti (phys-ctor-fact-V10-03-00)
- added Geant4-DNA stationary constructors
17-Oct-2016, Michel Maire (phys-ctor-fact-V10-02-04)
- add README
@@ -178,7 +178,12 @@ G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option2);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option3);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option4);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option5);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option6);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_option7);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option2);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option4);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmDNAPhysics_stationary_option6);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmExtraPhysics);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmLivermorePhysics);
G4_REFERENCE_PHYSCONSTR_FACTORY(G4EmLivermorePolarizedPhysics);
@@ -1,4 +1,4 @@
$Id: History 101023 2016-11-04 08:29:28Z gcosmo $
$Id: History 104601 2017-06-07 09:01:37Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,7 +14,16 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
12-November-2015, V.Ivanchenko (phys-ctor-glnuclear-V10-02-04)
06-June-2017, V.Ivanchenko (phys-ctor-glnuclear-V10-03-01)
- G4EmExtraPhysics, G4EmMessenger - added extra UI commands to define
cross section factors for rare processes (requirement of ShiP
experiment for dark matter search)
04-May-2017, V.Ivanchenko (phys-ctor-glnuclear-V10-03-00)
- G4EmExtraPhysics, G4EmMessenger, G4BertiniElectroNuclearBuilder
added option and UI command to enable/disable e+- nuclear process
12-Nov-2016, V.Ivanchenko (phys-ctor-glnuclear-V10-02-04)
- G4EmExtraPhysics, G4EmMessenger - added rare high energy EM processes,
disabled by default
@@ -38,7 +38,6 @@
#include "G4CascadeInterface.hh"
#include "G4ElectroVDNuclearModel.hh"
//#include "G4ElectroNuclearReaction.hh"
#include "G4PhotoNuclearProcess.hh"
#include "G4ElectronNuclearProcess.hh"
#include "G4PositronNuclearProcess.hh"
@@ -49,7 +48,7 @@
class G4BertiniElectroNuclearBuilder
{
public:
G4BertiniElectroNuclearBuilder();
G4BertiniElectroNuclearBuilder(G4bool eNucl);
virtual ~G4BertiniElectroNuclearBuilder();
public:
@@ -68,6 +67,7 @@ class G4BertiniElectroNuclearBuilder
G4QGSMFragmentation * theFragmentation;
G4ExcitedStringDecay * theStringDecay;
G4bool wasActivated;
G4bool eActivated;
};
// 2002 by J.P. Wellisch
@@ -70,20 +70,28 @@ public:
void Synch(G4bool val);
void SynchAll(G4bool val);
void GammaNuclear(G4bool val);
void ElectroNuclear(G4bool val);
void MuonNuclear(G4bool val);
void GammaToMuMu(G4bool val);
void PositronToMuMu(G4bool val);
void PositronToHadrons(G4bool val);
void GammaToMuMuFactor(G4double val);
void PositronToMuMuFactor(G4double val);
void PositronToHadronsFactor(G4double val);
private:
static G4bool gnActivated;
static G4bool eActivated;
static G4bool munActivated;
static G4bool synActivated;
static G4bool synActivatedForAll;
static G4bool gmumuActivated;
static G4bool pmumuActivated;
static G4bool phadActivated;
static G4double gmumuFactor;
static G4double pmumuFactor;
static G4double phadFactor;
static G4ThreadLocal G4BertiniElectroNuclearBuilder* theGNPhysics;
static G4ThreadLocal G4SynchrotronRadiation* theSynchRad;
@@ -46,6 +46,7 @@ class G4EmExtraPhysics;
#include "G4UImessenger.hh"
#include "G4UIdirectory.hh"
#include "G4UIcmdWithABool.hh"
#include "G4UIcmdWithADouble.hh"
class G4EmMessenger: public G4UImessenger
{
@@ -60,10 +61,14 @@ private:
G4UIcmdWithABool* theSynch;
G4UIcmdWithABool* theSynchAll;
G4UIcmdWithABool* theGN;
G4UIcmdWithABool* theEN;
G4UIcmdWithABool* theMUN;
G4UIcmdWithABool* theGMM;
G4UIcmdWithABool* thePMM;
G4UIcmdWithABool* thePH;
G4UIcmdWithADouble* theGMM1;
G4UIcmdWithADouble* thePMM1;
G4UIcmdWithADouble* thePH1;
G4UIdirectory* aDir1;
G4UIdirectory* aDir2;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4BertiniElectroNuclearBuilder.cc 81364 2014-05-27 12:55:46Z gcosmo $
// $Id: G4BertiniElectroNuclearBuilder.cc 104018 2017-05-08 07:32:45Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -51,12 +51,12 @@
#include "G4ProcessManager.hh"
G4BertiniElectroNuclearBuilder::G4BertiniElectroNuclearBuilder() :
thePhotoNuclearProcess(0), theElectronNuclearProcess(0),
thePositronNuclearProcess(0), theElectroReaction(0),
theGammaReaction(0), theModel(0), theCascade(0),
theStringModel(0), theFragmentation(0), theStringDecay(0),
wasActivated(false)
G4BertiniElectroNuclearBuilder::G4BertiniElectroNuclearBuilder(G4bool eNucl) :
thePhotoNuclearProcess(nullptr), theElectronNuclearProcess(nullptr),
thePositronNuclearProcess(nullptr), theElectroReaction(nullptr),
theGammaReaction(nullptr), theModel(nullptr), theCascade(nullptr),
theStringModel(nullptr), theFragmentation(nullptr), theStringDecay(nullptr),
wasActivated(false), eActivated(eNucl)
{
}
@@ -65,14 +65,6 @@ G4BertiniElectroNuclearBuilder::~G4BertiniElectroNuclearBuilder()
if(wasActivated) {
delete theFragmentation;
delete theStringDecay;
//delete theStringModel;
//delete thePhotoNuclearProcess;
//delete theElectronNuclearProcess;
//delete thePositronNuclearProcess;
//delete theElectroReaction;
//delete theGammaReaction;
//delete theModel;
//delete theCascade;
}
}
@@ -82,10 +74,11 @@ void G4BertiniElectroNuclearBuilder::Build()
wasActivated=true;
thePhotoNuclearProcess = new G4PhotoNuclearProcess;
theElectronNuclearProcess = new G4ElectronNuclearProcess;
thePositronNuclearProcess = new G4PositronNuclearProcess;
// theElectroReaction = new G4ElectroNuclearReaction;
theElectroReaction = new G4ElectroVDNuclearModel;
if(eActivated) {
theElectronNuclearProcess = new G4ElectronNuclearProcess;
thePositronNuclearProcess = new G4PositronNuclearProcess;
theElectroReaction = new G4ElectroVDNuclearModel;
}
theGammaReaction = new G4CascadeInterface;
theModel = new G4TheoFSGenerator;
@@ -99,7 +92,7 @@ void G4BertiniElectroNuclearBuilder::Build()
theModel->SetTransport(theCascade);
theModel->SetHighEnergyGenerator(theStringModel);
G4ProcessManager * aProcMan = 0;
G4ProcessManager * aProcMan = nullptr;
aProcMan = G4Gamma::Gamma()->GetProcessManager();
theGammaReaction->SetMaxEnergy(3.5*GeV);
@@ -108,13 +101,15 @@ void G4BertiniElectroNuclearBuilder::Build()
theModel->SetMaxEnergy(100*TeV);
thePhotoNuclearProcess->RegisterMe(theModel);
aProcMan->AddDiscreteProcess(thePhotoNuclearProcess);
if(eActivated) {
aProcMan = G4Electron::Electron()->GetProcessManager();
theElectronNuclearProcess->RegisterMe(theElectroReaction);
aProcMan->AddDiscreteProcess(theElectronNuclearProcess);
aProcMan = G4Electron::Electron()->GetProcessManager();
theElectronNuclearProcess->RegisterMe(theElectroReaction);
aProcMan->AddDiscreteProcess(theElectronNuclearProcess);
aProcMan = G4Positron::Positron()->GetProcessManager();
thePositronNuclearProcess->RegisterMe(theElectroReaction);
aProcMan->AddDiscreteProcess(thePositronNuclearProcess);
aProcMan = G4Positron::Positron()->GetProcessManager();
thePositronNuclearProcess->RegisterMe(theElectroReaction);
aProcMan->AddDiscreteProcess(thePositronNuclearProcess);
}
}
@@ -72,12 +72,16 @@
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmExtraPhysics);
G4bool G4EmExtraPhysics::gnActivated = true;
G4bool G4EmExtraPhysics::eActivated = true;
G4bool G4EmExtraPhysics::munActivated = true;
G4bool G4EmExtraPhysics::synActivated = false;
G4bool G4EmExtraPhysics::synActivatedForAll = false;
G4bool G4EmExtraPhysics::gmumuActivated = false;
G4bool G4EmExtraPhysics::pmumuActivated = false;
G4bool G4EmExtraPhysics::phadActivated = false;
G4bool G4EmExtraPhysics::phadActivated = false;
G4double G4EmExtraPhysics::gmumuFactor = 1.0;
G4double G4EmExtraPhysics::pmumuFactor = 1.0;
G4double G4EmExtraPhysics::phadFactor = 1.0;
G4ThreadLocal G4BertiniElectroNuclearBuilder* G4EmExtraPhysics::theGNPhysics = nullptr;
G4ThreadLocal G4SynchrotronRadiation* G4EmExtraPhysics::theSynchRad = nullptr;
@@ -120,6 +124,11 @@ void G4EmExtraPhysics::GammaNuclear(G4bool val)
gnActivated = val;
}
void G4EmExtraPhysics::ElectroNuclear(G4bool val)
{
eActivated = val;
}
void G4EmExtraPhysics::MuonNuclear(G4bool val)
{
munActivated = val;
@@ -140,6 +149,21 @@ void G4EmExtraPhysics::PositronToHadrons(G4bool val)
phadActivated = val;
}
void G4EmExtraPhysics::GammaToMuMuFactor(G4double val)
{
if(val > 0.0) gmumuFactor = val;
}
void G4EmExtraPhysics::PositronToMuMuFactor(G4double val)
{
if(val > 0.0) pmumuFactor = val;
}
void G4EmExtraPhysics::PositronToHadronsFactor(G4double val)
{
if(val > 0.0) phadFactor = val;
}
void G4EmExtraPhysics::ConstructParticle()
{
G4Gamma::Gamma();
@@ -159,9 +183,8 @@ void G4EmExtraPhysics::ConstructProcess()
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
if(gnActivated) {
theGNPhysics = new G4BertiniElectroNuclearBuilder();
theGNPhysics = new G4BertiniElectroNuclearBuilder(eActivated);
theGNPhysics->Build();
//G4AutoDelete::Register(theGNPhysics);
}
if(munActivated) {
G4MuonNuclearProcess* muNucProcess = new G4MuonNuclearProcess();
@@ -172,21 +195,23 @@ void G4EmExtraPhysics::ConstructProcess()
}
if(gmumuActivated) {
theGammaToMuMu = new G4GammaConversionToMuons();
theGammaToMuMu->SetCrossSecFactor(gmumuFactor);
ph->RegisterProcess(theGammaToMuMu, gamma);
}
if(pmumuActivated) {
thePosiToMuMu = new G4AnnihiToMuPair();
thePosiToMuMu->SetCrossSecFactor(pmumuFactor);
ph->RegisterProcess(thePosiToMuMu, positron);
}
if(phadActivated) {
thePosiToHadrons = new G4eeToHadrons();
thePosiToHadrons->SetCrossSecFactor(phadFactor);
ph->RegisterProcess(thePosiToHadrons, positron);
}
if(synActivated) {
theSynchRad = new G4SynchrotronRadiation();
ph->RegisterProcess( theSynchRad, electron);
ph->RegisterProcess( theSynchRad, positron);
//G4AutoDelete::Register(theSynchRad);
if(synActivatedForAll) {
auto myParticleIterator=GetParticleIterator();
myParticleIterator->reset();
@@ -74,6 +74,10 @@ G4EmMessenger::G4EmMessenger(G4EmExtraPhysics* ab)
theGN->SetGuidance("Switching on gamma nuclear physics.");
theGN->AvailableForStates(G4State_PreInit);
theEN = new G4UIcmdWithABool("/physics_lists/em/ElectroNuclear",this);
theEN->SetGuidance("Switching on e+- nuclear physics.");
theEN->AvailableForStates(G4State_PreInit);
// command for muon nuclear physics.
theMUN = new G4UIcmdWithABool("/physics_lists/em/MuonNuclear",this);
theMUN->SetGuidance("Switching on muon nuclear physics.");
@@ -90,6 +94,18 @@ G4EmMessenger::G4EmMessenger(G4EmExtraPhysics* ab)
thePH = new G4UIcmdWithABool("/physics_lists/em/PositronToHadrons",this);
thePH->SetGuidance("Switching on positron conversion to hadrons.");
thePH->AvailableForStates(G4State_PreInit);
theGMM1 = new G4UIcmdWithADouble("/physics_lists/em/GammaToMuonsFactor",this);
theGMM1->SetGuidance("Factor for gamma conversion to muon pair.");
theGMM1->AvailableForStates(G4State_PreInit);
thePMM1 = new G4UIcmdWithADouble("/physics_lists/em/PositronToMuonsFactor",this);
thePMM1->SetGuidance("Factor for positron conversion to muon pair.");
thePMM1->AvailableForStates(G4State_PreInit);
thePH1 = new G4UIcmdWithADouble("/physics_lists/em/PositronToHadronsFactor",this);
thePH1->SetGuidance("Factor for positron conversion to hadrons.");
thePH1->AvailableForStates(G4State_PreInit);
}
G4EmMessenger::~G4EmMessenger()
@@ -97,10 +113,14 @@ G4EmMessenger::~G4EmMessenger()
delete theSynch;
delete theSynchAll;
delete theGN;
delete theEN;
delete theMUN;
delete theGMM;
delete thePMM;
delete thePH;
delete theGMM1;
delete thePMM1;
delete thePH1;
delete aDir1;
delete aDir2;
}
@@ -110,8 +130,12 @@ void G4EmMessenger::SetNewValue(G4UIcommand* aComm, G4String aS)
if(aComm==theSynch) theB->Synch(theSynch->GetNewBoolValue(aS));
if(aComm==theSynchAll) theB->SynchAll(theSynchAll->GetNewBoolValue(aS));
if(aComm==theGN) theB->GammaNuclear(theGN->GetNewBoolValue(aS));
if(aComm==theEN) theB->ElectroNuclear(theEN->GetNewBoolValue(aS));
if(aComm==theMUN) theB->MuonNuclear(theMUN->GetNewBoolValue(aS));
if(aComm==theGMM) theB->GammaToMuMu(theGMM->GetNewBoolValue(aS));
if(aComm==thePMM) theB->PositronToMuMu(thePMM->GetNewBoolValue(aS));
if(aComm==thePH) theB->PositronToHadrons(thePH->GetNewBoolValue(aS));
if(aComm==theGMM1) theB->GammaToMuMuFactor(theGMM1->GetNewDoubleValue(aS));
if(aComm==thePMM1) theB->PositronToMuMuFactor(thePMM1->GetNewDoubleValue(aS));
if(aComm==thePH1) theB->PositronToHadronsFactor(thePH1->GetNewDoubleValue(aS));
}
@@ -1,4 +1,4 @@
# $Id: GNUmakefile 94088 2015-11-05 15:11:00Z gcosmo $
# $Id: GNUmakefile 104019 2017-05-08 07:34:08Z gcosmo $
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/electromagnetic library.
# Gunter Folger 10-Jan-2012.
@@ -41,6 +41,7 @@ CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/physics_lists/constructors/hadron_inelastic/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/cuts/include \
@@ -1,4 +1,4 @@
$Id: History 101061 2016-11-04 13:07:09Z gcosmo $
$Id: History 104019 2017-05-08 07:34:08Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,10 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
04-May-2017, V.Ivanchenko (phys-ctor-helastic-V10-03-00)
- G4ThermalNeutrons - new class for addition of thermal neutron
scattering below 4 eV (backported from CMS simulation)
04-Nov-2016, Alberto Ribon (phys-ctor-helastic-V10-02-04)
- Written first draft of the README
@@ -0,0 +1,64 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ThermalNeutrons.hh 70995 2013-06-09 00:56:34Z adotti $
//
//---------------------------------------------------------------------------
//
// ClassName: G4ThermalNeutrons
//
// Author: 4 May 2017 V. Ivanchenko
//
// Modified:
//
//----------------------------------------------------------------------------
//
// Addition of neutron thermal scattering on top of any PhysicsList
#ifndef G4ThermalNeutrons_h
#define G4ThermalNeutrons_h
#include "G4VHadronPhysics.hh"
#include "globals.hh"
class G4ThermalNeutrons : public G4VHadronPhysics {
public:
G4ThermalNeutrons(G4int ver);
virtual ~G4ThermalNeutrons();
virtual void ConstructProcess();
private:
G4int verbose;
};
#endif
@@ -11,7 +11,7 @@
#
# Generated on : 10/01/2013
#
# $Id: sources.cmake 94088 2015-11-05 15:11:00Z gcosmo $
# $Id: sources.cmake 104019 2017-05-08 07:34:08Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -39,6 +39,7 @@ include_directories(${CMAKE_SOURCE_DIR}/source/run/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/builders/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/util/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/constructors/factory/include)
include_directories(${CMAKE_SOURCE_DIR}/source/physics_lists/constructors/hadron_inelastic/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/management/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/transportation/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/cuts/include)
@@ -70,6 +71,7 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_helastic
G4HadronHElasticPhysics.hh
G4IonElasticPhysics.hh
G4HadronElasticPhysicsPHP.hh
G4ThermalNeutrons.hh
SOURCES
G4ChargeExchangePhysics.cc
G4HadronDElasticPhysics.cc
@@ -80,6 +82,7 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_helastic
G4HadronHElasticPhysics.cc
G4IonElasticPhysics.cc
G4HadronElasticPhysicsPHP.cc
G4ThermalNeutrons.cc
GRANULAR_DEPENDENCIES
G4baryons
G4bosons
@@ -141,6 +144,7 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_helastic
G4partman
G4phys_builders
G4phys_ctor_factory
G4phys_ctor_hinelastic
G4procman
G4run
G4shortlived
@@ -0,0 +1,83 @@
//
// ********************************************************************
// * License and Disclaimer *
// * *
// * The Geant4 software is copyright of the Copyright Holders of *
// * the Geant4 Collaboration. It is provided under the terms and *
// * conditions of the Geant4 Software License, included in the file *
// * LICENSE and available at http://cern.ch/geant4/license . These *
// * include a list of copyright holders. *
// * *
// * Neither the authors of this software system, nor their employing *
// * institutes,nor the agencies providing financial support for this *
// * work make any representation or warranty, express or implied, *
// * regarding this software system or assume any liability for its *
// * use. Please see the license in the file LICENSE and URL above *
// * for the full disclaimer and the limitation of liability. *
// * *
// * This code implementation is the result of the scientific and *
// * technical work of the GEANT4 collaboration. *
// * By using, copying, modifying or distributing the software (or *
// * any work based on the software) you agree to acknowledge its *
// * use in resulting scientific publications, and indicate your *
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4ThermalNeutrons.cc 70995 2013-06-09 00:56:34Z adotti $
//
//---------------------------------------------------------------------------
//
// ClassName: G4ThermalNeutrons
//
// Author: 4 May 2017 V. Ivanchenko
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4ThermalNeutrons.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4HadronicProcess.hh"
#include "G4ParticleHPThermalScattering.hh"
#include "G4ParticleHPThermalScatteringData.hh"
#include "G4BuilderType.hh"
#include "G4SystemOfUnits.hh"
G4ThermalNeutrons::G4ThermalNeutrons(G4int ver) :
G4VHadronPhysics("G4ThermalNeutrons"), verbose(ver) {
}
G4ThermalNeutrons::~G4ThermalNeutrons() {}
void G4ThermalNeutrons::ConstructProcess() {
if(verbose > 0) {
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
}
G4Neutron* part = G4Neutron::Neutron();
G4HadronicProcess* hpel = FindElasticProcess(part);
if(!hpel) {
G4cout << "### " << GetPhysicsName()
<< " WARNING: Fail to add thermal neutron scattering" << G4endl;
return;
}
G4int ni = (hpel->GetHadronicInteractionList()).size();
if(ni < 1) {
G4cout << "### " << GetPhysicsName()
<< " WARNING: Fail to add thermal neutron scattering - Nint= "
<< ni << G4endl;
return;
}
(hpel->GetHadronicInteractionList())[ni-1]->SetMinEnergy(4*CLHEP::eV);
hpel->RegisterMe(new G4ParticleHPThermalScattering());
hpel->AddDataSet(new G4ParticleHPThermalScatteringData());
}
@@ -1,4 +1,4 @@
$Id: History 102624 2017-02-10 08:22:14Z gcosmo $
$Id: History 102618 2017-02-10 07:59:27Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,7 +14,7 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
09-Feb-2017, Makoto Asai (phys-ctor-hinelastic-V10-02-11)
09-Feb-2017, Makoto Asai (phys-ctor-hinelastic-V10-03-00)
- Print-out of the transition energy region between FTFP and BERT
in the physics lists FTFP_BERT_HP and G4HadronPhysicsFTFP_BERT_HP
is made only for the master thread.
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronPhysicsFTFP_BERT.cc 102624 2017-02-10 08:22:14Z gcosmo $
// $Id: G4HadronPhysicsFTFP_BERT.cc 102618 2017-02-10 07:59:27Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -1,4 +1,4 @@
$Id: History 102622 2017-02-10 08:17:47Z gcosmo $
$Id: History 102617 2017-02-10 07:58:33Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,7 +14,7 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
09-Feb-2017, M. Asai (phys-ctor-limiters-V10-02-09)
09-Feb-2017, M. Asai (phys-ctor-limiters-V10-03-00)
- Print-out of G4NeutronTrackingCut is made only for the master thread.
07-Nov-2016, M. Verderi (phys-ctor-limiters-V10-02-08)
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4NeutronTrackingCut.cc 102622 2017-02-10 08:17:47Z gcosmo $
// $Id: G4NeutronTrackingCut.cc 102617 2017-02-10 07:58:33Z gcosmo $
//
//---------------------------------------------------------------------------
//