Import Geant4 11.2.0.beta source tree

This commit is contained in:
Gabriele Cosmo
2023-06-30 09:09:57 +02:00
parent aef78ca386
commit dd1f179cda
3780 changed files with 212808 additions and 142780 deletions
-48
View File
@@ -1,48 +0,0 @@
# ----------------------------------------------------------------------
# GNUmakefile for physicslists library, Gunter Folger 25-October 2006
# ----------------------------------------------------------------------
name := G4physicslists
ifndef G4INSTALL
G4INSTALL = ../..
endif
GLOBLIBS = libG4run.lib libG4event.lib
GLOBLIBS += libG4tracking.lib libG4processes.lib libG4digits_hits.lib
GLOBLIBS += libG4track.lib libG4particles.lib libG4geometry.lib
GLOBLIBS += libG4materials.lib libG4graphics_reps.lib
GLOBLIBS += libG4intercoms.lib libG4global.lib
ifdef G4LIB_BUILD_EXPAT
GLOBLIBS += libG4expat.lib
endif
include $(G4INSTALL)/config/architecture.gmk
SUBDIRS = lists
SUBDIRS += builders
SUBDIRS += constructors/decay
SUBDIRS += constructors/electromagnetic
SUBDIRS += constructors/factory
SUBDIRS += constructors/gamma_lepto_nuclear
SUBDIRS += constructors/hadron_elastic
SUBDIRS += constructors/hadron_inelastic
SUBDIRS += constructors/ions
SUBDIRS += constructors/limiters
SUBDIRS += constructors/stopping
SUBDIRS += util
SUBLIBS = G4phys_lists
SUBLIBS += G4phys_builders
SUBLIBS += G4phys_ctor_decay
SUBLIBS += G4phys_ctor_em
SUBLIBS += G4phys_ctor_factory
SUBLIBS += G4phys_ctor_glnuclear
SUBLIBS += G4phys_ctor_helastic
SUBLIBS += G4phys_ctor_hinelastic
SUBLIBS += G4phys_ctor_ions
SUBLIBS += G4phys_ctor_limiters
SUBLIBS += G4phys_ctor_stopping
SUBLIBS += G4physlist_util
include $(G4INSTALL)/config/globlib.gmk
+3
View File
@@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2022-12-12 Ben Morgan (physics-lists-V11-01-00)
- Remove obsolete GNUmakefile scripts
## 2022-11-24 Gabriele Cosmo (physics-lists-V11-00-02)
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
-91
View File
@@ -1,91 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/builders library. Gunter Folger 25-Oct-2006.
# ---------------------------------------------------------------------------
name := G4phys_builders
ifndef G4INSTALL
G4INSTALL = ../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -DG4PROCESSES_EXPORT
ifdef G4LIB_BUILD_EXPAT
CPPFLAGS += -I$(G4BASE)/externals/expat/include
endif
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/optical/include \
-I$(G4BASE)/processes/electromagnetic/highenergy/include \
-I$(G4BASE)/processes/electromagnetic/standard/include \
-I$(G4BASE)/processes/electromagnetic/muons/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/electromagnetic/xrays/include \
-I$(G4BASE)/processes/electromagnetic/lowenergy/include \
-I$(G4BASE)/processes/electromagnetic/dna/management/include \
-I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \
-I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \
-I$(G4BASE)/processes/electromagnetic/dna/models/include \
-I$(G4BASE)/processes/electromagnetic/dna/processes/include \
-I$(G4BASE)/processes/electromagnetic/dna/utils/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
+2 -2
View File
@@ -6,11 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2023-03-17 Alberto Ribon (phys-builders-V11-00-04)
## 2023-03-17 Alberto Ribon (phys-builders-V11-01-01)
- G4HadronicBuilder : fixed bug in the method BuildKaonsFTFQGSP_BERT().
Thanks to Dmitri Konstantinov for reporting it.
## 2022-12-30 Vladimir Ivanchenko (phys-builders-V11-00-03)
## 2022-12-30 Vladimir Ivanchenko (phys-builders-V11-01-00)
- Updated table of processes
## 2022-11-24 Gabriele Cosmo (phys-builders-V11-00-02)
@@ -1,33 +0,0 @@
# ----------------------------------------------------------------------
# GNUmakefile for physicslists library, Gunter Folger 25-October 2006
# ----------------------------------------------------------------------
name := G4physlist_ctor
SUBDIRS = decay
SUBDIRS += electromagnetic
SUBDIRS += factory
SUBDIRS += gamma_lepto_nuclear
SUBDIRS += hadron_elastic
SUBDIRS += hadron_inelastic
SUBDIRS += ions
SUBDIRS += limiters
SUBDIRS += stopping
SUBLIBS = G4phys_ctor_decay
SUBLIBS += G4phys_ctor_em
SUBLIBS += G4phys_ctor_factory
SUBLIBS += G4phys_ctor_glnuclear
SUBLIBS += G4phys_ctor_helastic
SUBLIBS += G4phys_ctor_hinelastic
SUBLIBS += G4phys_ctor_ions
SUBLIBS += G4phys_ctor_limiters
SUBLIBS += G4phys_ctor_stopping
ifndef G4INSTALL
G4INSTALL = ../../..
endif
include $(G4INSTALL)/config/globlib.gmk
@@ -1,77 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/decay library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_decay
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/constructors/electromagnetic/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/processes/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 \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -1,12 +1,10 @@
# Category phys-ctor-decay History
See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top).
It must **not** be used as a substitute for writing good git commit messages!
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2023-01-11 Alberto Ribon (phys-ctor-decay-V11-00-04)
## 2023-01-11 Alberto Ribon (phys-ctor-decay-V11-01-00)
- G4RadioactiveDecayPhysics : assigned the RadioactiveDecay process
to G4Triton (which is the only light ion that decays).
Note: before, triton did not have beta decay, i.e. it was wrongly
@@ -1,58 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/electromagnetic library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_em
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/optical/include \
-I$(G4BASE)/processes/electromagnetic/highenergy/include \
-I$(G4BASE)/processes/electromagnetic/standard/include \
-I$(G4BASE)/processes/electromagnetic/muons/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/electromagnetic/xrays/include \
-I$(G4BASE)/processes/electromagnetic/lowenergy/include \
-I$(G4BASE)/processes/electromagnetic/dna/management/include \
-I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \
-I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \
-I$(G4BASE)/processes/electromagnetic/dna/models/include \
-I$(G4BASE)/processes/electromagnetic/dna/processes/include \
-I$(G4BASE)/processes/electromagnetic/dna/utils/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -6,7 +6,38 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2022-12-09 Vladimir Ivanchenko (phys-ctor-em-V11-00-36)
## 2023-04-06 Hoang Tran (phys-ctor-em-V11-01-07)
- Introduced G4ChemDissociationChannels and G4ChemDissociationChannels_option1
## 2023-03-08 Gabriele Cosmo (phys-ctor-em-V11-01-06)
- Fixed compilation warning on macOS/XCode for implicit type conversion
in G4EmModelActivator::FindOrAddProcess().
## 2023-03-04 Vladimir Ivanchenko (phys-ctor-em-V11-01-05)
- G4EmParticleList - added method EmChargedPartNames(), which returns a minimal
list of charged EM particles
- G4EmModelActivator - fix #2530 - single scattering per region is implemented
by addition of extra sngle scattering process, which is active inside this
region, and not active outside; multiple scattering and single scattering
processes for a given charged particle are disabled to this region
## 2023-02-27 Vladimir Ivanchenko (phys-ctor-em-V11-01-04)
- G4EmModelActivator - attempt to fix #2530 - single scattering per region
## 2023-02-24 Vladimir Ivanchenko (phys-ctor-em-V11-01-03)
- G4GammaGeneralProcess - added method GetGammaNuclear() useful for testing
## 2023-02-21 Vladimir Ivanchenko (phys-ctor-em-V11-01-02)
- G4EmBuilder, G4EmStandardPhysicsSS - use new constructor for
the G4CoulombScattering process
- G4EmModelActivator - use new constructor for the G4CoulombScattering process,
allow add G4EmStandardPhysicsSS on top of G4EmStandardPhysics_option3
## 2023-02-16 Vladimir Ivanchenko (phys-ctor-em-V11-01-01)
- G4EmBuilder, G4EmModelActivator, G4EmStandardPhysicsSS - fix #2530,
single scattering model definition per region for e+, e-, and light hadrons
## 2022-12-09 Vladimir Ivanchenko (phys-ctor-em-V11-01-00)
- G4GammaGeneralProcess - in all cases select sub-process (fix problem #2521)
## 2022-11-24 Gabriele Cosmo (phys-ctor-em-V11-00-35)
@@ -0,0 +1,42 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// Geant4 class G4ChemDissociationChannels
//
// Author H. Tran 16.12.2022
//
#ifndef G4ChemDissociationChannels_h
#define G4ChemDissociationChannels_h 1
class G4ChemDissociationChannels{
public:
~G4ChemDissociationChannels() = default;
static void ConstructDissociationChannels();
static void ConstructMolecule();
};
#endif // G4ChemDissociationChannels_h
@@ -0,0 +1,42 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// Geant4 class G4ChemDissociationChannels
//
// H. Tran 16.12.2022
//
#ifndef G4ChemDissociationChannels_option1_h
#define G4ChemDissociationChannels_option1_h 1
class G4ChemDissociationChannels_option1{
public:
~G4ChemDissociationChannels_option1() = default;
static void ConstructDissociationChannels();
static void ConstructMolecule();
};
#endif
@@ -32,26 +32,19 @@
class G4DNAMolecularReactionTable;
class G4EmDNAChemistry : public G4VUserChemistryList,
public G4VPhysicsConstructor
class G4EmDNAChemistry : public G4VUserChemistryList, public G4VPhysicsConstructor
{
public:
G4EmDNAChemistry();
~G4EmDNAChemistry() override = default;
public:
explicit G4EmDNAChemistry();
virtual ~G4EmDNAChemistry();
virtual void ConstructParticle()
{
ConstructMolecule();
}
virtual void ConstructMolecule();
virtual void ConstructProcess();
virtual void ConstructDissociationChannels();
virtual void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable);
virtual void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable);
void ConstructParticle() override { ConstructMolecule(); }
void ConstructMolecule() override;
void ConstructProcess() override;
void ConstructDissociationChannels() override;
void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) override;
void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) override;
};
#endif
@@ -32,26 +32,22 @@
class G4DNAMolecularReactionTable;
class G4EmDNAChemistry_option1 : public G4VUserChemistryList,
public G4VPhysicsConstructor
class G4EmDNAChemistry_option1 : public G4VUserChemistryList, public G4VPhysicsConstructor
{
public:
G4EmDNAChemistry_option1();
~G4EmDNAChemistry_option1() override = default;
public:
explicit G4EmDNAChemistry_option1();
virtual ~G4EmDNAChemistry_option1();
virtual void ConstructParticle()
void ConstructParticle() override
{
ConstructMolecule();
}
virtual void ConstructMolecule();
virtual void ConstructProcess();
virtual void ConstructDissociationChannels();
virtual void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable);
virtual void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable);
void ConstructMolecule() override;
void ConstructProcess() override;
void ConstructDissociationChannels() override;
void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) override;
void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) override;
};
#endif
@@ -34,24 +34,20 @@ class G4MolecularConfiguration;
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
class G4EmDNAChemistry_option2
: public G4VUserChemistryList
, public G4VPhysicsConstructor
class G4EmDNAChemistry_option2 : public G4VUserChemistryList, public G4VPhysicsConstructor
{
public:
G4EmDNAChemistry_option2();
virtual ~G4EmDNAChemistry_option2() override;
public:
G4EmDNAChemistry_option2();
~G4EmDNAChemistry_option2() override = default;
void ConstructParticle() override
{
ConstructMolecule();
}
void ConstructMolecule() override;
void ConstructProcess() override;
void ConstructParticle() override
{
ConstructMolecule();
}
void ConstructMolecule() override;
void ConstructProcess() override;
void ConstructDissociationChannels() override;
void ConstructReactionTable(
G4DNAMolecularReactionTable* pTable) override;
void ConstructTimeStepModel(
G4DNAMolecularReactionTable* pTable) override;
void ConstructDissociationChannels() override;
void ConstructReactionTable(G4DNAMolecularReactionTable* pTable) override;
void ConstructTimeStepModel(G4DNAMolecularReactionTable* pTable) override;
};
@@ -47,18 +47,18 @@ class G4EmDNAChemistry_option3 : public G4VUserChemistryList,
public:
G4EmDNAChemistry_option3();
virtual ~G4EmDNAChemistry_option3();
~G4EmDNAChemistry_option3() override = default;
virtual void ConstructParticle()
void ConstructParticle() override
{
ConstructMolecule();
}
virtual void ConstructMolecule();
virtual void ConstructProcess();
void ConstructMolecule() override;
void ConstructProcess() override;
virtual void ConstructDissociationChannels();
virtual void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable);
virtual void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable);
void ConstructDissociationChannels() override;
void ConstructReactionTable(G4DNAMolecularReactionTable* reactionTable) override;
void ConstructTimeStepModel(G4DNAMolecularReactionTable* reactionTable) override;
inline void SetTimeStepModel(const TimeStepModel& model)
{
fTimeStepModel = model;
@@ -54,6 +54,7 @@ class G4ProcessManager;
class G4ParticleDefinition;
class G4EmConfigurator;
class G4VMscModel;
class G4VEmProcess;
class G4EmModelActivator
{
@@ -72,7 +73,7 @@ private:
void ActivateEmOptions();
void FindOrAddProcess(const G4ParticleDefinition*, const G4String&);
G4VEmProcess* FindOrAddProcess(const G4ParticleDefinition*, const G4String&);
void AddStandardScattering(const G4ParticleDefinition*, G4EmConfigurator*,
G4VMscModel*, const G4String&,
@@ -53,13 +53,17 @@ public:
explicit G4EmParticleList();
~G4EmParticleList();
~G4EmParticleList() = default;
// list of names of main EM particles
const std::vector<G4String>& PartNames() const;
// minimal list of names of charged particles
const std::vector<G4String>& EmChargedPartNames() const;
private:
std::vector<G4String> pNames;
std::vector<G4String> pNames;
std::vector<G4String> cNames;
};
#endif
@@ -118,17 +118,17 @@ public:
const G4String& directory,
G4bool ascii) override;
// Temporary method
const G4String& GetSubProcessName() const;
// Return sub-process limiting current step
const G4VProcess* GetCreatorProcess() const override;
inline const G4VProcess* GetSelectedProcess() const;
// Temporary method
// Temporary methods
const G4String& GetSubProcessName() const;
G4int GetSubProcessSubType() const;
G4VEmProcess* GetEmProcess(const G4String& name) override;
inline const G4VProcess* GetSelectedProcess() const;
const G4VProcess* GetCreatorProcess() const override;
inline G4HadronicProcess* GetGammaNuclear() const;
// hide copy constructor and assignment operator
G4GammaGeneralProcess(G4GammaGeneralProcess &) = delete;
@@ -231,6 +231,14 @@ inline const G4VProcess* G4GammaGeneralProcess::GetSelectedProcess() const
return selectedProc;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
inline G4HadronicProcess* G4GammaGeneralProcess::GetGammaNuclear() const
{
return theGammaNuclear;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
#endif
@@ -39,6 +39,8 @@ geant4_add_module(G4phys_ctor_em
G4EmStandardPhysics_option4.hh
G4GammaGeneralProcess.hh
G4OpticalPhysics.hh
G4ChemDissociationChannels.hh
G4ChemDissociationChannels_option1.hh
SOURCES
G4EmBuilder.cc
G4EmDNABuilder.cc
@@ -75,7 +77,9 @@ geant4_add_module(G4phys_ctor_em
G4EmStandardPhysics_option3.cc
G4EmStandardPhysics_option4.cc
G4GammaGeneralProcess.cc
G4OpticalPhysics.cc)
G4OpticalPhysics.cc
G4ChemDissociationChannels.cc
G4ChemDissociationChannels_option1.cc)
geant4_module_link_libraries(G4phys_ctor_em
PUBLIC
@@ -0,0 +1,319 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// Geant4 class G4ChemDissociationChannels
//
// Author H. Tran 16.12.2022
//
#include "G4ChemDissociationChannels.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4Electron_aq.hh"
#include "G4H2.hh"
#include "G4H2O.hh"
#include "G4H2O2.hh"
#include "G4H3O.hh"
#include "G4Hydrogen.hh"
#include "G4MolecularConfiguration.hh"
#include "G4MoleculeTable.hh"
#include "G4OH.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels::ConstructMolecule()
{
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
auto molTable = G4MoleculeTable::Instance();
molTable->CreateConfiguration("H3Op", G4H3O::Definition());
G4MolecularConfiguration* OHm =
molTable->CreateConfiguration("OHm", // just a tag to store and retrieve
// from G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.0e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
molTable->CreateConfiguration("OH", G4OH::Definition());
molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition());
molTable->CreateConfiguration("H", G4Hydrogen::Definition());
molTable->CreateConfiguration("H2", G4H2::Definition());
molTable->CreateConfiguration("H2O2", G4H2O2::Definition());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels::ConstructDissociationChannels()
{
//-----------------------------------
// Get the molecular configuration
auto molTable = G4MoleculeTable::Instance();
G4MolecularConfiguration* OH = molTable->GetConfiguration("OH");
G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2");
G4MolecularConfiguration* H3O = molTable->GetConfiguration("H3Op");
G4MolecularConfiguration* H = molTable->GetConfiguration("H");
//-------------------------------------
// Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
auto occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relax");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay");
// Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relax_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay");
auto decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIoni_Channel");
// Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
// Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exc3rdLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exc3rdLayer_Relax_Channel");
// Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
// Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
// Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Exci3rdLayer", *occ);
water->AddDecayChannel("Exci3rdLayer", decCh1);
water->AddDecayChannel("Exci3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exc2ndLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exc2ndLayer_Relax_Channel");
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Exci2ndLayer", *occ);
water->AddDecayChannel("Exci2ndLayer", decCh1);
water->AddDecayChannel("Exci2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci1stLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci1stLayer_Relax_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Exci1stLayer", *occ);
water->AddDecayChannel("Exci1stLayer", decCh1);
water->AddDecayChannel("Exci1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ioni_Channel");
// Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ioni5", *occ);
water->AddDecayChannel("Ioni5", decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ioni4", *occ);
water->AddDecayChannel("Ioni4", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ioni3", *occ);
water->AddDecayChannel("Ioni3", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ioni2", *occ);
water->AddDecayChannel("Ioni2", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ioni1", *occ);
water->AddDecayChannel("Ioni1", new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociAttachment");
// Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociAttachment", *occ);
water->AddDecayChannel("DissociAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay3");
// Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
}
@@ -0,0 +1,456 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
// Geant4 class G4ChemDissociationChannels_option1
//
// H. Tran 16.12.2022
//
#include "G4ChemDissociationChannels_option1.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4Electron_aq.hh"
#include "G4FakeMolecule.hh"
#include "G4H2.hh"
#include "G4H2O.hh"
#include "G4H2O2.hh"
#include "G4H3O.hh"
#include "G4HO2.hh"
#include "G4Hydrogen.hh"
#include "G4MolecularConfiguration.hh"
#include "G4MoleculeTable.hh"
#include "G4O2.hh"
#include "G4O3.hh"
#include "G4OH.hh"
#include "G4Oxygen.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4Scheduler.hh"
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels_option1::ConstructMolecule()
{
//-----------------------------------
// G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4O2::Definition();
G4HO2::Definition();
G4Oxygen::Definition();
G4O3::Definition();
//____________________________________________________________________________
auto molTable = G4MoleculeTable::Instance();
molTable->CreateConfiguration("H3Op", G4H3O::Definition());
molTable->GetConfiguration("H3Op")->SetDiffusionCoefficient(9.46e-9
* (m2 / s));
molTable->GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25 * nm);
molTable->CreateConfiguration("OH", G4OH::Definition());
molTable->GetConfiguration("OH")->SetDiffusionCoefficient(2.2e-9 * (m2 / s));
molTable->GetConfiguration("OH")->SetVanDerVaalsRadius(0.22 * nm);
G4MolecularConfiguration* OHm =
molTable->CreateConfiguration("OHm", // just a tag to store and retrieve
// from G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.3e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
OHm->SetVanDerVaalsRadius(0.33 * nm);
molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition());
molTable->GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50 * nm);
molTable->CreateConfiguration("H", G4Hydrogen::Definition());
molTable->GetConfiguration("H")->SetVanDerVaalsRadius(0.19 * nm);
molTable->CreateConfiguration("H2", G4H2::Definition());
molTable->GetConfiguration("H2")->SetDiffusionCoefficient(4.8e-9 * (m2 / s));
molTable->GetConfiguration("H2")->SetVanDerVaalsRadius(0.14 * nm);
molTable->CreateConfiguration("H2O2", G4H2O2::Definition());
molTable->GetConfiguration("H2O2")->SetDiffusionCoefficient(2.3e-9 * (m2 / s));
molTable->GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21 * nm);
// molecules extension (RITRACKS)
molTable->CreateConfiguration("HO2", G4HO2::Definition());
molTable->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21 * nm);
G4MolecularConfiguration* HO2m =
molTable->CreateConfiguration("HO2m", // just a tag to store and retrieve
// from G4MoleculeTable
G4HO2::Definition(),
-1, // charge
1.4e-9 * (m2 / s));
HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
HO2m->SetVanDerVaalsRadius(0.25 * nm);
molTable->CreateConfiguration("Oxy", G4Oxygen::Definition());
molTable->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20 * nm);
G4MolecularConfiguration* Om =
molTable->CreateConfiguration("Om", // just a tag to store and retrieve from
// G4MoleculeTable
G4Oxygen::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
Om->SetMass(15.99829 * g / Avogadro * c_squared);
Om->SetVanDerVaalsRadius(0.25 * nm);
molTable->CreateConfiguration("O2", G4O2::Definition());
molTable->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17 * nm);
G4MolecularConfiguration* O2m =
molTable->CreateConfiguration("O2m", // just a tag to store and retrieve
// from G4MoleculeTable
G4O2::Definition(),
-1, // charge
1.75e-9 * (m2 / s));
O2m->SetMass(31.99602 * g / Avogadro * c_squared);
O2m->SetVanDerVaalsRadius(0.22 * nm);
molTable->CreateConfiguration("O3", G4O3::Definition());
molTable->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20 * nm);
G4MolecularConfiguration* O3m =
molTable->CreateConfiguration("O3m", // just a tag to store and retrieve
// from G4MoleculeTable
G4O3::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
O3m->SetMass(47.99375 * g / Avogadro * c_squared);
O3m->SetVanDerVaalsRadius(0.20 * nm);
molTable->CreateConfiguration("H2O(B)", // just a tag to store and retrieve
// from G4MoleculeTable
G4H2O::Definition(),
0, // charge
0 * (m2 / s));
molTable->CreateConfiguration("H3Op(B)", // just a tag to store and retrieve
// from G4MoleculeTable
G4H3O::Definition(),
1, // charge
0 * (m2 / s));
molTable->CreateConfiguration("OHm(B)", // just a tag to store and retrieve
// from G4MoleculeTable
G4OH::Definition(),
-1, // charge
0 * (m2 / s));
molTable->CreateConfiguration("NoneM", G4FakeMolecule::Definition());
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4ChemDissociationChannels_option1::ConstructDissociationChannels()
{
//-----------------------------------
// Get the molecular configuration
auto molTable = G4MoleculeTable::Instance();
G4MolecularConfiguration* OH = molTable->GetConfiguration("OH");
G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm");
G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq");
G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2");
G4MolecularConfiguration* H3O = molTable->GetConfiguration("H3Op");
G4MolecularConfiguration* H = molTable->GetConfiguration("H");
G4MolecularConfiguration* O = molTable->GetConfiguration("Oxy");
//-------------------------------------
// Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4MolecularDissociationChannel* decCh3;
G4MolecularDissociationChannel* decCh4;
G4MolecularDissociationChannel* decCh5;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relax");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay");
// Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relax_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay");
decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIoni_Channel");
decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociDecay");
decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociDecay2");
// Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.175);
// Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.0325);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.50);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay 4 : H + OH
decCh4->AddProduct(H);
decCh4->AddProduct(OH);
decCh4->SetProbability(0.2535);
decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// Decay 5 : 2H + O
decCh5->AddProduct(O);
decCh5->AddProduct(H);
decCh5->AddProduct(H);
decCh5->SetProbability(0.039);
decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
water->AddDecayChannel("B^1A_1", decCh4);
water->AddDecayChannel("B^1A_1", decCh5);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci3rdLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci3rdLayer_Relax_Channel");
// Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
// Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
// Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Exci3rdLayer", *occ);
water->AddDecayChannel("Exci3rdLayer", decCh1);
water->AddDecayChannel("Exci3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci2ndLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci2ndLayer_Relax_Channel");
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Exci2ndLayer", *occ);
water->AddDecayChannel("Exci2ndLayer", decCh1);
water->AddDecayChannel("Exci2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel("Exci1stLayer_AutoIoni_Channel");
decCh2 = new G4MolecularDissociationChannel("Exci1stLayer_Relax_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
// Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
// Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Exci1stLayer", *occ);
water->AddDecayChannel("Exci1stLayer", decCh1);
water->AddDecayChannel("Exci1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ioni_Channel");
// Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ioni5", *occ);
water->AddDecayChannel("Ioni5", decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ioni4", *occ);
water->AddDecayChannel("Ioni4", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ioni3", *occ);
water->AddDecayChannel("Ioni3", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ioni2", *occ);
water->AddDecayChannel("Ioni2", new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ioni1", *occ);
water->AddDecayChannel("Ioni1", new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociAttachment_ch1");
// Decay 1 : OHm + H
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociAttachment_ch1", *occ);
water->AddDecayChannel("DissociAttachment_ch1", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay3");
decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociDecay4");
// Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.1365);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
// Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.3575);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// Decay 3 : 2H + O(3p)
decCh3->AddProduct(O);
decCh3->AddProduct(H);
decCh3->AddProduct(H);
decCh3->SetProbability(0.156);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
// Decay 4 : relaxation
decCh4->SetProbability(0.35);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
water->AddDecayChannel(pH2Ovib, decCh4);
delete occ;
}
@@ -64,7 +64,6 @@
#include "G4MuMultipleScattering.hh"
#include "G4hMultipleScattering.hh"
#include "G4CoulombScattering.hh"
#include "G4ParticleTable.hh"
#include "G4Gamma.hh"
@@ -150,19 +149,19 @@ void G4EmBuilder::ConstructIonEmPhysicsSS()
G4ParticleDefinition* part = G4Deuteron::Deuteron();
ph->RegisterProcess(new G4hIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
part = G4Triton::Triton();
ph->RegisterProcess(new G4hIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
part = G4Alpha::Alpha();
ph->RegisterProcess(new G4ionIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
part = G4He3::He3();
ph->RegisterProcess(new G4ionIonisation(), part);
ph->RegisterProcess(new G4CoulombScattering(), part);
ph->RegisterProcess(new G4CoulombScattering(false), part);
}
void G4EmBuilder::ConstructLightHadrons(G4ParticleDefinition* part1,
@@ -219,14 +218,15 @@ void G4EmBuilder::ConstructLightHadronsSS(G4ParticleDefinition* part1,
ph->RegisterProcess(brem, part1);
ph->RegisterProcess(pair, part1);
}
ph->RegisterProcess(new G4CoulombScattering(), part1);
auto ss = new G4CoulombScattering(false);
ph->RegisterProcess(ss, part1);
ph->RegisterProcess(new G4hIonisation(), part2);
if( isHEP ) {
ph->RegisterProcess(brem, part2);
ph->RegisterProcess(pair, part2);
}
ph->RegisterProcess(new G4CoulombScattering(), part2);
ph->RegisterProcess(new G4CoulombScattering(false), part2);
}
void G4EmBuilder::ConstructCharged(G4hMultipleScattering* hmsc,
@@ -306,7 +306,7 @@ void G4EmBuilder::ConstructChargedSS(G4hMultipleScattering* hmsc)
G4bool isHEP = ( param->MaxKinEnergy() > hpar->EnergyThresholdForHeavyHadrons() );
// muon multiple and single scattering
G4CoulombScattering* muss = new G4CoulombScattering();
G4CoulombScattering* muss = new G4CoulombScattering(false);
// Add standard EM Processes
// mu+-
@@ -24,13 +24,12 @@
// ********************************************************************
//
#include "G4EmDNAChemistry.hh"
#include "G4ChemDissociationChannels.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAChemistryManager.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4ProcessManager.hh"
#include "G4DNAGenericIonsManager.hh"
@@ -39,15 +38,9 @@
#include "G4DNAElectronSolvation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNASancheExcitationModel.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAMolecularDissociation.hh"
#include "G4DNABrownianTransportation.hh"
#include "G4DNAMolecularReactionTable.hh"
@@ -56,30 +49,16 @@
#include "G4DNASmoluchowskiReactionModel.hh"
#include "G4DNAElectronHoleRecombination.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4MoleculeTable.hh"
#include "G4H2O.hh"
#include "G4H2.hh"
#include "G4Hydrogen.hh"
#include "G4OH.hh"
#include "G4H3O.hh"
#include "G4Electron_aq.hh"
#include "G4H2O2.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
/****/
#include "G4DNAMoleculeEncounterStepper.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessTable.hh"
#include "G4DNASecondOrderReaction.hh"
#include "G4MolecularConfiguration.hh"
/****/
@@ -98,316 +77,16 @@ G4EmDNAChemistry::G4EmDNAChemistry() :
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry::~G4EmDNAChemistry()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry::ConstructMolecule()
{
//-----------------------------------
G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
//____________________________________________________________________________
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.0e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("e_aq",
G4Electron_aq::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H",
G4Hydrogen::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
G4ChemDissociationChannels::ConstructMolecule();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry::ConstructDissociationChannels()
{
//-----------------------------------
//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* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
G4MolecularDissociationChannel* decCh3 = new G4MolecularDissociationChannel(
"B^1A_1_AutoIonisation_Channel");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5",
decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociativeAttachment", *occ);
water->AddDecayChannel("DissociativeAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
G4ChemDissociationChannels::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -24,13 +24,9 @@
// ********************************************************************
//
#include "G4EmDNAChemistry_option1.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAChemistryManager.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4ProcessManager.hh"
#include "G4DNAGenericIonsManager.hh"
@@ -39,47 +35,25 @@
#include "G4DNAElectronSolvation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNASancheExcitationModel.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAMolecularDissociation.hh"
#include "G4DNABrownianTransportation.hh"
#include "G4DNAMolecularReactionTable.hh"
#include "G4DNAMolecularStepByStepModel.hh"
#include "G4VDNAReactionModel.hh"
#include "G4DNASmoluchowskiReactionModel.hh"
#include "G4DNAElectronHoleRecombination.hh"
#include "G4ChemDissociationChannels.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4MoleculeTable.hh"
#include "G4H2O.hh"
#include "G4H2.hh"
#include "G4Hydrogen.hh"
#include "G4OH.hh"
#include "G4H3O.hh"
#include "G4Electron_aq.hh"
#include "G4H2O2.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
/****/
#include "G4DNAMoleculeEncounterStepper.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessTable.hh"
#include "G4DNASecondOrderReaction.hh"
#include "G4MolecularConfiguration.hh"
/****/
@@ -88,8 +62,6 @@
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option1);
#include "G4Threading.hh"
G4EmDNAChemistry_option1::G4EmDNAChemistry_option1() :
G4VUserChemistryList(true)
{
@@ -98,324 +70,29 @@ G4EmDNAChemistry_option1::G4EmDNAChemistry_option1() :
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry_option1::~G4EmDNAChemistry_option1()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option1::ConstructMolecule()
{
//-----------------------------------
G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4ChemDissociationChannels::ConstructMolecule();
//____________________________________________________________________________
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient(
9.46e-9 * (m2/s));
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.3e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->GetConfiguration("OHm")->SetDiffusionCoefficient(
5.3e-9 * (m2 / s));
G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient(
2.2e-9 * (m2/s));
G4MoleculeTable::Instance()->CreateConfiguration("e_aq",
G4Electron_aq::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H",
G4Hydrogen::Definition());
G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
2.2e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2")->SetDiffusionCoefficient(
4.8e-9 * (m2/s));
G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
4.8e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetDiffusionCoefficient(
2.3e-9 * (m2/s));
2.3e-9 * (m2/s));
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option1::ConstructDissociationChannels()
{
//-----------------------------------
//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* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
G4MolecularDissociationChannel* decCh3 = new G4MolecularDissociationChannel(
"B^1A_1_AutoIonisation_Channel");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5",
decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociativeAttachment", *occ);
water->AddDecayChannel("DissociativeAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
G4ChemDissociationChannels::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -56,6 +56,7 @@
#include "G4MolecularConfiguration.hh"
#include "G4PhysicsConstructorFactory.hh"
#include "G4VDNAReactionModel.hh"
#include "G4ChemDissociationChannels.hh"
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option2);
@@ -69,23 +70,11 @@ G4EmDNAChemistry_option2::G4EmDNAChemistry_option2()
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry_option2::~G4EmDNAChemistry_option2()
{}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option2::ConstructMolecule()
{
//-----------------------------------
G4Electron::Definition(); // safety
//-----------------------------------
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4ChemDissociationChannels::ConstructMolecule();
//____________________________________________________________________________
G4Deoxyribose::Definition();
G4Phosphate::Definition();
G4Adenine::Definition();
@@ -101,27 +90,6 @@ void G4EmDNAChemistry_option2::ConstructMolecule()
G4DamagedCytosine::Definition();
G4ModifiedHistone::Definition();
//_________________species___________________________________________________________
G4MoleculeTable::Instance()->
CreateConfiguration("H3Op", G4H3O::Definition());
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm",
G4OH::Definition(),
-1, // charge
5.0e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
G4MoleculeTable::Instance()->
CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("e_aq",G4Electron_aq::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("H",G4Hydrogen::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("H2", G4H2::Definition());
G4MoleculeTable::Instance()->
CreateConfiguration("H2O2", G4H2O2::Definition());
//________________DNA_______________________________________________
G4MoleculeTable::Instance()->
@@ -162,289 +130,7 @@ void G4EmDNAChemistry_option2::ConstructMolecule()
void G4EmDNAChemistry_option2::ConstructDissociationChannels()
{
//-----------------------------------
//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* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel(
"A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel(
"A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
// water->AddExcitedState("A^1B_1");
// this is the transition form ground state to
occ->RemoveElectron(4, 1);
// the first unoccupied orbital: A^1B_1
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel(
"B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"B^1A_1_DissociativeDecay");
G4MolecularDissociationChannel* decCh3 =
new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.3);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.15);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.55);
decCh3->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy(
"Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy(
"Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy(
"Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5", decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel(
"DissociativeAttachment");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5, 1); // H_2O^-
water->NewConfigurationWithElectronOccupancy(
"DissociativeAttachment", *occ);
water->AddDecayChannel(
"DissociativeAttachment", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.15);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.55);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : relaxation
decCh3->SetProbability(0.30);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
delete occ;
G4ChemDissociationChannels::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -33,81 +33,42 @@
*/
#include "G4EmDNAChemistry_option3.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DNAWaterDissociationDisplacer.hh"
#include "G4DNAChemistryManager.hh"
#include "G4DNAWaterExcitationStructure.hh"
#include "G4ProcessManager.hh"
#include "G4DNAGenericIonsManager.hh"
// *** Processes and models for Geant4-DNA
#include "G4DNAElectronSolvation.hh"
#include "G4DNAAttachment.hh"
#include "G4DNAVibExcitation.hh"
#include "G4DNASancheExcitationModel.hh"
#include "G4DNAElastic.hh"
#include "G4DNAChampionElasticModel.hh"
#include "G4DNAScreenedRutherfordElasticModel.hh"
#include "G4DNAUeharaScreenedRutherfordElasticModel.hh"
#include "G4DNAMolecularDissociation.hh"
#include "G4DNABrownianTransportation.hh"
#include "G4DNAMolecularReactionTable.hh"
#include "G4DNAMolecularStepByStepModel.hh"
#include "G4DNAMolecularIRTModel.hh"
#include "G4DNAIndependentReactionTimeModel.hh"
#include "G4VDNAReactionModel.hh"
#include "G4DNASmoluchowskiReactionModel.hh"
#include "G4DNAIRT.hh"
#include "G4DNAElectronHoleRecombination.hh"
// particles
#include "G4Electron.hh"
#include "G4Proton.hh"
#include "G4GenericIon.hh"
#include "G4MoleculeTable.hh"
#include "G4H2O.hh"
#include "G4H2.hh"
#include "G4Hydrogen.hh"
#include "G4OH.hh"
#include "G4H3O.hh"
#include "G4Electron_aq.hh"
#include "G4Oxygen.hh"
#include "G4H2O2.hh"
#include "G4O2.hh"
#include "G4HO2.hh"
#include "G4O3.hh"
#include "G4FakeMolecule.hh"
#include "G4PhysicsListHelper.hh"
#include "G4BuilderType.hh"
/****/
#include "G4DNAMoleculeEncounterStepper.hh"
#include "G4ProcessVector.hh"
#include "G4ProcessTable.hh"
#include "G4DNASecondOrderReaction.hh"
#include "G4MolecularConfiguration.hh"
/****/
#include "G4Scheduler.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
#include "G4ChemDissociationChannels_option1.hh"
G4_DECLARE_PHYSCONSTR_FACTORY(G4EmDNAChemistry_option3);
@@ -121,453 +82,16 @@ G4EmDNAChemistry_option3::G4EmDNAChemistry_option3() :
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
G4EmDNAChemistry_option3::~G4EmDNAChemistry_option3()
{
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option3::ConstructMolecule()
{
//-----------------------------------
// G4Electron::Definition(); // safety
//-----------------------------------
// Create the definition
G4H2O::Definition();
G4Hydrogen::Definition();
G4H3O::Definition();
G4OH::Definition();
G4Electron_aq::Definition();
G4H2O2::Definition();
G4H2::Definition();
G4O2::Definition();
G4HO2::Definition();
G4Oxygen::Definition();
G4O3::Definition();
//____________________________________________________________________________
G4MoleculeTable::Instance()->CreateConfiguration("H3Op", G4H3O::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetDiffusionCoefficient(
9.46e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H3Op")->SetVanDerVaalsRadius(0.25*nm);
G4MoleculeTable::Instance()->CreateConfiguration("OH", G4OH::Definition());
G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient(
2.2e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("OH")->SetVanDerVaalsRadius(0.22*nm);
G4MolecularConfiguration* OHm = G4MoleculeTable::Instance()->
CreateConfiguration("OHm", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
5.3e-9 * (m2 / s));
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
OHm->SetVanDerVaalsRadius(0.33*nm);
G4MoleculeTable::Instance()->CreateConfiguration("e_aq",
G4Electron_aq::Definition());
G4MoleculeTable::Instance()->GetConfiguration("e_aq")->SetVanDerVaalsRadius(0.50*nm);
G4MoleculeTable::Instance()->CreateConfiguration("H",
G4Hydrogen::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H")->SetVanDerVaalsRadius(0.19*nm);
G4MoleculeTable::Instance()->CreateConfiguration("H2", G4H2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H2")->SetDiffusionCoefficient(
4.8e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2")->SetVanDerVaalsRadius(0.14*nm);
G4MoleculeTable::Instance()->CreateConfiguration("H2O2", G4H2O2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetDiffusionCoefficient(
2.3e-9 * (m2/s));
G4MoleculeTable::Instance()->GetConfiguration("H2O2")->SetVanDerVaalsRadius(0.21*nm);
// molecules extension (RITRACKS)
G4MoleculeTable::Instance()->CreateConfiguration("HO2",G4HO2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21*nm);
G4MolecularConfiguration* HO2m = G4MoleculeTable::Instance()->
CreateConfiguration("HO2m", // just a tag to store and retrieve from
// G4MoleculeTable
G4HO2::Definition(),
-1, // charge
1.4e-9 * (m2 / s));
HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
HO2m->SetVanDerVaalsRadius(0.25*nm);
G4MoleculeTable::Instance()->CreateConfiguration("Oxy",G4Oxygen::Definition());
G4MoleculeTable::Instance()->GetConfiguration("Oxy")->SetVanDerVaalsRadius(0.20*nm);
G4MolecularConfiguration* Om = G4MoleculeTable::Instance()->
CreateConfiguration("Om", // just a tag to store and retrieve from
// G4MoleculeTable
G4Oxygen::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
Om->SetMass(15.99829 * g / Avogadro * c_squared);
Om->SetVanDerVaalsRadius(0.25*nm);
G4MoleculeTable::Instance()->CreateConfiguration("O2",G4O2::Definition());
G4MoleculeTable::Instance()->GetConfiguration("O2")->SetVanDerVaalsRadius(0.17*nm);
G4MolecularConfiguration* O2m = G4MoleculeTable::Instance()->
CreateConfiguration("O2m", // just a tag to store and retrieve from
// G4MoleculeTable
G4O2::Definition(),
-1, // charge
1.75e-9 * (m2 / s));
O2m->SetMass(31.99602 * g / Avogadro * c_squared);
O2m->SetVanDerVaalsRadius(0.22*nm);
G4MoleculeTable::Instance()->CreateConfiguration("O3",G4O3::Definition());
G4MoleculeTable::Instance()->GetConfiguration("O3")->SetVanDerVaalsRadius(0.20*nm);
G4MolecularConfiguration* O3m = G4MoleculeTable::Instance()->
CreateConfiguration("O3m", // just a tag to store and retrieve from
// G4MoleculeTable
G4O3::Definition(),
-1, // charge
2.0e-9 * (m2 / s));
O3m->SetMass(47.99375 * g / Avogadro * c_squared);
O3m->SetVanDerVaalsRadius(0.20*nm);
G4MoleculeTable::Instance()->
CreateConfiguration("H2O(B)", // just a tag to store and retrieve from
// G4MoleculeTable
G4H2O::Definition(),
0, // charge
0 * (m2 / s));
G4MoleculeTable::Instance()->
CreateConfiguration("H3Op(B)", // just a tag to store and retrieve from
// G4MoleculeTable
G4H3O::Definition(),
1, // charge
0 * (m2 / s));
G4MoleculeTable::Instance()->
CreateConfiguration("OHm(B)", // just a tag to store and retrieve from
// G4MoleculeTable
G4OH::Definition(),
-1, // charge
0 * (m2 / s));
G4MoleculeTable::Instance()->CreateConfiguration("NoneM",G4FakeMolecule::Definition());
G4ChemDissociationChannels_option1::ConstructMolecule();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmDNAChemistry_option3::ConstructDissociationChannels()
{
//-----------------------------------
//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* H3O =
G4MoleculeTable::Instance()->GetConfiguration("H3Op");
G4MolecularConfiguration* H =
G4MoleculeTable::Instance()->GetConfiguration("H");
G4MolecularConfiguration* O =
G4MoleculeTable::Instance()->GetConfiguration("Oxy");
//-------------------------------------
//Define the decay channels
G4MoleculeDefinition* water = G4H2O::Definition();
G4MolecularDissociationChannel* decCh1;
G4MolecularDissociationChannel* decCh2;
G4MolecularDissociationChannel* decCh3;
G4MolecularDissociationChannel* decCh4;
G4MolecularDissociationChannel* decCh5;
G4ElectronOccupancy* occ = new G4ElectronOccupancy(
*(water->GetGroundStateElectronOccupancy()));
//////////////////////////////////////////////////////////
// EXCITATIONS //
//////////////////////////////////////////////////////////
G4DNAWaterExcitationStructure waterExcitation;
//--------------------------------------------------------
//---------------Excitation on the fifth layer------------
decCh1 = new G4MolecularDissociationChannel("A^1B_1_Relaxation");
decCh2 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
//Decay 1 : OH + H
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(0));
decCh1->SetProbability(0.35);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::NoDisplacement);
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.65);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
occ->RemoveElectron(4, 1); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: A^1B_1
water->NewConfigurationWithElectronOccupancy("A^1B_1", *occ);
water->AddDecayChannel("A^1B_1", decCh1);
water->AddDecayChannel("A^1B_1", decCh2);
//--------------------------------------------------------
//---------------Excitation on the fourth layer-----------
decCh1 = new G4MolecularDissociationChannel("B^1A_1_Relaxation_Channel");
decCh2 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay");
decCh3 = new G4MolecularDissociationChannel("B^1A_1_AutoIonisation_Channel");
decCh4 = new G4MolecularDissociationChannel("A^1B_1_DissociativeDecay");
decCh5 = new G4MolecularDissociationChannel("B^1A_1_DissociativeDecay2");
//Decay 1 : energy
decCh1->SetEnergy(waterExcitation.ExcitationEnergy(1));
decCh1->SetProbability(0.175);
//Decay 2 : 2OH + H_2
decCh2->AddProduct(H2);
decCh2->AddProduct(OH);
decCh2->AddProduct(OH);
decCh2->SetProbability(0.0325);
decCh2->SetDisplacementType(
G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay);
//Decay 3 : OH + H_3Op + e_aq
decCh3->AddProduct(OH);
decCh3->AddProduct(H3O);
decCh3->AddProduct(e_aq);
decCh3->SetProbability(0.50);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay 4 : H + OH
decCh4->AddProduct(H);
decCh4->AddProduct(OH);
decCh4->SetProbability(0.2535);
decCh4->SetDisplacementType(G4DNAWaterDissociationDisplacer::A1B1_DissociationDecay);
//Decay 5 : 2H + O
decCh5->AddProduct(O);
decCh5->AddProduct(H);
decCh5->AddProduct(H);
decCh5->SetProbability(0.039);
decCh5->SetDisplacementType(G4DNAWaterDissociationDisplacer::B1A1_DissociationDecay2);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3); // this is the transition form ground state to
occ->AddElectron(5, 1); // the first unoccupied orbital: B^1A_1
water->NewConfigurationWithElectronOccupancy("B^1A_1", *occ);
water->AddDecayChannel("B^1A_1", decCh1);
water->AddDecayChannel("B^1A_1", decCh2);
water->AddDecayChannel("B^1A_1", decCh3);
water->AddDecayChannel("B^1A_1", decCh4);
water->AddDecayChannel("B^1A_1", decCh5);
//-------------------------------------------------------
//-------------------Excitation of 3rd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation3rdLayer_Relaxation_Channel");
//Decay channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(2));
decCh2->SetProbability(0.5);
//Electronic configuration of this decay
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
occ->AddElectron(5, 1);
//Configure the water molecule
water->NewConfigurationWithElectronOccupancy("Excitation3rdLayer", *occ);
water->AddDecayChannel("Excitation3rdLayer", decCh1);
water->AddDecayChannel("Excitation3rdLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 2nd layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation2ndLayer_Relaxation_Channel");
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(3));
decCh2->SetProbability(0.5);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
occ->AddElectron(5, 1);
water->NewConfigurationWithElectronOccupancy("Excitation2ndLayer", *occ);
water->AddDecayChannel("Excitation2ndLayer", decCh1);
water->AddDecayChannel("Excitation2ndLayer", decCh2);
//-------------------------------------------------------
//-------------------Excitation of 1st layer-----------------
decCh1 = new G4MolecularDissociationChannel(
"Excitation1stLayer_AutoIonisation_Channel");
decCh2 = new G4MolecularDissociationChannel(
"Excitation1stLayer_Relaxation_Channel");
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
occ->AddElectron(5, 1);
//Decay Channel 1 : : OH + H_3Op + e_aq
decCh1->AddProduct(OH);
decCh1->AddProduct(H3O);
decCh1->AddProduct(e_aq);
decCh1->SetProbability(0.5);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::AutoIonisation);
//Decay channel 2 : energy
decCh2->SetEnergy(waterExcitation.ExcitationEnergy(4));
decCh2->SetProbability(0.5);
water->NewConfigurationWithElectronOccupancy("Excitation1stLayer", *occ);
water->AddDecayChannel("Excitation1stLayer", decCh1);
water->AddDecayChannel("Excitation1stLayer", decCh2);
/////////////////////////////////////////////////////////
// IONISATION //
/////////////////////////////////////////////////////////
//--------------------------------------------------------
//------------------- Ionisation -------------------------
decCh1 = new G4MolecularDissociationChannel("Ionisation_Channel");
//Decay Channel 1 : : OH + H_3Op
decCh1->AddProduct(H3O);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(
G4DNAWaterDissociationDisplacer::Ionisation_DissociationDecay);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(4, 1);
// this is a ionized h2O with a hole in its last orbital
water->NewConfigurationWithElectronOccupancy("Ionisation5", *occ);
water->AddDecayChannel("Ionisation5",
decCh1);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(3, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation4", *occ);
water->AddDecayChannel("Ionisation4",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(2, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation3", *occ);
water->AddDecayChannel("Ionisation3",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(1, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation2", *occ);
water->AddDecayChannel("Ionisation2",
new G4MolecularDissociationChannel(*decCh1));
*occ = *(water->GetGroundStateElectronOccupancy());
occ->RemoveElectron(0, 1);
water->NewConfigurationWithElectronOccupancy("Ionisation1", *occ);
water->AddDecayChannel("Ionisation1",
new G4MolecularDissociationChannel(*decCh1));
//////////////////////////////////////////////////////////
// Dissociative Attachment //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("DissociativeAttachment_ch1");
//Decay 1 : OHm + H
decCh1->AddProduct(H2);
decCh1->AddProduct(OHm);
decCh1->AddProduct(OH);
decCh1->SetProbability(1);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
DissociativeAttachment);
*occ = *(water->GetGroundStateElectronOccupancy());
occ->AddElectron(5,1); // H_2O^-
water->NewConfigurationWithElectronOccupancy("DissociativeAttachment_ch1", *occ);
water->AddDecayChannel("DissociativeAttachment_ch1", decCh1);
//////////////////////////////////////////////////////////
// Electron-hole recombination //
//////////////////////////////////////////////////////////
decCh1 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay1");
decCh2 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay2");
decCh3 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay3");
decCh4 = new G4MolecularDissociationChannel("H2Ovib_DissociationDecay4");
//Decay 1 : 2OH + H_2
decCh1->AddProduct(H2);
decCh1->AddProduct(OH);
decCh1->AddProduct(OH);
decCh1->SetProbability(0.1365);
decCh1->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay);
//Decay 2 : OH + H
decCh2->AddProduct(OH);
decCh2->AddProduct(H);
decCh2->SetProbability(0.3575);
decCh2->SetDisplacementType(G4DNAWaterDissociationDisplacer::
A1B1_DissociationDecay);
//Decay 3 : 2H + O(3p)
decCh3->AddProduct(O);
decCh3->AddProduct(H);
decCh3->AddProduct(H);
decCh3->SetProbability(0.156);
decCh3->SetDisplacementType(G4DNAWaterDissociationDisplacer::
B1A1_DissociationDecay2);
//Decay 4 : relaxation
decCh4->SetProbability(0.35);
const auto pH2Ovib = G4H2O::Definition()->NewConfiguration("H2Ovib");
assert(pH2Ovib != nullptr);
water->AddDecayChannel(pH2Ovib, decCh1);
water->AddDecayChannel(pH2Ovib, decCh2);
water->AddDecayChannel(pH2Ovib, decCh3);
water->AddDecayChannel(pH2Ovib, decCh4);
delete occ;
G4ChemDissociationChannels_option1::ConstructDissociationChannels();
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -67,6 +67,7 @@
#include "G4EmProcessSubType.hh"
#include "G4PhysicsListHelper.hh"
#include "G4EmParticleList.hh"
#include "G4EmUtility.hh"
#include "G4MicroElecElastic.hh"
#include "G4MicroElecElasticModel.hh"
@@ -88,6 +89,7 @@
#include "G4ionIonisation.hh"
#include "G4KleinNishinaModel.hh"
#include "G4GammaGeneralProcess.hh"
#include "G4CoulombScattering.hh"
#include "G4eCoulombScatteringModel.hh"
#include "G4WentzelVIModel.hh"
@@ -149,7 +151,7 @@ void G4EmModelActivator::ActivateEmOptions()
const std::vector<G4String>& regnamesPhys = theParameters->RegionsPhysics();
std::size_t nreg = regnamesPhys.size();
if(0 == nreg) { return; }
G4int verbose = theParameters->Verbose() - 1;
G4int verbose = theParameters->Verbose() - 1;
if(verbose > 0) {
G4cout << "### G4EmModelActivator::ActivateEmOptions for " << nreg << " regions"
<< G4endl;
@@ -165,7 +167,8 @@ void G4EmModelActivator::ActivateEmOptions()
G4EmConfigurator* em_config = man->EmConfigurator();
G4VAtomDeexcitation* adeexc = man->AtomDeexcitation();
G4ParticleTable* table = G4ParticleTable::GetParticleTable();
G4VEmModel* mod;
G4VEmModel* mod = nullptr;
G4VEmProcess* proc = nullptr;
// high energy limit for low-energy e+- model of msc
G4double mscEnergyLimit = theParameters->MscEnergyLimit();
@@ -177,12 +180,13 @@ void G4EmModelActivator::ActivateEmOptions()
G4double highEnergy = theParameters->MaxKinEnergy();
for(std::size_t i=0; i<nreg; ++i) {
G4String reg = regnamesPhys[i];
const G4String reg = regnamesPhys[i];
auto region = G4EmUtility::FindRegion(reg);
if(verbose > 0) {
G4cout << i << ". region <" << reg << ">; type <" << typesPhys[i] << "> "
<< G4endl;
G4cout << i << ". region <" << reg << ">; physics type <"
<< typesPhys[i] << "> region ptr: " << region << G4endl;
}
if(baseName == typesPhys[i]) { continue; }
if("G4EmStandard" == typesPhys[i]) {
@@ -205,35 +209,30 @@ void G4EmModelActivator::ActivateEmOptions()
G4UrbanMscModel* msc = new G4UrbanMscModel();
SetMscParameters(elec, msc, typesPhys[i]);
em_config->SetExtraEmModel("e-", "msc", msc, reg);
FindOrAddProcess(elec, "CoulombScat");
em_config->SetExtraEmModel("e-", "CoulombScat", dummy, reg);
proc = FindOrAddProcess(elec, "CoulombScat");
proc->AddEmModel(-1, dummy, region);
msc = new G4UrbanMscModel();
SetMscParameters(posi, msc, typesPhys[i]);
em_config->SetExtraEmModel("e+", "msc", msc, reg);
FindOrAddProcess(posi, "CoulombScat");
em_config->SetExtraEmModel("e+", "CoulombScat", dummy, reg);
proc = FindOrAddProcess(posi, "CoulombScat");
proc->AddEmModel(-1, dummy, region);
msc = new G4UrbanMscModel();
SetMscParameters(prot, msc, typesPhys[i]);
em_config->SetExtraEmModel("proton", "msc", msc, reg);
FindOrAddProcess(prot, "CoulombScat");
em_config->SetExtraEmModel("proton", "CoulombScat", dummy, reg);
proc = FindOrAddProcess(prot, "CoulombScat");
proc->AddEmModel(-1, dummy, region);
theParameters->SetNumberOfBinsPerDecade(20);
if(G4Threading::IsMasterThread()) {
theParameters->SetDeexActiveRegion(reg, true, false, false);
}
theParameters->DefineRegParamForDeex(adeexc);
FindOrAddProcess(phot, "Rayl");
mod = new G4LivermoreRayleighModel();
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
FindOrAddProcess(phot, "phot");
mod = new G4LivermorePhotoElectricModel();
em_config->SetExtraEmModel("gamma", "phot", mod, reg);
FindOrAddProcess(phot, "compt");
mod = new G4KleinNishinaModel();
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
proc = FindOrAddProcess(phot, "Rayl");
proc->AddEmModel(-1, new G4LivermoreRayleighModel(), region);
proc = FindOrAddProcess(phot, "compt");
proc->AddEmModel(-1, new G4KleinNishinaModel(), region);
} else if("G4EmStandard_opt4" == typesPhys[i]) {
G4VMscModel* msc = new G4GoudsmitSaundersonMscModel();
@@ -249,20 +248,15 @@ void G4EmModelActivator::ActivateEmOptions()
}
theParameters->DefineRegParamForDeex(adeexc);
FindOrAddProcess(phot, "Rayl");
mod = new G4LivermoreRayleighModel();
em_config->SetExtraEmModel("gamma", "Rayl", mod, reg);
FindOrAddProcess(phot, "phot");
mod = new G4LivermorePhotoElectricModel();
FindOrAddProcess(phot, "compt");
mod = new G4KleinNishinaModel();
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
proc = FindOrAddProcess(phot, "Rayl");
proc->AddEmModel(-1, new G4LivermoreRayleighModel(), region);
proc = FindOrAddProcess(phot, "compt");
proc->AddEmModel(-1, new G4KleinNishinaModel(), region);
mod = new G4LowEPComptonModel();
mod->SetHighEnergyLimit(20*MeV);
em_config->SetExtraEmModel("gamma", "compt", mod, reg);
FindOrAddProcess(phot, "conv");
mod = new G4BetheHeitler5DModel();
em_config->SetExtraEmModel("gamma", "conv", mod, reg);
proc->AddEmModel(-2, mod, region);
proc = FindOrAddProcess(phot, "conv");
proc->AddEmModel(-1, new G4BetheHeitler5DModel(), region);
} else if("G4EmStandardGS" == typesPhys[i]) {
G4GoudsmitSaundersonMscModel* msc = new G4GoudsmitSaundersonMscModel();
@@ -285,17 +279,31 @@ void G4EmModelActivator::ActivateEmOptions()
}
theParameters->DefineRegParamForDeex(adeexc);
} else if("G4EmStandardSS" == typesPhys[i] &&
baseName != "G4EmStandard_opt3") {
} else if("G4EmStandardSS" == typesPhys[i]) {
G4EmParticleList emList;
for(const auto& particleName : emList.PartNames()) {
for(const auto& particleName : emList.EmChargedPartNames()) {
G4ParticleDefinition* particle = table->FindParticle(particleName);
if(particle && 0.0 != particle->GetPDGCharge()) {
FindOrAddProcess(particle, "CoulombScat");
G4eCoulombScatteringModel* sc = new G4eCoulombScatteringModel();
sc->SetPolarAngleLimit(0.0);
sc->SetLocked(true);
em_config->SetExtraEmModel(particleName, "CoulombScat", sc, reg);
if(nullptr != particle && 0.0 != particle->GetPDGCharge()) {
proc = FindOrAddProcess(particle, "CoulombScat");
if(nullptr != proc) {
proc->AddEmModel(-1, new G4DummyModel(), region);
}
auto pm = particle->GetProcessManager();
proc = new G4CoulombScattering("SingleCoulombScat", false);
pm->AddDiscreteProcess(proc);
proc->SetEmModel(new G4DummyModel());
G4VEmModel* scmod = nullptr;
if(particle->GetPDGMass() > CLHEP::GeV ||
particle->GetParticleType() == "nucleus") {
scmod = new G4IonCoulombScatteringModel();
} else {
scmod = new G4eCoulombScatteringModel(false);
}
scmod->SetPolarAngleLimit(0.0);
scmod->SetLocked(true);
proc->AddEmModel(-1, scmod, region);
// multiple scattering should be disabled
if(particleName == "mu+" || particleName == "mu-") {
em_config->SetExtraEmModel(particleName, "muMsc",
new G4DummyModel(), reg);
@@ -753,24 +761,31 @@ void G4EmModelActivator::SetMscParameters(const G4ParticleDefinition* part,
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
void G4EmModelActivator::FindOrAddProcess(const G4ParticleDefinition* part,
const G4String& name)
G4VEmProcess*
G4EmModelActivator::FindOrAddProcess(const G4ParticleDefinition* part,
const G4String& name)
{
G4ProcessManager* pm = part->GetProcessManager();
G4ProcessVector* pv = pm->GetProcessList();
G4int nproc = pm->GetProcessListLength();
for(G4int i = 0; i<nproc; ++i) {
if(((*pv)[i])->GetProcessName() == name) { return; }
G4VEmProcess* proc = nullptr;
auto pm = part->GetProcessManager();
auto emproc = pm->GetProcessList();
G4int n = (G4int)emproc->size();
for(auto i=0; i<n; ++i) {
auto ptr = (*emproc)[i];
if(part->GetPDGEncoding() == 22 &&
ptr->GetProcessSubType() == fGammaGeneralProcess) {
proc = (static_cast<G4GammaGeneralProcess*>(ptr))->GetEmProcess(name);
} else if(ptr->GetProcessName() == name) {
proc = dynamic_cast<G4VEmProcess*>(ptr);
}
if(nullptr != proc) { return proc; }
}
if(name == "CoulombScat") {
G4CoulombScattering* cs = new G4CoulombScattering();
cs->SetEmModel(new G4DummyModel());
pm->AddDiscreteProcess(cs);
} else if(name == "Rayl") {
if(name == "Rayl") {
G4RayleighScattering* rs = new G4RayleighScattering();
rs->SetEmModel(new G4DummyModel());
pm->AddDiscreteProcess(rs);
return rs;
}
return proc;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
@@ -53,13 +53,22 @@ G4EmParticleList::G4EmParticleList()
"Bc-", "omega_b-","anti_omega_b-", "sigma_b+", "sigma_b-",
"anti_sigma_b+", "anti_sigma_b-", "xi_b-", "anti_xi_b-"
};
}
G4EmParticleList::~G4EmParticleList()
{}
cNames =
{
"e-", "e+", "mu+", "mu-", "pi+",
"pi-", "kaon+", "kaon-", "proton", "anti_proton",
"alpha", "He3", "GenericIon", "deuteron", "triton"
};
}
const std::vector<G4String>& G4EmParticleList::PartNames() const
{
return pNames;
}
const std::vector<G4String>& G4EmParticleList::EmChargedPartNames() const
{
return cNames;
}
@@ -182,11 +182,11 @@ void G4EmStandardPhysicsSS::ConstructProcess()
// e-
particle = G4Electron::Electron();
G4CoulombScattering* ss = new G4CoulombScattering();
G4CoulombScattering* ss = new G4CoulombScattering(false);
if(param->UseMottCorrection()) {
ss->SetEmModel(new G4eDPWACoulombScatteringModel());
} else {
ss->SetEmModel(new G4eCoulombScatteringModel());
ss->SetEmModel(new G4eCoulombScatteringModel(false));
}
ph->RegisterProcess(new G4eIonisation(), particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
@@ -198,11 +198,11 @@ void G4EmStandardPhysicsSS::ConstructProcess()
// e+
particle = G4Positron::Positron();
ss = new G4CoulombScattering();
ss = new G4CoulombScattering(false);
if(param->UseMottCorrection()) {
ss->SetEmModel(new G4eDPWACoulombScatteringModel());
} else {
ss->SetEmModel(new G4eCoulombScatteringModel());
ss->SetEmModel(new G4eCoulombScatteringModel(false));
}
ph->RegisterProcess(new G4eIonisation(), particle);
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
@@ -217,7 +217,8 @@ void G4EmStandardPhysicsSS::ConstructProcess()
ionIoni->SetFluctModel(fluc);
ionIoni->SetEmModel(new G4LindhardSorensenIonModel());
ph->RegisterProcess(ionIoni, particle);
ph->RegisterProcess(new G4CoulombScattering(), particle);
ss = new G4CoulombScattering(false);
ph->RegisterProcess(ss, particle);
// muons, hadrons, ions
G4EmBuilder::ConstructChargedSS(hmsc);
@@ -1,96 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/factory library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_factory
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/biasing/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/constructors/decay/include \
-I$(G4BASE)/physics_lists/constructors/electromagnetic/include \
-I$(G4BASE)/physics_lists/constructors/gamma_lepto_nuclear/include \
-I$(G4BASE)/physics_lists/constructors/hadron_elastic/include \
-I$(G4BASE)/physics_lists/constructors/hadron_inelastic/include \
-I$(G4BASE)/physics_lists/constructors/limiters/include \
-I$(G4BASE)/physics_lists/constructors/ions/include \
-I$(G4BASE)/physics_lists/constructors/stopping/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/processes/biasing/importance/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/optical/include \
-I$(G4BASE)/processes/electromagnetic/highenergy/include \
-I$(G4BASE)/processes/electromagnetic/standard/include \
-I$(G4BASE)/processes/electromagnetic/muons/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/electromagnetic/xrays/include \
-I$(G4BASE)/processes/electromagnetic/lowenergy/include \
-I$(G4BASE)/processes/electromagnetic/dna/management/include \
-I$(G4BASE)/processes/electromagnetic/dna/molecules/management/include \
-I$(G4BASE)/processes/electromagnetic/dna/molecules/types/include \
-I$(G4BASE)/processes/electromagnetic/dna/models/include \
-I$(G4BASE)/processes/electromagnetic/dna/processes/include \
-I$(G4BASE)/processes/electromagnetic/dna/utils/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -5,6 +5,9 @@ which **must** added in reverse chronological order (newest at the top). It must
be used as a substitute for writing good git commit messages!
## 2023-05-15 Alberto Ribon (phys-ctor-fact-V11-01-00)
- Added G4StoppingPhysicsWithINCLXX in G4RegisterPhysicsConstructors .
## 2021-12-10 Ben Morgan (phys-ctor-fact-V11-00-00)
- Change to new Markdown History format
@@ -267,6 +267,9 @@ G4_REFERENCE_PHYSCONSTR_FACTORY(G4StepLimiterPhysics);
//#include "G4StoppingPhysics.hh"
G4_REFERENCE_PHYSCONSTR_FACTORY(G4StoppingPhysics);
//#include "G4StoppingPhysicsWithINCLXX.hh"
G4_REFERENCE_PHYSCONSTR_FACTORY(G4StoppingPhysicsWithINCLXX);
//#include "G4WeightWindowBiasing.hh"
G4_REFERENCE_PHYSCONSTR_FACTORY(G4WeightWindowBiasing);
@@ -1,73 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/electromagnetic library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_glnuclear
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/materials/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/constructors/electromagnetic/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/electromagnetic/highenergy/include \
-I$(G4BASE)/processes/electromagnetic/muons/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/electromagnetic/xrays/include \
-I$(G4BASE)/processes/optical/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/gamma_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include
include $(G4INSTALL)/config/common.gmk
@@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2023-02-12 Vladimir Grichine (phys-ctor-glnuclear-V11-01-00)
- G4EmExtraPhysics - biasing is activated in processes, not XS
## 2022-11-03 Vladimir Grichine (phys-ctor-glnuclear-V11-00-07)
- G4EmExtraPhysics - update for tau-neutrino nucleus processes
@@ -377,7 +377,6 @@ void G4EmExtraPhysics::ConstructProcess()
else
{
theNuEleProcess->SetBiasingFactors(fNuEleCcBias,fNuEleNcBias);
theNuEleTotXsc->SetBiasingFactors(fNuEleCcBias,fNuEleNcBias);
}
theNuEleProcess->AddDataSet(theNuEleTotXsc);
@@ -1,56 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/electromagnetic library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_helastic
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -DG4PROCESSES_EXPORT
ifdef G4LIB_BUILD_EXPAT
CPPFLAGS += -I$(G4BASE)/externals/expat/include
endif
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/physics_lists/constructors/hadron_inelastic/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -6,6 +6,14 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2023-04-13 Alberto Ribon (phys-ctor-helastic-V11-01-00)
- Created new class G4HadronElasticPhysicsHPT, which inherits from
G4HadronElasticPhysicsHP and activates the special treatment of elastic
scattering of thermal neutrons.
- G4HadronElasticPhysicsHP : changed the method ConstructProcess from "final"
to "override", to be able to define the ConstructProcess method for the
derived class G4HadronElasticPhysicsHPT.
## 2022-11-24 Gabriele Cosmo (phys-ctor-helastic-V11-00-03)
- Fixed compilation warnings for implicit type conversions on macOS/XCode 14.1.
@@ -37,6 +37,14 @@
below 20 MeV, NeutronHP elastic is used (for both cross section and
final-state model).
G4HadronElasticPhysicsHPT
-------------------------
As G4HadronElasticPhysicsHP, with the only difference that for neutrons
below 4 eV, a special treatment of elastic scattering is activated.
This special treatment, called Thermal Scattering Law (TSL), is based on
the S(alpha, beta) approach, which relieas on both experimental measurements
and molecular dynamics calculations.
G4HadronElasticPhysicsLEND
--------------------------
As G4HadronElasticPhysics, with the only difference that for neutrons
@@ -51,7 +51,7 @@ public:
// 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 ConstructProcess() final;
void ConstructProcess() override;
G4HadronElasticPhysicsHP(G4HadronElasticPhysicsHP &) = delete;
G4HadronElasticPhysicsHP & operator=(const G4HadronElasticPhysicsHP &right) = delete;
@@ -0,0 +1,61 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronElasticPhysicsHPT
//
// Author: Alberto Ribon (CERN), April 2023
//
// This class inherits from G4HadronElasticPhysicsHP and activates
// the special treatment of elastic scattering of thermal neutrons
// (i.e. with kinetic energy below 4 eV).
// This special treatment, called Thermal Scattering Law (TSL), is based on
// the S(alpha, beta) approach, which relies on both experimental measurements
// and molecular dynamics calculations.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#ifndef G4HadronElasticPhysicsHPT_h
#define G4HadronElasticPhysicsHPT_h 1
#include "G4HadronElasticPhysicsHP.hh"
class G4HadronElasticPhysicsHPT : public G4HadronElasticPhysicsHP {
public:
explicit G4HadronElasticPhysicsHPT( G4int ver = 1 );
virtual ~G4HadronElasticPhysicsHPT() = default;
void ConstructProcess() final;
G4HadronElasticPhysicsHPT( G4HadronElasticPhysicsHPT & ) = delete;
G4HadronElasticPhysicsHPT & operator=( const G4HadronElasticPhysicsHPT &right ) = delete;
};
#endif
@@ -7,6 +7,7 @@ geant4_add_module(G4phys_ctor_helastic
G4HadronDElasticPhysics.hh
G4HadronElasticPhysics.hh
G4HadronElasticPhysicsHP.hh
G4HadronElasticPhysicsHPT.hh
G4HadronElasticPhysicsLEND.hh
G4HadronElasticPhysicsXS.hh
G4HadronHElasticPhysics.hh
@@ -18,6 +19,7 @@ geant4_add_module(G4phys_ctor_helastic
G4HadronDElasticPhysics.cc
G4HadronElasticPhysics.cc
G4HadronElasticPhysicsHP.cc
G4HadronElasticPhysicsHPT.cc
G4HadronElasticPhysicsLEND.cc
G4HadronElasticPhysicsXS.cc
G4HadronHElasticPhysics.cc
@@ -0,0 +1,87 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronElasticPhysicsHPT
//
// Author: Alberto Ribon (CERN), April 2023
//
// This class inherits from G4HadronElasticPhysicsHP and activates
// the special treatment of elastic scattering of thermal neutrons
// (i.e. with kinetic energy below 4 eV).
// This special treatment, called Thermal Scattering Law (TSL), is based on
// the S(alpha, beta) approach, which relies on both experimental measurements
// and molecular dynamics calculations.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4HadronElasticPhysicsHPT.hh"
#include "G4SystemOfUnits.hh"
#include "G4Neutron.hh"
#include "G4ParticleDefinition.hh"
#include "G4HadronicProcess.hh"
#include "G4ParticleHPThermalScattering.hh"
#include "G4ParticleHPThermalScatteringData.hh"
#include "G4HadronicParameters.hh"
#include "G4PhysListUtil.hh"
#include "G4PhysicsConstructorFactory.hh"
G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronElasticPhysicsHPT );
G4HadronElasticPhysicsHPT::G4HadronElasticPhysicsHPT( G4int ver ) : G4HadronElasticPhysicsHP( ver ) {
if ( ver > 1 ) G4cout << "### G4HadronElasticPhysicsHPT: " << GetPhysicsName() << G4endl;
}
void G4HadronElasticPhysicsHPT::ConstructProcess() {
G4HadronElasticPhysicsHP::ConstructProcess();
const G4Neutron* neutron = G4Neutron::Neutron();
G4HadronicProcess* neutronElasticProcess = G4PhysListUtil::FindElasticProcess( neutron );
if ( neutronElasticProcess == nullptr ) {
G4cout << "### " << GetPhysicsName()
<< " WARNING: Fail to add thermal neutron scattering" << G4endl;
return;
}
std::size_t sizeInteractionList = neutronElasticProcess->GetHadronicInteractionList().size();
if ( sizeInteractionList < 1 ) {
G4cout << "### " << GetPhysicsName()
<< " WARNING: Fail to add thermal neutron scattering ! sizeInteractionList="
<< sizeInteractionList << G4endl;
return;
}
neutronElasticProcess->GetHadronicInteractionList()[ sizeInteractionList-1 ]->SetMinEnergy( 4.0*CLHEP::eV );
neutronElasticProcess->RegisterMe( new G4ParticleHPThermalScattering );
neutronElasticProcess->AddDataSet( new G4ParticleHPThermalScatteringData );
if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 1 ) {
G4cout << "### HadronElasticPhysicsHPT is constructed " << G4endl;
}
}
@@ -1,81 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/factory library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_hinelastic
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -DG4PROCESSES_EXPORT
ifdef G4LIB_BUILD_EXPAT
CPPFLAGS += -I$(G4BASE)/externals/expat/include
endif
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/fission/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -4,6 +4,21 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
## 2023-04-19 Alberto Ribon (phys-ctor-hinelastic-V11-01-00)
- Created the new class G4HadronInelasticQBBC_ABLA, which is similar to
G4HadronInelasticQBBC_ABLA, except that, for the final-state of nuclear
inelastic interactions of charged pions and nucleons projectiles,
the ABLA model (instead of the usual Precompound/de-excitation) is utilized
for nuclear de-excitation.
This is meant for testing purposes of the coupling between the hadronic
string models (FTF and QGS) and ABLA (via G4GeneratorPrecompoundInterface),
as well as of the coupling between intra-nuclear cascade models (BERT and BIC)
and ABLA.
In principle, these couplings with ABLA nuclear de-excitation can be
extended to all types of projectiles, and to other reference physics lists,
but, for the time being, in order to minimize code changes or new code,
it is restricted to pion+, pion-, proton and neutron, and only for QBBC.
## 2022-11-11 Alberto Ribon (phys-ctor-hinelastic-V11-00-02)
- G4HadronPhysicsFTFP_BERT, G4HadronPhysicsINCLXX : extension to inelastic
nuclear interactions of light hypernuclei (with either FTFP only or
@@ -35,6 +35,14 @@
- final-state: FTFP for all energies
G4HadronInelasticQBBC_ABLA
--------------------------
Similar to G4HadronInelasticQBBC, with the difference that for the final-state
of nuclear inelastic interactions of pion+, pion-, proton and neutron projectiles
the ABLA model (instead of the usual Precompound/de-excitation) is utilized for
nuclear de-excitation.
G4HadronPhysicsFTFP_BERT
------------------------
Hadron nuclear inelastic processes for all hadrons:
@@ -72,6 +80,7 @@
- cross-section: Galoyan-Uzhinsky-Glauber-Gribov
- final-state: FTFP for all energies
G4HadronPhysicsFTFP_BERT_ATL
----------------------------
Similar to G4HadronPhysicsFTFP_BERT, with the difference that for proton,
@@ -0,0 +1,63 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronInelasticQBBC_ABLA
//
// Author: Alberto Ribon (CERN), April 2023
//
// Similar to the physics list constructor G4HadronInelasticQBBC_ABLA,
// except for the final-state of inelastic interactions of charged pions and
// nucleons in which ABLA nuclear de-excitation is utilized (instead of the
// usual Precompound/de-excitation).
// This is meant for testing purposes of the coupling between the hadronic
// string models (FTF and QGS) and ABLA (via G4GeneratorPrecompoundInterface),
// as well as of the coupling between intra-nuclear cascade models (BERT and BIC)
// and ABLA.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#ifndef G4HadronInelasticQBBC_ABLA_h
#define G4HadronInelasticQBBC_ABLA_h 1
#include "globals.hh"
#include "G4VHadronPhysics.hh"
class G4HadronInelasticQBBC_ABLA : public G4VHadronPhysics {
public:
G4HadronInelasticQBBC_ABLA( G4int ver = 1 );
virtual ~G4HadronInelasticQBBC_ABLA() = default;
void ConstructProcess() override;
G4HadronInelasticQBBC_ABLA( G4HadronInelasticQBBC_ABLA& ) = delete;
G4HadronInelasticQBBC_ABLA& operator=( const G4HadronInelasticQBBC_ABLA& right ) = delete;
};
#endif
@@ -4,6 +4,7 @@
geant4_add_module(G4phys_ctor_hinelastic
PUBLIC_HEADERS
G4HadronInelasticQBBC.hh
G4HadronInelasticQBBC_ABLA.hh
G4HadronPhysicsFTF_BIC.hh
G4HadronPhysicsFTFP_BERT.hh
G4HadronPhysicsFTFP_BERT_HP.hh
@@ -24,6 +25,7 @@ geant4_add_module(G4phys_ctor_hinelastic
G4HadronPhysicsQGSP_BIC_AllHP.hh
SOURCES
G4HadronInelasticQBBC.cc
G4HadronInelasticQBBC_ABLA.cc
G4HadronPhysicsFTF_BIC.cc
G4HadronPhysicsFTFP_BERT.cc
G4HadronPhysicsFTFP_BERT_HP.cc
@@ -57,6 +59,7 @@ geant4_module_link_libraries(G4phys_ctor_hinelastic
G4had_string_diff
G4had_string_frag
G4had_theo_max
G4hadronic_abla
G4hadronic_bert_cascade
G4hadronic_binary
G4hadronic_deex_photon_evaporation
@@ -0,0 +1,202 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: G4HadronInelasticQBBC_ABLA
//
// Author: Alberto Ribon (CERN), April 2023
//
// Similar to the physics list constructor G4HadronInelasticQBBC_ABLA,
// except for the final-state of inelastic interactions of charged pions and
// nucleons in which ABLA nuclear de-excitation is utilized (instead of the
// usual Precompound/de-excitation).
// This is meant for testing purposes of the coupling between the hadronic
// string models (FTF and QGS) and ABLA (via G4GeneratorPrecompoundInterface),
// as well as of the coupling between intra-nuclear cascade models (BERT and BIC)
// and ABLA.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4HadronInelasticQBBC_ABLA.hh"
#include "G4SystemOfUnits.hh"
#include "G4HadronicProcess.hh"
#include "G4HadronInelasticProcess.hh"
#include "G4HadronicInteraction.hh"
#include "G4ParticleDefinition.hh"
#include "G4TheoFSGenerator.hh"
#include "G4FTFModel.hh"
#include "G4ExcitedStringDecay.hh"
#include "G4GeneratorPrecompoundInterface.hh"
#include "G4BGGNucleonInelasticXS.hh"
#include "G4BGGPionInelasticXS.hh"
#include "G4ParticleInelasticXS.hh"
#include "G4NeutronInelasticXS.hh"
#include "G4NeutronGeneralProcess.hh"
#include "G4CrossSectionInelastic.hh"
#include "G4CascadeInterface.hh"
#include "G4BinaryCascade.hh"
#include "G4PreCompoundModel.hh"
#include "G4AblaInterface.hh"
#include "G4HadronicInteractionRegistry.hh"
#include "G4HadronicParameters.hh"
#include "G4HadronicBuilder.hh"
#include "G4HadParticles.hh"
#include "G4HadProcesses.hh"
#include "G4BuilderType.hh"
#include "G4PhysicsConstructorFactory.hh"
G4_DECLARE_PHYSCONSTR_FACTORY( G4HadronInelasticQBBC_ABLA );
G4HadronInelasticQBBC_ABLA::G4HadronInelasticQBBC_ABLA( G4int ver )
: G4VHadronPhysics( "hInelasticQBBC_ABLA" )
{
SetPhysicsType( bHadronInelastic );
auto param = G4HadronicParameters::Instance();
param->SetEnableBCParticles( true );
param->SetEnableNeutronGeneralProcess( true );
param->SetVerboseLevel( ver );
}
void G4HadronInelasticQBBC_ABLA::ConstructProcess() {
G4HadronicParameters* param = G4HadronicParameters::Instance();
G4bool useFactorXS = param->ApplyFactorXS();
G4PhysicsListHelper* ph = G4PhysicsListHelper::GetPhysicsListHelper();
// configure models
const G4double eminFtf = param->GetMinEnergyTransitionFTF_Cascade();
const G4double eminBert = 1.0*CLHEP::GeV;
const G4double emaxBic = 1.5*CLHEP::GeV;
const G4double emaxBert = param->GetMaxEnergyTransitionFTF_Cascade();
const G4double emaxBertPions = 12.0*CLHEP::GeV;
const G4double emax = param->GetMaxEnergy();
if ( G4Threading::IsMasterThread() && param->GetVerboseLevel() > 0 ) {
G4cout << "### HadronInelasticQBBC_ABLA Construct Process:\n"
<< " Emin(FTFP)= " << eminFtf/CLHEP::GeV
<< " GeV; Emax(FTFP)= " << emax/CLHEP::GeV << " GeV\n"
<< " Emin(BERT)= " << eminBert/CLHEP::GeV
<< " GeV; Emax(BERT)= " << emaxBert/CLHEP::GeV
<< " GeV; Emax(BERTpions)= " << emaxBertPions/CLHEP::GeV
<< " GeV;\n" << " Emin(BIC) = 0 GeV; Emax(BIC)= "
<< emaxBic/CLHEP::GeV << " GeV." << G4endl;
}
G4PreCompoundModel* thePreCompound = nullptr;
G4HadronicInteraction* p = G4HadronicInteractionRegistry::Instance()->FindModel( "PRECO" );
thePreCompound = static_cast< G4PreCompoundModel* >( p );
if ( thePreCompound == nullptr ) thePreCompound = new G4PreCompoundModel;
G4AblaInterface* theAblaInterface = nullptr;
G4HadronicInteraction* pAbla = G4HadronicInteractionRegistry::Instance()->FindModel( "ABLAXX" );
theAblaInterface = static_cast< G4AblaInterface* >( pAbla );
if ( theAblaInterface == nullptr ) theAblaInterface = new G4AblaInterface;
auto theFTFP = new G4TheoFSGenerator( "FTFP" );
auto theStringModel = new G4FTFModel;
theStringModel->SetFragmentationModel( new G4ExcitedStringDecay );
theFTFP->SetHighEnergyGenerator( theStringModel );
// theFTFP->SetTransport( new G4GeneratorPrecompoundInterface );
theFTFP->SetTransport( new G4GeneratorPrecompoundInterface( theAblaInterface ) );
theFTFP->SetMinEnergy( eminFtf );
theFTFP->SetMaxEnergy( emax );
auto theBERT = new G4CascadeInterface;
theBERT->SetMinEnergy( eminBert );
theBERT->SetMaxEnergy( emaxBert );
// theBERT->usePreCompoundDeexcitation();
theBERT->useAblaDeexcitation();
auto theBERT1 = new G4CascadeInterface;
theBERT1->SetMinEnergy( eminBert );
theBERT1->SetMaxEnergy( emaxBertPions );
// theBERT1->usePreCompoundDeexcitation();
theBERT1->useAblaDeexcitation();
// auto theBIC = new G4BinaryCascade( thePreCompound );
auto theBIC = new G4BinaryCascade( theAblaInterface );
theBIC->SetMaxEnergy( emaxBic );
// p
G4ParticleDefinition* particle = G4Proton::Proton();
G4HadronicProcess* hp =
new G4HadronInelasticProcess( particle->GetParticleName() + "Inelastic", particle );
hp->AddDataSet( new G4ParticleInelasticXS( particle ) );
hp->RegisterMe( theFTFP );
hp->RegisterMe( theBERT );
hp->RegisterMe( theBIC );
ph->RegisterProcess( hp, particle );
if ( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorNucleonInelastic() );
// n
particle = G4Neutron::Neutron();
G4HadronicProcess* ni = new G4HadronInelasticProcess( "neutronInelastic", particle );
ni->RegisterMe( theFTFP );
ni->RegisterMe( theBERT );
ni->RegisterMe( theBIC );
G4HadProcesses::BuildNeutronInelasticAndCapture( ni );
// pi+
particle = G4PionPlus::PionPlus();
hp = new G4HadronInelasticProcess( particle->GetParticleName() + "Inelastic", particle );
hp->AddDataSet( new G4BGGPionInelasticXS( particle ) );
hp->RegisterMe( theFTFP );
hp->RegisterMe( theBERT1 );
hp->RegisterMe( theBIC );
ph->RegisterProcess( hp, particle );
if ( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorPionInelastic() );
// pi-
particle = G4PionMinus::PionMinus();
hp = new G4HadronInelasticProcess( particle->GetParticleName() + "Inelastic", particle );
hp->AddDataSet( new G4BGGPionInelasticXS( particle ) );
hp->RegisterMe( theFTFP );
hp->RegisterMe( theBERT1 );
hp->RegisterMe( theBIC );
ph->RegisterProcess( hp, particle );
if ( useFactorXS ) hp->MultiplyCrossSectionBy( param->XSFactorPionInelastic() );
// kaons
G4HadronicBuilder::BuildKaonsFTFP_BERT();
// high energy particles
if ( emax > param->EnergyThresholdForHeavyHadrons() ) {
// pbar, nbar, anti light ions
G4HadronicBuilder::BuildAntiLightIonsFTFP();
// hyperons
G4HadronicBuilder::BuildHyperonsFTFP_BERT();
// b-, c- baryons and mesons
if ( param->EnableBCParticles() ) G4HadronicBuilder::BuildBCHadronsFTFP_BERT();
}
}
@@ -1,74 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/factory library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_ions
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -1,81 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/factory library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_limiters
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -DG4PROCESSES_EXPORT
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/geometry/biasing/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/scoring/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/biasing/generic/include \
-I$(G4BASE)/processes/biasing/importance/include \
-I$(G4BASE)/processes/parameterisation/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -1,74 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/constructors/factory library.
# Gunter Folger 10-Jan-2012.
# ---------------------------------------------------------------------------
name := G4phys_ctor_stopping
ifndef G4INSTALL
G4INSTALL = ../../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPNumerics/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/qmd/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
@@ -5,6 +5,11 @@ which **must** added in reverse chronological order (newest at the top). It must
be used as a substitute for writing good git commit messages!
## 2023-05-15 Alberto Ribon (phys-ctor-stopping-V11-01-00)
- G4StoppingPhysicsWithINCLXX : new class, similar to G4StoppingPhysics,
with the only difference that the INCLXX model (instead of FTFP) is
utilized for the antiproton annihilation at rest.
## 2021-12-10 Ben Morgan (phys-ctor-stopping-V11-00-00)
- Change to new Markdown History format
@@ -17,3 +17,7 @@
The same as G4StoppingPhysics, except that for anti-proton and anti-neutron
annihilation at rest it uses Fritiof coupled with Binary Cascade.
G4StoppingPhysicsWithINCLXX
---------------------------
The same as G4StoppingPhysics, except that for anti-proton annihilation
at rest it uses the INCLXX model.
@@ -0,0 +1,77 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: G4StoppingPhysicsWithINCLXX
//
// Author: Alberto Ribon
//
// Date: May 2023
//
// Modified:
//
// Class Description:
//
// This class provides the nuclear capture at rest of negatively charged
// particles, using: Bertini for pi-, K-, Sigma-, Xi-, and Omega-;
// INCLXX for anti-proton;
// Fritiof/Precompound for anti-neutron, anti-lambda,
// anti-sigma0, anti-sigma+, anti-xi0 and anti-nuclei;
// another model for mu-.
//
//----------------------------------------------------------------------------
#ifndef G4StoppingPhysicsWithINCLXX_h
#define G4StoppingPhysicsWithINCLXX_h 1
#include "globals.hh"
#include "G4VPhysicsConstructor.hh"
class G4StoppingPhysicsWithINCLXX : public G4VPhysicsConstructor {
public:
G4StoppingPhysicsWithINCLXX( G4int ver = 1 );
G4StoppingPhysicsWithINCLXX( const G4String& name, G4int ver = 1,
G4bool UseMuonMinusCapture = true );
~G4StoppingPhysicsWithINCLXX() override;
// This method will be invoked in the Construct() method.
// each particle type will be instantiated
virtual void ConstructParticle() override;
// 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() override;
void SetMuonMinusCapture(G4bool val) { useMuonMinusCapture = val; };
private:
G4int verbose;
G4bool useMuonMinusCapture;
};
#endif
@@ -5,9 +5,11 @@ geant4_add_module(G4phys_ctor_stopping
PUBLIC_HEADERS
G4StoppingPhysics.hh
G4StoppingPhysicsFritiofWithBinaryCascade.hh
G4StoppingPhysicsWithINCLXX.hh
SOURCES
G4StoppingPhysics.cc
G4StoppingPhysicsFritiofWithBinaryCascade.cc)
G4StoppingPhysicsFritiofWithBinaryCascade.cc
G4StoppingPhysicsWithINCLXX.cc)
geant4_module_link_libraries(G4phys_ctor_stopping
PUBLIC
@@ -0,0 +1,177 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: G4StoppingPhysicsWithINCLXX
//
// Author: Alberto Ribon
//
// Date: May 2023
//
// Modified:
//
//----------------------------------------------------------------------------
#include "G4StoppingPhysicsWithINCLXX.hh"
#include "G4SystemOfUnits.hh"
#include "G4HadronicAbsorptionBertini.hh"
#include "G4HadronicAbsorptionFritiof.hh"
#include "G4HadronicAbsorptionINCLXX.hh"
#include "G4MuonMinusCapture.hh"
#include "G4ParticleDefinition.hh"
#include "G4ProcessManager.hh"
#include "G4LeptonConstructor.hh"
#include "G4MesonConstructor.hh"
#include "G4BaryonConstructor.hh"
#include "G4MuonMinus.hh"
#include "G4PionMinus.hh"
#include "G4BuilderType.hh"
// factory
#include "G4PhysicsConstructorFactory.hh"
//
G4_DECLARE_PHYSCONSTR_FACTORY(G4StoppingPhysicsWithINCLXX);
G4StoppingPhysicsWithINCLXX::G4StoppingPhysicsWithINCLXX( G4int ver ) :
G4StoppingPhysicsWithINCLXX( "stopping", ver ) {}
G4StoppingPhysicsWithINCLXX::G4StoppingPhysicsWithINCLXX( const G4String& name, G4int ver,
G4bool useMuCapture ) :
G4VPhysicsConstructor( name ),
verbose( ver ),
useMuonMinusCapture( useMuCapture )
{
SetPhysicsType( bStopping );
if ( verbose > 1 ) G4cout << "### G4StoppingPhysicsWithINCLXX" << G4endl;
}
G4StoppingPhysicsWithINCLXX::~G4StoppingPhysicsWithINCLXX() {}
void G4StoppingPhysicsWithINCLXX::ConstructParticle() {
// G4cout << "G4StoppingPhysicsWithINCLXX::ConstructParticle" << G4endl;
G4LeptonConstructor pLeptonConstructor;
pLeptonConstructor.ConstructParticle();
G4MesonConstructor pMesonConstructor;
pMesonConstructor.ConstructParticle();
G4BaryonConstructor pBaryonConstructor;
pBaryonConstructor.ConstructParticle();
}
void G4StoppingPhysicsWithINCLXX::ConstructProcess() {
if ( verbose > 1 ) G4cout << "### G4StoppingPhysicsWithINCLXX::ConstructProcess " << G4endl;
G4MuonMinusCapture* muProcess = nullptr;
if ( useMuonMinusCapture ) muProcess = new G4MuonMinusCapture;
G4HadronicAbsorptionBertini* hBertiniProcess = new G4HadronicAbsorptionBertini;
G4HadronicAbsorptionFritiof* hFritiofProcess = new G4HadronicAbsorptionFritiof;
G4HadronicAbsorptionINCLXX* hINCLXXProcess = new G4HadronicAbsorptionINCLXX;
const G4double mThreshold = 130.0*MeV;
// Add Stopping Process
G4ParticleDefinition* particle = nullptr;
G4ProcessManager* pmanager = nullptr;
auto myParticleIterator = GetParticleIterator();
myParticleIterator->reset();
while ( (*myParticleIterator)() ) {
particle = myParticleIterator->value();
pmanager = particle->GetProcessManager();
if ( useMuonMinusCapture && particle == G4MuonMinus::MuonMinus() ) {
pmanager->AddRestProcess( muProcess );
if ( verbose > 1 ) {
G4cout << "### G4StoppingPhysicsWithINCLXX added G4MuonMinusCapture for "
<< particle->GetParticleName() << G4endl;
}
}
if ( particle->GetPDGCharge() <= 0.0 &&
particle->GetPDGMass() > mThreshold &&
! particle->IsShortLived() ) {
// Use Fritiof/Precompound for: anti-neutron, anti-lambda,
// anti-sigma0, anti-sigma+, anti-xi0 and anti-nuclei.
if ( particle == G4AntiNeutron::Definition() ||
particle == G4AntiLambda::Definition() ||
particle == G4AntiSigmaZero::Definition() ||
particle == G4AntiSigmaPlus::Definition() ||
particle == G4AntiXiZero::Definition() ||
particle->GetBaryonNumber() < -1 ) { // Anti-nuclei
if ( hFritiofProcess->IsApplicable( *particle ) ) {
pmanager->AddRestProcess( hFritiofProcess );
if ( verbose > 1 ) {
G4cout << "### G4HadronicAbsorptionFritiof added for "
<< particle->GetParticleName() << G4endl;
}
}
// Use INCLXX/Precompound for antiproton
} else if ( particle == G4AntiProton::Definition() ) {
if ( hINCLXXProcess->IsApplicable( *particle ) ) {
pmanager->AddRestProcess( hINCLXXProcess );
if ( verbose > 1 ) {
G4cout << "### G4HadronicAbsorptionINCLXX added for "
<< particle->GetParticleName() << G4endl;
}
}
// Use Bertini for pi-, K-, Sigma-, Xi-, and Omega-
} else if ( particle == G4PionMinus::Definition() ||
particle == G4KaonMinus::Definition() ||
particle == G4SigmaMinus::Definition() ||
particle == G4XiMinus::Definition() ||
particle == G4OmegaMinus::Definition() ) {
if ( hBertiniProcess->IsApplicable( *particle ) ) {
pmanager->AddRestProcess( hBertiniProcess );
if ( verbose > 1 ) {
G4cout << "### G4HadronicAbsorptionBertini added for "
<< particle->GetParticleName() << G4endl;
}
}
} else {
if ( verbose > 1 ) {
G4cout << "WARNING in G4StoppingPhysicsWithINCLXX::ConstructProcess: \
not able to deal with nuclear stopping of "
<< particle->GetParticleName() << G4endl;
}
}
}
} // end of while loop
}
-99
View File
@@ -1,99 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/lists library. Gunter Folger 25-Oct-2006.
# ---------------------------------------------------------------------------
name := G4phys_lists
ifndef G4INSTALL
G4INSTALL = ../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -DG4PROCESSES_EXPORT
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/volumes/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/geometry/magneticfield/include \
-I$(G4BASE)/geometry/navigation/include \
-I$(G4BASE)/intercoms/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/event/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/run/include \
-I$(G4BASE)/tracking/include \
-I$(G4BASE)/digits_hits/hits/include \
-I$(G4BASE)/digits_hits/digits/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/constructors/decay/include \
-I$(G4BASE)/physics_lists/constructors/electromagnetic/include \
-I$(G4BASE)/physics_lists/constructors/factory/include \
-I$(G4BASE)/physics_lists/constructors/gamma_lepto_nuclear/include \
-I$(G4BASE)/physics_lists/constructors/hadron_elastic/include \
-I$(G4BASE)/physics_lists/constructors/hadron_inelastic/include \
-I$(G4BASE)/physics_lists/constructors/ions/include \
-I$(G4BASE)/physics_lists/constructors/limiters/include \
-I$(G4BASE)/physics_lists/constructors/stopping/include \
-I$(G4BASE)/physics_lists/util/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/processes/decay/include \
-I$(G4BASE)/processes/cuts/include \
-I$(G4BASE)/processes/optical/include \
-I$(G4BASE)/processes/transportation/include \
-I$(G4BASE)/processes/electromagnetic/dna/include \
-I$(G4BASE)/processes/electromagnetic/lowenergy/include \
-I$(G4BASE)/processes/electromagnetic/highenergy/include \
-I$(G4BASE)/processes/electromagnetic/standard/include \
-I$(G4BASE)/processes/electromagnetic/muons/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/electromagnetic/xrays/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/stopping/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/physics_lists/builders/include \
-I$(G4BASE)/physics_lists/constructors/limiters/include \
-I$(G4BASE)/processes/hadronic/models/binary_cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/cascade/include \
-I$(G4BASE)/processes/hadronic/models/cascade/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/cascade/utils/include \
-I$(G4BASE)/processes/hadronic/models/coherent_elastic/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fermi_breakup/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/fission/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/gem_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/handler/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/multifragmentation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/util/include \
-I$(G4BASE)/processes/hadronic/models/im_r_matrix/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/utils/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/incl_physics/include \
-I$(G4BASE)/processes/hadronic/models/inclxx/interface/include \
-I$(G4BASE)/processes/hadronic/models/isotope_production/include \
-I$(G4BASE)/processes/hadronic/models/lend/include \
-I$(G4BASE)/processes/hadronic/models/lepto_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/particle_hp/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/hadronization/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/management/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/qgsm/include \
-I$(G4BASE)/processes/hadronic/models/photolepton_hadron/muon_nuclear/include \
-I$(G4BASE)/processes/hadronic/models/pre_equilibrium/exciton_model/include \
-I$(G4BASE)/processes/hadronic/models/radioactive_decay/include \
-I$(G4BASE)/processes/hadronic/models/theo_high_energy/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/materials/include
include $(G4INSTALL)/config/common.gmk
+39
View File
@@ -4,6 +4,45 @@ See `CONTRIBUTING.rst` for details of **required** info/format for each entry,
which **must** added in reverse chronological order (newest at the top). It must **not**
be used as a substitute for writing good git commit messages!
## 2023-05-15 Alberto Ribon (phys-lists-V11-01-03)
- Use the new class G4StoppingPhysicsWithINCLXX (instead of G4StoppingPhysics)
in INCLXXPhysicsListHelper : all the INCLXX-based physics lists use INCLXX
for the antiproton annihilation at rest.
## 2023-05-10 Alberto Ribon (phys-lists-V11-01-02)
- G4PhysListFactory : introduced the new physics list names `Shielding_HP` and
`ShieldingM_HP` as alias of, respectively, `Shielding` and `ShieldingM`;
replaced `Shielding_T` and `ShieldingM_T` with, respectively, `Shielding_HPT`
and `ShieldingM_HPT`.
These new aliases allow to have a consistent notation `_HPT` for all the
HP-based physics lists when the special elastic scattering treatment of
thermal neutrons is enabled.
- Shielding : inform the user that the new physics list names (to be used
with the physics list factory) `Shielding_HP` and `ShieldingM_HP` are
equivalent to, respectively, `Shielding` and `ShieldingM`.
## 2023-04-19 Alberto Ribon (phys-lists-V11-01-01)
- Created the new class QBBC_ABLA, which is similar to QBBC, except that for
hadron inelastic the constructor G4HadronInelasticQBBC_ABLA is used
(instead of G4HadronInelasticQBBC): this means that the physics list
QBBC_ABLA behaves as QBBC, with the only difference that for the final-state
of nuclear inelastic interactions of charged pions and nucleons projectiles,
the ABLA model (instead of the usual Precompound/de-excitation) is utilized
for nuclear de-excitation.
## 2023-04-13 Alberto Ribon (phys-lists-V11-01-00)
- Created the new class QGSP_BIC_HPT, which is similar to QGSP_BIC_HP, but with
special treatment of elastic scattering of thermal neutrons activated.
- G4PhysListFactory : added 6 new physics lists, corresponding to "HPT" variants
(i.e. with special treatment of elastic scattering of thermal neutrons) of
physics lists with "HP" already present (FTFP_BERT_HPT, QGSP_BERT_HPT,
FTFP_INCLXX_HPT, QGSP_INCLXX_HPT, QGSP_BIC_HPT, QGSP_BIC_AllHPT,
Shielding_T, ShieldingM_T). Of these, only one (QGSP_BIC_HPT) corresponds
to a concrete new physics list, whereas the others are obtained from the
"HP" physics lists by adding the physics constructor G4ThermalNeutrons.
- G4PhysListFactoryMessenger : added the new UI command
"/physics_lists/factory/addThermal" to enable the special treatment of
elastic scattering of thermal neutrons for HP-based physics lists.
## 2021-12-10 Ben Morgan (phys-lists-V11-00-00)
- Change to new Markdown History format
@@ -28,11 +28,7 @@
//
// ClassName: G4PhysListFactoryMessenger
//
// Author: 2002 J.P. Wellisch
//
// Modified:
// 09.11.2005 V.Ivanchenko edit to provide a standard
// 19.06.2006 V.Ivanchenko add mu-nuclear process
// Author: 2017 V.Ivanchenko
//
//----------------------------------------------------------------------------
//
@@ -59,6 +55,7 @@ private:
G4VModularPhysicsList* thePhysList;
G4UIcommand* theRadDecay;
G4UIcommand* theOptical;
G4UIcommand* theThermal;
G4UIdirectory* theDir;
};
@@ -52,6 +52,7 @@
#include "G4EmExtraPhysics.hh"
#include "G4IonINCLXXPhysics.hh"
#include "G4StoppingPhysics.hh"
#include "G4StoppingPhysicsWithINCLXX.hh"
#include "G4HadronElasticPhysics.hh"
#include "G4HadronElasticPhysicsHP.hh"
#include "G4NeutronTrackingCut.hh"
@@ -99,7 +100,7 @@ template<class T, bool withNeutronHP, bool withFTFP> TINCLXXPhysicsListHelper<T,
this->RegisterPhysics( new G4HadronPhysicsINCLXX(G4String(1,static_cast<char>(ver)),true,withNeutronHP,withFTFP));
// Stopping Physics
this->RegisterPhysics( new G4StoppingPhysics(ver) );
this->RegisterPhysics( new G4StoppingPhysicsWithINCLXX(ver) );
// Ion Physics
this->RegisterPhysics( new G4IonINCLXXPhysics(ver));
@@ -0,0 +1,60 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: QBBC_ABLA
//
// Author: Alberto Ribon (CERN), April 2023
//
// The new, experimental physics list QBBC_ABLA is similar to the reference
// physics list QBBC, except that for hadron inelastic the physics constructor
// G4HadronInelasticQBBC_ABLA is used (instead of G4HadronInelasticQBBC):
// in practice, QBBC_ABLA behaves as QBBC, with the only difference that for
// the final-state of nuclear inelastic interactions of charged pions and
// nucleons projectiles, the ABLA model (instead of the usual
// Precompound/de-excitation) is utilized for nuclear de-excitation.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#ifndef QBBC_ABLA_h
#define QBBC_ABLA_h 1
#include "globals.hh"
#include "G4VModularPhysicsList.hh"
class QBBC_ABLA : public G4VModularPhysicsList {
public:
explicit QBBC_ABLA( G4int ver = 1, const G4String& type = "QBBC_ABLA" );
virtual ~QBBC_ABLA() = default;
QBBC_ABLA( const QBBC_ABLA& ) = delete;
QBBC_ABLA& operator=( const QBBC_ABLA& right ) = delete;
};
#endif
@@ -0,0 +1,58 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: QGSP_BIC_HPT
//
// Author: Alberto Ribon (CERN), April 2023
//
// Similar to QGSP_BIC_HP, with the special treatment of elastic scattering
// of thermal neutrons (i.e. with kinetic energy below 4 eV) activated.
// This special treatment, called Thermal Scattering Law (TSL), is based on
// the S(alpha, beta) approach, which relies on both experimental measurements
// and molecular dynamics calculations.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#ifndef QGSP_BIC_HPT_h
#define QGSP_BIC_HPT_h 1
#include "globals.hh"
#include "G4VModularPhysicsList.hh"
class QGSP_BIC_HPT : public G4VModularPhysicsList {
public:
QGSP_BIC_HPT( G4int ver = 1 );
virtual ~QGSP_BIC_HPT() = default;
QGSP_BIC_HPT( const QGSP_BIC_HPT &) = delete;
QGSP_BIC_HPT & operator=( const QGSP_BIC_HPT &right ) = delete;
};
#endif
+4
View File
@@ -16,11 +16,13 @@ geant4_add_module(G4phys_lists
LBE.hh
NuBeam.hh
QBBC.hh
QBBC_ABLA.hh
QGS_BIC.hh
QGSP_BERT.hh
QGSP_BERT_HP.hh
QGSP_BIC.hh
QGSP_BIC_HP.hh
QGSP_BIC_HPT.hh
QGSP_BIC_AllHP.hh
QGSP_FTFP_BERT.hh
INCLXXPhysicsListHelper.hh
@@ -49,12 +51,14 @@ geant4_add_module(G4phys_lists
LBE.cc
NuBeam.cc
QBBC.cc
QBBC_ABLA.cc
QGS_BIC.cc
QGSP_BERT.cc
QGSP_BERT_HP.cc
QGSP_BIC_AllHP.cc
QGSP_BIC.cc
QGSP_BIC_HP.cc
QGSP_BIC_HPT.cc
QGSP_FTFP_BERT.cc
Shielding.cc)
@@ -32,6 +32,7 @@
//
// Modified:
//
// 2023.04.12 A.Ribon added _HPT variants (i.e. HP + thermal scattering)
// 2014.08.05 K.L.Genser used provision for Hadronic Physics Variant M in
// Shielding for ShieldingM
//
@@ -53,6 +54,7 @@
#include "QGSP_BERT_HP.hh"
#include "QGSP_BIC.hh"
#include "QGSP_BIC_HP.hh"
#include "QGSP_BIC_HPT.hh"
#include "QGSP_BIC_AllHP.hh"
#include "QGSP_FTFP_BERT.hh"
#include "QGS_BIC.hh"
@@ -61,6 +63,7 @@
#include "Shielding.hh"
#include "ShieldingLEND.hh"
#include "NuBeam.hh"
#include "G4ThermalNeutrons.hh"
#include "G4EmStandardPhysics.hh"
#include "G4EmStandardPhysics_option1.hh"
@@ -79,13 +82,16 @@
G4PhysListFactory::G4PhysListFactory(G4int ver)
: defName("FTFP_BERT"),verbose(ver),theMessenger(nullptr)
{
nlists_hadr = 23;
G4String ss[23] = {
nlists_hadr = 33;
G4String ss[33] = {
"FTFP_BERT","FTFP_BERT_TRV","FTFP_BERT_ATL","FTFP_BERT_HP","FTFQGSP_BERT",
"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",
"Shielding","ShieldingLEND","ShieldingM","NuBeam"};
"Shielding","ShieldingLEND","ShieldingM","NuBeam",
"Shielding_HP","ShieldingM_HP",
"FTFP_BERT_HPT", "FTFP_INCLXX_HPT", "QGSP_BERT_HPT", "QGSP_BIC_HPT",
"QGSP_BIC_AllHPT", "QGSP_INCLXX_HPT", "Shielding_HPT", "ShieldingM_HPT" };
for(size_t i=0; i<nlists_hadr; ++i) {
listnames_hadr.push_back(ss[i]);
}
@@ -177,6 +183,23 @@ G4PhysListFactory::GetReferencePhysList(const G4String& name)
else if(had_name == "ShieldingLEND") {p = new ShieldingLEND(verbose);}
else if(had_name == "ShieldingM") {p = new Shielding(verbose,"HP","M");}
else if(had_name == "NuBeam") {p = new NuBeam(verbose);}
else if(had_name == "Shielding_HP") {p = new Shielding(verbose);}
else if(had_name == "ShieldingM_HP") {p = new Shielding(verbose,"HP","M");}
else if(had_name == "FTFP_BERT_HPT") {p = new FTFP_BERT_HP(verbose);
p->RegisterPhysics(new G4ThermalNeutrons);}
else if(had_name == "FTFP_INCLXX_HPT"){p = new FTFP_INCLXX_HP(verbose);
p->RegisterPhysics(new G4ThermalNeutrons);}
else if(had_name == "QGSP_BERT_HPT") {p = new QGSP_BERT_HP(verbose);
p->RegisterPhysics(new G4ThermalNeutrons);}
else if(had_name == "QGSP_BIC_HPT") {p = new QGSP_BIC_HPT(verbose);}
else if(had_name == "QGSP_BIC_AllHPT"){p = new QGSP_BIC_AllHP(verbose);
p->RegisterPhysics(new G4ThermalNeutrons);}
else if(had_name == "QGSP_INCLXX_HPT"){p = new QGSP_INCLXX_HP(verbose);
p->RegisterPhysics(new G4ThermalNeutrons);}
else if(had_name == "Shielding_HPT") {p = new Shielding(verbose);
p->RegisterPhysics(new G4ThermalNeutrons);}
else if(had_name == "ShieldingM_HPT") {p = new Shielding(verbose,"HP","M");
p->RegisterPhysics(new G4ThermalNeutrons);}
else {
p = new FTFP_BERT(verbose);
G4ExceptionDescription ed;
@@ -37,6 +37,8 @@
#include "G4VModularPhysicsList.hh"
#include "G4RadioactiveDecayPhysics.hh"
#include "G4OpticalPhysics.hh"
#include "G4ThermalNeutrons.hh"
G4PhysListFactoryMessenger::G4PhysListFactoryMessenger(G4VModularPhysicsList* pl)
{
@@ -53,10 +55,16 @@ G4PhysListFactoryMessenger::G4PhysListFactoryMessenger(G4VModularPhysicsList* pl
theOptical = new G4UIcommand("/physics_lists/factory/addOptical",this);
theOptical->SetGuidance("Enable optical physics.");
theOptical->AvailableForStates(G4State_PreInit);
theThermal = new G4UIcommand("/physics_lists/factory/addThermal",this);
theThermal->SetGuidance("Enable special elastic scattering of thermal neutrons (Ekin < 4 eV).");
theThermal->SetGuidance("Important note: to be used only with HP-based physics lists!");
theThermal->AvailableForStates(G4State_PreInit);
}
G4PhysListFactoryMessenger::~G4PhysListFactoryMessenger()
{
delete theThermal;
delete theOptical;
delete theRadDecay;
delete theDir;
@@ -69,5 +77,7 @@ void G4PhysListFactoryMessenger::SetNewValue(G4UIcommand* aComm, G4String)
thePhysList->RegisterPhysics(new G4RadioactiveDecayPhysics(ver));
} else if(aComm == theOptical) {
thePhysList->RegisterPhysics(new G4OpticalPhysics(ver));
} else if(aComm == theThermal) {
thePhysList->RegisterPhysics(new G4ThermalNeutrons(ver));
}
}
@@ -0,0 +1,74 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: QBBC_ABLA
//
// Author: Alberto Ribon (CERN), April 2023
//
// The new, experimental physics list QBBC_ABLA is similar to the reference
// physics list QBBC, except that for hadron inelastic the physics constructor
// G4HadronInelasticQBBC_ABLA is used (instead of G4HadronInelasticQBBC):
// in practice, QBBC_ABLA behaves as QBBC, with the only difference that for
// the final-state of nuclear inelastic interactions of charged pions and
// nucleons projectiles, the ABLA model (instead of the usual
// Precompound/de-excitation) is utilized for nuclear de-excitation.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "QBBC_ABLA.hh"
#include "globals.hh"
#include "G4PhysicalConstants.hh"
#include "G4SystemOfUnits.hh"
#include "G4DecayPhysics.hh"
#include "G4EmStandardPhysics.hh"
#include "G4EmExtraPhysics.hh"
#include "G4StoppingPhysics.hh"
#include "G4HadronInelasticQBBC_ABLA.hh"
#include "G4HadronElasticPhysicsXS.hh"
#include "G4IonPhysicsXS.hh"
#include "G4IonElasticPhysics.hh"
#include "G4NeutronTrackingCut.hh"
QBBC_ABLA::QBBC_ABLA( G4int ver, const G4String& ) {
if ( ver > 0 ) G4cout << "<<< Experimental Reference Physics List QBBC_ABLA " << G4endl;
defaultCutValue = 0.7*CLHEP::mm;
SetVerboseLevel( ver );
RegisterPhysics( new G4EmStandardPhysics(ver) );
RegisterPhysics( new G4EmExtraPhysics(ver) );
RegisterPhysics( new G4DecayPhysics(ver) );
RegisterPhysics( new G4HadronElasticPhysicsXS(ver) );
RegisterPhysics( new G4StoppingPhysics(ver) );
RegisterPhysics( new G4IonPhysicsXS(ver) );
RegisterPhysics( new G4IonElasticPhysics(ver) );
RegisterPhysics( new G4HadronInelasticQBBC_ABLA(ver) );
RegisterPhysics( new G4NeutronTrackingCut(ver) );
}
@@ -0,0 +1,86 @@
//
// ********************************************************************
// * 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. *
// ********************************************************************
//
//
//---------------------------------------------------------------------------
//
// ClassName: QGSP_BIC_HPT
//
// Author: Alberto Ribon (CERN), April 2023
//
// Similar to QGSP_BIC_HP, with the special treatment of elastic scattering
// of thermal neutrons (i.e. with kinetic energy below 4 eV) activated.
// This special treatment, called Thermal Scattering Law (TSL), is based on
// the S(alpha, beta) approach, which relies on both experimental measurements
// and molecular dynamics calculations.
//
// Modified:
//
//----------------------------------------------------------------------------
//
#include "G4DecayPhysics.hh"
#include "G4RadioactiveDecayPhysics.hh"
#include "G4EmStandardPhysics_option4.hh"
#include "G4EmExtraPhysics.hh"
#include "G4IonPhysics.hh"
#include "G4IonElasticPhysics.hh"
#include "G4StoppingPhysics.hh"
#include "G4HadronElasticPhysicsHPT.hh"
#include "QGSP_BIC_HPT.hh"
#include "G4HadronPhysicsQGSP_BIC_HP.hh"
QGSP_BIC_HPT::QGSP_BIC_HPT( G4int ver ) {
if ( ver > 0 ) {
G4cout << "<<< Geant4 Physics List simulation engine: QGSP_BIC_HPT" << G4endl << G4endl;
}
defaultCutValue = 0.7*CLHEP::mm;
SetCutValue( 0.0, "proton" );
SetVerboseLevel( ver );
// EM Physics
RegisterPhysics( new G4EmStandardPhysics_option4(ver) );
// Synchroton Radiation & GN Physics
RegisterPhysics( new G4EmExtraPhysics(ver) );
// Decays
RegisterPhysics( new G4DecayPhysics(ver) );
RegisterPhysics( new G4RadioactiveDecayPhysics(ver) );
// Hadron Elastic scattering
RegisterPhysics( new G4HadronElasticPhysicsHPT(ver) );
// Hadron Physics
RegisterPhysics( new G4HadronPhysicsQGSP_BIC_HP(ver) );
// Stopping Physics
RegisterPhysics( new G4StoppingPhysics(ver) );
// Ion Physics
RegisterPhysics( new G4IonElasticPhysics(ver) );
RegisterPhysics( new G4IonPhysics(ver) );
}
+5 -1
View File
@@ -82,8 +82,12 @@ Shielding::Shielding(G4int verbose, const G4String& n_model,
if(verbose > 0) {
G4cout << "<<< Geant4 Physics List simulation engine: Shielding"
<< HadrPhysVariant << G4endl;
if ( LEN_model=="LEND" )
if ( LEN_model=="LEND" ) {
G4cout << "<<< LEND will be used for low energy neutron and gamma projectiles" << G4endl;
} else {
G4cout << "<<< (Note that Shielding" << HadrPhysVariant << " and Shielding"
<< HadrPhysVariant << "_HP are equivalent!)" << G4endl;
}
}
defaultCutValue = 0.7*CLHEP::mm;
SetCutValue(0, "proton");
-39
View File
@@ -1,39 +0,0 @@
# ---------------------------------------------------------------------------
# GNUmakefile for physics_lists/lists library. Gunter Folger 25-Oct-2006.
# ---------------------------------------------------------------------------
name := G4physlist_util
ifndef G4INSTALL
G4INSTALL = ../../..
endif
include $(G4INSTALL)/config/architecture.gmk
CPPFLAGS += -DG4PROCESSES_EXPORT
CPPFLAGS += -I$(G4BASE)/global/management/include \
-I$(G4BASE)/global/HEPRandom/include \
-I$(G4BASE)/global/HEPGeometry/include \
-I$(G4BASE)/geometry/management/include \
-I$(G4BASE)/materials/include \
-I$(G4BASE)/track/include \
-I$(G4BASE)/particles/shortlived/include \
-I$(G4BASE)/particles/management/include \
-I$(G4BASE)/particles/leptons/include \
-I$(G4BASE)/particles/bosons/include \
-I$(G4BASE)/particles/hadrons/mesons/include \
-I$(G4BASE)/particles/hadrons/barions/include \
-I$(G4BASE)/particles/hadrons/ions/include \
-I$(G4BASE)/processes/electromagnetic/utils/include \
-I$(G4BASE)/processes/hadronic/cross_sections/include \
-I$(G4BASE)/processes/hadronic/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/management/include \
-I$(G4BASE)/processes/hadronic/models/de_excitation/photon_evaporation/include \
-I$(G4BASE)/processes/hadronic/models/parton_string/diffraction/include \
-I$(G4BASE)/processes/hadronic/processes/include \
-I$(G4BASE)/processes/hadronic/util/include \
-I$(G4BASE)/processes/management/include \
-I$(G4BASE)/run/include
include $(G4INSTALL)/config/common.gmk
+2 -1
View File
@@ -6,7 +6,8 @@ It must **not** be used as a substitute for writing good git commit messages!
-------------------------------------------------------------------------------
## 2022-12-30 Vladimir Ivanchenko (phys-util-V11-00-10)
## 2022-12-30 Vladimir Ivanchenko (phys-util-V11-01-00)
- G4HadProcesses - avoid double instantiation of capture cross section
## 2022-11-24 Gabriele Cosmo (phys-util-V11-00-09)