Import Geant4 11.3.0 source tree
This commit is contained in:
@@ -15,15 +15,7 @@ It must **not** be used as a substitute for writing good git commit messages!
|
||||
## 2021-12-10 Ben Morgan (phys-ctor-V11-00-00)
|
||||
- Change to new Markdown History format
|
||||
|
||||
---
|
||||
|
||||
# History entries prior to 11.0
|
||||
|
||||
15-01-2013, Gunter Folger
|
||||
|
||||
-------- Please tag at subdirectory level----------------
|
||||
|
||||
15-01-2013, Gunter Folger (phys-ctor-V09-06-00)
|
||||
## 2013-01-15 Gunter Folger (phys-ctor-V09-06-00)
|
||||
- Collect constructors subdirectories tags, and CMakeLists.txt & GNUmakefile
|
||||
to allow testing to check out a complete set. Without this tag, CMakeLists.txt
|
||||
will not be checked out, as constructors directory is not part of any tag yet.
|
||||
|
||||
@@ -4,6 +4,12 @@ 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!
|
||||
|
||||
## 2024-08-01 Alberto Ribon (phys-ctor-decay-V11-02-00)
|
||||
- G4UnknownDecayPhysics : extended to G4ChargedUnknownParticle.
|
||||
( This is part of ATLAS and LHCb request to assign automatically
|
||||
ionisation and multiple scattering processes to charged primary particles
|
||||
with valid PDG code but not known to Geant4. )
|
||||
|
||||
## 2023-11-07 Alberto Ribon (phys-ctor-decay-V11-01-01)
|
||||
- G4RadioactiveDecayPhysics : replaced G4RadioactiveDecay with
|
||||
G4Radioactivation to be able to run in biasing mode (not only in
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4UnknownParticle.hh"
|
||||
#include "G4ChargedUnknownParticle.hh"
|
||||
#include "G4UnknownDecay.hh"
|
||||
|
||||
// factory
|
||||
@@ -61,6 +62,7 @@ G4UnknownDecayPhysics::~G4UnknownDecayPhysics()
|
||||
void G4UnknownDecayPhysics::ConstructParticle()
|
||||
{
|
||||
G4UnknownParticle::UnknownParticleDefinition();
|
||||
G4ChargedUnknownParticle::ChargedUnknownParticleDefinition();
|
||||
}
|
||||
|
||||
void G4UnknownDecayPhysics::ConstructProcess()
|
||||
|
||||
@@ -6,6 +6,36 @@ It must **not** be used as a substitute for writing good git commit messages!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
## 2024-10-18 Vladimir Ivanchenko (phys-ctor-em-V11-02-12)
|
||||
- G4EmStandardPhysics_option3 - return back positron annihilation lost in
|
||||
previous MR.
|
||||
|
||||
## 2024-10-17 Vladimir Ivanchenko (phys-ctor-em-V11-02-11)
|
||||
- G4EmStandardPhysics_option3, G4EmStandardPhysics_option4, G4EmLivermorePhysics,
|
||||
G4EmStandardPhysics, G4EmStandardPhysicsWVI - added a possibility to
|
||||
enable/disable 3 gamma annihilation on fly, take into account rename of the
|
||||
model G4eplusTo2GammaOKVIModel -> G4eplusTo2or3GammaModel. By default it is
|
||||
enabled in G4EmStandardPhysics_option4 only. This option is not added to
|
||||
the G4EmPenelopePhysics class, because it has the original Penelope model
|
||||
for annihilation.
|
||||
|
||||
## 2024-10-02 Hoang Tran (phys-ctor-em-V11-02-10)
|
||||
- Modified the molecule names of OH, HO2, O in MoleculeDefinition.
|
||||
Each molecule configuration has a molecule definition.
|
||||
|
||||
## 2024-09-10 Alberto Ribon (phys-ctor-em-V11-02-09)
|
||||
- G4ChargedUnknownPhysics : replaced G4hIonisation and G4hMultipleScattering
|
||||
(which use G4ParticleDefinition) with the corresponding new classes
|
||||
G4DynamicParticleIonisation and G4DynamicParticleMSC (which use only
|
||||
G4DynamicParticle), respectively.
|
||||
|
||||
## 2024-08-01 Alberto Ribon (phys-ctor-em-V11-02-08)
|
||||
- Created new constructor G4ChargedUnknownPhysics, to be used on top on any
|
||||
reference physics list, to assign ionisation and multiple scattering
|
||||
(as well as transportation) processes to charged primary particles with
|
||||
valid PDG code but not known to Geant4.
|
||||
( This was requested by ATLAS and LHCb. )
|
||||
|
||||
## 2024-05-23 Hoang Tran (phys-ctor-em-V11-02-07)
|
||||
- Use EmParameters to control chemistry models in G4EmDNAChemistry_option3.
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// --------------------------------------------------------------------------
|
||||
//
|
||||
// GEANT4 header file
|
||||
//
|
||||
// File name: G4ChargedUnknownPhysics.hh
|
||||
//
|
||||
// Author: A.Ribon
|
||||
//
|
||||
// Creation date: August 2024
|
||||
//
|
||||
// Description: This physics list constructor class is similar to
|
||||
// G4UnknownDecayPhysics (which assigns the decay process
|
||||
// (and transportation as well) to unknown particles),
|
||||
// for charged unknown particles: it assigns the two EM
|
||||
// processes of ionisation and multiple scattering
|
||||
// (and transportation as well).
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// --------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#ifndef G4ChargedUnknownPhysics_h
|
||||
#define G4ChargedUnknownPhysics_h 1
|
||||
|
||||
#include "globals.hh"
|
||||
#include "G4VPhysicsConstructor.hh"
|
||||
|
||||
|
||||
class G4ChargedUnknownPhysics : public G4VPhysicsConstructor {
|
||||
public:
|
||||
G4ChargedUnknownPhysics( G4int ver = 1 );
|
||||
G4ChargedUnknownPhysics( const G4String& name, G4int ver = 1 );
|
||||
~G4ChargedUnknownPhysics() = default;
|
||||
void ConstructParticle() override;
|
||||
void ConstructProcess() override;
|
||||
private:
|
||||
G4int verbose;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -3,6 +3,7 @@
|
||||
# Define the Geant4 Module.
|
||||
geant4_add_module(G4phys_ctor_em
|
||||
PUBLIC_HEADERS
|
||||
G4ChargedUnknownPhysics.hh
|
||||
G4EmBuilder.hh
|
||||
G4EmDNABuilder.hh
|
||||
G4EmDNAChemistry.hh
|
||||
@@ -42,6 +43,7 @@ geant4_add_module(G4phys_ctor_em
|
||||
G4ChemDissociationChannels.hh
|
||||
G4ChemDissociationChannels_option1.hh
|
||||
SOURCES
|
||||
G4ChargedUnknownPhysics.cc
|
||||
G4EmBuilder.cc
|
||||
G4EmDNABuilder.cc
|
||||
G4EmDNAChemistry.cc
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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 source file
|
||||
//
|
||||
// File name: G4ChargedUnknownPhysics.cc
|
||||
//
|
||||
// Author: A.Ribon
|
||||
//
|
||||
// Creation date: August 2024
|
||||
//
|
||||
// Description: This physics list constructor class is similar to
|
||||
// G4UnknownDecayPhysics (which assigns the decay process
|
||||
// (and transportation as well) to unknown particles),
|
||||
// for charged unknown particles: it assigns the two EM
|
||||
// processes of ionisation and multiple scattering
|
||||
// (and transportation as well).
|
||||
//
|
||||
// Modifications:
|
||||
//
|
||||
// --------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#include "G4ChargedUnknownPhysics.hh"
|
||||
#include "G4ChargedUnknownParticle.hh"
|
||||
#include "G4UnknownParticle.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4DynamicParticleMSC.hh"
|
||||
#include "G4DynamicParticleIonisation.hh"
|
||||
|
||||
// factory
|
||||
#include "G4PhysicsConstructorFactory.hh"
|
||||
//
|
||||
G4_DECLARE_PHYSCONSTR_FACTORY( G4ChargedUnknownPhysics );
|
||||
|
||||
|
||||
G4ChargedUnknownPhysics::G4ChargedUnknownPhysics( G4int ver )
|
||||
: G4VPhysicsConstructor( "ChargedUnknownPhysics" ), verbose( ver ) {}
|
||||
|
||||
|
||||
G4ChargedUnknownPhysics::G4ChargedUnknownPhysics( const G4String& name, G4int ver )
|
||||
: G4VPhysicsConstructor( name ), verbose( ver ) {}
|
||||
|
||||
|
||||
void G4ChargedUnknownPhysics::ConstructParticle() {
|
||||
// Although this class deals only with 'chargedunknown' particles,
|
||||
// it is more consistent to define also 'unknown' particles.
|
||||
G4ChargedUnknownParticle::ChargedUnknownParticleDefinition();
|
||||
G4UnknownParticle::UnknownParticleDefinition();
|
||||
}
|
||||
|
||||
|
||||
void G4ChargedUnknownPhysics::ConstructProcess() {
|
||||
G4ProcessManager* pmanager = G4ChargedUnknownParticle::Definition()->GetProcessManager();
|
||||
pmanager->AddProcess( new G4DynamicParticleMSC, -1, 1, -1 );
|
||||
pmanager->AddProcess( new G4DynamicParticleIonisation, -1, 2, 2 );
|
||||
if ( verbose > 1 ) {
|
||||
G4cout << "### Added ionization and multiple scattering for chargedunknown" << G4endl;
|
||||
}
|
||||
}
|
||||
@@ -55,17 +55,23 @@ void G4ChemDissociationChannels::ConstructMolecule()
|
||||
G4Electron_aq::Definition();
|
||||
G4H2O2::Definition();
|
||||
G4H2::Definition();
|
||||
auto G4OHm = new G4MoleculeDefinition("OH",/*mass*/ 17.00734 * g / Avogadro * c_squared,
|
||||
2.8e-9 * (m * m / s), -1,
|
||||
5, 0.958 * angstrom, // radius
|
||||
2 // number of atoms
|
||||
);
|
||||
|
||||
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(),
|
||||
G4OHm,
|
||||
-1, // charge
|
||||
5.0e-9 * (m2 / s));
|
||||
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
|
||||
molTable->CreateConfiguration("OH", G4OH::Definition());
|
||||
molTable->CreateConfiguration("°OH", G4OH::Definition());
|
||||
molTable->CreateConfiguration("e_aq", G4Electron_aq::Definition());
|
||||
molTable->CreateConfiguration("H", G4Hydrogen::Definition());
|
||||
molTable->CreateConfiguration("H2", G4H2::Definition());
|
||||
@@ -79,7 +85,7 @@ void G4ChemDissociationChannels::ConstructDissociationChannels()
|
||||
//-----------------------------------
|
||||
// Get the molecular configuration
|
||||
auto molTable = G4MoleculeTable::Instance();
|
||||
G4MolecularConfiguration* OH = molTable->GetConfiguration("OH");
|
||||
G4MolecularConfiguration* OH = molTable->GetConfiguration("°OH");
|
||||
G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm");
|
||||
G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq");
|
||||
G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2");
|
||||
|
||||
+22
-10
@@ -72,6 +72,18 @@ void G4ChemDissociationChannels_option1::ConstructMolecule()
|
||||
G4Oxygen::Definition();
|
||||
G4O3::Definition();
|
||||
|
||||
auto G4OHm = new G4MoleculeDefinition("OH",/*mass*/ 17.00734 * g / Avogadro * c_squared,
|
||||
2.8e-9 * (m * m / s), -1,
|
||||
5, 0.958 * angstrom, // radius
|
||||
2 // number of atoms
|
||||
);
|
||||
|
||||
auto G4HO2m = new G4MoleculeDefinition("HO_2", 33.0034 * g / Avogadro * c_squared,
|
||||
2.3e-9 * (m * m / s), -1, 0,
|
||||
2.1 * angstrom, 3);
|
||||
auto G4Om = new G4MoleculeDefinition("O", 15.99773 * g / Avogadro * c_squared,
|
||||
2.0e-9 * (m * m / s), 0, 0,
|
||||
2.0 * angstrom, 1);
|
||||
//____________________________________________________________________________
|
||||
auto molTable = G4MoleculeTable::Instance();
|
||||
molTable->CreateConfiguration("H3Op", G4H3O::Definition());
|
||||
@@ -79,14 +91,14 @@ void G4ChemDissociationChannels_option1::ConstructMolecule()
|
||||
* (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);
|
||||
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(),
|
||||
G4OHm,
|
||||
-1, // charge
|
||||
5.3e-9 * (m2 / s));
|
||||
OHm->SetMass(17.0079 * g / Avogadro * c_squared);
|
||||
@@ -108,13 +120,13 @@ void G4ChemDissociationChannels_option1::ConstructMolecule()
|
||||
|
||||
// molecules extension (RITRACKS)
|
||||
|
||||
molTable->CreateConfiguration("HO2", G4HO2::Definition());
|
||||
molTable->GetConfiguration("HO2")->SetVanDerVaalsRadius(0.21 * nm);
|
||||
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(),
|
||||
G4HO2m,
|
||||
-1, // charge
|
||||
1.4e-9 * (m2 / s));
|
||||
HO2m->SetMass(33.00396 * g / Avogadro * c_squared);
|
||||
@@ -126,7 +138,7 @@ void G4ChemDissociationChannels_option1::ConstructMolecule()
|
||||
G4MolecularConfiguration* Om =
|
||||
molTable->CreateConfiguration("Om", // just a tag to store and retrieve from
|
||||
// G4MoleculeTable
|
||||
G4Oxygen::Definition(),
|
||||
G4Om,
|
||||
-1, // charge
|
||||
2.0e-9 * (m2 / s));
|
||||
Om->SetMass(15.99829 * g / Avogadro * c_squared);
|
||||
@@ -170,7 +182,7 @@ void G4ChemDissociationChannels_option1::ConstructMolecule()
|
||||
|
||||
molTable->CreateConfiguration("OHm(B)", // just a tag to store and retrieve
|
||||
// from G4MoleculeTable
|
||||
G4OH::Definition(),
|
||||
G4OHm,
|
||||
-1, // charge
|
||||
0 * (m2 / s));
|
||||
|
||||
@@ -184,7 +196,7 @@ void G4ChemDissociationChannels_option1::ConstructDissociationChannels()
|
||||
//-----------------------------------
|
||||
// Get the molecular configuration
|
||||
auto molTable = G4MoleculeTable::Instance();
|
||||
G4MolecularConfiguration* OH = molTable->GetConfiguration("OH");
|
||||
G4MolecularConfiguration* OH = molTable->GetConfiguration("°OH");
|
||||
G4MolecularConfiguration* OHm = molTable->GetConfiguration("OHm");
|
||||
G4MolecularConfiguration* e_aq = molTable->GetConfiguration("e_aq");
|
||||
G4MolecularConfiguration* H2 = molTable->GetConfiguration("H2");
|
||||
|
||||
@@ -97,7 +97,7 @@ void G4EmDNAChemistry::ConstructReactionTable(G4DNAMolecularReactionTable*
|
||||
//-----------------------------------
|
||||
//Get the molecular configuration
|
||||
G4MolecularConfiguration* OH =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OH");
|
||||
G4MoleculeTable::Instance()->GetConfiguration("°OH");
|
||||
G4MolecularConfiguration* OHm =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OHm");
|
||||
G4MolecularConfiguration* e_aq =
|
||||
|
||||
@@ -80,7 +80,7 @@ void G4EmDNAChemistry_option1::ConstructMolecule()
|
||||
9.46e-9 * (m2/s));
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OHm")->SetDiffusionCoefficient(
|
||||
5.3e-9 * (m2 / s));
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OH")->SetDiffusionCoefficient(
|
||||
G4MoleculeTable::Instance()->GetConfiguration("°OH")->SetDiffusionCoefficient(
|
||||
2.2e-9 * (m2/s));
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H2")->SetDiffusionCoefficient(
|
||||
4.8e-9 * (m2/s));
|
||||
@@ -103,7 +103,7 @@ void G4EmDNAChemistry_option1::ConstructReactionTable(G4DNAMolecularReactionTabl
|
||||
//-----------------------------------
|
||||
//Get the molecular configuration
|
||||
G4MolecularConfiguration* OH =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OH");
|
||||
G4MoleculeTable::Instance()->GetConfiguration("°OH");
|
||||
G4MolecularConfiguration* OHm =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OHm");
|
||||
G4MolecularConfiguration* e_aq =
|
||||
|
||||
@@ -141,7 +141,7 @@ void G4EmDNAChemistry_option2::ConstructReactionTable(
|
||||
//-----------------------------------
|
||||
//Get the molecular configuration
|
||||
G4MolecularConfiguration* OH =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OH");
|
||||
G4MoleculeTable::Instance()->GetConfiguration("°OH");
|
||||
G4MolecularConfiguration* OHm =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OHm");
|
||||
G4MolecularConfiguration* e_aq =
|
||||
|
||||
@@ -100,7 +100,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
|
||||
//-----------------------------------
|
||||
//Get the molecular configuration
|
||||
G4MolecularConfiguration* OH =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OH");
|
||||
G4MoleculeTable::Instance()->GetConfiguration("°OH");
|
||||
G4MolecularConfiguration* OHm =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("OHm");
|
||||
G4MolecularConfiguration* e_aq =
|
||||
@@ -114,7 +114,7 @@ void G4EmDNAChemistry_option3::ConstructReactionTable(G4DNAMolecularReactionTabl
|
||||
G4MolecularConfiguration* H2O2 =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("H2O2");
|
||||
G4MolecularConfiguration* HO2 =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("HO2");
|
||||
G4MoleculeTable::Instance()->GetConfiguration("HO2°");
|
||||
G4MolecularConfiguration* HO2m =
|
||||
G4MoleculeTable::Instance()->GetConfiguration("HO2m");
|
||||
G4MolecularConfiguration* O =
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
|
||||
// e+
|
||||
#include "G4eplusAnnihilation.hh"
|
||||
#include "G4eplusTo2or3GammaModel.hh"
|
||||
|
||||
// hadrons
|
||||
#include "G4hMultipleScattering.hh"
|
||||
@@ -138,8 +139,7 @@ G4EmLivermorePhysics::G4EmLivermorePhysics(G4int ver, const G4String& pname)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4EmLivermorePhysics::~G4EmLivermorePhysics()
|
||||
{}
|
||||
G4EmLivermorePhysics::~G4EmLivermorePhysics() = default;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -290,11 +290,17 @@ void G4EmLivermorePhysics::ConstructProcess()
|
||||
brem->SetEmModel(br2);
|
||||
br1->SetHighEnergyLimit(GeV);
|
||||
|
||||
// annihilation
|
||||
auto anni = new G4eplusAnnihilation();
|
||||
if (param->Use3GammaAnnihilationOnFly()) {
|
||||
anni->SetEmModel(new G4eplusTo2or3GammaModel());
|
||||
}
|
||||
|
||||
// register processes
|
||||
ph->RegisterProcess(eioni, particle);
|
||||
ph->RegisterProcess(brem, particle);
|
||||
ph->RegisterProcess(ee, particle);
|
||||
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
|
||||
ph->RegisterProcess(anni, particle);
|
||||
ph->RegisterProcess(ss, particle);
|
||||
|
||||
// generic ion
|
||||
|
||||
@@ -131,8 +131,7 @@ G4EmPenelopePhysics::G4EmPenelopePhysics(G4int ver, const G4String&)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4EmPenelopePhysics::~G4EmPenelopePhysics()
|
||||
{}
|
||||
G4EmPenelopePhysics::~G4EmPenelopePhysics() = default;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -271,10 +270,10 @@ void G4EmPenelopePhysics::ConstructProcess()
|
||||
theBremPenelope = new G4PenelopeBremsstrahlungModel();
|
||||
theBremPenelope->SetHighEnergyLimit(PenelopeHighEnergyLimit);
|
||||
brem->SetEmModel(theBremPenelope);
|
||||
|
||||
|
||||
//Annihilation
|
||||
G4eplusAnnihilation* anni = new G4eplusAnnihilation();
|
||||
G4PenelopeAnnihilationModel* theAnnPenelope = new G4PenelopeAnnihilationModel();
|
||||
auto anni = new G4eplusAnnihilation();
|
||||
auto theAnnPenelope = new G4PenelopeAnnihilationModel();
|
||||
theAnnPenelope->SetHighEnergyLimit(PenelopeHighEnergyLimit);
|
||||
anni->AddEmModel(0, theAnnPenelope);
|
||||
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "G4LivermorePhotoElectricModel.hh"
|
||||
#include "G4LivermorePolarizedRayleighModel.hh"
|
||||
#include "G4PhotoElectricAngularGeneratorPolarized.hh"
|
||||
#include "G4eplusTo2or3GammaModel.hh"
|
||||
|
||||
#include "G4hMultipleScattering.hh"
|
||||
#include "G4CoulombScattering.hh"
|
||||
@@ -96,8 +97,7 @@ G4EmStandardPhysics::G4EmStandardPhysics(G4int ver, const G4String&)
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4EmStandardPhysics::~G4EmStandardPhysics()
|
||||
{}
|
||||
G4EmStandardPhysics::~G4EmStandardPhysics() = default;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -209,9 +209,15 @@ void G4EmStandardPhysics::ConstructProcess()
|
||||
ssm->SetLowEnergyLimit(highEnergyLimit);
|
||||
ssm->SetActivationLowEnergyLimit(highEnergyLimit);
|
||||
|
||||
// annihilation
|
||||
auto anni = new G4eplusAnnihilation();
|
||||
if (param->Use3GammaAnnihilationOnFly()) {
|
||||
anni->SetEmModel(new G4eplusTo2or3GammaModel());
|
||||
}
|
||||
|
||||
ph->RegisterProcess(new G4eIonisation(), particle);
|
||||
ph->RegisterProcess(new G4eBremsstrahlung(), particle);
|
||||
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
|
||||
ph->RegisterProcess(anni, particle);
|
||||
ph->RegisterProcess(ss, particle);
|
||||
|
||||
// generic ion
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
#include "G4BraggIonModel.hh"
|
||||
#include "G4IonFluctuations.hh"
|
||||
#include "G4NuclearStopping.hh"
|
||||
#include "G4eplusTo2GammaOKVIModel.hh"
|
||||
#include "G4eplusTo2or3GammaModel.hh"
|
||||
|
||||
#include "G4Gamma.hh"
|
||||
#include "G4Electron.hh"
|
||||
@@ -214,7 +214,7 @@ void G4EmStandardPhysicsWVI::ConstructProcess()
|
||||
ssm->SetActivationLowEnergyLimit(highEnergyLimit);
|
||||
|
||||
G4eplusAnnihilation* ann = new G4eplusAnnihilation();
|
||||
ann->SetEmModel(new G4eplusTo2GammaOKVIModel());
|
||||
ann->SetEmModel(new G4eplusTo2or3GammaModel());
|
||||
|
||||
ph->RegisterProcess(msc, particle);
|
||||
ph->RegisterProcess(new G4eIonisation(), particle);
|
||||
|
||||
+9
-3
@@ -55,6 +55,7 @@
|
||||
#include "G4LivermorePolarizedRayleighModel.hh"
|
||||
#include "G4PhotoElectricAngularGeneratorPolarized.hh"
|
||||
#include "G4BetheHeitler5DModel.hh"
|
||||
#include "G4eplusTo2or3GammaModel.hh"
|
||||
|
||||
#include "G4eMultipleScattering.hh"
|
||||
#include "G4hMultipleScattering.hh"
|
||||
@@ -128,8 +129,7 @@ G4EmStandardPhysics_option3::G4EmStandardPhysics_option3(G4int ver,
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4EmStandardPhysics_option3::~G4EmStandardPhysics_option3()
|
||||
{}
|
||||
G4EmStandardPhysics_option3::~G4EmStandardPhysics_option3() = default;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -242,8 +242,14 @@ void G4EmStandardPhysics_option3::ConstructProcess()
|
||||
|
||||
ph->RegisterProcess(eIoni, particle);
|
||||
ph->RegisterProcess(brem, particle);
|
||||
|
||||
// annihilation
|
||||
auto anni = new G4eplusAnnihilation();
|
||||
if (param->Use3GammaAnnihilationOnFly()) {
|
||||
anni->SetEmModel(new G4eplusTo2or3GammaModel());
|
||||
}
|
||||
ph->RegisterProcess(ee, particle);
|
||||
ph->RegisterProcess(new G4eplusAnnihilation(), particle);
|
||||
ph->RegisterProcess(anni, particle);
|
||||
|
||||
// generic ion
|
||||
particle = G4GenericIon::GenericIon();
|
||||
|
||||
+6
-4
@@ -86,7 +86,7 @@
|
||||
#include "G4IonParametrisedLossModel.hh"
|
||||
#include "G4LindhardSorensenIonModel.hh"
|
||||
#include "G4NuclearStopping.hh"
|
||||
#include "G4eplusTo2GammaOKVIModel.hh"
|
||||
#include "G4eplusTo2or3GammaModel.hh"
|
||||
|
||||
#include "G4Gamma.hh"
|
||||
#include "G4Electron.hh"
|
||||
@@ -129,6 +129,7 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver,
|
||||
param->SetMuHadLateralDisplacement(true);
|
||||
param->SetFluo(true);
|
||||
param->SetUseICRU90Data(true);
|
||||
param->Set3GammaAnnihilationOnFly(true);
|
||||
param->SetFluctuationType(fUrbanFluctuation);
|
||||
param->SetMaxNIELEnergy(1*CLHEP::MeV);
|
||||
param->SetPositronAtRestModelType(fAllisonPositronium);
|
||||
@@ -137,8 +138,7 @@ G4EmStandardPhysics_option4::G4EmStandardPhysics_option4(G4int ver,
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4EmStandardPhysics_option4::~G4EmStandardPhysics_option4()
|
||||
{}
|
||||
G4EmStandardPhysics_option4::~G4EmStandardPhysics_option4() = default;
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
@@ -304,7 +304,9 @@ void G4EmStandardPhysics_option4::ConstructProcess()
|
||||
|
||||
// annihilation
|
||||
auto anni = new G4eplusAnnihilation();
|
||||
anni->SetEmModel(new G4eplusTo2GammaOKVIModel());
|
||||
if (param->Use3GammaAnnihilationOnFly()) {
|
||||
anni->SetEmModel(new G4eplusTo2or3GammaModel());
|
||||
}
|
||||
|
||||
// register processes
|
||||
ph->RegisterProcess(eioni, particle);
|
||||
|
||||
@@ -6,6 +6,10 @@ It must **not** be used as a substitute for writing good git commit messages!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
## 2024-11-04 Vladimir Ivantchenko (phys-ctor-fact-V11-02-01)
|
||||
- G4PhysicsConstructorRegistry - removed memory leak at exit by using of
|
||||
G4ThreadLocalSingleton pattern
|
||||
|
||||
## 2024-05-15 Gabriele Cosmo (phys-ctor-fact-V11-02-00)
|
||||
- Minor code cleanup in G4PhysicsConstructorRegistry source.
|
||||
|
||||
|
||||
@@ -48,13 +48,16 @@
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include "globals.hh"
|
||||
|
||||
#include "G4ThreadLocalSingleton.hh"
|
||||
|
||||
class G4VPhysicsConstructor;
|
||||
class G4VBasePhysConstrFactory;
|
||||
|
||||
class G4PhysicsConstructorRegistry
|
||||
{
|
||||
|
||||
friend class G4ThreadLocalSingleton<G4PhysicsConstructorRegistry>;
|
||||
|
||||
public:
|
||||
|
||||
static G4PhysicsConstructorRegistry* Instance();
|
||||
@@ -87,9 +90,9 @@ private:
|
||||
|
||||
static G4ThreadLocal G4PhysicsConstructorRegistry* theInstance;
|
||||
|
||||
std::vector <G4VPhysicsConstructor*> physConstr;
|
||||
std::vector<G4VPhysicsConstructor*> physConstr;
|
||||
|
||||
std::map <G4String, G4VBasePhysConstrFactory*> factories;
|
||||
std::map<G4String, G4VBasePhysConstrFactory*> factories;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -47,7 +47,10 @@ G4ThreadLocal G4PhysicsConstructorRegistry* G4PhysicsConstructorRegistry::theIns
|
||||
|
||||
G4PhysicsConstructorRegistry* G4PhysicsConstructorRegistry::Instance()
|
||||
{
|
||||
if(nullptr == theInstance) theInstance = new G4PhysicsConstructorRegistry;
|
||||
if (nullptr == theInstance) {
|
||||
static G4ThreadLocalSingleton<G4PhysicsConstructorRegistry> inst;
|
||||
theInstance = inst.Instance();
|
||||
}
|
||||
return theInstance;
|
||||
}
|
||||
|
||||
@@ -61,41 +64,25 @@ G4PhysicsConstructorRegistry::~G4PhysicsConstructorRegistry()
|
||||
|
||||
void G4PhysicsConstructorRegistry::Clean()
|
||||
{
|
||||
std::size_t n = physConstr.size();
|
||||
if(n > 0) {
|
||||
for (std::size_t i=0; i<n; ++i) {
|
||||
if(physConstr[i]) {
|
||||
G4VPhysicsConstructor* p = physConstr[i];
|
||||
physConstr[i] = nullptr;
|
||||
delete p;
|
||||
}
|
||||
}
|
||||
physConstr.clear();
|
||||
}
|
||||
for (auto const & ptr : physConstr) { delete ptr; }
|
||||
physConstr.clear();
|
||||
}
|
||||
|
||||
void G4PhysicsConstructorRegistry::Register(G4VPhysicsConstructor* p)
|
||||
{
|
||||
if(nullptr == p) return;
|
||||
std::size_t n = physConstr.size();
|
||||
if(n > 0) {
|
||||
for (std::size_t i=0; i<n; ++i) {
|
||||
if(physConstr[i] == p) { return; }
|
||||
}
|
||||
}
|
||||
if (nullptr == p) { return; }
|
||||
for (auto const & ptr : physConstr) { if (p == ptr) { return; } }
|
||||
physConstr.push_back(p);
|
||||
}
|
||||
|
||||
void G4PhysicsConstructorRegistry::DeRegister(G4VPhysicsConstructor* p)
|
||||
{
|
||||
if (nullptr == p) return;
|
||||
if (nullptr == p || physConstr.empty()) { return; }
|
||||
std::size_t n = physConstr.size();
|
||||
if ( n > 0 ) {
|
||||
for (std::size_t i=0; i<n; ++i) {
|
||||
if ( physConstr[i] == p ) {
|
||||
physConstr[i] = nullptr;
|
||||
return;
|
||||
}
|
||||
for (std::size_t i=0; i<n; ++i) {
|
||||
if ( physConstr[i] == p ) {
|
||||
physConstr[i] = nullptr;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,6 +6,12 @@ It must **not** be used as a substitute for writing good git commit messages!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
## 2024-10-28 Alexei Sytov (phys-ctor-glnuclear-V11-02-01)
|
||||
- Added new physics G4CoherentPairProductionPhysics related to the process
|
||||
G4CoherentPairProduction of coherent pair production by
|
||||
high energy gamma in an oriented crystal.
|
||||
- source.cmake updated correspondingly
|
||||
|
||||
## 2024-02-13 Vladimir Ivanchenko (phys-ctor-glnuclear-V11-02-00)
|
||||
- G4NeutrinoPhysics - fixed neutrino physics instantiation (problem #2594)
|
||||
|
||||
|
||||
@@ -46,3 +46,38 @@
|
||||
(note: mu- and mu+ together, not individually)
|
||||
at run time, via macro commands.
|
||||
|
||||
|
||||
G4CoherentPairProductionPhysics
|
||||
-------------
|
||||
Used by G4CoherentPairProduction process (in parameterisations/channeling/)
|
||||
of coherent pair production by high energy gamma in an oriented crystal.
|
||||
- IMPORTANT: with default parameters (incoherent scattering switched off)
|
||||
can work in parallel with a standard physics list.
|
||||
- It is possible to activate incoherent scattering using
|
||||
ActivateIncoherentScattering() function.
|
||||
IMPORTANT: requires switching off gamma conversion in
|
||||
the physics list to not simulate it twice
|
||||
- IMPORTANT: the geometry and material crystal data are contained in
|
||||
G4ChannelingFastSimCrystalData which is automatically copied from
|
||||
G4ChannelingFastSimModel into G4CoherentPairProduction using also
|
||||
the default G4ChannelingFastSimModel and G4Region names ("ChannelingModel"
|
||||
and "Crystal", respectively), which can be changed using
|
||||
SetNameChannelingModel and SetNameG4Region, respectively,
|
||||
being G4CoherentPairProductionPhysics set functions.
|
||||
- IMPORTANT: G4ChannelingFastSimModel and its G4Region are required
|
||||
for G4ChannelingFastSimCrystalData. If not found, an exception will
|
||||
be generated.
|
||||
- The intrinsic parameters of G4CoherentPairProduction can be changed
|
||||
using G4CoherentPairProductionPhysics set functions:
|
||||
- cuts of the model:
|
||||
- SetLowEnergyLimit(G4double energy); default is 1 GeV
|
||||
- SetHighAngleLimit(G4double angle); default is 50 mrad
|
||||
- SetPPKineticEnergyCut(G4double kineticEnergyCut); default is 1 MeV
|
||||
- internal parameters of the model (!!! it is strongly UNRECOMMENDED to decrease them):
|
||||
- SetSamplingPairsNumber(G4int nPairs);
|
||||
//default is 150 (amount of sampling pairs for Baier-Katkov algorithm)
|
||||
- SetChargeParticleAngleFactor(G4double chargeParticleAngleFactor);
|
||||
//default is 4 (angular distribution parameter = 4/gamma)
|
||||
- void SetNTrajectorySteps(G4int nTrajectorySteps);
|
||||
//default is 250 (amount of trajectory steps for tracking of
|
||||
//sampling pair in Baier-Katkov algorithm).
|
||||
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// Author: Alexei Sytov
|
||||
|
||||
#ifndef G4CoherentPairProductionPhysics_h
|
||||
#define G4CoherentPairProductionPhysics_h 1
|
||||
|
||||
#include "G4VPhysicsConstructor.hh"
|
||||
#include "G4CoherentPairProduction.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
class G4CoherentPairProductionPhysics : public G4VPhysicsConstructor
|
||||
{
|
||||
public:
|
||||
G4CoherentPairProductionPhysics(const G4String& name =
|
||||
"Coherent Pair Production Physics");
|
||||
|
||||
~G4CoherentPairProductionPhysics() = default;
|
||||
|
||||
void ConstructParticle() override;
|
||||
void ConstructProcess() override;
|
||||
|
||||
///activate incoherent scattering
|
||||
///(standard gamma conversion should be switched off in physics list)
|
||||
void ActivateIncoherentScattering(){fIncoherentScattering = true;}
|
||||
|
||||
///set functions
|
||||
|
||||
///set name of G4ChannelingFastSimModel from which an auto input should be performed
|
||||
void SetNameChannelingModel(const G4String& nameChannelingModel)
|
||||
{fNameChannelingModel=nameChannelingModel;}
|
||||
|
||||
///set name of G4Region to where the G4ChannelingFastSimModel is active
|
||||
void SetNameG4Region(const G4String& nameG4Region)
|
||||
{fNameRegion=nameG4Region;}
|
||||
|
||||
void SetLowEnergyLimit(G4double energy){fLowEnergyLimit=energy;}
|
||||
void SetHighAngleLimit(G4double angle) {fHighAngleLimit=angle;}
|
||||
void SetPPKineticEnergyCut(G4double kineticEnergyCut) {fPPKineticEnergyCut=kineticEnergyCut;}
|
||||
|
||||
/// set the number of pairs in sampling of Baier-Katkov Integral
|
||||
/// (MC integration by e+- energy and angles <=> e+- momentum)
|
||||
void SetSamplingPairsNumber(G4int nPairs){fNMCPairs = nPairs;}
|
||||
|
||||
/// set the number of particle angles 1/gamma in pair production
|
||||
/// defining the width of the angular distribution of pair sampling
|
||||
/// in the Baier-Katkov Integral
|
||||
void SetChargeParticleAngleFactor(G4double chargeParticleAngleFactor)
|
||||
{fChargeParticleAngleFactor = chargeParticleAngleFactor;}
|
||||
|
||||
/// set number of trajectory steps of a single particle (e- or e+)
|
||||
void SetNTrajectorySteps(G4int nTrajectorySteps)
|
||||
{fNTrajectorySteps = nTrajectorySteps;}
|
||||
|
||||
private:
|
||||
|
||||
///flag of simulation of incoherent scattering
|
||||
G4bool fIncoherentScattering = false;
|
||||
|
||||
///name of G4ChannelingFastSimModel from which an auto input should be performed
|
||||
G4String fNameChannelingModel = "ChannelingModel";
|
||||
|
||||
///name of G4Region to where the G4ChannelingFastSimModel is active
|
||||
G4String fNameRegion = "Crystal";
|
||||
|
||||
G4double fLowEnergyLimit = 1*CLHEP::GeV;
|
||||
G4double fHighAngleLimit = 50*CLHEP::mrad;
|
||||
|
||||
///minimal kinetic energy of a charged particle produced
|
||||
G4double fPPKineticEnergyCut = 1*CLHEP::MeV;
|
||||
|
||||
///Monte Carlo statistics of e+- pair sampling in Baier-Katkov for 1 photon
|
||||
G4int fNMCPairs = 150;
|
||||
|
||||
G4double fChargeParticleAngleFactor = 4; // number of particle angles 1/gamma:
|
||||
// more fChargeParticleAngleFactor => higher paramParticleAngle
|
||||
|
||||
///number of trajectory steps of a single particle (e- or e+)
|
||||
G4int fNTrajectorySteps=250;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -4,6 +4,7 @@
|
||||
geant4_add_module(G4phys_ctor_glnuclear
|
||||
PUBLIC_HEADERS
|
||||
G4BertiniElectroNuclearBuilder.hh
|
||||
G4CoherentPairProductionPhysics.hh
|
||||
G4EmExtraPhysics.hh
|
||||
G4EmMessenger.hh
|
||||
G4LENDBertiniGammaElectroNuclearBuilder.hh
|
||||
@@ -11,6 +12,7 @@ geant4_add_module(G4phys_ctor_glnuclear
|
||||
G4NeutrinoPhysicsMessenger.hh
|
||||
SOURCES
|
||||
G4BertiniElectroNuclearBuilder.cc
|
||||
G4CoherentPairProductionPhysics.cc
|
||||
G4EmExtraPhysics.cc
|
||||
G4EmMessenger.cc
|
||||
G4LENDBertiniGammaElectroNuclearBuilder.cc
|
||||
@@ -24,6 +26,7 @@ geant4_module_link_libraries(G4phys_ctor_glnuclear
|
||||
G4hadronic_proc
|
||||
G4intercoms
|
||||
G4run
|
||||
G4channeling
|
||||
PRIVATE
|
||||
G4baryons
|
||||
G4bosons
|
||||
@@ -49,4 +52,6 @@ geant4_module_link_libraries(G4phys_ctor_glnuclear
|
||||
G4phys_ctor_em
|
||||
G4phys_ctor_factory
|
||||
G4procman
|
||||
G4parameterisation
|
||||
G4geometrymng
|
||||
G4xrays)
|
||||
|
||||
+112
@@ -0,0 +1,112 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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. *
|
||||
// ********************************************************************
|
||||
//
|
||||
// Author: Alexei Sytov
|
||||
|
||||
#include "G4CoherentPairProductionPhysics.hh"
|
||||
#include "G4Gamma.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4CoherentPairProduction.hh"
|
||||
#include "G4ChannelingFastSimModel.hh"
|
||||
#include "G4RegionStore.hh"
|
||||
#include "G4FastSimulationManager.hh"
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
G4CoherentPairProductionPhysics::G4CoherentPairProductionPhysics(const G4String& name):
|
||||
G4VPhysicsConstructor(name)
|
||||
{}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void G4CoherentPairProductionPhysics::ConstructParticle()
|
||||
{
|
||||
G4Gamma::GammaDefinition(); // Define the gamma particle
|
||||
}
|
||||
|
||||
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
|
||||
|
||||
void G4CoherentPairProductionPhysics::ConstructProcess()
|
||||
{
|
||||
//create the gamma process
|
||||
G4CoherentPairProduction* gammaProcess = new G4CoherentPairProduction();
|
||||
|
||||
if(verboseLevel > 0) {
|
||||
G4cout << "G4CoherentPairProductionPhysics::ConstructProcess" << G4endl;
|
||||
}
|
||||
|
||||
G4RegionStore* regionStore = G4RegionStore::GetInstance();
|
||||
G4Region* RegionCh = regionStore->GetRegion(fNameRegion);
|
||||
|
||||
//if the region is not found
|
||||
if(RegionCh==0)
|
||||
{
|
||||
G4Exception("GetRegion",// Origin of the exception
|
||||
"001", // Unique error code
|
||||
FatalException, // Terminate the program
|
||||
"Region is not found! The program will terminate.");
|
||||
}
|
||||
else
|
||||
{
|
||||
//get channeling model
|
||||
G4bool someflag=false;
|
||||
G4ChannelingFastSimModel* Channeling =
|
||||
static_cast<G4ChannelingFastSimModel*>
|
||||
(RegionCh->GetFastSimulationManager()->
|
||||
GetFastSimulationModel(fNameChannelingModel,0,someflag));
|
||||
|
||||
//if channeling model is not found
|
||||
if(Channeling==0)
|
||||
{
|
||||
G4Exception("GetFastSimulationModel",// Origin of the exception
|
||||
"001", // Unique error code
|
||||
FatalException, // Terminate the program
|
||||
"Input channeling model is not found! The program will terminate."
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
gammaProcess->Input(Channeling->GetCrystalData());
|
||||
}
|
||||
}
|
||||
|
||||
//set functions
|
||||
if(fIncoherentScattering){gammaProcess->ActivateIncoherentScattering();}
|
||||
gammaProcess->SetLowEnergyLimit(fLowEnergyLimit);
|
||||
gammaProcess->SetHighAngleLimit(fHighAngleLimit);
|
||||
gammaProcess->SetPPKineticEnergyCut(fPPKineticEnergyCut);
|
||||
gammaProcess->SetSamplingPairsNumber(fNMCPairs);
|
||||
gammaProcess->SetChargeParticleAngleFactor(fChargeParticleAngleFactor);
|
||||
gammaProcess->SetNTrajectorySteps(fNTrajectorySteps);
|
||||
|
||||
//set the name of G4Region in which the model is applicable
|
||||
gammaProcess->SetG4RegionName(fNameRegion);
|
||||
|
||||
//get process manager for gamma
|
||||
G4ProcessManager* pManager = G4Gamma::Gamma()->GetProcessManager();
|
||||
|
||||
//register the G4CoherentPairProduction process
|
||||
pManager->AddDiscreteProcess(gammaProcess);
|
||||
}
|
||||
@@ -6,6 +6,9 @@ It must **not** be used as a substitute for writing good git commit messages!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
## 2024-07-03 Robert Hatcher (phys-ctor-helastic-V11-02-00)
|
||||
- Add self registration of G4ThermalNeutrons with the constructor factory
|
||||
|
||||
## 2023-10-31 Vladimir Ivanchenko (phys-ctor-helastic-V11-01-06)
|
||||
- G4ChargeExchangePhysics, G4ChargeExchangeMessenger - added UI commands
|
||||
|
||||
|
||||
@@ -49,6 +49,9 @@
|
||||
#include "G4PhysListUtil.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
#include "G4PhysicsConstructorFactory.hh"
|
||||
G4_DECLARE_PHYSCONSTR_FACTORY(G4ThermalNeutrons);
|
||||
|
||||
G4ThermalNeutrons::G4ThermalNeutrons(G4int ver) :
|
||||
G4VHadronPhysics("ThermalNeutrons", ver) {
|
||||
// because it is an addition, the type of this constructor is 0
|
||||
|
||||
@@ -4,6 +4,14 @@ 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!
|
||||
|
||||
## 2024-11-08 Alberto Ribon (phys-ctor-hinelastic-V11-02-02)
|
||||
- README : updated information for the coming release 11.3.
|
||||
|
||||
## 2024-10-22 Alberto Ribon (phys-ctor-hinelastic-V11-02-01)
|
||||
- Introduced new class G4URRNeutrons to enable the special treatment of the
|
||||
Unresolved Resonance Region (URR) via Particle Tables (PT) for low-energy
|
||||
neutrons. It can be used on top of any _HP or _HPT physics list.
|
||||
|
||||
## 2024-06-06 Vladimir Ivanchenko (phys-ctor-hinelastic-V11-02-00)
|
||||
- G4HadrocPhysicsQGSP_BERT_HP - used alternative NUDEX model of gamma de-excitation
|
||||
|
||||
|
||||
@@ -211,17 +211,25 @@ G4HadronPhysicsQGSP_FTFP_BERT
|
||||
---------------------------
|
||||
Similar to G4HadronPhysicsQGSP_BERT, but with a different treatment of
|
||||
low-energy neutrons:
|
||||
- neutron inelastic: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section;
|
||||
final-state: BERT between 19.9 MeV and 6 GeV,
|
||||
- neutron inelastic: for cross section, use G4NeutronHPInelasticXS
|
||||
below 20 MeV, and G4NeutronInelasticXS above;
|
||||
for final-state model, use G4NeutronHPInelasticVI
|
||||
below 20 MeV, BERT between 19.9 MeV and 6 GeV,
|
||||
FTFP between 3 and 25 GeV, QGSP above 12 GeV.
|
||||
- neutron capture: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above G4NeutronCaptureXS cross section
|
||||
and G4NeutronRadCapture final-state.
|
||||
- neutron fission: use NeutronHP (for both cross section and final state)
|
||||
below 20 MeV; above Gheisha (cross section and final state).
|
||||
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP).
|
||||
|
||||
- neutron capture: use G4NeutronHPCaptureXS cross section and
|
||||
G4NeutronRadCaptureHP final-state model
|
||||
(Note: if NuDEX is enabled (by default it is not),
|
||||
then G4NuDEXNeutronCaptureModel final-state
|
||||
model is used instead of G4NeutronRadCaptureHP).
|
||||
- neutron fission: use G4NeutronHPFissionXS cross section and
|
||||
G4NeutronFissionVI final-state model.
|
||||
Moreover, RadioactiveDecay is activated (as in all the physics lists that use HP)
|
||||
Important warning: since G4 11.2, this constructor is different than all
|
||||
other HP-based constructors for the treatment of neutrons
|
||||
below 20 MeV : new "experimental" cross sections and
|
||||
final-state models - which are different from the HP ones -
|
||||
are utilised for testing, and therefore we recommend to
|
||||
not using them for physics studies.
|
||||
|
||||
G4HadronPhysicsQGSP_BIC
|
||||
-----------------------
|
||||
@@ -300,3 +308,17 @@ G4HadronPhysicsQGSP_FTFP_BERT
|
||||
----------------
|
||||
Utility class which provides useful methods.
|
||||
|
||||
|
||||
G4URRNeutrons
|
||||
-------------
|
||||
Physics list constructor that can be applied on top of any _HP or _HPT based
|
||||
physics list, to enable the special Unresolved Resonance Region (URR) treatment
|
||||
of low-energy neutrons based on Particle Table (PT).
|
||||
Notes:
|
||||
- If this constructor is applied on top of a non-HP based physics list,
|
||||
then nothing changes and a warning is printed out.
|
||||
- If this constructor is applied on top of a HP-based physics list,
|
||||
and the thermal scattering is applied after G4URRNeutrons, then
|
||||
there will be a problem of full overlappings between models.
|
||||
Therefore, if you need thermal scattering, activate it (e.g. by
|
||||
using a HPT-based physics list) before applying G4URRNeutrons.
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * 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: G4URRNeutrons
|
||||
//
|
||||
// Author: Alberto Ribon - October 2024
|
||||
//
|
||||
// Description: Physics list constructor that can be applied on top of any
|
||||
// _HP or _HPT based physics list.
|
||||
// This class enables the special Unresolved Resonance Region
|
||||
// (URR) treatment of low-energy neutrons based on Particle
|
||||
// Table (PT).
|
||||
// If this constructor is applied on top of a non-HP based
|
||||
// physics list, then nothing is done (i.e. the physics list
|
||||
// remains as it was originally, and a warning is printed out).
|
||||
//
|
||||
// Modified:
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// Addition of neutron thermal scattering on top of any PhysicsList
|
||||
|
||||
#ifndef G4URRNeutrons_h
|
||||
#define G4URRNeutrons_h
|
||||
|
||||
#include "G4VHadronPhysics.hh"
|
||||
#include "globals.hh"
|
||||
|
||||
|
||||
class G4URRNeutrons : public G4VHadronPhysics {
|
||||
public:
|
||||
explicit G4URRNeutrons( G4int ver = 1 );
|
||||
virtual ~G4URRNeutrons();
|
||||
void ConstructProcess() override;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -7,43 +7,45 @@ geant4_add_module(G4phys_ctor_hinelastic
|
||||
G4HadronInelasticQBBC_ABLA.hh
|
||||
G4HadronPhysicsFTF_BIC.hh
|
||||
G4HadronPhysicsFTFP_BERT.hh
|
||||
G4HadronPhysicsFTFP_BERT_ATL.hh
|
||||
G4HadronPhysicsFTFP_BERT_HP.hh
|
||||
G4HadronPhysicsFTFP_BERT_TRV.hh
|
||||
G4HadronPhysicsFTFP_BERT_ATL.hh
|
||||
G4HadronPhysicsFTFQGSP_BERT.hh
|
||||
G4HadronPhysicsINCLXX.hh
|
||||
G4HadronPhysicsNuBeam.hh
|
||||
G4HadronPhysicsQGS_BIC.hh
|
||||
G4HadronPhysicsQGSP_BERT.hh
|
||||
G4HadronPhysicsQGSP_BERT_HP.hh
|
||||
G4HadronPhysicsQGSP_BIC.hh
|
||||
G4HadronPhysicsQGSP_BIC_AllHP.hh
|
||||
G4HadronPhysicsQGSP_BIC_HP.hh
|
||||
G4HadronPhysicsQGSP_FTFP_BERT.hh
|
||||
G4HadronPhysicsINCLXX.hh
|
||||
G4HadronPhysicsShielding.hh
|
||||
G4HadronPhysicsShieldingLEND.hh
|
||||
G4URRNeutrons.hh
|
||||
G4VHadronPhysics.hh
|
||||
G4HadronPhysicsQGSP_BIC_AllHP.hh
|
||||
SOURCES
|
||||
G4HadronInelasticQBBC.cc
|
||||
G4HadronInelasticQBBC_ABLA.cc
|
||||
G4HadronPhysicsFTF_BIC.cc
|
||||
G4HadronPhysicsFTFP_BERT.cc
|
||||
G4HadronPhysicsFTFP_BERT_ATL.cc
|
||||
G4HadronPhysicsFTFP_BERT_HP.cc
|
||||
G4HadronPhysicsFTFP_BERT_TRV.cc
|
||||
G4HadronPhysicsFTFP_BERT_ATL.cc
|
||||
G4HadronPhysicsFTFQGSP_BERT.cc
|
||||
G4HadronPhysicsINCLXX.cc
|
||||
G4HadronPhysicsNuBeam.cc
|
||||
G4HadronPhysicsQGS_BIC.cc
|
||||
G4HadronPhysicsQGSP_BERT.cc
|
||||
G4HadronPhysicsQGSP_BERT_HP.cc
|
||||
G4HadronPhysicsQGSP_BIC.cc
|
||||
G4HadronPhysicsQGSP_BIC_AllHP.cc
|
||||
G4HadronPhysicsQGSP_BIC_HP.cc
|
||||
G4HadronPhysicsQGSP_FTFP_BERT.cc
|
||||
G4HadronPhysicsINCLXX.cc
|
||||
G4HadronPhysicsShielding.cc
|
||||
G4HadronPhysicsShieldingLEND.cc
|
||||
G4VHadronPhysics.cc
|
||||
G4HadronPhysicsQGSP_BIC_AllHP.cc)
|
||||
G4URRNeutrons.cc
|
||||
G4VHadronPhysics.cc)
|
||||
|
||||
geant4_module_link_libraries(G4phys_ctor_hinelastic
|
||||
PUBLIC
|
||||
|
||||
@@ -0,0 +1,222 @@
|
||||
//
|
||||
// ********************************************************************
|
||||
// * License and Disclaimer *
|
||||
// * *
|
||||
// * The Geant4 software is copyright of the Copyright Holders of *
|
||||
// * the Geant4 Collaboration. It is provided under the terms and *
|
||||
// * conditions of the Geant4 Software License, included in the file *
|
||||
// * LICENSE and available at http://cern.ch/geant4/license . These *
|
||||
// * include a list of copyright holders. *
|
||||
// * *
|
||||
// * Neither the authors of this software system, nor their employing *
|
||||
// * institutes,nor the agencies providing financial support for this *
|
||||
// * work make any representation or warranty, express or implied, *
|
||||
// * regarding this software system or assume any liability for its *
|
||||
// * use. Please see the license in the file LICENSE and URL above *
|
||||
// * for the full disclaimer and the limitation of liability. *
|
||||
// * *
|
||||
// * This code implementation is the result of the scientific and *
|
||||
// * technical work of the GEANT4 collaboration. *
|
||||
// * By using, copying, modifying or distributing the software (or *
|
||||
// * any work based on the software) you agree to acknowledge its *
|
||||
// * use in resulting scientific publications, and indicate your *
|
||||
// * acceptance of all terms of the Geant4 Software license. *
|
||||
// ********************************************************************
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// ClassName: G4URRNeutrons
|
||||
//
|
||||
// Author: Alberto Ribon - October 2024
|
||||
//
|
||||
// Description: Physics list constructor that can be applied on top of any
|
||||
// _HP or _HPT based physics list.
|
||||
// This class enables the special Unresolved Resonance Region
|
||||
// (URR) treatment of low-energy neutrons based on Particle
|
||||
// Table (PT).
|
||||
// If this constructor is applied on top of a non-HP based
|
||||
// physics list, then nothing is done (i.e. the physics list
|
||||
// remains as it was originally, and a warning is printed out).
|
||||
//
|
||||
// Modified:
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
#include "G4URRNeutrons.hh"
|
||||
#include "G4ParticleDefinition.hh"
|
||||
#include "G4ProcessManager.hh"
|
||||
#include "G4HadronicProcess.hh"
|
||||
#include "G4HadronicParameters.hh"
|
||||
#include "G4ParticleHPElasticDataPT.hh"
|
||||
#include "G4ParticleHPElasticURR.hh"
|
||||
#include "G4ParticleHPCaptureDataPT.hh"
|
||||
#include "G4ParticleHPCaptureURR.hh"
|
||||
#include "G4ParticleHPFissionURR.hh"
|
||||
#include "G4ParticleHPFissionDataPT.hh"
|
||||
#include "G4ParticleHPInelasticDataPT.hh"
|
||||
#include "G4ParticleHPInelasticURR.hh"
|
||||
#include "G4BuilderType.hh"
|
||||
#include "G4PhysListUtil.hh"
|
||||
#include "G4SystemOfUnits.hh"
|
||||
|
||||
#include "G4PhysicsConstructorFactory.hh"
|
||||
G4_DECLARE_PHYSCONSTR_FACTORY( G4URRNeutrons );
|
||||
|
||||
|
||||
G4URRNeutrons::G4URRNeutrons( G4int ver ) : G4VHadronPhysics( "URRNeutrons", ver ) {}
|
||||
|
||||
|
||||
G4URRNeutrons::~G4URRNeutrons() {}
|
||||
|
||||
|
||||
void G4URRNeutrons::ConstructProcess() {
|
||||
// Find elastic, capture, fission and inelastic processes of neutron
|
||||
// (from the physics list on which this constructor is applied on top);
|
||||
// then look at their hadronic final-state models in order to disable those that
|
||||
// would otherwise fully overlap with the URR hadronic final-state models.
|
||||
// Note that for disabling a hadronic model - not being defined the "DeRegister"
|
||||
// method - it is enough to set to 0.0 the max energy of the model.
|
||||
|
||||
if ( G4HadronicParameters::Instance()->GetVerboseLevel() > 1 ) {
|
||||
G4cout << "### " << GetPhysicsName() << " Construct Processes " << G4endl;
|
||||
}
|
||||
G4Neutron* part = G4Neutron::Neutron();
|
||||
|
||||
// Elastic (including, eventually, thermal scattering)
|
||||
G4HadronicProcess* elasticProcess = G4PhysListUtil::FindElasticProcess( part );
|
||||
if ( elasticProcess == nullptr ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron elastic treatment: "
|
||||
<< "NOT found elastic process => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int niElastic = static_cast< G4int >( (elasticProcess->GetHadronicInteractionList()).size() );
|
||||
if ( niElastic < 1 ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron elastic treatment: "
|
||||
<< "NOT found any elastic model => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int indexHPelastic = -1;
|
||||
G4int indexHPthermalScattering = -1;
|
||||
for ( G4int index = 0; index < niElastic; ++index ) {
|
||||
if ( (elasticProcess->GetHadronicInteractionList())[index]->GetModelName() == "NeutronHPElastic" ) {
|
||||
indexHPelastic = index;
|
||||
} else if ( (elasticProcess->GetHadronicInteractionList())[index]->GetModelName() == "NeutronHPThermalScattering" ) {
|
||||
indexHPthermalScattering = index;
|
||||
}
|
||||
}
|
||||
if ( indexHPelastic >= 0 ) {
|
||||
(elasticProcess->GetHadronicInteractionList())[indexHPelastic]->SetMaxEnergy( 0.0 ); // Disabled
|
||||
G4cout << G4endl << " G4URRNeutrons::ConstructProcess() : found NeutronHPElastic => Disabled !" << G4endl;
|
||||
} else {
|
||||
G4cout << "### " << GetPhysicsName()
|
||||
<< " WARNING: NOT found NeutronHPElastic => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4bool isThermalScatteringOn = false;
|
||||
if ( indexHPthermalScattering > 0 ) isThermalScatteringOn = true;
|
||||
elasticProcess->AddDataSet( new G4ParticleHPElasticDataPT );
|
||||
elasticProcess->RegisterMe( new G4ParticleHPElasticURR( isThermalScatteringOn ) );
|
||||
|
||||
// Capture
|
||||
G4HadronicProcess* captureProcess = G4PhysListUtil::FindCaptureProcess( part );
|
||||
if ( captureProcess == nullptr ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron capture treatment: "
|
||||
<< "NOT found capture process => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int niCapture = static_cast< G4int >( (captureProcess->GetHadronicInteractionList()).size() );
|
||||
if ( niCapture < 1 ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron capture treatment: "
|
||||
<< "NOT found any capture model => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int indexHPcapture = -1;
|
||||
for ( G4int index = 0; index < niCapture; ++index ) {
|
||||
// For QGSP_BERT_HP, since G4 11.2, the neutron capture model is called either "nRadCaptureHP"
|
||||
// or "nuDEX_neutronCapture" (the latter when NuDEX is used).
|
||||
G4String nameNeutronCaptureModel = (captureProcess->GetHadronicInteractionList())[index]->GetModelName();
|
||||
if ( nameNeutronCaptureModel == "NeutronHPCapture" ||
|
||||
nameNeutronCaptureModel == "nRadCaptureHP" ||
|
||||
nameNeutronCaptureModel == "nuDEX_neutronCapture" ) {
|
||||
indexHPcapture = index;
|
||||
}
|
||||
}
|
||||
if ( indexHPcapture >= 0 ) {
|
||||
(captureProcess->GetHadronicInteractionList())[indexHPcapture]->SetMaxEnergy( 0.0 ); // Disabled
|
||||
G4cout << G4endl << " G4URRNeutrons::ConstructProcess() : found "
|
||||
<< (captureProcess->GetHadronicInteractionList())[indexHPcapture]->GetModelName()
|
||||
<< " => Disabled !" << G4endl;
|
||||
} else {
|
||||
G4cout << "### " << GetPhysicsName()
|
||||
<< " WARNING: NOT found any expected neutron capture model => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
captureProcess->AddDataSet( new G4ParticleHPCaptureDataPT );
|
||||
captureProcess->RegisterMe( new G4ParticleHPCaptureURR );
|
||||
|
||||
// Fission
|
||||
G4HadronicProcess* fissionProcess = G4PhysListUtil::FindFissionProcess( part );
|
||||
if ( fissionProcess == nullptr ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron fission treatment: "
|
||||
<< "NOT found fission process => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int niFission = static_cast< G4int >( (fissionProcess->GetHadronicInteractionList()).size() );
|
||||
if ( niFission < 1 ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron fission treatment: "
|
||||
<< "NOT found any fission model => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int indexHPfission = -1;
|
||||
for ( G4int index = 0; index < niFission; ++index ) {
|
||||
// For QGSP_BERT_HP, since G4 11.2, the neutron fission model is called "nFissionVI"
|
||||
G4String nameNeutronFissionModel = (fissionProcess->GetHadronicInteractionList())[index]->GetModelName();
|
||||
if ( nameNeutronFissionModel == "NeutronHPFission" || nameNeutronFissionModel == "nFissionVI" ) {
|
||||
indexHPfission = index;
|
||||
}
|
||||
}
|
||||
if ( indexHPfission >= 0 ) {
|
||||
(fissionProcess->GetHadronicInteractionList())[indexHPfission]->SetMaxEnergy( 0.0 ); // Disabled
|
||||
G4cout << G4endl << " G4URRNeutrons::ConstructProcess() : found "
|
||||
<< (fissionProcess->GetHadronicInteractionList())[indexHPfission]->GetModelName() // Disabled
|
||||
<< " => Disabled !" << G4endl;
|
||||
} else {
|
||||
G4cout << "### " << GetPhysicsName()
|
||||
<< " WARNING: NOT found any expected neutron fission model => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
fissionProcess->RegisterMe( new G4ParticleHPFissionURR );
|
||||
fissionProcess->AddDataSet( new G4ParticleHPFissionDataPT );
|
||||
|
||||
// Inelastic
|
||||
G4HadronicProcess* inelasticProcess = G4PhysListUtil::FindInelasticProcess( part );
|
||||
if ( inelasticProcess == nullptr ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron inelastic treatment: "
|
||||
<< "NOT found inelastic process => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int niInelastic = static_cast< G4int >( (inelasticProcess->GetHadronicInteractionList()).size() );
|
||||
if ( niInelastic < 1 ) {
|
||||
G4cout << "### " << GetPhysicsName() << " WARNING: Fail to add URR neutron inelastic treatment: "
|
||||
<< "NOT found any inelastic model => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
G4int indexHPinelastic = -1;
|
||||
for ( G4int index = 0; index < niInelastic; ++index ) {
|
||||
if ( (inelasticProcess->GetHadronicInteractionList())[index]->GetModelName() == "NeutronHPInelastic" ) {
|
||||
indexHPinelastic = index;
|
||||
}
|
||||
}
|
||||
if ( indexHPinelastic >= 0 ) {
|
||||
(inelasticProcess->GetHadronicInteractionList())[indexHPinelastic]->SetMaxEnergy( 0.0 ); // Disabled
|
||||
G4cout << G4endl << " G4URRNeutrons::ConstructProcess() : found NeutronHPInelastic => Disabled !" << G4endl;
|
||||
} else {
|
||||
G4cout << "### " << GetPhysicsName()
|
||||
<< " WARNING: NOT found NeutronHPInelastic => G4URRNeutrons returns without doing anything !" << G4endl;
|
||||
return;
|
||||
}
|
||||
inelasticProcess->AddDataSet( new G4ParticleHPInelasticDataPT );
|
||||
inelasticProcess->RegisterMe( new G4ParticleHPInelasticURR );
|
||||
}
|
||||
@@ -4,8 +4,11 @@ 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-11-09 Yoshihide Sato (phys-ctor-ions-V11-11-01)
|
||||
- Add a physics constructor, G4LightIonQMDPhsysics for light ion qmd.
|
||||
## 2024-11-08 Alberto Ribon (phys-ctor-ions-V11-02-00)
|
||||
- G4LightIonQMDPhysics, README : updated information, no changes to the code.
|
||||
|
||||
## 2023-11-09 Yoshihide Sato (phys-ctor-ions-V11-01-00)
|
||||
- Add a physics constructor, G4LightIonQMDPhysics for light ion QMD.
|
||||
|
||||
## 2021-12-10 Ben Morgan (phys-ctor-ions-V11-00-00)
|
||||
- Change to new Markdown History format
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
cross sections and final states) is used below 200 MeV/n for deuteron,
|
||||
triton, He3 and alpha (and BIC used above 190 MeV/n for these light ions).
|
||||
|
||||
G4IonQMDPhysic
|
||||
--------------
|
||||
G4IonQMDPhysics
|
||||
---------------
|
||||
Inelastic ion-ion processes (for deuteron, triton, He3, alpha and
|
||||
generic ion projectiles), with Glauber-Gribov cross section and
|
||||
BIC, QMD and FTFP for the final state. These three final-state models
|
||||
@@ -42,3 +42,14 @@
|
||||
- BIC below 110 MeV/nucleon;
|
||||
- QMD between 100 and 6'000 MeV/nucleon;
|
||||
- FTF above 5990 MeV/nucleon.
|
||||
|
||||
G4IonLightIonQMDPhysics
|
||||
-----------------------
|
||||
A variant of G4IonQMDPhysics, in which G4LightIonQMDReaction is used
|
||||
in the interval [30 MeV, 510 MeV].
|
||||
These four final-state models are used in the following intervals of
|
||||
projectile kinetic energy:
|
||||
- BIC below 40 MeV/nucleon;
|
||||
- LightIonQMD between 30 and 510 MeV/nucleon;
|
||||
- QMD between 500 and 6'000 MeV/nucleon;
|
||||
- FTF above 5990 MeV/nucleon.
|
||||
|
||||
@@ -26,10 +26,15 @@
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// ClassName: G4IonBinaryCascadeBuilder
|
||||
// Created from G4IonBinaryCascadePhysics
|
||||
// ClassName: G4LightIonQMDPhysics
|
||||
//
|
||||
// Author: Yoshihide Sato - November 2023
|
||||
//
|
||||
// Author: G.Folger
|
||||
// Description: Variant of G4IonQMDPhysics in which G4LightIonQMDReaction
|
||||
// is used in the interval [30 MeV, 510 MeV]/nucleon
|
||||
// (G4BinaryLightIonReaction is used below 40 MeV/nucleon,
|
||||
// and G4QMDReaction is used in the interval
|
||||
// [500 MeV, 6 GeV]/nucleon).
|
||||
//
|
||||
// Modified:
|
||||
//
|
||||
|
||||
@@ -26,10 +26,15 @@
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// ClassName: G4LightIonQMDPhysics
|
||||
// Created from G4IonBinaryCascadePhysics
|
||||
// ClassName: G4LightIonQMDPhysics
|
||||
//
|
||||
// Author: Yoshihide Sato - November 2023
|
||||
//
|
||||
// Author: G.Folger
|
||||
// Description: Variant of G4IonQMDPhysics in which G4LightIonQMDReaction
|
||||
// is used in the interval [30 MeV, 510 MeV]/nucleon
|
||||
// (G4BinaryLightIonReaction is used below 40 MeV/nucleon,
|
||||
// and G4QMDReaction is used in the interval
|
||||
// [500 MeV, 6 GeV]/nucleon).
|
||||
//
|
||||
// Modified:
|
||||
//
|
||||
|
||||
@@ -6,6 +6,11 @@ It must **not** be used as a substitute for writing good git commit messages!
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
## 2024-07-18 Gabriele Cosmo (phys-ctor-limiters-V11-02-00)
|
||||
- Fixed reported Coverity defect in G4FastSimulationPhysics, to use
|
||||
'const G4String&' for avoiding implicit copies; in G4GenericBiasingPhysics
|
||||
to use std::move().
|
||||
|
||||
## 2023-08-29 Ben Morgan (phys-ctor-limiters-V11-01-00)
|
||||
- Fix Coverity unreachable code warning
|
||||
|
||||
|
||||
@@ -96,7 +96,7 @@ void G4FastSimulationPhysics::ConstructProcess()
|
||||
if ( itr != fParticlesUnderFastSimulation.end() )
|
||||
{
|
||||
std::size_t ipos = itr - fParticlesUnderFastSimulation.begin();
|
||||
G4String geometry = fGeometries[ipos];
|
||||
const G4String& geometry = fGeometries[ipos];
|
||||
if ( geometry == "" ) G4FastSimulationHelper::ActivateFastSimulation(pmanager);
|
||||
else G4FastSimulationHelper::ActivateFastSimulation(pmanager, geometry);
|
||||
}
|
||||
|
||||
@@ -76,8 +76,7 @@ G4GenericBiasingPhysics::~G4GenericBiasingPhysics()
|
||||
void G4GenericBiasingPhysics::PhysicsBias(const G4String& particleName)
|
||||
{
|
||||
fBiasedParticles.push_back(particleName);
|
||||
std::vector< G4String > dummy;
|
||||
fBiasedProcesses.push_back(dummy);
|
||||
fBiasedProcesses.emplace_back();
|
||||
fBiasAllProcesses.push_back(true);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user