Geant4  9.6.p02
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
G4InterpolationManager.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 // neutron_hp -- source file
27 // J.P. Wellisch, Nov-1996
28 // A prototype of the low energy neutron transport model.
29 //
31 #include "G4HadronicException.hh"
32 
34  {
36  switch(it)
37  {
38  case 1:
39  result = HISTO;
40  break;
41  case 2:
42  result = LINLIN;
43  break;
44  case 3:
45  result = LINLOG;
46  break;
47  case 4:
48  result = LOGLIN;
49  break;
50  case 5:
51  result = LOGLOG;
52  break;
53  case 11:
54  result = CHISTO;
55  break;
56  case 12:
57  result = CLINLIN;
58  break;
59  case 13:
60  result = CLINLOG;
61  break;
62  case 14:
63  result = CLOGLIN;
64  break;
65  case 15:
66  result = CLOGLOG;
67  break;
68  case 21:
69  result = UHISTO;
70  break;
71  case 22:
72  result = ULINLIN;
73  break;
74  case 23:
75  result = ULINLOG;
76  break;
77  case 24:
78  result = ULOGLIN;
79  break;
80  case 25:
81  result = ULOGLOG;
82  break;
83  default:
84  throw G4HadronicException(__FILE__, __LINE__, "G4InterpolationManager: unknown interpolation scheme");
85  break;
86  }
87  return result;
88  }
89 
91  {
92  if(aPoint!=nEntries)
93  {
94  G4cout <<"G4InterpolationManager::AppendScheme - "<<aPoint<<" "<<nEntries<<G4endl;
95  throw G4HadronicException(__FILE__, __LINE__, "Wrong usage of G4InterpolationManager::AppendScheme");
96  }
97  if(nEntries==0)
98  {
99  nEntries = 1;
100  nRanges = 1;
101  start[0] = 0;
102  range [0] = 1;
103  scheme[0] = aScheme;
104  }
105  else if(aScheme==scheme[nRanges-1])
106  {
107  ++range[nRanges-1];
108  nEntries++;
109  }
110  else
111  {
112  nEntries++;
113  nRanges++;
114  G4int i;
115  G4int * buffer = new G4int[nRanges];
116  G4int * buffer1 = new G4int[nRanges];
117  G4InterpolationScheme* buff2 = new G4InterpolationScheme[nRanges];
118  for(i=0; i<nRanges-1; i++)
119  {
120  buffer[i] = start[i];
121  buffer1[i] = range[i];
122  buff2[i] = scheme[i];
123  }
124  delete [] start;
125  delete [] range;
126  delete [] scheme;
127  start = buffer;
128  range = buffer1;
129  scheme = buff2;
130  start[nRanges-1] = start[nRanges-2]+range[nRanges-2];
131  range[nRanges-1] = 1;
132  scheme[nRanges-1] = aScheme;
133  }
134  }