Import Geant4 10.3.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2016-06-30 14:12:05 +02:00
parent a654a7ab1f
commit 4ec577e5c4
2021 changed files with 100995 additions and 78277 deletions
+7
View File
@@ -14,6 +14,13 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
15-Apr-2016, Vladimir Ivanchenko (phys-builders-V10-02-01)
- OrderingParameterTable - disable msc PostStep
18-Jan-2016, Alberto Ribon (phys-builders-V10-02-00)
- G4NeutronHPBuilder : used the name "NeutronHPInelastic"
(instead of "ParticleHPInelastic")
19-Nov-2015, Alberto Ribon (phys-builders-V10-01-05)
- G4NeutronHPBuilder : kept only the header file, with a
typedef to G4NeutronPHPBuilder
@@ -8,7 +8,7 @@ Annih 2 5 5 -1 5 0
AnnihToMuMu 2 6 -1 -1 6 0
AnnihToHad 2 7 -1 -1 7 0
NuclearStopp 2 8 -1 8 -1 0
Msc 2 10 -1 1 1 0
Msc 2 10 -1 1 -1 0
Rayleigh 2 11 -1 -1 1000 0
PhotoElectric 2 12 -1 -1 1000 0
Compton 2 13 -1 -1 1000 0
@@ -90,7 +90,7 @@ Build(G4HadronCaptureProcess * aP)
void G4NeutronPHPBuilder::
Build(G4NeutronInelasticProcess * aP)
{
if(theHPInelastic==0) theHPInelastic = new G4ParticleHPInelastic(G4Neutron::Neutron(),"ParticleHPInelastic");
if(theHPInelastic==0) theHPInelastic = new G4ParticleHPInelastic(G4Neutron::Neutron(),"NeutronHPInelastic");
theHPInelastic->SetMinEnergy(theIMin);
theHPInelastic->SetMaxEnergy(theIMax);
if(theHPInelasticData==0) theHPInelasticData = new G4ParticleHPInelasticData(G4Neutron::Neutron());
@@ -1,4 +1,4 @@
# $Id: GNUmakefile 94090 2015-11-05 15:13:10Z gcosmo $
# $Id: GNUmakefile 97907 2016-06-22 13:37:05Z gcosmo $
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/decay library.
# Gunter Folger 10-Jan-2012.
@@ -38,6 +38,8 @@ CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/electromagnetic/lowenergy/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
@@ -1,4 +1,4 @@
$Id: History 94090 2015-11-05 15:13:10Z gcosmo $
$Id: History 97914 2016-06-22 15:22:24Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,15 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
22-Jun-2016, Vladimir Ivanchenko (phys-ctor-decay-V10-02-02)
22-Jun-2016, Vladimir Ivanchenko (phys-ctor-decay-V10-02-01)
- G4RadioactiveDecayPhysics - enable atomic de-excitation by the call
to EM parameters in ConstructProcess method (should co-work with
any EM physics)
01-Jun-2016, Makoto Asai (phys-ctor-decay-V10-02-00)
- add G4UnknownDecayPhysics
05-Nov-2015, Alberto Ribon (phys-ctor-decay-V10-01-05)
- Migrated to particle_hp/
@@ -0,0 +1,78 @@
//
// ********************************************************************
// * 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: G4UnknownDecayPhysics.hh 70999 2013-06-09 01:37:53Z adotti $
//
//---------------------------------------------------------------------------
//
// ClassName: G4UnknownDecayPhysics
//
// Author: 2016 - M. Asai
//
//----------------------------------------------------------------------------
//
#ifndef G4UnknownDecayPhysics_h
#define G4UnknownDecayPhysics_h 1
#include "globals.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4UnknownDecay.hh"
class G4UnknownDecayPhysics : public G4VPhysicsConstructor
{
public:
G4UnknownDecayPhysics(G4int ver = 1);
G4UnknownDecayPhysics(const G4String& name, G4int ver = 1);
virtual ~G4UnknownDecayPhysics();
public:
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
virtual void ConstructParticle();
// This method will be invoked in the Construct() method.
// each physics process will be instantiated and
// registered to the process manager of each particle type
virtual void ConstructProcess();
virtual G4UnknownDecay* GetDecayProcess() { return fDecayProcess; }
private:
static G4ThreadLocal G4UnknownDecay* fDecayProcess;
G4int verbose;
static G4ThreadLocal G4bool wasActivated;
};
#endif
@@ -11,7 +11,7 @@
#
# Generated on : 10/01/2013
#
# $Id: sources.cmake 94090 2015-11-05 15:13:10Z gcosmo $
# $Id: sources.cmake 97907 2016-06-22 13:37:05Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -44,6 +44,8 @@ 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/decay/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/cuts/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/electromagnetic/lowenergy/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/electromagnetic/utils/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/cross_sections/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/stopping/include)
include_directories(${CMAKE_SOURCE_DIR}/source/processes/hadronic/management/include)
@@ -87,19 +89,19 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_decay
G4DecayPhysics.hh
G4SpinDecayPhysics.hh
G4RadioactiveDecayPhysics.hh
G4UnknownDecayPhysics.hh
SOURCES
G4DecayPhysics.cc
G4SpinDecayPhysics.cc
G4RadioactiveDecayPhysics.cc
G4UnknownDecayPhysics.cc
GRANULAR_DEPENDENCIES
G4baryons
G4bosons
G4cuts
G4decay
G4digits
G4emhighenergy
G4emlowenergy
G4emstandard
G4emutils
G4event
G4geometrymng
@@ -32,6 +32,10 @@
#include "G4GenericIon.hh"
#include "globals.hh"
#include "G4PhysicsListHelper.hh"
#include "G4EmParameters.hh"
#include "G4VAtomDeexcitation.hh"
#include "G4UAtomicDeexcitation.hh"
#include "G4LossTableManager.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
@@ -67,6 +71,15 @@ void G4RadioactiveDecayPhysics::ConstructParticle()
void G4RadioactiveDecayPhysics::ConstructProcess()
{
G4LossTableManager* man = G4LossTableManager::Instance();
G4VAtomDeexcitation* ad = man->AtomDeexcitation();
if(!ad) {
man->SetAtomDeexcitation(new G4UAtomicDeexcitation());
}
G4EmParameters* param = G4EmParameters::Instance();
param->SetFluo(true);
param->SetAuger(true);
G4PhysicsListHelper::GetPhysicsListHelper()->
RegisterProcess(new G4RadioactiveDecay(), G4GenericIon::GenericIon());
}
@@ -0,0 +1,92 @@
//
// ********************************************************************
// * 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: G4UnknownDecayPhysics.cc 70999 2013-06-09 01:37:53Z adotti $
//
//---------------------------------------------------------------------------
//
// ClassName: G4UnknownDecayPhysics
//
// Author: 2016 - M. Asai
//
//----------------------------------------------------------------------------
//
#include "G4UnknownDecayPhysics.hh"
#include "G4ProcessManager.hh"
#include "G4UnknownParticle.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4UnknownDecayPhysics);
G4ThreadLocal G4UnknownDecay* G4UnknownDecayPhysics::fDecayProcess = 0;
G4ThreadLocal G4bool G4UnknownDecayPhysics::wasActivated = false;
G4UnknownDecayPhysics::G4UnknownDecayPhysics(G4int ver)
: G4VPhysicsConstructor("UnknownDecay"), verbose(ver)
{
}
G4UnknownDecayPhysics::G4UnknownDecayPhysics(const G4String& name, G4int ver)
: G4VPhysicsConstructor(name), verbose(ver)
{
}
G4UnknownDecayPhysics::~G4UnknownDecayPhysics()
{
}
void G4UnknownDecayPhysics::ConstructParticle()
{
G4UnknownParticle::UnknownParticleDefinition();
}
void G4UnknownDecayPhysics::ConstructProcess()
{
if(wasActivated) { return; }
wasActivated = true;
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
// Add Decay Process
fDecayProcess = new G4UnknownDecay();
aParticleIterator->reset();
G4ParticleDefinition* particle=0;
while( (*aParticleIterator)() )
{
particle = aParticleIterator->value();
if( fDecayProcess->IsApplicable(*particle) )
{
if(verbose > 1) {
G4cout << "### Decays for " << particle->GetParticleName() << G4endl;
}
ph->RegisterProcess(fDecayProcess, particle);
}
}
}
@@ -1,4 +1,4 @@
$Id: History 94232 2015-11-09 10:53:57Z gcosmo $
$Id: History 97606 2016-06-06 09:21:51Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,8 +14,82 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
06-June-2016 M. Karamitros (phys-ctor-em-V10-02-20)
- G4EmModelActivator: Correct elastic process name for ions
03-June-2016 M. Karamitros (phys-ctor-em-V10-02-19)
- G4EmModelActivator: Use Uehara model with chemistry
- G4EmDNAPhysics: load G4EmParameters
02-June-2016 V.Ivanchenko (phys-ctor-em-V10-02-18)
- G4EmModelActivator - fixed activation of DNA models
28-May-2016 M. Karamitros (phys-ctor-em-V10-02-17)
- G4EmDNAPhysics_option7: correct preproc flag
24-May-2016 M. Novak (phys-ctor-em-V10-02-16)
- G4EmStandardPhysicsGS: change back default step limit type to opt0 like
and set default range factor to 0.1
17-May-2016 M. Karamitros (phys-ctor-em-V10-02-15)
- DNA and ModelActivator constructors:
* correct model/process names
* adjust high energy threshold of solvation (kill) in respect to the energy range 
of the elastic model
12-May-2016 M. Karamitros (phys-ctor-em-V10-02-14)
- Add G4DNAElectronSolvation to all DNA constructors
- Update G4EmModelActivator
27-Apr-2016 M.Novak (phys-ctor-em-V10-02-13)
- G4EmStandardPhysicsGS: changed default step limit type to error-free
23-Apr-2016 M. Karamitros (phys-ctor-em-V10-02-12)
- G4EmDNAChemistry: G4DNAElectronSolvatation->G4DNAElectronSolvation
20-Apr-2016 S. Incerti (phys-ctor-em-V10-02-11)
- updated G4EmDNAPhysics_option5
30-Mar-2016 V.Ivanchenko (phys-ctor-em-V10-02-10)
- G4EmStandardPhysics_option3 - fixed typo: uncomment commented line
29-Mar-2016 V.Ivanchenko (phys-ctor-em-V10-02-09)
- G4EmStandardPhysics_option3, option4 - added process of e+e-
pair creation by e+ and e-; enable lateral displacement for
muons and hadrons
21-Mar-2016 S. Incerti (phys_ctor-em-V10-02-08)
- added updated G4EmDNAPhysics_option7
07-Mar-2016 P. Gumplinger (phys_ctor-em-V10-02-07)
- add flag and command whether or not to call InvokeSD method
of G4OpBoundaryProcess
07-Mar-2016 M. Karamitros (phys_ctor-em-V10-02-06)
- remove G4EmDNAPhysics_option7 from sources.cmake
07-Mar-2016 M. Karamitros (phys_ctor-em-V10-02-05)
- remove G4EmDNAPhysics_option7
03-Mar-2016 I.Hrivnacova (phys_ctor-em-V10-02-04)
- fixed G4Exception message in G4OpticalPhysicsMessenger
01-Mar-2016 P.Gumplinger (phys_ctor-em-V10-02-03)
- fix Coverity error of uninitialized fScintillationTrackInfo
26-Feb-2016 P.Gumplinger (phys-ctor-em-V10-02-02)
- addressing part of bug report 1832 as suggested by Ivana Hrivnacova
05-Feb-2016 P.Gumplinger (phys-ctor-em-V10-02-01)
- fix val-grind memory leakage check tool flag in G4OpticalPhysicsMessenger
02-Feb-2016 P.Gumplinger (phys-ctor-em-V10-02-00)
- add SetScintillationTrackInfo to G4OpticalPhysics with
associated command in G4OpticalPhysicsMessenger
09-Nov-2015 V.Ivanchenko (phys-ctor-em-V10-01-22)
- G4EmStandardPhysicsSS - allowing ally Mott correction for e-
- G4EmStandardPhysicsSS - allowing optional model with Mott
correction for e-
28-Oct-2015 V.Ivanchenko (phys-ctor-em-V10-01-21)
- G4EmStandardPhysicsGS - M. Novak tunned parameters and make
@@ -26,8 +26,8 @@
// S. Incerti (incerti@cenbg.in2p3.fr)
//
#ifndef G4EmDNAPhysics_option5_h
#define G4EmDNAPhysics_option5_h 1
#ifndef G4EmDNAPhysics_option7_h
#define G4EmDNAPhysics_option7_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
@@ -90,11 +90,14 @@ class G4OpticalPhysics : public G4VPhysicsConstructor
void SetWLSTimeProfile(G4String );
void SetScintillationByParticleType(G4bool );
void SetScintillationTrackInfo(G4bool );
//void AddScintillationSaturation(G4EmSaturation* );
void SetTrackSecondariesFirst(G4OpticalProcessIndex, G4bool );
void SetFiniteRiseTime(G4bool );
void SetInvokeSD(G4bool );
private:
// methods
@@ -135,6 +138,14 @@ class G4OpticalPhysics : public G4VPhysicsConstructor
/// light emission in scintillators
G4bool fScintillationByParticleType;
/// option to allow for G4ScintillationTrackInformation
/// to be attached to a scintillation photon's track
G4bool fScintillationTrackInfo;
/// option to allow for G4OpBoundaryProcess
/// to call/not call InvokeSD method
G4bool fInvokeSD;
};
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -69,6 +69,7 @@ class G4UIcommand;
// - /process/optical/defaults/scintillation/setByParticleType val
// - /process/optical/defaults/scintillation/setFiniteRiseTime val
// - /process/optical/defaults/wls/setTimeProfile val
// - /process/optical/defaults/boundary/setInvokeSD flag
class G4OpticalPhysicsMessenger: public G4UImessenger
{
@@ -120,6 +121,9 @@ private:
/// setScintillationByParticleType command
G4UIcmdWithABool* fSetScintillationByParticleTypeCmd;
/// setScintillationTrackInfo command
G4UIcmdWithABool* fSetScintillationTrackInfoCmd;
// /// setOpticalSurfaceModel command
// G4UIcmdWithAString* fSetOpticalSurfaceModelCmd;
@@ -132,6 +136,9 @@ private:
/// setFiniteRiseTime command
G4UIcmdWithABool* fSetFiniteRiseTimeCmd;
/// setInvokeSD command
G4UIcmdWithABool* fSetInvokeSDCmd;
};
#endif // G4OpticalPhysicsMessenger_h
@@ -11,7 +11,7 @@
#
# Generated on : 10/01/2013
#
# $Id: sources.cmake 91565 2015-07-27 12:18:45Z gcosmo $
# $Id: sources.cmake 96171 2016-03-22 09:18:21Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -37,7 +37,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvatation.hh"
#include "G4DNAElectronSolvation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
@@ -90,7 +90,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry);
#include "G4Threading.hh"
G4EmDNAChemistry::G4EmDNAChemistry() :
G4VUserChemistryList()
G4VUserChemistryList(true)
{
G4DNAChemistryManager::Instance()->SetChemistryList(this);
}
@@ -118,20 +118,6 @@ void G4EmDNAChemistry::ConstructMolecule()
G4H2O2::Definition();
G4H2::Definition();
// G4MoleculeTable::Instance()->CreateMoleculeModel("H3Op", G4H3O::Definition());
// G4Molecule* OHm = G4MoleculeTable::Instance()->
// CreateMoleculeModel("OHm", // just a tag to store and retrieve from
// // G4MoleculeTable
// G4OH::Definition(), -1, 5.0e-9 * (m2 / s));
// OHm->SetMass(17.0079 * g / Avogadro * c_squared);
// G4MoleculeTable::Instance()->CreateMoleculeModel("OH", G4OH::Definition());
// G4MoleculeTable::Instance()->CreateMoleculeModel("e_aq",
// G4Electron_aq::Definition());
// G4MoleculeTable::Instance()->CreateMoleculeModel("H",
// G4Hydrogen::Definition());
// G4MoleculeTable::Instance()->CreateMoleculeModel("H2", G4H2::Definition());
// G4MoleculeTable::Instance()->CreateMoleculeModel("H2O2", G4H2O2::Definition());
//____________________________________________________________________________
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
@@ -155,14 +141,6 @@ void G4EmDNAChemistry::ConstructMolecule()
void G4EmDNAChemistry::ConstructDissociationChannels()
{
// //-----------------------------------
// //Create the dynamic objects
// G4Molecule* OH = G4MoleculeTable::Instance()->GetMoleculeModel("OH");
// G4Molecule* OHm = G4MoleculeTable::Instance()->GetMoleculeModel("OHm");
// G4Molecule* e_aq = G4MoleculeTable::Instance()->GetMoleculeModel("e_aq");
// G4Molecule* H2 = G4MoleculeTable::Instance()->GetMoleculeModel("H2");
// G4Molecule* H3O = G4MoleculeTable::Instance()->GetMoleculeModel("H3Op");
// G4Molecule* H = G4MoleculeTable::Instance()->GetMoleculeModel("H");
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
@@ -404,35 +382,27 @@ void G4EmDNAChemistry::ConstructDissociationChannels()
void G4EmDNAChemistry::ConstructReactionTable(G4DNAMolecularReactionTable*
theReactionTable)
{
// //-----------------------------------
// G4Molecule* OH = G4MoleculeTable::Instance()->GetMoleculeModel("OH");
// G4Molecule* e_aq = G4MoleculeTable::Instance()->GetMoleculeModel("e_aq");
// G4Molecule* H2 = G4MoleculeTable::Instance()->GetMoleculeModel("H2");
// G4Molecule* H3Op = G4MoleculeTable::Instance()->GetMoleculeModel("H3Op");
// G4Molecule* OHm = G4MoleculeTable::Instance()->GetMoleculeModel("OHm");
// G4Molecule* H2O2 = G4MoleculeTable::Instance()->GetMoleculeModel("H2O2");
// G4Molecule* H = G4MoleculeTable::Instance()->GetMoleculeModel("H");
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
G4MoleculeTable::Instance()->GetConfiguration("OH");
G4MolecularConfiguration* OHm =
G4MoleculeTable::Instance()->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq =
G4MoleculeTable::Instance()->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 =
G4MoleculeTable::Instance()->GetConfiguration("H2");
G4MolecularConfiguration* H3Op =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
G4MolecularConfiguration* H2O2 =
G4MoleculeTable::Instance()->GetConfiguration("H2O2");
//-----------------------------------
//Get the molecular configuration
G4MolecularConfiguration* OH =
G4MoleculeTable::Instance()->GetConfiguration("OH");
G4MolecularConfiguration* OHm =
G4MoleculeTable::Instance()->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq =
G4MoleculeTable::Instance()->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 =
G4MoleculeTable::Instance()->GetConfiguration("H2");
G4MolecularConfiguration* H3Op =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
G4MolecularConfiguration* H2O2 =
G4MoleculeTable::Instance()->GetConfiguration("H2O2");
//------------------------------------------------------------------
// e_aq + e_aq + 2H2O -> H2 + 2OH-
G4DNAMolecularReactionData* reactionData = new G4DNAMolecularReactionData(
0.5e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
G4DNAMolecularReactionData* reactionData =
new G4DNAMolecularReactionData(0.5e10 * (1e-3 * m3 / (mole * s)), e_aq, e_aq);
reactionData->AddProduct(OHm);
reactionData->AddProduct(OHm);
reactionData->AddProduct(H2);
@@ -511,42 +481,19 @@ void G4EmDNAChemistry::ConstructProcess()
}
}
//===============================================================
// Modify elastic scattering models to avoid killing electrons
// at low energy
//
process =
G4ProcessTable::GetProcessTable()->
FindProcess("e-_G4DNAElastic", "e-");
if (process)
{
G4DNAElastic* vibExcitation = (G4DNAElastic*) process;
G4VEmModel* model = vibExcitation->EmModel();
if(G4DNAChampionElasticModel* championMod =
dynamic_cast<G4DNAChampionElasticModel*>(model))
{
championMod->SetKillBelowThreshold(-1);
}
else if(G4DNAScreenedRutherfordElasticModel* screenRutherfordMod =
dynamic_cast<G4DNAScreenedRutherfordElasticModel*>(model))
{
screenRutherfordMod->SetKillBelowThreshold(-1);
}
else if (G4DNAUeharaScreenedRutherfordElasticModel* ueharaScreenRutherfordMod =
dynamic_cast<G4DNAUeharaScreenedRutherfordElasticModel*>(model))
{
ueharaScreenRutherfordMod->SetKillBelowThreshold(-1);
}
}
//===============================================================
// *** Electron Solvatation ***
//
ph->RegisterProcess(
new G4DNAElectronSolvatation("e-_G4DNAElectronSolvatation"),
G4Electron::Definition());
process =
G4ProcessTable::GetProcessTable()->
FindProcess("e-_G4DNAElectronSolvation", "e-");
if (process == 0)
{
ph->RegisterProcess(
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
G4Electron::Definition());
}
//===============================================================
// Define processes for molecules
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmDNAPhysics.cc 87702 2014-12-17 09:55:28Z gcosmo $
// $Id: G4EmDNAPhysics.cc 97523 2016-06-03 14:25:30Z gcosmo $
// add elastic scattering processes of proton, hydrogen, helium, alpha+, alpha++
#include "G4EmDNAPhysics.hh"
@@ -34,6 +34,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
@@ -87,6 +88,7 @@ G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAPhysics);
G4EmDNAPhysics::G4EmDNAPhysics(G4int ver)
: G4VPhysicsConstructor("G4EmDNAPhysics"), verbose(ver)
{
G4EmParameters::Instance();
SetPhysicsType(bElectromagnetic);
}
@@ -95,6 +97,7 @@ G4EmDNAPhysics::G4EmDNAPhysics(G4int ver)
G4EmDNAPhysics::G4EmDNAPhysics(G4int ver, const G4String&)
: G4VPhysicsConstructor("G4EmDNAPhysics"), verbose(ver)
{
G4EmParameters::Instance();
SetPhysicsType(bElectromagnetic);
}
@@ -149,6 +152,14 @@ void G4EmDNAPhysics::ConstructProcess()
if (particleName == "e-") {
G4DNAElectronSolvation* solvation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
G4DNAOneStepThermalizationModel* therm =
new G4DNAOneStepThermalizationModel();
therm->SetHighEnergyLimit(7.4*eV); // limit of the Champion's model
solvation->SetEmModel(therm);
ph->RegisterProcess(solvation, particle);
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
@@ -33,6 +33,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
@@ -153,6 +154,9 @@ void G4EmDNAPhysics_option1::ConstructProcess()
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
ph->RegisterProcess(new G4DNAElectronSolvation("e-_G4DNAElectronSolvation"),
particle);
// *** Elastic scattering (two alternative models available) ***
@@ -35,6 +35,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
@@ -149,6 +150,14 @@ void G4EmDNAPhysics_option2::ConstructProcess()
if (particleName == "e-") {
G4DNAElectronSolvation* solvation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
G4DNAOneStepThermalizationModel* therm =
new G4DNAOneStepThermalizationModel();
therm->SetHighEnergyLimit(7.4*eV); // limit of the Champion's model
solvation->SetEmModel(therm);
ph->RegisterProcess(solvation, particle);
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
@@ -33,6 +33,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
@@ -147,7 +148,15 @@ void G4EmDNAPhysics_option3::ConstructProcess()
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
G4DNAElectronSolvation* solvation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
G4DNAOneStepThermalizationModel* therm =
new G4DNAOneStepThermalizationModel();
therm->SetHighEnergyLimit(7.4*eV); // limit of the Champion's model
solvation->SetEmModel(therm);
ph->RegisterProcess(solvation, particle);
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
@@ -34,6 +34,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
@@ -153,7 +154,17 @@ void G4EmDNAPhysics_option4::ConstructProcess()
G4String particleName = particle->GetParticleName();
if (particleName == "e-") {
// *** Solvation ***
G4DNAElectronSolvation* solvation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
G4DNAOneStepThermalizationModel* therm =
new G4DNAOneStepThermalizationModel();
therm->SetHighEnergyLimit(10.*eV); // limit of the Uehara's model
solvation->SetEmModel(therm);
ph->RegisterProcess(solvation, particle);
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
@@ -34,6 +34,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
@@ -155,67 +156,33 @@ void G4EmDNAPhysics_option5::ConstructProcess()
if (particleName == "e-")
{
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
//theDNAElasticProcess->SetEmModel(new G4DNAChampionElasticModel());
theDNAElasticProcess->SetEmModel(new G4DNAUeharaScreenedRutherfordElasticModel());
//theDNAElasticProcess->SetEmModel(new G4DNAScreenedRutherfordElasticModel());
// *** Solvation ***
G4DNAElectronSolvation* solvation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
G4DNAOneStepThermalizationModel* therm =
new G4DNAOneStepThermalizationModel();
therm->SetHighEnergyLimit(10.*eV); // limit of the Uehara's model
solvation->SetEmModel(therm);
ph->RegisterProcess(solvation, particle);
// *** Elastic scattering ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAUeharaScreenedRutherfordElasticModel());
((G4DNAUeharaScreenedRutherfordElasticModel*)(theDNAElasticProcess->EmModel()))->SelectFasterComputation(true);
ph->RegisterProcess(theDNAElasticProcess, particle);
{
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("e-_G4DNAExcitation");
{
G4DNABornExcitationModel* bornExc = new G4DNABornExcitationModel();
bornExc->SetLowEnergyLimit(10*keV);
bornExc->SetHighEnergyLimit(1.*MeV);
bornExc->SetActivationLowEnergyLimit(10*keV);
bornExc->SetActivationHighEnergyLimit(1.*MeV);
theDNAExcitationProcess->SetEmModel(bornExc,1);
theDNAExcitationProcess->AddEmModel(1, bornExc);
}
{
G4DNAEmfietzoglouExcitationModel* emExc = new G4DNAEmfietzoglouExcitationModel();
emExc->SetActivationLowEnergyLimit(0);
emExc->SetActivationHighEnergyLimit(10.*keV);
theDNAExcitationProcess->SetEmModel(emExc,2);
theDNAExcitationProcess->AddEmModel(2, emExc);
}
G4DNAExcitation* theDNAExcitationProcess = new G4DNAExcitation("e-_G4DNAExcitation");
theDNAExcitationProcess->SetEmModel(new G4DNAEmfietzoglouExcitationModel());
ph->RegisterProcess(theDNAExcitationProcess, particle);
}
{
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("e-_G4DNAIonisation");
{
G4DNABornIonisationModel* bornIon = new G4DNABornIonisationModel();
bornIon->SetLowEnergyLimit(10*keV);
bornIon->SetHighEnergyLimit(1.*MeV);
bornIon->SetActivationLowEnergyLimit(10*keV);
bornIon->SetActivationHighEnergyLimit(1.*MeV);
theDNAIonisationProcess->SetEmModel(bornIon,1);
bornIon->SelectFasterComputation(true);
theDNAIonisationProcess->AddEmModel(1,bornIon);
}
{
G4DNAEmfietzoglouIonisationModel* emIonModel = new G4DNAEmfietzoglouIonisationModel();
emIonModel->SetLowEnergyLimit(10*eV);
emIonModel->SetHighEnergyLimit(10.*keV);
emIonModel->SetActivationLowEnergyLimit(0);
emIonModel->SetActivationHighEnergyLimit(10.*keV);
theDNAIonisationProcess->SetEmModel(emIonModel,2);
emIonModel->SelectFasterComputation(true);
theDNAIonisationProcess->AddEmModel(2,emIonModel);
}
G4DNAIonisation* theDNAIonisationProcess = new G4DNAIonisation("e-_G4DNAIonisation");
theDNAIonisationProcess->SetEmModel(new G4DNAEmfietzoglouIonisationModel());
((G4DNAEmfietzoglouIonisationModel*)(theDNAIonisationProcess->EmModel()))->SelectFasterComputation(true);
ph->RegisterProcess(theDNAIonisationProcess, particle);
}
// *** Vibrational excitation ***
//ph->RegisterProcess(new G4DNAVibExcitation("e-_G4DNAVibExcitation"), particle);
@@ -34,6 +34,7 @@
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
@@ -151,63 +152,81 @@ void G4EmDNAPhysics_option7::ConstructProcess()
if (particleName == "e-")
{
// *** Elastic scattering (two alternative models available) ***
G4DNAElastic* theDNAElasticProcess = new G4DNAElastic("e-_G4DNAElastic");
theDNAElasticProcess->SetEmModel(new G4DNAUeharaScreenedRutherfordElasticModel());
// *** Electron solvation ***
// Either kills the electron track or transform the electron to
// a solvated electron, depending on whether the chemistry is
// activated
G4DNAElectronSolvation* solvation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
G4DNAOneStepThermalizationModel* therm =
new G4DNAOneStepThermalizationModel();
therm->SetHighEnergyLimit(10.*eV); // limit of the Uehara's model
solvation->SetEmModel(therm);
ph->RegisterProcess(solvation, particle);
// *** Elastic scattering ***
G4DNAElastic* theDNAElasticProcess =
new G4DNAElastic("e-_G4DNAElastic");
G4DNAUeharaScreenedRutherfordElasticModel* emElast =
new G4DNAUeharaScreenedRutherfordElasticModel();
emElast->SetHighEnergyLimit(1*MeV);
// emElast->SelectHighEnergyLimit(1*MeV);
theDNAElasticProcess->SetEmModel(emElast);
ph->RegisterProcess(theDNAElasticProcess, particle);
{
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
// *** Excitation ***
G4DNAExcitation* theDNAExcitationProcess =
new G4DNAExcitation("e-_G4DNAExcitation");
{
G4DNABornExcitationModel* bornExc = new G4DNABornExcitationModel();
bornExc->SetLowEnergyLimit(10*keV);
bornExc->SetHighEnergyLimit(1.*MeV);
bornExc->SetActivationLowEnergyLimit(10*keV);
bornExc->SetActivationHighEnergyLimit(1.*MeV);
theDNAExcitationProcess->SetEmModel(bornExc,1);
theDNAExcitationProcess->AddEmModel(1, bornExc);
{
G4DNAEmfietzoglouExcitationModel* emExc = new G4DNAEmfietzoglouExcitationModel();
emExc->SetActivationLowEnergyLimit(8*eV);
emExc->SetActivationHighEnergyLimit(10.*keV);
theDNAExcitationProcess->SetEmModel(emExc,1);
theDNAExcitationProcess->AddEmModel(1, emExc);
}
{
G4DNABornExcitationModel* bornExc = new G4DNABornExcitationModel();
bornExc->SetActivationLowEnergyLimit(10*keV);
bornExc->SetActivationHighEnergyLimit(1.*MeV);
theDNAExcitationProcess->SetEmModel(bornExc,2);
theDNAExcitationProcess->AddEmModel(2, bornExc);
}
ph->RegisterProcess(theDNAExcitationProcess, particle);
}
{
G4DNAEmfietzoglouExcitationModel* emExc = new G4DNAEmfietzoglouExcitationModel();
emExc->SetActivationLowEnergyLimit(0);
emExc->SetActivationHighEnergyLimit(10.*keV);
theDNAExcitationProcess->SetEmModel(emExc,2);
theDNAExcitationProcess->AddEmModel(2, emExc);
}
ph->RegisterProcess(theDNAExcitationProcess, particle);
}
{
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
// *** Ionisation ***
G4DNAIonisation* theDNAIonisationProcess =
new G4DNAIonisation("e-_G4DNAIonisation");
{
G4DNABornIonisationModel* bornIon = new G4DNABornIonisationModel();
bornIon->SetLowEnergyLimit(10*keV);
bornIon->SetHighEnergyLimit(1.*MeV);
bornIon->SetActivationLowEnergyLimit(10*keV);
bornIon->SetActivationHighEnergyLimit(1.*MeV);
theDNAIonisationProcess->SetEmModel(bornIon,1);
theDNAIonisationProcess->AddEmModel(1,bornIon);
}
{
G4DNAEmfietzoglouIonisationModel* emIonModel = new G4DNAEmfietzoglouIonisationModel();
emIonModel->SetActivationLowEnergyLimit(10.*eV);
emIonModel->SetActivationHighEnergyLimit(10.*keV);
{
G4DNAEmfietzoglouIonisationModel* emIonModel = new G4DNAEmfietzoglouIonisationModel();
emIonModel->SetLowEnergyLimit(10*eV);
emIonModel->SetHighEnergyLimit(10.*keV);
emIonModel->SetActivationLowEnergyLimit(0);
emIonModel->SetActivationHighEnergyLimit(10.*keV);
theDNAIonisationProcess->SetEmModel(emIonModel,1);
theDNAIonisationProcess->AddEmModel(1,emIonModel);
}
{
G4DNABornIonisationModel* bornIon = new G4DNABornIonisationModel();
bornIon->SetActivationLowEnergyLimit(10*keV);
bornIon->SetActivationHighEnergyLimit(1.*MeV);
theDNAIonisationProcess->SetEmModel(emIonModel,2);
emIonModel->SelectFasterComputation(true);
theDNAIonisationProcess->AddEmModel(2,emIonModel);
}
ph->RegisterProcess(theDNAIonisationProcess, particle);
theDNAIonisationProcess->SetEmModel(bornIon,2);
theDNAIonisationProcess->AddEmModel(2,bornIon);
}
ph->RegisterProcess(theDNAIonisationProcess, particle);
}
// *** Vibrational excitation ***
ph->RegisterProcess(new G4DNAVibExcitation("e-_G4DNAVibExcitation"), particle);
@@ -82,6 +82,8 @@
#include "G4UniversalFluctuation.hh"
#include "G4LowECapture.hh"
#include "G4hMultipleScattering.hh"
#include "G4eCoulombScatteringModel.hh"
#include "G4IonCoulombScatteringModel.hh"
#include "G4ionIonisation.hh"
// Processes and models for Geant4-DNA
@@ -89,7 +91,8 @@
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
//#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAIonElasticModel.hh"
#include "G4DNAExcitation.hh"
@@ -102,6 +105,12 @@
#include "G4SystemOfUnits.hh"
#include <vector>
#include "G4DNAChemistryManager.hh"
#include "G4DNAElectronSolvation.hh"
#include "G4DNAEmfietzoglouIonisationModel.hh"
#include "G4DNAEmfietzoglouExcitationModel.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmModelActivator::G4EmModelActivator()
@@ -119,11 +128,11 @@ G4EmModelActivator::~G4EmModelActivator()
void G4EmModelActivator::ConstructParticle()
{
const std::vector<G4String> regnamesDNA = theParameters->RegionsDNA();
if(regnamesDNA.size() > 0)
{
ConstructDNAParticles();
}
// const std::vector<G4String> regnamesDNA = theParameters->RegionsDNA();
// if(regnamesDNA.size() > 0)
//{
ConstructDNAParticles();
//}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -153,7 +162,7 @@ void G4EmModelActivator::ActivatePAI()
{
const std::vector<G4String> regnamesPAI = theParameters->RegionsPAI();
G4int nreg = regnamesPAI.size();
if(0 == nreg) return;
if(0 == nreg) { return; }
G4int verbose = theParameters->Verbose() - 1;
if(verbose > 0)
{
@@ -366,7 +375,7 @@ void G4EmModelActivator::ActivateMicroElec()
reg,
0.0,
2 * MeV,
new G4IonFluctuations());
new G4UniversalFluctuation());
mod = new G4BetheBlochModel();
mod->SetActivationLowEnergyLimit(pmax);
@@ -470,10 +479,11 @@ void G4EmModelActivator::ActivateDNA()
G4ProcessManager* a0man = alpha0->GetProcessManager();
G4ProcessManager* h0man = h0->GetProcessManager();
G4bool emsc = HasMsc(eman);
//G4bool pmsc = HasMsc(pman);
//G4bool a2msc = HasMsc(a2man);
//G4bool a1msc = HasMsc(a1man);
G4bool emsc = HasMsc(eman);
G4bool pmsc = HasMsc(pman);
G4bool a2msc = HasMsc(a2man);
G4bool a1msc = HasMsc(a1man);
G4bool imsc = HasMsc(iman);
// alpha+ standard processes
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
@@ -625,24 +635,46 @@ void G4EmModelActivator::ActivateDNA()
G4VEmModel* mod;
// limits for DNA model applicability
G4double elowest = 11 * eV;
G4double elowest = 4. * eV; // theParameters->LowestElectronEnergy();
// G4cout << "elowest = " << G4BestUnit(elowest, "Energy") << G4endl;
G4double elimel = 1 * MeV;
G4double elimin = 1 * MeV;
G4double elimvb = 100 * eV;
G4double elimat = 13 * eV;
G4double pmin = 10 * keV;
G4double elim1 = 10 * keV;
G4double pmin = 10 * keV;
G4double pminbb = 2 * MeV;
G4double pminch = 100 * eV;
G4double mgmin = 1 * keV;
G4double gmmax = 500 * keV;
G4double pmax = 100 * MeV;
G4double mgmin = 1 * keV;
G4double gmmax = 500 * keV;
G4double pmax = 100 * MeV;
G4double ionmin = 10 * keV;
G4double ionmax = 400 * MeV;
G4double hmax = 100 * MeV;
G4double gionmax = 1 * TeV;
G4double hmax = 100 * MeV;
G4double gionmax= 1 * GeV;
// low-energy capture
G4LowECapture* ecap = new G4LowECapture(elowest);
eman->AddDiscreteProcess(ecap);
G4LowECapture* ecap = nullptr;
if(G4DNAChemistryManager::IsActivated() == false)
{
// Note: G4DNAElectronSolvation could also be used instead of G4LowECapture
ecap = new G4LowECapture(elowest);
// ecap->SetVerboseLevel(1);
eman->AddDiscreteProcess(ecap);
}
else
{
// When chemistry is activated: G4DNAElectronSolvation turns the electron
// to a solvated electron, otherwise it kills the electron at the
// corresponding high energy limit of the model
G4DNAElectronSolvation* solvatation =
new G4DNAElectronSolvation("e-_G4DNAElectronSolvation");
solvatation->AddEmModel(0, new G4DummyModel());
eman->AddDiscreteProcess(solvatation);
}
G4LowECapture* pcap = new G4LowECapture(pmin);
pman->AddDiscreteProcess(pcap);
G4LowECapture* icap = new G4LowECapture(ionmin);
@@ -659,9 +691,8 @@ void G4EmModelActivator::ActivateDNA()
// loop over regions
for(G4int i = 0; i < nreg; ++i)
{
G4String reg = regnamesDNA[i];
if(0 < verbose)
if(1 < verbose)
{
G4cout << "### DNA models are activated for G4Region " << reg << G4endl
<< " Energy limits for e- elastic: " << elowest/eV << " eV - "
@@ -671,27 +702,70 @@ void G4EmModelActivator::ActivateDNA()
<< " Energy limits for hadrons/ions: " << pmin/MeV << " MeV - "
<< pmax/MeV << " MeV" << G4endl;
}
// ---
// e-
if(emsc)
{
if(emsc) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("e-", "msc", msc, reg);
em_config->SetExtraEmModel("e-", "msc", msc, reg, 0.0, 100*MeV);
} else {
mod = new G4eCoulombScatteringModel();
mod->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("e-", "CoulombScat", mod, reg, 0.0, 10 * TeV);
}
// cuts and solvation
if(G4DNAChemistryManager::IsActivated())
{
// For this condition to work, the chemistry list has to be called
// before any standard EM physics list
mod = new G4DNATransformElectronModel();
mod->SetHighEnergyLimit(elowest);
em_config->SetExtraEmModel("e-",
"e-_G4DNAElectronSolvation",
mod,
reg,
0.,
elowest+1.*eV);
mod = new G4DNAUeharaScreenedRutherfordElasticModel();
mod->SetLowEnergyLimit(0.);
mod->SetActivationLowEnergyLimit(0.);
em_config->SetExtraEmModel("e-",
"e-_G4DNAElastic",
mod,
reg,
0.0,
7.4*eV);
}
else if(ecap)
{
ecap->AddRegion(reg);
}
else
{
mod = new G4DummyModel();
em_config->SetExtraEmModel("e-", "CoulombScat", mod, reg, 0.0, elimel);
mod = new G4DNAOneStepThermalizationModel();
mod->SetHighEnergyLimit(elowest);
em_config->SetExtraEmModel("e-",
"e-_G4DNAElectronSolvation",
mod,
reg,
0.,
elowest);
}
mod = new G4DNAScreenedRutherfordElasticModel();
mod = new G4DNAChampionElasticModel();
em_config->SetExtraEmModel("e-",
"e-_G4DNAElastic",
mod,
reg,
elowest,
7.4*eV,
elimel);
// ioni
mod = new G4MollerBhabhaModel();
mod->SetActivationLowEnergyLimit(elimin);
em_config->SetExtraEmModel("e-",
@@ -701,21 +775,38 @@ void G4EmModelActivator::ActivateDNA()
0.0,
10 * TeV,
new G4UniversalFluctuation());
mod = new G4DNAEmfietzoglouIonisationModel();
em_config->SetExtraEmModel("e-",
"e-_G4DNAIonisation",
mod,
reg,
0.0,
elim1);
mod = new G4DNABornIonisationModel();
em_config->SetExtraEmModel("e-",
"e-_G4DNAIonisation",
mod,
reg,
elowest,
elim1,
elimin);
// exc
mod = new G4DNAEmfietzoglouExcitationModel();
em_config->SetExtraEmModel("e-",
"e-_G4DNAExcitation",
mod,
reg,
0.0,
elim1);
mod = new G4DNABornExcitationModel();
em_config->SetExtraEmModel("e-",
"e-_G4DNAExcitation",
mod,
reg,
elowest,
elim1,
elimin);
mod = new G4DNASancheExcitationModel();
@@ -723,7 +814,7 @@ void G4EmModelActivator::ActivateDNA()
"e-_G4DNAVibExcitation",
mod,
reg,
elowest,
0.0,
elimvb);
mod = new G4DNAMeltonAttachmentModel();
@@ -731,19 +822,30 @@ void G4EmModelActivator::ActivateDNA()
"e-_G4DNAAttachment",
mod,
reg,
elowest,
0.0,
elimat);
// ---
// proton
if(pmsc) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("proton", "msc", msc, reg, 0.0, 100*MeV);
} else {
mod = new G4eCoulombScatteringModel();
mod->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("proton", "CoulombScat", mod, reg, 0.0, 10 * TeV);
}
mod = new G4BraggModel();
mod->SetActivationHighEnergyLimit(0.0);
mod->SetActivationLowEnergyLimit(pminbb);
em_config->SetExtraEmModel("proton",
"hIoni",
mod,
reg,
0.0,
2 * MeV,
new G4IonFluctuations());
pminbb,
new G4UniversalFluctuation());
mod = new G4BetheBlochModel();
mod->SetActivationLowEnergyLimit(pmax);
@@ -751,7 +853,7 @@ void G4EmModelActivator::ActivateDNA()
"hIoni",
mod,
reg,
2 * MeV,
pminbb,
10 * TeV,
new G4UniversalFluctuation());
@@ -776,7 +878,7 @@ void G4EmModelActivator::ActivateDNA()
"proton_G4DNAExcitation",
mod,
reg,
elowest,
0.0,
gmmax);
mod = new G4DNABornExcitationModel();
@@ -797,21 +899,31 @@ void G4EmModelActivator::ActivateDNA()
mod = new G4DNAIonElasticModel();
em_config->SetExtraEmModel("proton",
"proton_G4DNAIonElasticModel",
"proton_G4DNAElasticModel",
mod,
reg,
0.0,
1 * MeV);
elimel);
// ions
// ---
// GenericIon
if(imsc) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("proton", "ionmsc", msc, reg, 0.0, 100*MeV);
} else {
mod = new G4IonCoulombScatteringModel();
mod->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("proton", "CoulombScat", mod, reg, 0.0, 10 * TeV);
}
mod = new G4BraggIonModel();
mod->SetActivationHighEnergyLimit(0.0);
mod->SetActivationLowEnergyLimit(pminbb);
em_config->SetExtraEmModel("GenericIon",
"ionIoni",
mod,
reg,
0.0,
2 * MeV,
pminbb,
new G4IonFluctuations());
mod = new G4BetheBlochModel();
@@ -820,7 +932,7 @@ void G4EmModelActivator::ActivateDNA()
"ionIoni",
mod,
reg,
2 * MeV,
pminbb,
10 * TeV,
new G4IonFluctuations());
@@ -832,15 +944,21 @@ void G4EmModelActivator::ActivateDNA()
0.0,
gionmax);
// ---
// alpha++
if(a2msc) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("alpha++", "msc", msc, reg, 0.0, 100*MeV);
}
mod = new G4BraggIonModel();
mod->SetActivationHighEnergyLimit(0.0);
mod->SetActivationLowEnergyLimit(pminbb);
em_config->SetExtraEmModel("alpha",
"ionIoni",
mod,
reg,
0.0,
2 * MeV,
pminbb,
new G4IonFluctuations());
mod = new G4BetheBlochModel();
@@ -849,7 +967,7 @@ void G4EmModelActivator::ActivateDNA()
"ionIoni",
mod,
reg,
2 * MeV,
pminbb,
10 * TeV,
new G4IonFluctuations());
@@ -879,21 +997,27 @@ void G4EmModelActivator::ActivateDNA()
mod = new G4DNAIonElasticModel();
em_config->SetExtraEmModel("alpha",
"alpha_G4DNAIonElasticModel",
"alpha_G4DNAElasticModel",
mod,
reg,
0.0,
1 * MeV);
elimel);
// ---
// alpha+
if(a1msc) {
G4UrbanMscModel* msc = new G4UrbanMscModel();
msc->SetActivationLowEnergyLimit(elimel);
em_config->SetExtraEmModel("alpha+", "msc", msc, reg, 0.0, 100*MeV);
}
mod = new G4BraggIonModel();
mod->SetActivationHighEnergyLimit(0.0);
mod->SetActivationLowEnergyLimit(pminbb);
em_config->SetExtraEmModel("alpha+",
"ionIoni",
mod,
reg,
0.0,
2 * MeV,
pminbb,
new G4IonFluctuations());
mod = new G4BetheBlochModel();
@@ -902,7 +1026,7 @@ void G4EmModelActivator::ActivateDNA()
"ionIoni",
mod,
reg,
2 * MeV,
pminbb,
10 * TeV,
new G4IonFluctuations());
@@ -940,12 +1064,13 @@ void G4EmModelActivator::ActivateDNA()
mod = new G4DNAIonElasticModel();
em_config->SetExtraEmModel("alpha+",
"alpha+_G4DNAIonElasticModel",
"alpha+_G4DNAElasticModel",
mod,
reg,
0.0,
1 * MeV);
elimel);
// ---
// helium
mod = new G4DNARuddIonisationModel();
em_config->SetExtraEmModel("helium",
@@ -973,11 +1098,11 @@ void G4EmModelActivator::ActivateDNA()
mod = new G4DNAIonElasticModel();
em_config->SetExtraEmModel("helium",
"helium_G4DNAIonElasticModel",
"helium_G4DNAElasticModel",
mod,
reg,
0.0,
1 * MeV);
elimel);
// hydrogen
mod = new G4DNARuddIonisationModel();
@@ -993,7 +1118,7 @@ void G4EmModelActivator::ActivateDNA()
"hydrogen_G4DNAExcitation",
mod,
reg,
elowest,
0.0,
gmmax);
mod = new G4DNADingfelderChargeIncreaseModel();
@@ -1006,11 +1131,12 @@ void G4EmModelActivator::ActivateDNA()
mod = new G4DNAIonElasticModel();
em_config->SetExtraEmModel("hydrogen",
"hydrogen_G4DNAIonElasticModel",
"hydrogen_G4DNAElasticModel",
mod,
reg,
0.0,
1 * MeV);
elimel);
}
}
@@ -113,8 +113,9 @@ G4EmStandardPhysicsGS::G4EmStandardPhysicsGS(G4int ver)
param->SetDefaults();
param->SetVerbose(verbose);
param->SetLowestElectronEnergy(10*eV);
param->SetMscRangeFactor(0.12);
param->SetMscRangeFactor(0.1);
param->SetMscStepLimitType(fUseSafetyPlus);// corresponds to Urban fUseSafety
// param->SetMscStepLimitType(fUseSafety);// corresponds to the error-free stepping
// param->SetFluo(true);
SetPhysicsType(bElectromagnetic);
}
@@ -128,8 +129,9 @@ G4EmStandardPhysicsGS::G4EmStandardPhysicsGS(G4int ver, const G4String&)
param->SetDefaults();
param->SetVerbose(verbose);
param->SetLowestElectronEnergy(10*eV);
param->SetMscRangeFactor(0.12);
param->SetMscRangeFactor(0.1);
param->SetMscStepLimitType(fUseSafetyPlus);// corresponds to Urban fUseSafety
// param->SetMscStepLimitType(fUseSafety);// corresponds to the error-free stepping
// param->SetFluo(true);
SetPhysicsType(bElectromagnetic);
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics_option3.cc 92821 2015-09-17 15:23:49Z gcosmo $
// $Id: G4EmStandardPhysics_option3.cc 96267 2016-04-01 12:38:51Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -75,6 +75,7 @@
#include "G4MuPairProduction.hh"
#include "G4hBremsstrahlung.hh"
#include "G4hPairProduction.hh"
#include "G4ePairProduction.hh"
#include "G4MuBremsstrahlungModel.hh"
#include "G4MuPairProductionModel.hh"
@@ -125,6 +126,7 @@ G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver)
param->SetLowestElectronEnergy(100*eV);
param->SetNumberOfBinsPerDecade(20);
param->SetMscStepLimitType(fUseDistanceToBoundary);
param->SetMuHadLateralDisplacement(true);
param->SetFluo(true);
SetPhysicsType(bElectromagnetic);
}
@@ -205,6 +207,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
G4hPairProduction* kp = new G4hPairProduction();
G4hBremsstrahlung* pb = new G4hBremsstrahlung();
G4hPairProduction* pp = new G4hPairProduction();
G4ePairProduction* ee = new G4ePairProduction();
// muon & hadron multiple scattering
// G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
@@ -259,6 +262,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(brem, particle);
ph->RegisterProcess(ee, particle);
} else if (particleName == "e+") {
@@ -280,6 +284,7 @@ void G4EmStandardPhysics_option3::ConstructProcess()
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(brem, particle);
ph->RegisterProcess(ee, particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
} else if (particleName == "mu+" ||
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4EmStandardPhysics_option4.cc 92821 2015-09-17 15:23:49Z gcosmo $
// $Id: G4EmStandardPhysics_option4.cc 96209 2016-03-30 08:58:33Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -79,6 +79,7 @@
#include "G4MuPairProduction.hh"
#include "G4hBremsstrahlung.hh"
#include "G4hPairProduction.hh"
#include "G4ePairProduction.hh"
#include "G4MuBremsstrahlungModel.hh"
#include "G4MuPairProductionModel.hh"
@@ -131,7 +132,7 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver)
param->ActivateAngularGeneratorForIonisation(true);
param->SetMscRangeFactor(0.02);
param->SetMscStepLimitType(fUseDistanceToBoundary);
//param->SetLatDisplacementBeyondSafety(true);
param->SetLatDisplacementBeyondSafety(true);
param->SetFluo(true);
SetPhysicsType(bElectromagnetic);
}
@@ -152,7 +153,8 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver,
param->ActivateAngularGeneratorForIonisation(true);
param->SetMscRangeFactor(0.02);
param->SetMscStepLimitType(fUseDistanceToBoundary);
// param->SetLatDisplacementBeyondSafety(true);
param->SetMuHadLateralDisplacement(true);
//param->SetLatDisplacementBeyondSafety(true);
param->SetFluo(true);
SetPhysicsType(bElectromagnetic);
}
@@ -215,6 +217,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
G4hPairProduction* kp = new G4hPairProduction();
G4hBremsstrahlung* pb = new G4hBremsstrahlung();
G4hPairProduction* pp = new G4hPairProduction();
G4ePairProduction* ee = new G4ePairProduction();
// muon & hadron multiple scattering
G4MuMultipleScattering* mumsc = new G4MuMultipleScattering();
@@ -314,6 +317,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(brem, particle);
ph->RegisterProcess(ee, particle);
ph->RegisterProcess(ss, particle);
} else if (particleName == "e+") {
@@ -355,6 +359,7 @@ void G4EmStandardPhysics_option4::ConstructProcess()
ph->RegisterProcess(msc, particle);
ph->RegisterProcess(eIoni, particle);
ph->RegisterProcess(brem, particle);
ph->RegisterProcess(ee, particle);
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
ph->RegisterProcess(ss, particle);
@@ -70,7 +70,9 @@ G4OpticalPhysics::G4OpticalPhysics(G4int verbose, const G4String& name)
fExcitationRatio(0.0),
fProfile("delta"),
fFiniteRiseTime(false),
fScintillationByParticleType(false)
fScintillationByParticleType(false),
fScintillationTrackInfo(false),
fInvokeSD(true)
{
verboseLevel = verbose;
fMessenger = new G4OpticalPhysicsMessenger(this);
@@ -202,17 +204,24 @@ namespace UIhelpers {
sccmd3.SetParameterName("ratio",false);
//sccmd3.SetRange("ratio>=0.&&ratio<=1.");//LIMITATION: w/ DeclareMethod range checking does not work
sccmd3.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd4 = mess->DeclareMethod("setByParticleType",
&G4Scintillation::SetScintillationByParticleType,
"Activate/Inactivate scintillation process by particle type");
sccmd4.SetParameterName("flag", false);
sccmd4.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd5 = mess->DeclareMethod("setTrackInfo",
&G4Scintillation::SetScintillationTrackInfo,
"Activate/Inactivate scintillation track info");
sccmd5.SetParameterName("flag", false);
sccmd5.SetStates(G4State_Idle);
G4GenericMessenger::Command& sccmd5 = mess->DeclareMethod("setTrackSecondariesFirst",
G4GenericMessenger::Command& sccmd6 = mess->DeclareMethod("setTrackSecondariesFirst",
&G4Scintillation::SetTrackSecondariesFirst,
"Set option to track secondaries before finishing their parent track");
sccmd5.SetParameterName("flag",false);
sccmd5.SetStates(G4State_Idle);
sccmd6.SetParameterName("flag",false);
sccmd6.SetStates(G4State_Idle);
buildCommands(ScintillationProcess,DIR_CMDS"/scintillation/",GUIDANCE" for scintillation process.");
}
@@ -282,6 +291,7 @@ void G4OpticalPhysics::ConstructProcess()
G4OpBoundaryProcess* OpBoundaryProcess = new G4OpBoundaryProcess();
UIhelpers::buildCommands(OpBoundaryProcess,DIR_CMDS"/boundary/",GUIDANCE" for boundary process");
OpBoundaryProcess->SetInvokeSD(fInvokeSD);
OpProcesses[kBoundary] = OpBoundaryProcess;
G4OpWLS* OpWLSProcess = new G4OpWLS();
@@ -311,6 +321,7 @@ void G4OpticalPhysics::ConstructProcess()
ScintillationProcess->SetScintillationExcitationRatio(fExcitationRatio);
ScintillationProcess->SetFiniteRiseTime(fFiniteRiseTime);
ScintillationProcess->SetScintillationByParticleType(fScintillationByParticleType);
ScintillationProcess->SetScintillationTrackInfo(fScintillationTrackInfo);
ScintillationProcess->SetTrackSecondariesFirst(fProcessTrackSecondariesFirst[kScintillation]);
G4EmSaturation* emSaturation = G4LossTableManager::Instance()->EmSaturation();
ScintillationProcess->AddSaturation(emSaturation);
@@ -415,6 +426,13 @@ void G4OpticalPhysics::
//G4Scintillation::SetScintillationByParticleType(scintillationByParticleType);
}
void G4OpticalPhysics::
SetScintillationTrackInfo(G4bool scintillationTrackInfo)
{
fScintillationTrackInfo = scintillationTrackInfo;
//G4Scintillation::SetScintillationTrackInfo(scintillationTrackInfo);
}
void G4OpticalPhysics::SetTrackSecondariesFirst(G4OpticalProcessIndex index,
G4bool trackSecondariesFirst)
{
@@ -432,7 +450,12 @@ void G4OpticalPhysics::SetFiniteRiseTime(G4bool finiteRiseTime)
{
fFiniteRiseTime = finiteRiseTime;
//G4Scintillation::SetFiniteRiseTime(finiteRiseTime);
}
}
void G4OpticalPhysics::SetInvokeSD(G4bool invokeSD)
{
fInvokeSD = invokeSD;
}
void G4OpticalPhysics::Configure(G4OpticalProcessIndex index, G4bool isUse)
{
@@ -68,9 +68,11 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
fSetCerenkovMaxBetaChangeCmd(0),
fSetScintillationYieldFactorCmd(0),
fSetScintillationByParticleTypeCmd(0),
fSetScintillationTrackInfoCmd(0),
fSetWLSTimeProfileCmd(0),
fSetTrackSecondariesFirstCmd(0),
fSetFiniteRiseTimeCmd(0)
fSetFiniteRiseTimeCmd(0),
fSetInvokeSDCmd(0)
{
G4bool toBeBroadcasted = false;
fDir = new G4UIdirectory("/process/optical/defaults/",toBeBroadcasted);
@@ -147,6 +149,11 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
fSetScintillationByParticleTypeCmd->SetParameterName("ScintillationByParticleTypeActivation", false);
fSetScintillationByParticleTypeCmd->AvailableForStates(G4State_PreInit);
fSetScintillationTrackInfoCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setTrackInfo", this);
fSetScintillationTrackInfoCmd->SetGuidance("Activate/Inactivate scintillation TrackInformation");
fSetScintillationTrackInfoCmd->SetParameterName("ScintillationTrackInfo", false);
fSetScintillationTrackInfoCmd->AvailableForStates(G4State_PreInit);
fSetFiniteRiseTimeCmd = new G4UIcmdWithABool("/process/optical/defaults/scintillation/setFiniteRiseTime", this);
fSetFiniteRiseTimeCmd->SetGuidance("Set option of a finite rise-time for G4Scintillation");
fSetFiniteRiseTimeCmd->SetGuidance("If set, the G4Scintillation process expects the user to have set the constant material property FAST/SLOWSCINTILLATIONRISETIME");
@@ -160,6 +167,11 @@ G4OpticalPhysicsMessenger::G4OpticalPhysicsMessenger(
fSetWLSTimeProfileCmd->SetParameterName("WLSTimeProfile", false);
fSetWLSTimeProfileCmd->SetCandidates("delta exponential");
fSetWLSTimeProfileCmd->AvailableForStates(G4State_PreInit);
fSetInvokeSDCmd = new G4UIcmdWithABool("/process/optical/defaults/boundary/setInvokeSD", this);
fSetInvokeSDCmd->SetGuidance("Set option for calling InvokeSD in G4OpBoundaryProcess");
fSetInvokeSDCmd->SetParameterName("InvokeSD", false);
fSetInvokeSDCmd->AvailableForStates(G4State_PreInit);
}
G4OpticalPhysicsMessenger::~G4OpticalPhysicsMessenger()
@@ -174,8 +186,11 @@ G4OpticalPhysicsMessenger::~G4OpticalPhysicsMessenger()
delete fSetCerenkovMaxBetaChangeCmd;
delete fSetScintillationYieldFactorCmd;
delete fSetScintillationByParticleTypeCmd;
delete fSetScintillationTrackInfoCmd;
delete fSetWLSTimeProfileCmd;
delete fSetTrackSecondariesFirstCmd;
delete fSetFiniteRiseTimeCmd;
delete fSetInvokeSDCmd;
}
#include <iostream>
@@ -186,7 +201,7 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
if (command == fActivateProcessCmd) {
std::istringstream is(newValue.data());
G4String pn;
G4int flag;
G4String flag;
is >> pn >> flag;
if ( pn == "Cerenkov" ) {
fSelectedProcessIndex = kCerenkov;
@@ -205,15 +220,16 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
} else {
G4ExceptionDescription msg;
msg << "Not allowed process name: "<<pn<<" (UI: "<<newValue<<")";
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,pn);
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,msg);
}
fOpticalPhysics->Configure(fSelectedProcessIndex,flag);
G4bool value = G4UIcommand::ConvertToBool(flag);
fOpticalPhysics->Configure(fSelectedProcessIndex,value);
}
else if (command == fSetTrackSecondariesFirstCmd )
{
std::istringstream is(newValue.data());
G4String pn;
G4int flag;
G4String flag;
is >> pn >> flag;
if ( pn == "Cerenkov" ) {
fSelectedProcessIndex = kCerenkov;
@@ -232,9 +248,10 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
} else {
G4ExceptionDescription msg;
msg << "Not allowed process name: "<<pn<<" (UI: "<<newValue<<")";
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,pn);
G4Exception("G4OpticalPhysicsMessenger::SetNewValue(...)","Optical001",FatalException,msg);
}
fOpticalPhysics->SetTrackSecondariesFirst(fSelectedProcessIndex,flag);
G4bool value = G4UIcommand::ConvertToBool(flag);
fOpticalPhysics->SetTrackSecondariesFirst(fSelectedProcessIndex,value);
}
else if (command == fSetOpProcessVerboseCmd) {
fOpticalPhysics->SetVerboseLevel(fSetOpProcessVerboseCmd->GetNewIntValue(newValue));
@@ -259,12 +276,21 @@ void G4OpticalPhysicsMessenger::SetNewValue(G4UIcommand* command,
->SetScintillationByParticleType(
fSetScintillationByParticleTypeCmd->GetNewBoolValue(newValue));
}
else if (command == fSetScintillationTrackInfoCmd) {
fOpticalPhysics
->SetScintillationTrackInfo(
fSetScintillationTrackInfoCmd->GetNewBoolValue(newValue));
}
else if (command == fSetFiniteRiseTimeCmd) {
fOpticalPhysics
->SetFiniteRiseTime(
fSetFiniteRiseTimeCmd->GetNewBoolValue(newValue));
}
else if (command == fSetWLSTimeProfileCmd) {
fOpticalPhysics->SetWLSTimeProfile(newValue);
fOpticalPhysics->SetWLSTimeProfile(newValue);
}
else if (command == fSetInvokeSDCmd) {
fOpticalPhysics
->SetInvokeSD(fSetInvokeSDCmd->GetNewBoolValue(newValue));
}
}
@@ -1,4 +1,4 @@
$Id: History 94088 2015-11-05 15:11:00Z gcosmo $
$Id: History 97178 2016-05-27 12:45:30Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,15 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
26-May-2016, A. Ribon (phys-ctor-helastic-V10-02-01)
- G4HadronElasticPhysicsPHP : made it thread-safe.
23-Feb-2016, A. Ribon (phys-ctor-helastic-V10-02-00)
- G4HadronElasticPhysics : added missing hadron elastic for He3,
using Glauber-Gribov elastic cross section (Gheisha does not have
hadronic (elastic and inelastic) cross sections for He3).
Thanks ALICE for spotting this.
05-Nov-2015, A. Ribon (phys-ctor-helastic-V10-01-05)
- Removed neutron_hp/
@@ -63,8 +63,8 @@ private:
G4HadronElasticPhysicsPHP(const G4HadronElasticPhysicsPHP&);
G4HadronElasticPhysicsPHP& operator=(const G4HadronElasticPhysicsPHP&);
G4int verbose;
G4bool wasActivated;
G4HadronElasticPhysics* mainElasticBuilder;
static G4ThreadLocal G4bool wasActivated;
static G4ThreadLocal G4HadronElasticPhysics* mainElasticBuilder;
};
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4HadronElasticPhysics.cc 88356 2015-02-16 09:00:15Z gcosmo $
// $Id: G4HadronElasticPhysics.cc 95771 2016-02-24 08:23:05Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -63,6 +63,8 @@
#include "G4ElasticHadrNucleusHE.hh"
#include "G4AntiNuclElastic.hh"
#include "G4ComponentGGNuclNuclXsc.hh"
#include "G4BGGNucleonElasticXS.hh"
#include "G4BGGPionElasticXS.hh"
@@ -171,6 +173,18 @@ void G4HadronElasticPhysics::ConstructProcess()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(pname == "He3") {
G4HadronElasticProcess* hel = new G4HadronElasticProcess();
G4VCrossSectionDataSet* theComponentGGNuclNuclData =
new G4CrossSectionElastic(new G4ComponentGGNuclNuclXsc());
hel->AddDataSet(theComponentGGNuclNuclData);
hel->RegisterMe(lhep0);
pmanager->AddDiscreteProcess(hel);
if(verbose > 1) {
G4cout << "### HadronElasticPhysics: " << hel->GetProcessName()
<< " added for " << particle->GetParticleName() << G4endl;
}
} else if(pname == "proton") {
G4HadronElasticProcess* hel = new G4HadronElasticProcess();
@@ -41,9 +41,16 @@
#include "G4ParticleHPElastic.hh"
#include "G4ParticleHPElasticData.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronElasticPhysicsPHP);
//
G4ThreadLocal G4bool G4HadronElasticPhysicsPHP::wasActivated = false;
G4ThreadLocal G4HadronElasticPhysics* G4HadronElasticPhysicsPHP::mainElasticBuilder = 0;
G4HadronElasticPhysicsPHP::G4HadronElasticPhysicsPHP(G4int ver)
: G4VPhysicsConstructor("hElasticPhysics_PHP"), verbose(ver),
wasActivated(false)
: G4VPhysicsConstructor("hElasticPhysics_PHP"), verbose(ver)
{
if(verbose > 1) {
G4cout << "### G4HadronElasticPhysicsPHP: " << GetPhysicsName()
@@ -54,7 +61,7 @@ G4HadronElasticPhysicsPHP::G4HadronElasticPhysicsPHP(G4int ver)
G4HadronElasticPhysicsPHP::~G4HadronElasticPhysicsPHP()
{
delete mainElasticBuilder;
delete mainElasticBuilder; mainElasticBuilder = 0;
}
void G4HadronElasticPhysicsPHP::ConstructParticle()
@@ -67,7 +74,8 @@ void G4HadronElasticPhysicsPHP::ConstructProcess()
{
if(wasActivated) { return; }
wasActivated = true;
//Needed because this is a TLS object and this method is called by all threads
if ( ! mainElasticBuilder ) mainElasticBuilder = new G4HadronElasticPhysics(verbose);
mainElasticBuilder->ConstructProcess();
mainElasticBuilder->GetNeutronModel()->SetMinEnergy(19.5*MeV);
@@ -1,4 +1,4 @@
$Id: History 94087 2015-11-05 15:10:09Z gcosmo $
$Id: History 97177 2016-05-27 12:44:22Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,20 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
26-May-2016, A. Ribon (phys-ctor-hinelastic-V10-02-02)
- G4HadronPhysicsQGSP_BIC_AllHP : treat only proton with ParticleHP in
this class, and move the others (deuteron, triton, 3He, alpha) to
the new class G4IonPhysicsPHP.
06-Apr-2016, A. Ribon (phys-ctor-hinelastic-V10-02-01)
- G4HadronPhysicsFTFP_BERT_ATL : created new constructor for ATLAS, similar
to G4HadronPhysicsFTFP_BERT but with the transition between BERT and FTFP
in the energy region [9, 12] GeV.
04-Dec-2015, A. Ribon (phys-ctor-hinelastic-V10-02-00)
- G4HadronPhysicsQGSP_BIC_AllHP : activate ParticleHP for deuteron,
triton, He3 and alpha.
05-Nov-2015, A. Ribon (phys-ctor-hinelastic-V10-01-05)
- Removed neutron_hp/
@@ -0,0 +1,109 @@
//
// ********************************************************************
// * 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:$
//
//---------------------------------------------------------------------------
// Author: Alberto Ribon
// Date: April 2016
//
// Hadron physics for the new physics list FTFP_BERT_ATL.
// This is a modified version of the FTFP_BERT hadron physics for ATLAS.
// The hadron physics of FTFP_BERT_ATL has the transition between Bertini
// (BERT) intra-nuclear cascade model and Fritiof (FTF) string model in the
// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT).
//---------------------------------------------------------------------------
//
#ifndef G4HadronPhysicsFTFP_BERT_ATL_h
#define G4HadronPhysicsFTFP_BERT_ATL_h 1
#include "globals.hh"
#include "G4ios.hh"
#include "G4VPhysicsConstructor.hh"
#include "G4PiKBuilder.hh"
#include "G4BertiniPiKBuilder.hh"
#include "G4FTFPPiKBuilder.hh"
#include "G4ProtonBuilder.hh"
#include "G4BertiniProtonBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4FTFPProtonBuilder.hh"
#include "G4NeutronBuilder.hh"
#include "G4BertiniNeutronBuilder.hh"
#include "G4FTFPNeutronBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
class G4ComponentGGHadronNucleusXsc;
class G4HadronPhysicsFTFP_BERT_ATL : public G4VPhysicsConstructor
{
public:
G4HadronPhysicsFTFP_BERT_ATL(G4int verbose =1);
G4HadronPhysicsFTFP_BERT_ATL(const G4String& name, G4bool quasiElastic=false);
virtual ~G4HadronPhysicsFTFP_BERT_ATL();
public:
virtual void ConstructParticle();
virtual void ConstructProcess();
private:
void CreateModels();
G4bool QuasiElastic;
// Simplify handling of TLS data, encapsulate everyhing in a structure
struct ThreadPrivate {
G4NeutronBuilder * theNeutrons;
G4BertiniNeutronBuilder * theBertiniNeutron;
G4FTFPNeutronBuilder * theFTFPNeutron;
G4PiKBuilder * thePiK;
G4BertiniPiKBuilder * theBertiniPiK;
G4FTFPPiKBuilder * theFTFPPiK;
G4ProtonBuilder * thePro;
G4BertiniProtonBuilder * theBertiniPro;
G4FTFPProtonBuilder * theFTFPPro;
G4HyperonFTFPBuilder * theHyperon;
G4AntiBarionBuilder * theAntiBaryon;
G4FTFPAntiBarionBuilder * theFTFPAntiBaryon;
G4ComponentGGHadronNucleusXsc * xsKaon;
G4VCrossSectionDataSet * xsNeutronInelasticXS;
G4VCrossSectionDataSet * xsNeutronCaptureXS;
};
static G4ThreadLocal ThreadPrivate* tpdata;
};
#endif
@@ -54,18 +54,6 @@
#include "G4BinaryNeutronBuilder.hh"
#include "G4NeutronPHPBuilder.hh"
#include "G4DeuteronBuilder.hh"
#include "G4DeuteronPHPBuilder.hh"
#include "G4TritonBuilder.hh"
#include "G4TritonPHPBuilder.hh"
#include "G4He3Builder.hh"
#include "G4He3PHPBuilder.hh"
#include "G4AlphaBuilder.hh"
#include "G4AlphaPHPBuilder.hh"
#include "G4HyperonFTFPBuilder.hh"
#include "G4AntiBarionBuilder.hh"
#include "G4FTFPAntiBarionBuilder.hh"
@@ -105,22 +93,6 @@ class G4HadronPhysicsQGSP_BIC_AllHP : public G4VPhysicsConstructor
G4BinaryProtonBuilder * theBinaryProton;
G4ProtonPHPBuilder * thePHPProton;
G4DeuteronBuilder * theDeuteronB;
G4DeuteronPHPBuilder * thePHPDeuteron;
G4BinaryDeuteronBuilder * theBinaryDeuteron;
G4TritonBuilder * theTritonB;
G4TritonPHPBuilder * thePHPTriton;
G4BinaryTritonBuilder * theBinaryTriton;
G4He3Builder * theHe3B;
G4He3PHPBuilder * thePHPHe3;
G4BinaryHe3Builder * theBinaryHe3;
G4AlphaBuilder * theAlphaB;
G4AlphaPHPBuilder * thePHPAlpha;
G4BinaryAlphaBuilder * theBinaryAlpha;
G4HyperonFTFPBuilder * theHyperon;
G4AntiBarionBuilder * theAntiBaryon;
@@ -11,7 +11,7 @@
#
# Generated on : 10/01/2013
#
# $Id: sources.cmake 94087 2015-11-05 15:10:09Z gcosmo $
# $Id: sources.cmake 96328 2016-04-06 15:52:31Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -92,6 +92,7 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_hinelastic
G4HadronPhysicsFTFP_BERT.hh
G4HadronPhysicsFTFP_BERT_HP.hh
G4HadronPhysicsFTFP_BERT_TRV.hh
G4HadronPhysicsFTFP_BERT_ATL.hh
G4HadronPhysicsNuBeam.hh
G4HadronPhysicsQGS_BIC.hh
G4HadronPhysicsQGSP_BERT.hh
@@ -109,6 +110,7 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_hinelastic
G4HadronPhysicsFTFP_BERT.cc
G4HadronPhysicsFTFP_BERT_HP.cc
G4HadronPhysicsFTFP_BERT_TRV.cc
G4HadronPhysicsFTFP_BERT_ATL.cc
G4HadronPhysicsNuBeam.cc
G4HadronPhysicsQGS_BIC.cc
G4HadronPhysicsQGSP_BERT.cc
@@ -0,0 +1,222 @@
//
// ********************************************************************
// * 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:$
//
//---------------------------------------------------------------------------
// Author: Alberto Ribon
// Date: April 2016
//
// Hadron physics for the new physics list FTFP_BERT_ATL.
// This is a modified version of the FTFP_BERT hadron physics for ATLAS.
// The hadron physics of FTFP_BERT_ATL has the transition between Bertini
// (BERT) intra-nuclear cascade model and Fritiof (FTF) string model in the
// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT).
//---------------------------------------------------------------------------
//
#include <iomanip>
#include "G4HadronPhysicsFTFP_BERT_ATL.hh"
#include "globals.hh"
#include "G4ios.hh"
#include "G4SystemOfUnits.hh"
#include "G4ParticleDefinition.hh"
#include "G4ParticleTable.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4ShortLivedConstructor.hh"
#include "G4ComponentGGHadronNucleusXsc.hh"
#include "G4CrossSectionInelastic.hh"
#include "G4HadronCaptureProcess.hh"
#include "G4NeutronRadCapture.hh"
#include "G4NeutronInelasticXS.hh"
#include "G4NeutronCaptureXS.hh"
#include "G4CrossSectionDataSetRegistry.hh"
#include "G4PhysListUtil.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4HadronPhysicsFTFP_BERT_ATL);
G4ThreadLocal G4HadronPhysicsFTFP_BERT_ATL::ThreadPrivate* G4HadronPhysicsFTFP_BERT_ATL::tpdata=0;
G4HadronPhysicsFTFP_BERT_ATL::G4HadronPhysicsFTFP_BERT_ATL(G4int)
: G4VPhysicsConstructor("hInelastic FTFP_BERT_ATL")
/* , theNeutrons(0)
, theBertiniNeutron(0)
, theFTFPNeutron(0)
, thePiK(0)
, theBertiniPiK(0)
, theFTFPPiK(0)
, thePro(0)
, theBertiniPro(0)
, theFTFPPro(0)
, theHyperon(0)
, theAntiBaryon(0)
, theFTFPAntiBaryon(0) */
, QuasiElastic(false)
/*, xsKaon(0)
, xsNeutronInelasticXS(0)
, xsNeutronCaptureXS(0)*/
{}
G4HadronPhysicsFTFP_BERT_ATL::G4HadronPhysicsFTFP_BERT_ATL(const G4String& name, G4bool quasiElastic)
: G4VPhysicsConstructor(name)
/* , theNeutrons(0)
, theBertiniNeutron(0)
, theFTFPNeutron(0)
, thePiK(0)
, theBertiniPiK(0)
, theFTFPPiK(0)
, thePro(0)
, theBertiniPro(0)
, theFTFPPro(0)
, theHyperon(0)
, theAntiBaryon(0)
, theFTFPAntiBaryon(0)*/
, QuasiElastic(quasiElastic)
/*, xsKaonMinus(0)
, xsNeutronInelasticXS(0)
, xsNeutronCaptureXS(0)*/
{}
void G4HadronPhysicsFTFP_BERT_ATL::CreateModels()
{
G4double minFTFP = 9.0 * GeV;
G4double maxBERT = 12.0 * GeV;
G4cout << " FTFP_BERT_ATL : new threshold between BERT and FTFP"
<< " is over the interval " << minFTFP/GeV << " to " << maxBERT/GeV
<< " GeV." << G4endl;
QuasiElastic= false;
tpdata->theNeutrons=new G4NeutronBuilder;
tpdata->theNeutrons->RegisterMe(tpdata->theFTFPNeutron=new G4FTFPNeutronBuilder(QuasiElastic));
tpdata->theFTFPNeutron->SetMinEnergy(minFTFP);
tpdata->theNeutrons->RegisterMe(tpdata->theBertiniNeutron=new G4BertiniNeutronBuilder);
tpdata->theBertiniNeutron->SetMinEnergy(0.0*GeV);
tpdata->theBertiniNeutron->SetMaxEnergy(maxBERT);
tpdata->thePro=new G4ProtonBuilder;
tpdata->thePro->RegisterMe(tpdata->theFTFPPro=new G4FTFPProtonBuilder(QuasiElastic));
tpdata->theFTFPPro->SetMinEnergy(minFTFP);
tpdata->thePro->RegisterMe(tpdata->theBertiniPro=new G4BertiniProtonBuilder);
tpdata->theBertiniPro->SetMaxEnergy(maxBERT);
tpdata->thePiK=new G4PiKBuilder;
tpdata->thePiK->RegisterMe(tpdata->theFTFPPiK=new G4FTFPPiKBuilder(QuasiElastic));
tpdata->theFTFPPiK->SetMinEnergy(minFTFP);
tpdata->thePiK->RegisterMe(tpdata->theBertiniPiK=new G4BertiniPiKBuilder);
tpdata->theBertiniPiK->SetMaxEnergy(maxBERT);
tpdata->theHyperon=new G4HyperonFTFPBuilder;
tpdata->theAntiBaryon=new G4AntiBarionBuilder;
tpdata->theAntiBaryon->RegisterMe(tpdata->theFTFPAntiBaryon=new G4FTFPAntiBarionBuilder(QuasiElastic));
}
G4HadronPhysicsFTFP_BERT_ATL::~G4HadronPhysicsFTFP_BERT_ATL()
{
if (!tpdata) return;
delete tpdata->theNeutrons;
delete tpdata->theBertiniNeutron;
delete tpdata->theFTFPNeutron;
delete tpdata->thePiK;
delete tpdata->theBertiniPiK;
delete tpdata->theFTFPPiK;
delete tpdata->thePro;
delete tpdata->theBertiniPro;
delete tpdata->theFTFPPro;
delete tpdata->theHyperon;
delete tpdata->theAntiBaryon;
delete tpdata->theFTFPAntiBaryon;
//Note that here we need to set to 0 the pointer
//since tpdata is static and if thread are "reused"
//it can be problematic
delete tpdata; tpdata = 0;
}
void G4HadronPhysicsFTFP_BERT_ATL::ConstructParticle()
{
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
G4ShortLivedConstructor pShortLivedConstructor;
pShortLivedConstructor.ConstructParticle();
}
#include "G4ProcessManager.hh"
void G4HadronPhysicsFTFP_BERT_ATL::ConstructProcess()
{
if ( tpdata == 0 ) tpdata = new ThreadPrivate;
CreateModels();
tpdata->theNeutrons->Build();
tpdata->thePro->Build();
tpdata->thePiK->Build();
// --- Kaons ---
tpdata->xsKaon = new G4ComponentGGHadronNucleusXsc();
G4VCrossSectionDataSet * kaonxs = new G4CrossSectionInelastic(tpdata->xsKaon);
G4PhysListUtil::FindInelasticProcess(G4KaonMinus::KaonMinus())->AddDataSet(kaonxs);
G4PhysListUtil::FindInelasticProcess(G4KaonPlus::KaonPlus())->AddDataSet(kaonxs);
G4PhysListUtil::FindInelasticProcess(G4KaonZeroShort::KaonZeroShort())->AddDataSet(kaonxs);
G4PhysListUtil::FindInelasticProcess(G4KaonZeroLong::KaonZeroLong())->AddDataSet(kaonxs);
tpdata->theHyperon->Build();
tpdata->theAntiBaryon->Build();
// --- Neutrons ---
tpdata->xsNeutronInelasticXS = (G4NeutronInelasticXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronInelasticXS::Default_Name());
G4PhysListUtil::FindInelasticProcess(G4Neutron::Neutron())->AddDataSet(tpdata->xsNeutronInelasticXS);
G4HadronicProcess* capture = 0;
G4ProcessManager* pmanager = G4Neutron::Neutron()->GetProcessManager();
G4ProcessVector* pv = pmanager->GetProcessList();
for ( size_t i=0; i < static_cast<size_t>(pv->size()); ++i ) {
if ( fCapture == ((*pv)[i])->GetProcessSubType() ) {
capture = static_cast<G4HadronicProcess*>((*pv)[i]);
}
}
if ( ! capture ) {
capture = new G4HadronCaptureProcess("nCapture");
pmanager->AddDiscreteProcess(capture);
}
tpdata->xsNeutronCaptureXS = (G4NeutronCaptureXS*)G4CrossSectionDataSetRegistry::Instance()->GetCrossSectionDataSet(G4NeutronCaptureXS::Default_Name());
capture->AddDataSet(tpdata->xsNeutronCaptureXS);
capture->RegisterMe(new G4NeutronRadCapture());
}
@@ -29,14 +29,9 @@
//
// ClassName: G4HadronPhysicsQGSP_BIC_AllHP
//
// Author: 2006 G.Folger
// Author: 2013 P. Arce
//
// Based on G4HadronPhysicsQGSP_BIC
//
// Modified:
// 25.04.2007 G.Folger: Add code for quasielastic
// 31.10.2012 A.Ribon: Use G4MiscBuilder
// 19.03.2013 A.Ribon: Replace LEP with FTFP and BERT
// based on G4HadronPhysicsQGSP_BIC_HP
//
//----------------------------------------------------------------------------
//
@@ -160,40 +155,6 @@ void G4HadronPhysicsQGSP_BIC_AllHP::CreateModels()
tpdata->thePHPProton->SetMinEnergy(0.*MeV);
tpdata->thePHPProton->SetMaxEnergy(200*MeV);
//ParticleHP
tpdata->theDeuteronB=new G4DeuteronBuilder;
tpdata->thePHPDeuteron=new G4DeuteronPHPBuilder;
tpdata->theDeuteronB->RegisterMe(tpdata->thePHPDeuteron);
tpdata->thePHPDeuteron->SetMaxEnergy(200*MeV);
tpdata->theDeuteronB->RegisterMe(tpdata->theBinaryDeuteron=new G4BinaryDeuteronBuilder);
tpdata->theBinaryDeuteron->SetMaxEnergy(maxBIC);
//ParticleHP
tpdata->theTritonB=new G4TritonBuilder;
tpdata->thePHPTriton=new G4TritonPHPBuilder;
tpdata->theTritonB->RegisterMe(tpdata->thePHPTriton);
tpdata->thePHPTriton->SetMaxEnergy(200*MeV);
tpdata->theTritonB->RegisterMe(tpdata->theBinaryTriton=new G4BinaryTritonBuilder);
tpdata->theBinaryTriton->SetMaxEnergy(maxBIC);
//ParticleHP
tpdata->theHe3B=new G4He3Builder;
tpdata->thePHPHe3=new G4He3PHPBuilder;
tpdata->theHe3B->RegisterMe(tpdata->thePHPHe3);
tpdata->thePHPHe3->SetMaxEnergy(200*MeV);
tpdata->theHe3B->RegisterMe(tpdata->theBinaryHe3=new G4BinaryHe3Builder);
tpdata->theBinaryHe3->SetMaxEnergy(maxBIC);
//ParticleHP
tpdata->theAlphaB=new G4AlphaBuilder;
tpdata->thePHPAlpha=new G4AlphaPHPBuilder;
tpdata->theAlphaB->RegisterMe(tpdata->thePHPAlpha);
tpdata->thePHPAlpha->SetMaxEnergy(200*MeV);
tpdata->theAlphaB->RegisterMe(tpdata->theBinaryAlpha=new G4BinaryAlphaBuilder);
tpdata->theBinaryAlpha->SetMaxEnergy(maxBIC);
tpdata->thePiKB=new G4PiKBuilder;
tpdata->thePiKB->RegisterMe(tpdata->theQGSPPiK=new G4QGSPPiKBuilder(quasiElasticQGS));
tpdata->thePiKB->RegisterMe(tpdata->theFTFPPiK=new G4FTFPPiKBuilder(quasiElasticFTF));
@@ -214,10 +175,6 @@ G4HadronPhysicsQGSP_BIC_AllHP::~G4HadronPhysicsQGSP_BIC_AllHP()
//ParticleHP
delete tpdata->thePHPNeutron;
delete tpdata->thePHPProton;
delete tpdata->thePHPDeuteron;
delete tpdata->thePHPTriton;
delete tpdata->thePHPHe3;
delete tpdata->thePHPAlpha;
delete tpdata->theBinaryNeutron;
delete tpdata->theQGSPNeutron;
delete tpdata->theFTFPNeutron;
@@ -247,9 +204,6 @@ void G4HadronPhysicsQGSP_BIC_AllHP::ConstructParticle()
G4ShortLivedConstructor pShortLivedConstructor;
pShortLivedConstructor.ConstructParticle();
G4IonConstructor pIonConstructor;
pIonConstructor.ConstructParticle();
}
#include "G4ProcessManager.hh"
@@ -1,4 +1,4 @@
$Id: History 94086 2015-11-05 15:09:08Z gcosmo $
$Id: History 97179 2016-05-27 12:46:40Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,9 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
26-May-2016, Alberto Ribon (phys-ctor-ions-V10-02-00)
- Created G4IonPhysicsPHP.
05-Nov-2014, Alberto Ribon (phys-ctor-ions-V10-01-00)
- Replaced neutron_hp/ with particle_hp/
@@ -0,0 +1,98 @@
//
// ********************************************************************
// * 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: $
//
//---------------------------------------------------------------------------
//
// Header: G4IonPhysicsPHP
//
// Author: A.Ribon 24-May-2016
//
// Ion physics with ParticleHP, used below 200 MeV/n for d, t, He3, alpha;
// Binary Cascade used below 4 GeV/n (down to 190 MeV/n for d, t, He3, alpha,
// and 0 for the other ions); FTFP used above 2 GeV/n.
// This is as G4IonPhysics, except that ParticleHP is used below 200 MeV/n
// for d, t, He3, alpha.
//
// Modified:
//
//---------------------------------------------------------------------------
#ifndef G4IonPhysicsPHP_h
#define G4IonPhysicsPHP_h 1
#include "G4VPhysicsConstructor.hh"
#include "globals.hh"
class G4HadronicInteraction;
class G4VCrossSectionDataSet;
class G4VComponentCrossSection;
class G4FTFBuilder;
class G4BinaryLightIonReaction;
class G4ParticleHPInelasticData;
class G4IonPhysicsPHP : public G4VPhysicsConstructor {
public:
G4IonPhysicsPHP( G4int ver = 0 );
G4IonPhysicsPHP( const G4String& nname );
virtual ~G4IonPhysicsPHP();
// This method will be invoked in the Construct() method.
// each physics process will be instantiated and
// registered to the process manager of each particle type
void ConstructParticle();
void ConstructProcess();
private:
void AddProcess( const G4String&, G4ParticleDefinition*,
G4ParticleHPInelasticData*, G4HadronicInteraction*,
G4BinaryLightIonReaction*, G4HadronicInteraction* );
static G4ThreadLocal G4VCrossSectionDataSet* theNuclNuclData;
static G4ThreadLocal G4VComponentCrossSection* theGGNuclNuclXS;
static G4ThreadLocal G4ParticleHPInelasticData* theDeuteronHPInelasticData;
static G4ThreadLocal G4ParticleHPInelasticData* theTritonHPInelasticData;
static G4ThreadLocal G4ParticleHPInelasticData* theHe3HPInelasticData;
static G4ThreadLocal G4ParticleHPInelasticData* theAlphaHPInelasticData;
static G4ThreadLocal G4BinaryLightIonReaction* theIonBC1;
static G4ThreadLocal G4BinaryLightIonReaction* theIonBC2;
static G4ThreadLocal G4HadronicInteraction* theFTFP;
static G4ThreadLocal G4FTFBuilder* theBuilder;
static G4ThreadLocal G4HadronicInteraction* modelDeuteronPHP;
static G4ThreadLocal G4HadronicInteraction* modelTritonPHP;
static G4ThreadLocal G4HadronicInteraction* modelHe3PHP;
static G4ThreadLocal G4HadronicInteraction* modelAlphaPHP;
G4int verbose;
static G4ThreadLocal G4bool wasActivated;
};
#endif
@@ -11,7 +11,7 @@
#
# Generated on : 10/01/2013
#
# $Id: sources.cmake 94086 2015-11-05 15:09:08Z gcosmo $
# $Id: sources.cmake 97179 2016-05-27 12:46:40Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -88,11 +88,13 @@ GEANT4_DEFINE_MODULE(NAME G4phys_ctor_ions
G4IonBinaryCascadePhysics.hh
G4IonINCLXXPhysics.hh
G4IonPhysics.hh
G4IonPhysicsPHP.hh
G4IonQMDPhysics.hh
SOURCES
G4IonBinaryCascadePhysics.cc
G4IonINCLXXPhysics.cc
G4IonPhysics.cc
G4IonPhysicsPHP.cc
G4IonQMDPhysics.cc
GRANULAR_DEPENDENCIES
G4baryons
@@ -0,0 +1,222 @@
//
// ********************************************************************
// * 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: $
//
//---------------------------------------------------------------------------
//
// Header: G4IonPhysicsPHP
//
// Author: A.Ribon 24-May-2016
//
// Modified:
//
//---------------------------------------------------------------------------
//
#include "G4IonPhysicsPHP.hh"
#include "G4SystemOfUnits.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4Deuteron.hh"
#include "G4Triton.hh"
#include "G4He3.hh"
#include "G4Alpha.hh"
#include "G4GenericIon.hh"
#include "G4IonConstructor.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4BinaryLightIonReaction.hh"
#include "G4ComponentGGNuclNuclXsc.hh"
#include "G4CrossSectionInelastic.hh"
#include "G4PreCompoundModel.hh"
#include "G4ExcitationHandler.hh"
#include "G4FTFBuilder.hh"
#include "G4HadronicInteraction.hh"
#include "G4BuilderType.hh"
#include "G4HadronicInteractionRegistry.hh"
#include "G4ParticleHPInelastic.hh"
#include "G4ParticleHPInelasticData.hh"
using namespace std;
// factory
#include "G4PhysicsConstructorFactory.hh"
G4_DECLARE_PHYSCONSTR_FACTORY( G4IonPhysicsPHP );
G4ThreadLocal G4VCrossSectionDataSet* G4IonPhysicsPHP::theNuclNuclData = 0;
G4ThreadLocal G4VComponentCrossSection* G4IonPhysicsPHP::theGGNuclNuclXS = 0;
G4ThreadLocal G4ParticleHPInelasticData* G4IonPhysicsPHP::theDeuteronHPInelasticData = 0;
G4ThreadLocal G4ParticleHPInelasticData* G4IonPhysicsPHP::theTritonHPInelasticData = 0;
G4ThreadLocal G4ParticleHPInelasticData* G4IonPhysicsPHP::theHe3HPInelasticData = 0;
G4ThreadLocal G4ParticleHPInelasticData* G4IonPhysicsPHP::theAlphaHPInelasticData = 0;
G4ThreadLocal G4BinaryLightIonReaction* G4IonPhysicsPHP::theIonBC1 = 0;
G4ThreadLocal G4BinaryLightIonReaction* G4IonPhysicsPHP::theIonBC2 = 0;
G4ThreadLocal G4HadronicInteraction* G4IonPhysicsPHP::theFTFP = 0;
G4ThreadLocal G4FTFBuilder* G4IonPhysicsPHP::theBuilder = 0;
G4ThreadLocal G4HadronicInteraction* G4IonPhysicsPHP::modelDeuteronPHP = 0;
G4ThreadLocal G4HadronicInteraction* G4IonPhysicsPHP::modelTritonPHP = 0;
G4ThreadLocal G4HadronicInteraction* G4IonPhysicsPHP::modelHe3PHP = 0;
G4ThreadLocal G4HadronicInteraction* G4IonPhysicsPHP::modelAlphaPHP = 0;
G4ThreadLocal G4bool G4IonPhysicsPHP::wasActivated = false;
G4IonPhysicsPHP::G4IonPhysicsPHP( G4int ver )
: G4VPhysicsConstructor( "ionInelasticFTFP_BIC" ), verbose( ver ) {
SetPhysicsType( bIons );
if ( verbose > 1 ) G4cout << "### G4IonPhysicsPHP" << G4endl;
}
G4IonPhysicsPHP::G4IonPhysicsPHP( const G4String& nname )
: G4VPhysicsConstructor( nname ), verbose( 1 ) {
SetPhysicsType( bIons );
if ( verbose > 1 ) G4cout << "### G4IonPhysicsPHP" << G4endl;
}
G4IonPhysicsPHP::~G4IonPhysicsPHP() {
//Explictly setting pointers to zero is actually needed.
//These are static variables, in case we restart threads we need to re-create objects
delete modelAlphaPHP; modelAlphaPHP = 0;
delete modelHe3PHP; modelHe3PHP = 0;
delete modelTritonPHP; modelTritonPHP = 0;
delete modelDeuteronPHP; modelDeuteronPHP = 0;
delete theBuilder; theBuilder = 0;
delete theFTFP; theFTFP = 0;
delete theIonBC2; theIonBC2 = 0;
delete theIonBC1; theIonBC1 = 0;
delete theAlphaHPInelasticData; theAlphaHPInelasticData = 0;
delete theHe3HPInelasticData; theHe3HPInelasticData = 0;
delete theTritonHPInelasticData; theTritonHPInelasticData = 0;
delete theDeuteronHPInelasticData; theDeuteronHPInelasticData = 0;
delete theGGNuclNuclXS; theGGNuclNuclXS = 0;
delete theNuclNuclData; theNuclNuclData = 0;
}
void G4IonPhysicsPHP::ConstructParticle() {
// Construct ions
G4IonConstructor pConstructor;
pConstructor.ConstructParticle();
}
void G4IonPhysicsPHP::ConstructProcess() {
if ( wasActivated ) return;
wasActivated = true;
const G4double maxPHP = 200.0*MeV;
const G4double overlapPHP_BIC = 10.0*MeV;
const G4double maxBIC = 4.0*GeV;
const G4double minFTF = 2.0* GeV;
const G4double maxFTF = 100.0*TeV;
G4HadronicInteraction* p =
G4HadronicInteractionRegistry::Instance()->FindModel( "PRECO" );
G4PreCompoundModel* thePreCompound = static_cast< G4PreCompoundModel* >(p);
if ( ! thePreCompound ) thePreCompound = new G4PreCompoundModel;
// Binary Cascade
theIonBC1 = new G4BinaryLightIonReaction( thePreCompound );
theIonBC1->SetMinEnergy( 0.0 ); // Used for generic ions
theIonBC1->SetMaxEnergy( maxBIC );
theIonBC2 = new G4BinaryLightIonReaction( thePreCompound );
theIonBC2->SetMinEnergy( maxPHP - overlapPHP_BIC ); // Used for d, t, He3, alpha
theIonBC2->SetMaxEnergy( maxBIC );
// FTFP
theBuilder = new G4FTFBuilder( "FTFP", thePreCompound );
theFTFP = theBuilder->GetModel();
theFTFP->SetMinEnergy( minFTF );
theFTFP->SetMaxEnergy( maxFTF );
theNuclNuclData =
new G4CrossSectionInelastic( theGGNuclNuclXS = new G4ComponentGGNuclNuclXsc() );
// ParticleHP : deuteron
modelDeuteronPHP = new G4ParticleHPInelastic( G4Deuteron::Deuteron(), "ParticleHPInelastic" );
modelDeuteronPHP->SetMinEnergy( 0.0 );
modelDeuteronPHP->SetMaxEnergy( maxPHP );
theDeuteronHPInelasticData = new G4ParticleHPInelasticData( G4Deuteron::Deuteron() );
theDeuteronHPInelasticData->SetMinKinEnergy( 0.0 );
theDeuteronHPInelasticData->SetMaxKinEnergy( maxPHP );
// ParticleHP : triton
modelTritonPHP = new G4ParticleHPInelastic( G4Triton::Triton(), "ParticleHPInelastic" );
modelTritonPHP->SetMinEnergy( 0.0 );
modelTritonPHP->SetMaxEnergy( maxPHP );
theTritonHPInelasticData = new G4ParticleHPInelasticData( G4Triton::Triton() );
theTritonHPInelasticData->SetMinKinEnergy( 0.0 );
theTritonHPInelasticData->SetMaxKinEnergy( maxPHP );
// ParticleHP : 3He
modelHe3PHP = new G4ParticleHPInelastic( G4He3::He3(), "ParticleHPInelastic" );
modelHe3PHP->SetMinEnergy( 0.0 );
modelHe3PHP->SetMaxEnergy( maxPHP );
theHe3HPInelasticData = new G4ParticleHPInelasticData( G4He3::He3() );
theHe3HPInelasticData->SetMinKinEnergy( 0.0 );
theHe3HPInelasticData->SetMaxKinEnergy( maxPHP );
// ParticleHP : alpha
modelAlphaPHP = new G4ParticleHPInelastic( G4Alpha::Alpha(), "ParticleHPInelastic" );
modelAlphaPHP->SetMinEnergy( 0.0 );
modelAlphaPHP->SetMaxEnergy( maxPHP );
theAlphaHPInelasticData = new G4ParticleHPInelasticData( G4Alpha::Alpha() );
theAlphaHPInelasticData->SetMinKinEnergy( 0.0 );
theAlphaHPInelasticData->SetMaxKinEnergy( maxPHP );
AddProcess( "dInelastic", G4Deuteron::Deuteron(), theDeuteronHPInelasticData, modelDeuteronPHP, theIonBC2, theFTFP );
AddProcess( "tInelastic", G4Triton::Triton(), theTritonHPInelasticData, modelTritonPHP, theIonBC2, theFTFP );
AddProcess( "He3Inelastic", G4He3::He3(), theHe3HPInelasticData, modelHe3PHP, theIonBC2, theFTFP );
AddProcess( "alphaInelastic", G4Alpha::Alpha(), theAlphaHPInelasticData, modelAlphaPHP, theIonBC2, theFTFP );
AddProcess( "ionInelastic", G4GenericIon::GenericIon(), 0, 0, theIonBC1, theFTFP );
if ( verbose > 1 ) G4cout << "G4IonPhysicsPHP::ConstructProcess done! " << G4endl;
}
void G4IonPhysicsPHP::AddProcess( const G4String& name, G4ParticleDefinition* part,
G4ParticleHPInelasticData* xsecPHP, G4HadronicInteraction* aPHP,
G4BinaryLightIonReaction* aBIC,
G4HadronicInteraction* aFTFP ) {
G4HadronInelasticProcess* hadi = new G4HadronInelasticProcess( name, part );
G4ProcessManager* pManager = part->GetProcessManager();
pManager->AddDiscreteProcess( hadi );
hadi->AddDataSet( theNuclNuclData );
if ( aPHP ) {
hadi->RegisterMe( aPHP );
if ( xsecPHP ) {
hadi->AddDataSet( xsecPHP );
}
}
hadi->RegisterMe( aBIC );
hadi->RegisterMe( aFTFP );
}
@@ -1,4 +1,4 @@
$Id: History 94278 2015-11-10 12:39:57Z gcosmo $
$Id: History 95196 2016-01-29 08:26:36Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,11 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
27-Jan-2016, M. Asai (phys-ctor-limiters-V10-02-00)
- G4ParallelWorldPhysics: change process order index of
G4ParallelWorldProcess to 9900 to make sure it is registered
prior to G4OpBoundaryProcess.
10-Nov-2015, M. Verderi (phys-ctor-limiters-V10-01-04)
- Fix compilation warning in G4GenericBiasingPhysics
@@ -88,9 +88,9 @@ void G4ParallelWorldPhysics::ConstructProcess()
G4ProcessManager* pmanager = particle->GetProcessManager();
pmanager->AddProcess(theParallelWorldProcess);
if(theParallelWorldProcess->IsAtRestRequired(particle))
{pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, 9999);}
{pmanager->SetProcessOrdering(theParallelWorldProcess, idxAtRest, 9900);}
pmanager->SetProcessOrderingToSecond(theParallelWorldProcess, idxAlongStep);
pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, 9999);
pmanager->SetProcessOrdering(theParallelWorldProcess, idxPostStep, 9900);
}
}
+35 -1
View File
@@ -1,4 +1,4 @@
$Id: History 94096 2015-11-05 15:19:03Z gcosmo $
$Id: History 97750 2016-06-08 12:20:28Z gcosmo $
-------------------------------------------------------------------
=========================================================
@@ -14,6 +14,40 @@ introduced in the code and keeptrack of all tags.
* Reverse chronological order (last date on top), please *
----------------------------------------------------------
26-May-2016, Alberto Ribon (phys-lists-V10-02-06)
- QGSP_BIC_AllHP : use new, specialized ion constructor, G4IonPhysicsPHP.
10-May-2016, Robert Hatcher (phys-lists-V10-02-05)
- mv src/G4RegisterPhysLists.cc to include/G4RegisterPhysLists.icc
so that it gets compiled as part of the G4PhysListRegistry compilation
unit. This ensures that all the physics lists declared to the
registry are referenced by it such that the linker will include
them if libraries are built statically, even when the loader
doesn't force whole-archive (not possible for MS Visual Studio) loading.
- Fix exception label so it is unique.
06-Apr-2016, Alberto Ribon (phys-lists-V10-02-04)
- FTFP_BERT_ATL : created new, experimental physics list for ATLAS,
similar to FTFP_BERT but with the transition between BERT and FTFP
in the energy region [9, 12] GeV.
09-Mar-2016, Alberto Ribon (phys-lists-V10-02-03)
- FTFP_BERT_TRV : Use GS multiple scattering with the most precise
"error-free" stepping. This is done for the purpose of studying
the impact of multiple scattering on hadronic showers.
23-Feb-2016, Alberto Ribon (phys-lists-V10-02-02)
- FTFP_BERT_TRV : Use GS multiple scattering with the more precise option,
(Opt3), instead of the default (Opt0). This is done for the purpose of
studying the impact of multiple scattering on hadronic showers.
14-Jan-2016, Alberto Ribon (phys-lists-V10-02-01)
- Re-submitting the previous tag (that was rejected).
04-Dec-2015, Alberto Ribon (phys-lists-V10-02-00)
- FTFP_BERT_TRV : Switch on (again) the low-mass diffraction dissociation
used in G4HadronHElasticPhysics
05-Nov-2015, Alberto Ribon (phys-lists-V10-01-13)
- Removed neutron_hp/ .
@@ -0,0 +1,66 @@
//
// ********************************************************************
// * 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:$
//
//---------------------------------------------------------------------------
// Author: Alberto Ribon
// Date: April 2016
//
// New physics list FTFP_BERT_ATL.
// This is a modified version of the FTFP_BERT physics list for ATLAS.
// The physics list FTFP_BERT_ATL has the transition between Bertini (BERT)
// intra-nuclear cascade model and Fritiof (FTF) string model in the
// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT).
//----------------------------------------------------------------------------
//
#ifndef TFTFP_BERT_ATL_h
#define TFTFP_BERT_ATL_h 1
#include <CLHEP/Units/SystemOfUnits.h>
#include "globals.hh"
#include "G4VModularPhysicsList.hh"
#include "CompileTimeConstraints.hh"
template<class T>
class TFTFP_BERT_ATL: public T
{
public:
TFTFP_BERT_ATL(G4int ver = 1);
virtual ~TFTFP_BERT_ATL();
public:
// SetCuts()
virtual void SetCuts();
private:
enum {ok = CompileTimeConstraints::IsA<T, G4VModularPhysicsList>::ok };
};
#include "FTFP_BERT_ATL.icc"
typedef TFTFP_BERT_ATL<G4VModularPhysicsList> FTFP_BERT_ATL;
#endif
@@ -0,0 +1,119 @@
//
// ********************************************************************
// * 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:$
//
//---------------------------------------------------------------------------
// Author: Alberto Ribon
// Date: April 2016
//
// New physics list FTFP_BERT_ATL.
// This is a modified version of the FTFP_BERT physics list for ATLAS.
// The physics list FTFP_BERT_ATL has the transition between Bertini (BERT)
// intra-nuclear cascade model and Fritiof (FTF) string model in the
// energy region [9, 12] GeV (instead of [4, 5] GeV as in FTFP_BERT).
//----------------------------------------------------------------------------
//
#include <iomanip>
#include "globals.hh"
#include "G4ios.hh"
#include "G4ProcessManager.hh"
#include "G4ProcessVector.hh"
#include "G4ParticleTypes.hh"
#include "G4ParticleTable.hh"
#include "G4Material.hh"
#include "G4MaterialTable.hh"
#include "G4DecayPhysics.hh"
#include "G4EmStandardPhysics.hh"
#include "G4EmExtraPhysics.hh"
#include "G4IonPhysics.hh"
#include "G4StoppingPhysics.hh"
#include "G4HadronElasticPhysics.hh"
#include "G4NeutronTrackingCut.hh"
#include "G4DataQuestionaire.hh"
#include "G4HadronPhysicsFTFP_BERT_ATL.hh"
#include "G4WarnPLStatus.hh"
template<class T> TFTFP_BERT_ATL<T>::TFTFP_BERT_ATL(G4int ver): T()
{
// default cut value (1.0mm)
// defaultCutValue = 1.0*CLHEP::mm;
G4DataQuestionaire it(photon);
G4cout << "<<< Geant4 Physics List simulation engine: FTFP_BERT_ATL 2.0"<<G4endl;
G4cout <<G4endl;
this->defaultCutValue = 0.7*CLHEP::mm;
this->SetVerboseLevel(ver);
G4WarnPLStatus exp;
exp.Experimental("FTFP_BERT_ATL");
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysics(ver));
// Synchroton Radiation & GN Physics
this->RegisterPhysics( new G4EmExtraPhysics(ver) );
// Decays
this->RegisterPhysics( new G4DecayPhysics(ver) );
// Hadron Elastic scattering
this->RegisterPhysics( new G4HadronElasticPhysics(ver) );
// Hadron Physics
this->RegisterPhysics( new G4HadronPhysicsFTFP_BERT_ATL(ver) );
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
this->RegisterPhysics( new G4IonPhysics(ver));
// Neutron tracking cut
this->RegisterPhysics( new G4NeutronTrackingCut(ver));
}
template<class T> TFTFP_BERT_ATL<T>::~TFTFP_BERT_ATL()
{
}
template<class T> void TFTFP_BERT_ATL<T>::SetCuts()
{
if (this->verboseLevel >1){
G4cout << "FTFP_BERT_ATL::SetCuts:";
}
// " G4VUserPhysicsList::SetCutsWithDefault" method sets
// the default cut value for all particle types
this->SetCutsWithDefault();
// if (this->verboseLevel > 0)
// G4VUserPhysicsList::DumpCutValuesTable();
}
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: FTFP_BERT_TRV.icc 92960 2015-09-23 08:41:04Z gcosmo $
// $Id: FTFP_BERT_TRV.icc 96038 2016-03-09 13:13:59Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -70,6 +70,9 @@
#include "G4WarnPLStatus.hh"
#include "G4EmParameters.hh"
template<class T> TFTFP_BERT_TRV<T>::TFTFP_BERT_TRV(G4int ver): T()
{
// default cut value (1.0mm)
@@ -84,7 +87,9 @@ template<class T> TFTFP_BERT_TRV<T>::TFTFP_BERT_TRV(G4int ver): T()
exp.Experimental("FTFP_BERT_TRV");
// EM Physics
this->RegisterPhysics( new G4EmStandardPhysicsGS(ver) );
G4EmStandardPhysicsGS* gsPhysics = new G4EmStandardPhysicsGS( ver );
G4EmParameters::Instance()->SetMscStepLimitType( fUseSafety );
this->RegisterPhysics( gsPhysics );
// Synchroton Radiation & GN Physics
this->RegisterPhysics( new G4EmExtraPhysics(ver) );
@@ -93,7 +98,7 @@ template<class T> TFTFP_BERT_TRV<T>::TFTFP_BERT_TRV(G4int ver): T()
this->RegisterPhysics( new G4DecayPhysics(ver) );
// Hadron Elastic scattering
this->RegisterPhysics( new G4HadronHElasticPhysics(ver, false) );
this->RegisterPhysics( new G4HadronHElasticPhysics(ver, true) );
// Hadron Physics
this->RegisterPhysics( new G4HadronPhysicsFTFP_BERT_TRV(ver));
@@ -46,6 +46,9 @@ G4_DECLARE_PHYSLIST_FACTORY(FTFP_BERT_HP);
#include "FTFP_BERT_TRV.hh"
G4_DECLARE_PHYSLIST_FACTORY(FTFP_BERT_TRV);
#include "FTFP_BERT_ATL.hh"
G4_DECLARE_PHYSLIST_FACTORY(FTFP_BERT_ATL);
#include "FTFP_INCLXX.hh"
G4_DECLARE_PHYSLIST_FACTORY(FTFP_INCLXX);
@@ -47,7 +47,7 @@
#include "G4DecayPhysics.hh"
#include "G4EmStandardPhysics.hh"
#include "G4EmExtraPhysics.hh"
#include "G4IonPhysics.hh"
#include "G4IonPhysicsPHP.hh"
#include "G4StoppingPhysics.hh"
#include "G4HadronElasticPhysicsPHP.hh"
@@ -86,7 +86,7 @@ template<class T> TQGSP_BIC_AllHP<T>::TQGSP_BIC_AllHP(G4int ver): T()
this->RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
this->RegisterPhysics( new G4IonPhysics(ver));
this->RegisterPhysics( new G4IonPhysicsPHP(ver));
}
+4 -2
View File
@@ -11,7 +11,7 @@
#
# Generated on : 24/9/2010
#
# $Id: sources.cmake 94096 2015-11-05 15:19:03Z gcosmo $
# $Id: sources.cmake 97176 2016-05-27 12:42:50Z gcosmo $
#
#------------------------------------------------------------------------------
@@ -114,6 +114,8 @@ GEANT4_DEFINE_MODULE(NAME G4phys_lists
FTFP_BERT.icc
FTFP_BERT_TRV.hh
FTFP_BERT_TRV.icc
FTFP_BERT_ATL.hh
FTFP_BERT_ATL.icc
G4GenericPhysicsList.hh
G4GenericPhysicsList.icc
G4PhysListFactory.hh
@@ -147,12 +149,12 @@ GEANT4_DEFINE_MODULE(NAME G4phys_lists
G4PhysListFactoryAlt.hh
QGSP_BIC_AllHP.hh
QGSP_BIC_AllHP.icc
G4RegisterPhysLists.icc
SOURCES
G4PhysListFactory.cc
QBBC.cc
G4PhysListRegistry.cc
G4PhysListFactoryAlt.cc
G4RegisterPhysLists.cc
GRANULAR_DEPENDENCIES
G4baryons
G4bosons
@@ -23,7 +23,7 @@
// * acceptance of all terms of the Geant4 Software license. *
// ********************************************************************
//
// $Id: G4PhysListFactory.cc 92863 2015-09-18 12:44:13Z gcosmo $
// $Id: G4PhysListFactory.cc 96327 2016-04-06 15:50:53Z gcosmo $
//
//---------------------------------------------------------------------------
//
@@ -43,6 +43,7 @@
#include "FTFP_BERT.hh"
#include "FTFP_BERT_HP.hh"
#include "FTFP_BERT_TRV.hh"
#include "FTFP_BERT_ATL.hh"
#include "FTFP_INCLXX.hh"
#include "FTFP_INCLXX_HP.hh"
#include "FTF_BIC.hh"
@@ -72,9 +73,9 @@
G4PhysListFactory::G4PhysListFactory()
: defName("FTFP_BERT"),verbose(1)
{
nlists_hadr = 21;
G4String ss[21] = {
"FTFP_BERT","FTFP_BERT_TRV","FTFP_BERT_HP","FTFP_INCLXX",
nlists_hadr = 22;
G4String ss[22] = {
"FTFP_BERT","FTFP_BERT_TRV","FTFP_BERT_ATL","FTFP_BERT_HP","FTFP_INCLXX",
"FTFP_INCLXX_HP","FTF_BIC", "LBE","QBBC",
"QGSP_BERT","QGSP_BERT_HP","QGSP_BIC","QGSP_BIC_HP","QGSP_BIC_AllHP",
"QGSP_FTFP_BERT","QGSP_INCLXX","QGSP_INCLXX_HP","QGS_BIC",
@@ -147,6 +148,7 @@ G4PhysListFactory::GetReferencePhysList(const G4String& name)
if(had_name == "FTFP_BERT") {p = new FTFP_BERT(verbose);}
else if(had_name == "FTFP_BERT_HP") {p = new FTFP_BERT_HP(verbose);}
else if(had_name == "FTFP_BERT_TRV") {p = new FTFP_BERT_TRV(verbose);}
else if(had_name == "FTFP_BERT_ATL") {p = new FTFP_BERT_ATL(verbose);}
else if(had_name == "FTFP_INCLXX") {p = new FTFP_INCLXX(verbose);}
else if(had_name == "FTFP_INCLXX_HP") {p = new FTFP_INCLXX_HP(verbose);}
else if(had_name == "FTF_BIC") {p = new FTF_BIC(verbose);}
@@ -47,6 +47,9 @@
#include "G4PhysListStamper.hh"
#include "G4PhysicsConstructorRegistry.hh"
// include this with this compilation unit so static builds pull them in
#include "G4RegisterPhysLists.icc"
G4ThreadLocal G4PhysListRegistry* G4PhysListRegistry::theInstance = 0;
G4PhysListRegistry* G4PhysListRegistry::Instance()
@@ -142,7 +145,7 @@ G4PhysListRegistry::GetModularPhysicsList(const G4String& name)
ED << "]" << G4endl;
}
G4Exception("G4PhysListRegistry::GetModularPhysicsList",
"PhysicsList001", FatalException, ED);
"PhysicsList002", FatalException, ED);
return 0;
}
@@ -161,13 +164,13 @@ G4PhysListRegistry::GetModularPhysicsList(const G4String& name)
G4String pcname = physicsExtensions[extName];
// this doesn't have a verbose option ... it should
// but G4PhysicsConstructorFactory doesn't support it
G4VPhysicsConstructor* pc = pcRegistry->GetPhysicsConstructor(pcname);
G4VPhysicsConstructor* pctor = pcRegistry->GetPhysicsConstructor(pcname);
G4String reporreg = "";
if ( physReplace[ipc] > 0 ) {
pl->ReplacePhysics(pc);
pl->ReplacePhysics(pctor);
reporreg = "ReplacePhysics ";
} else {
pl->RegisterPhysics(pc);
pl->RegisterPhysics(pctor);
reporreg = "RegisterPhysics";
}
if ( verbose > 0 ) G4cout << "<<< " << reporreg << " with " << pcname