Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ElementData.cc
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25
26//---------------------------------------------------------------------------
27//
28// GEANT4 Class file
29//
30// Description: Data structure for cross sections, shell cross sections
31// isotope cross sections
32//
33// Author: V.Ivanchenko 10.03.2011
34//
35// Modifications:
36//
37//----------------------------------------------------------------------------
38
39#include "G4ElementData.hh"
41
43 : maxNumElm(length)
44{
45 elmData.resize(maxNumElm, nullptr);
47}
48
50{
51 for (auto const & p : elmData) { delete p; }
52 for (auto const & p : elm2Data) { delete p; }
53 for (auto const & p : compData) {
54 if (nullptr != p ) {
55 for (auto const & q : *p) { delete q.second; }
56 delete p;
57 }
58 }
59 for (auto const & p : comp2D) {
60 if (nullptr != p ) {
61 for (auto const & q : *p) { delete q.second; }
62 delete p;
63 }
64 }
66}
67
69{
70 if (Z < 0 || Z >= maxNumElm) {
71 DataError(Z, "InitialiseForElement");
72 return;
73 }
74 delete elmData[Z];
75 elmData[Z] = v;
76}
77
79{
80 if (Z < 0 || Z >= maxNumElm) {
81 DataError(Z, "InitialiseForElement");
82 return;
83 }
84 if (0 == elm2Data.size()) {
85 elm2Data.resize(maxNumElm, nullptr);
86 }
87 delete elm2Data[Z];
88 elm2Data[Z] = v;
89}
90
92{
93 if (Z < 0 || Z >= maxNumElm) {
94 DataError(Z, "InitialiseForComponent");
95 return;
96 }
97 if (0 == compData.size()) {
98 compData.resize(maxNumElm, nullptr);
99 }
100 delete compData[Z];
101 compData[Z] = new std::vector<std::pair<G4int, G4PhysicsVector*> >;
102 if (0 < nComponents) { compData[Z]->reserve(nComponents); }
103}
104
106{
107 if (Z < 0 || Z >= maxNumElm) {
108 DataError(Z, "InitialiseFor2DComponent");
109 return;
110 }
111 if (0 == comp2D.size()) {
112 comp2D.resize(maxNumElm, nullptr);
113 }
114 delete comp2D[Z];
115 comp2D[Z] = new std::vector<std::pair<G4int, G4Physics2DVector*> >;
116 if (0 < nComponents) { comp2D[Z]->reserve(nComponents); }
117}
118
120{
121 if (Z < 0 || Z >= maxNumElm) {
122 DataError(Z, "AddComponent");
123 return;
124 }
125 if (0 == compData.size()) {
126 compData.resize(maxNumElm, nullptr);
127 }
128 if (nullptr == compData[Z]) {
129 compData[Z] = new std::vector<std::pair<G4int, G4PhysicsVector*> >;
130 }
131 compData[Z]->emplace_back(id, v);
132}
133
135{
136 if (Z < 0 || Z >= maxNumElm) {
137 DataError(Z, "Add2DComponent");
138 return;
139 }
140 if (0 == comp2D.size()) {
141 compData.resize(maxNumElm, nullptr);
142 }
143 if (nullptr == comp2D[Z]) {
144 comp2D[Z] = new std::vector<std::pair<G4int, G4Physics2DVector*> >;
145 }
146 comp2D[Z]->emplace_back(id, v);
147}
148
149void G4ElementData::DataError(G4int Z, const G4String& type)
150{
151 G4cout << "G4ElementData::" << type << " ERROR for G4ElementData <"
152 << name << "> Z = " << Z << " is out of range!" << G4endl;
153 G4Exception("G4ElementData", "mat603", FatalException, "Wrong data handling");
154}
@ FatalException
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
int G4int
Definition G4Types.hh:85
#define G4endl
Definition G4ios.hh:67
G4GLOB_DLL std::ostream G4cout
static G4ElementDataRegistry * Instance()
void RegisterMe(G4ElementData *p)
void RemoveMe(G4ElementData *p)
void InitialiseFor2DComponent(G4int Z, G4int nComponents=0)
void Add2DComponent(G4int Z, G4int id, G4Physics2DVector *v)
void InitialiseForComponent(G4int Z, G4int nComponents=0)
void InitialiseForElement(G4int Z, G4PhysicsVector *v)
G4ElementData(G4int length=99)
void AddComponent(G4int Z, G4int id, G4PhysicsVector *v)