- Timestamp:
- Nov 19, 2009, 2:53:25 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/processes/electromagnetic/lowenergy/src/G4LinInterpolation.cc
r1007 r1192 25 25 // 26 26 // 27 // $Id: G4LinInterpolation.cc,v 1. 3 2006/06/29 19:40:03 gunterExp $28 // GEANT4 tag $Name: geant4-09-02$27 // $Id: G4LinInterpolation.cc,v 1.5 2009/09/25 07:41:34 sincerti Exp $ 28 // GEANT4 tag $Name: emlowen-V09-02-64 $ 29 29 // 30 30 // Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch) … … 33 33 // ----------- 34 34 // 31 Jul 2001 MGP Created 35 // 14 JUn 2009 NAK New Calculation method implemented to which logarithmic values 36 // from the G4EMLOW dataset are loaded directly to enhance performance 35 37 // 36 38 // ------------------------------------------------------------------- … … 56 58 const G4DataVector& data) const 57 59 { 60 //G4cout << "G4LinInterpolation is performed (2 arguments)" << G4endl; 58 61 G4int nBins = data.size() - 1; 59 62 G4double value = 0.; … … 76 79 return value; 77 80 } 81 82 83 //Nicolas A. Karakatsanis: New Calculation method implemented to which logarithmic values 84 // from the G4EMLOW dataset are loaded directly to enhance performance 85 86 G4double G4LinInterpolation::Calculate(G4double x, G4int bin, 87 const G4DataVector& points, 88 const G4DataVector& data, 89 const G4DataVector& log_points, 90 const G4DataVector& log_data) const 91 { 92 //Linear Interpolation is performed on loagarithmic data set 93 //Equivalent to log-log interpolation on non-loagarithmic data set 94 //G4cout << "G4LinInterpolation is performed - (4 arguments)" << G4endl; 95 G4int nBins = data.size() - 1; 96 G4double value = 0.; 97 G4double log_x = std::log10(x); 98 if (x < points[0]) 99 { 100 value = 0.; 101 } 102 else if (bin < nBins) 103 { 104 G4double log_e1 = log_points[bin]; 105 G4double log_e2 = log_points[bin+1]; 106 G4double log_d1 = log_data[bin]; 107 G4double log_d2 = log_data[bin+1]; 108 109 // Values e1, e2, d1 and d2 are the log values of the corresponding 110 // original energy and data values. Simple linear interpolation performed 111 // on loagarithmic data should be equivalent to log-log interpolation 112 value = log_d1 + (log_d2 - log_d1)*(log_x - log_e1)/(log_e2 - log_e1); 113 114 // Delogarithmize to obtain interpolated value 115 value = std::pow(10.,value); 116 } 117 else 118 { 119 value = data[nBins]; 120 } 121 return value; 122 }
Note: See TracChangeset
for help on using the changeset viewer.