Ignore:
Timestamp:
Nov 19, 2009, 2:53:25 PM (15 years ago)
Author:
garnier
Message:

update par rapport a CVS

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/processes/electromagnetic/lowenergy/src/G4LinInterpolation.cc

    r1007 r1192  
    2525//
    2626//
    27 // $Id: G4LinInterpolation.cc,v 1.3 2006/06/29 19:40:03 gunter Exp $
    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 $
    2929//
    3030// Author: Maria Grazia Pia (Maria.Grazia.Pia@cern.ch)
     
    3333// -----------
    3434// 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
    3537//
    3638// -------------------------------------------------------------------
     
    5658                                       const G4DataVector& data) const
    5759{
     60  //G4cout << "G4LinInterpolation is performed (2 arguments)" << G4endl;
    5861  G4int nBins = data.size() - 1;
    5962  G4double value = 0.;
     
    7679  return value;
    7780}
     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
     86G4double 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.