Import Geant4 11.2.1 source tree

This commit is contained in:
Gabriele Cosmo
2024-02-16 14:58:45 +01:00
parent 860a2b92bf
commit dda54bbdcf
331 changed files with 48457 additions and 50699 deletions
@@ -131,19 +131,27 @@ G4MicroElecInelasticModel_new::~G4MicroElecInelasticModel_new()
{
// Cross section
// (0)
TCSMap::iterator pos2;
for (pos2 = tableTCS.begin(); pos2 != tableTCS.end(); ++pos2) {
MapData* tableData = pos2->second;
for (auto pos = tableData->begin(); pos != tableData->end(); ++pos)
{
G4MicroElecCrossSectionDataSet_new* table = pos->second;
delete table;
}
for (auto const& p : tableTCS) {
MapData* tableData = p.second;
for (auto const& pos : *tableData) { delete pos.second; }
delete tableData;
}
tableTCS.clear();
// (1)
for (auto const & obj : eDiffDatatable) {
auto ptr = obj.second;
ptr->clear();
delete ptr;
}
for (auto const & obj : pDiffDatatable) {
auto ptr = obj.second;
ptr->clear();
delete ptr;
}
// (2)
for (auto const & obj : eNrjTransStorage) {
delete obj.second;
}
@@ -151,71 +159,37 @@ G4MicroElecInelasticModel_new::~G4MicroElecInelasticModel_new()
delete obj.second;
}
// (2)
for (auto const & obj : eDiffDatatable) {
delete obj.second;
}
for (auto const & obj : pDiffDatatable) {
delete obj.second;
// (3)
for (auto const& p : eProbaShellStorage) {
delete p.second;
}
// (3)
dataProbaShellMap::iterator iterator_probaShell;
for (iterator_probaShell = eProbaShellStorage.begin(); iterator_probaShell != eProbaShellStorage.end(); ++iterator_probaShell) {
vector<VecMap>* eProbaShellMap = iterator_probaShell->second;
eProbaShellMap->clear();
delete eProbaShellMap;
for (auto const& p : pProbaShellStorage) {
delete p.second;
}
eProbaShellStorage.clear();
for (iterator_probaShell = pProbaShellStorage.begin(); iterator_probaShell != pProbaShellStorage.end(); ++iterator_probaShell) {
vector<VecMap>* pProbaShellMap = iterator_probaShell->second;
pProbaShellMap->clear();
delete pProbaShellMap;
}
pProbaShellStorage.clear();
// (4)
TranfEnergyMap::iterator iterator_nrjtransf;
for (iterator_nrjtransf = eVecmStorage.begin(); iterator_nrjtransf != eVecmStorage.end(); ++iterator_nrjtransf) {
VecMap* eVecm = iterator_nrjtransf->second;
eVecm->clear();
delete eVecm;
for (auto const& p : eIncidentEnergyStorage) {
delete p.second;
}
eVecmStorage.clear();
for (iterator_nrjtransf = pVecmStorage.begin(); iterator_nrjtransf != pVecmStorage.end(); ++iterator_nrjtransf) {
VecMap* pVecm = iterator_nrjtransf->second;
pVecm->clear();
delete pVecm;
for (auto const& p : pIncidentEnergyStorage) {
delete p.second;
}
pVecmStorage.clear();
// (5)
incidentEnergyMap::iterator iterator_energy;
for (iterator_energy = eIncidentEnergyStorage.begin(); iterator_energy != eIncidentEnergyStorage.end(); ++iterator_energy) {
std::vector<G4double>* eTdummyVec = iterator_energy->second;
eTdummyVec->clear();
delete eTdummyVec;
for (auto const& p : eVecmStorage) {
delete p.second;
}
eIncidentEnergyStorage.clear();
for (iterator_energy = pIncidentEnergyStorage.begin(); iterator_energy != pIncidentEnergyStorage.end(); ++iterator_energy) {
std::vector<G4double>* pTdummyVec = iterator_energy->second;
pTdummyVec->clear();
delete pTdummyVec;
for (auto const& p : pVecmStorage) {
delete p.second;
}
pIncidentEnergyStorage.clear();
// (6)
MapStructure::iterator iterator_matStructure;
for (iterator_matStructure = tableMaterialsStructures.begin();
iterator_matStructure != tableMaterialsStructures.end(); ++iterator_matStructure) {
currentMaterialStructure = iterator_matStructure->second;
delete currentMaterialStructure;
for (auto const& p : tableMaterialsStructures) {
delete p.second;
}
tableMaterialsStructures.clear();
currentMaterialStructure = nullptr;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -304,6 +278,7 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
// Octobre 22nd, 2014 - Melanie Raine
//Creating vectors of maps for DCS and Cumulated DCS for the current material.
//Each vector is storing one map for each shell.
G4bool isUsed1 = false;
vector<TriDimensionMap>* eDiffCrossSectionData =
new vector<TriDimensionMap>; //Storage of [IncidentEnergy, TransfEnergy, DCS values], used in slower code
vector<TriDimensionMap>* eNrjTransfData =
@@ -312,7 +287,7 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
vector<G4double>* eTdummyVec = new vector<G4double>; //Storage of incident energies for interpolation
VecMap* eVecm = new VecMap; //Transfered energy map for slower code
for (int j = 0; j < currentMaterialStructure->NumberOfLevels(); j++) //Filling the map vectors with an empty map for each shell
for (G4int j = 0; j < currentMaterialStructure->NumberOfLevels(); ++j) //Filling the map vectors with an empty map for each shell
{
eDiffCrossSectionData->push_back(TriDimensionMap());
eNrjTransfData->push_back(TriDimensionMap());
@@ -328,7 +303,7 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
if (tDummy != eTdummyVec->back()) eTdummyVec->push_back(tDummy);
G4double tmp; //probability
for (int j = 0; j < currentMaterialStructure->NumberOfLevels(); j++)
for (G4int j = 0; j < currentMaterialStructure->NumberOfLevels(); ++j)
{
eDiffCrossSection >> tmp;
(*eDiffCrossSectionData)[j][tDummy][eDummy] = tmp;
@@ -339,16 +314,17 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
(*eProbaShellMap)[j][tDummy].push_back((*eDiffCrossSectionData)[j][tDummy][eDummy]);
}
else { // SI - only if eof is not reached !
if (!eDiffCrossSection.eof()) (*eDiffCrossSectionData)[j][tDummy][eDummy] *= scaleFactor;
(*eDiffCrossSectionData)[j][tDummy][eDummy] *= scaleFactor;
(*eVecm)[tDummy].push_back(eDummy);
}
}
}
//
G4cout << "add to material vector" << G4endl;
//G4cout << "add to material vector" << G4endl;
//Filing maps for the current material into the master maps
if (fasterCode) {
isUsed1 = true;
eNrjTransStorage[mat] = eNrjTransfData;
eProbaShellStorage[mat] = eProbaShellMap;
}
@@ -359,9 +335,13 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
eIncidentEnergyStorage[mat] = eTdummyVec;
//Cleanup support vectors
// delete eProbaShellMap;
// delete eDiffCrossSectionData;
// delete eNrjTransfData;
if (!isUsed1) {
delete eProbaShellMap;
delete eNrjTransfData;
} else {
delete eDiffCrossSectionData;
delete eVecm;
}
}
// *** PROTON
@@ -403,6 +383,7 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
//Creating vectors of maps for DCS and Cumulated DCS for the current material.
//Each vector is storing one map for each shell.
G4bool isUsed1 = false;
vector<TriDimensionMap>* pDiffCrossSectionData =
new vector<TriDimensionMap>; //Storage of [IncidentEnergy, TransfEnergy, DCS values], used in slower code
vector<TriDimensionMap>* pNrjTransfData =
@@ -411,9 +392,9 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
new vector<VecMap>; //Storage of the vectors containing all cumulated DCS values for an initial energy, by shell
vector<G4double>* pTdummyVec =
new vector<G4double>; //Storage of incident energies for interpolation
VecMap* eVecm = new VecMap; //Transfered energy map for slower code
VecMap* pVecm = new VecMap; //Transfered energy map for slower code
for (int j = 0; j < currentMaterialStructure->NumberOfLevels(); ++j)
for (G4int j = 0; j < currentMaterialStructure->NumberOfLevels(); ++j)
//Filling the map vectors with an empty map for each shell
{
pDiffCrossSectionData->push_back(TriDimensionMap());
@@ -430,7 +411,7 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
if (tDummy != pTdummyVec->back()) pTdummyVec->push_back(tDummy);
G4double tmp; //probability
for (int j = 0; j < currentMaterialStructure->NumberOfLevels(); j++)
for (G4int j = 0; j < currentMaterialStructure->NumberOfLevels(); j++)
{
pDiffCrossSection >> tmp;
(*pDiffCrossSectionData)[j][tDummy][eDummy] = tmp;
@@ -444,28 +425,32 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
(*pProbaShellMap)[j][tDummy].push_back((*pDiffCrossSectionData)[j][tDummy][eDummy]);
}
else { // SI - only if eof is not reached !
if (!pDiffCrossSection.eof()) (*pDiffCrossSectionData)[j][tDummy][eDummy] *= scaleFactor;
(*eVecm)[tDummy].push_back(eDummy);
(*pDiffCrossSectionData)[j][tDummy][eDummy] *= scaleFactor;
(*pVecm)[tDummy].push_back(eDummy);
}
}
}
//Filing maps for the current material into the master maps
if (fasterCode) {
isUsed1 = true;
pNrjTransStorage[mat] = pNrjTransfData;
pProbaShellStorage[mat] = pProbaShellMap;
}
else {
pDiffDatatable[mat] = pDiffCrossSectionData;
pVecmStorage[mat] = eVecm;
pVecmStorage[mat] = pVecm;
}
pIncidentEnergyStorage[mat] = pTdummyVec;
//Cleanup support vectors
//delete pNrjTransfData;
//delete eVecm;
//delete pDiffCrossSectionData;
//delete pProbaShellMap;
if (!isUsed1) {
delete pProbaShellMap;
delete pNrjTransfData;
} else {
delete pDiffCrossSectionData;
delete pVecm;
}
}
tableTCS[mat] = tableData;
}
@@ -494,7 +479,7 @@ void G4MicroElecInelasticModel_new::Initialise(const G4ParticleDefinition* parti
}
fAtomDeexcitation = G4LossTableManager::Instance()->AtomDeexcitation();
fParticleChangeForGamma = GetParticleChangeForGamma();
isInitialised = true;
}
@@ -603,8 +588,8 @@ G4double G4MicroElecInelasticModel_new::CrossSectionPerVolume(const G4Material*
G4cout << " - Cross section per Si atom (cm^-1)=" << sigma*density / (1. / cm) << G4endl;
}
return (sigma)*density;}
return (sigma)*density;
}
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
@@ -745,9 +730,6 @@ void G4MicroElecInelasticModel_new::SampleSecondaries(std::vector<G4DynamicParti
//if (!SEFromFermiLevel && weaklyBound) limitEnergy += currentMaterialStructure->GetEnergyGap();
fParticleChangeForGamma->SetProposedKineticEnergy(ekin - secondaryKinetic-limitEnergy); //Ef = Ei-(Q-El)-El = Ei-Q
fParticleChangeForGamma->ProposeLocalEnergyDeposit(limitEnergy-deexSecEnergy);
if (secondaryKinetic>0)
{
@@ -848,7 +830,7 @@ G4double G4MicroElecInelasticModel_new::RandomizeEjectedElectronEnergyFromCumula
if(secondaryElectronKineticEnergy <= 0.) {
secondaryElectronKineticEnergy = 0.0;
}
}
}
else {
secondaryElectronKineticEnergy = transf - currentMaterialStructure->GetLimitEnergy(shell);
// for weaklybound electrons = gap + average energy in the energy band
@@ -61,9 +61,8 @@ G4MicroElecLOPhononModel::G4MicroElecLOPhononModel(const G4ParticleDefinition*,
const G4String& nam)
: G4VEmModel(nam),isInitialised(false)
{
fParticleChangeForGamma = GetParticleChangeForGamma();
G4cout << "Phonon model is constructed " << G4endl
<< "Phonon Energy = " << phononEnergy / eV << " eV "<< G4endl;
<< "Phonon Energy = " << phononEnergy / eV << " eV "<< G4endl;
}
//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......