Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/processes/hadronic/models/particle_hp/include/G4InterpolationManager.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  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 
 31 #include "G4HadronicException.hh"
 32 #include "G4InterpolationScheme.hh"
 33 #include "G4ios.hh"
 34 #include "globals.hh"
 35 
 36 #include <fstream>
 37 
 38 class G4InterpolationManager
 39 {
 40   public:
 41     friend class G4InterpolationIterator;
 42 
 43     G4InterpolationManager()
 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 
 55     ~G4InterpolationManager()
 56     {
 57       delete[] start;
 58       delete[] range;
 59       delete[] scheme;
 60     }
 61 
 62     G4InterpolationManager& operator=(const G4InterpolationManager& aManager)
 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 
126     G4InterpolationScheme MakeScheme(G4int it);
127 
128     inline G4InterpolationScheme GetScheme(G4int index) const
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 
144     inline G4InterpolationScheme GetInverseScheme(G4int index)
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
187