Geant4 11.2.2
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4InterpolationManager.hh
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#ifndef G4InterpolationManager_h
29#define G4InterpolationManager_h 1
30
33#include "G4ios.hh"
34#include "globals.hh"
35
36#include <fstream>
37
39{
40 public:
42
44 {
45 nRanges = 1;
46 start = new G4int[1];
47 start[0] = 0;
48 range = new G4int[1];
49 range[0] = 100000;
50 scheme = new G4InterpolationScheme[1];
51 scheme[0] = LINLIN;
52 nEntries = 0;
53 }
54
56 {
57 delete[] start;
58 delete[] range;
59 delete[] scheme;
60 }
61
63 {
64 if (this != &aManager) {
65 nRanges = aManager.nRanges;
66 nEntries = aManager.nEntries;
67 delete[] scheme;
68 delete[] start;
69 delete[] range;
70 scheme = new G4InterpolationScheme[nRanges];
71 start = new G4int[nRanges];
72 range = new G4int[nRanges];
73 for (G4int i = 0; i < nRanges; i++) {
74 scheme[i] = aManager.scheme[i];
75 start[i] = aManager.start[i];
76 range[i] = aManager.range[i];
77 }
78 }
79 return *this;
80 }
81
82 inline void Init(G4int aScheme, G4int aRange)
83 {
84 nRanges = 1;
85 start[0] = 0;
86 range[0] = aRange;
87 scheme[0] = MakeScheme(aScheme);
88 nEntries = aRange;
89 }
90 inline void Init(G4InterpolationScheme aScheme, G4int aRange)
91 {
92 nRanges = 1;
93 start[0] = 0;
94 range[0] = aRange;
95 scheme[0] = aScheme;
96 nEntries = aRange;
97 }
98
99 inline void Init(std::istream& aDataFile)
100 {
101 delete[] start;
102 delete[] range;
103 delete[] scheme;
104 aDataFile >> nRanges;
105 start = new G4int[nRanges];
106 range = new G4int[nRanges];
107 scheme = new G4InterpolationScheme[nRanges];
108 start[0] = 0;
109 G4int it;
110 for (G4int i = 0; i < nRanges; i++) {
111 aDataFile >> range[i];
112 //***************************************************************
113 // EMendoza -> there is a bug here.
114 /*
115 if(i!=0) start[i] = start[i-1]+range[i-1];
116 */
117 //***************************************************************
118 if (i != 0) start[i] = range[i - 1];
119 //***************************************************************
120 aDataFile >> it;
121 scheme[i] = MakeScheme(it);
122 }
123 nEntries = start[nRanges - 1] + range[nRanges - 1];
124 }
125
127
129 {
130 G4int it = 0;
131 for (G4int i = 1; i < nRanges; i++) {
132 if (index < start[i]) break;
133 it = i;
134 }
135 return scheme[it];
136 }
137
138 inline void CleanUp()
139 {
140 nRanges = 0;
141 nEntries = 0;
142 }
143
145 {
146 G4InterpolationScheme result = GetScheme(index);
147 if (result == HISTO) {
148 result = RANDOM;
149 }
150 else if (result == LINLOG) {
151 result = LOGLIN;
152 }
153 else if (result == LOGLIN) {
154 result = LINLOG;
155 }
156 else if (result == CHISTO) {
157 result = CRANDOM;
158 }
159 else if (result == CLINLOG) {
160 result = CLOGLIN;
161 }
162 else if (result == CLOGLIN) {
163 result = CLINLOG;
164 }
165 else if (result == UHISTO) {
166 result = URANDOM;
167 }
168 else if (result == ULINLOG) {
169 result = ULOGLIN;
170 }
171 else if (result == ULOGLIN) {
172 result = ULINLOG;
173 }
174 return result;
175 }
176
177 void AppendScheme(G4int aPoint, const G4InterpolationScheme& aScheme);
178
179 private:
180 G4int nRanges;
181 G4InterpolationScheme* scheme;
182 G4int* start;
183 G4int* range;
184 G4int nEntries;
185};
186#endif
G4InterpolationScheme
int G4int
Definition G4Types.hh:85
void AppendScheme(G4int aPoint, const G4InterpolationScheme &aScheme)
G4InterpolationScheme MakeScheme(G4int it)
void Init(G4int aScheme, G4int aRange)
void Init(std::istream &aDataFile)
G4InterpolationScheme GetScheme(G4int index) const
G4InterpolationManager & operator=(const G4InterpolationManager &aManager)
void Init(G4InterpolationScheme aScheme, G4int aRange)
G4InterpolationScheme GetInverseScheme(G4int index)