spis.Surf.InteractModel
Class DoublePowerLawRangeFunction

java.lang.Object
  extended byspis.Surf.InteractModel.FunctionOfParticle
      extended byspis.Surf.InteractModel.FunctionOfParticleE
          extended byspis.Surf.InteractModel.RangeFunction
              extended byspis.Surf.InteractModel.DoublePowerLawRangeFunction
All Implemented Interfaces:
ScalFunctionOf4Scal, ScalFunctionOfScal

public class DoublePowerLawRangeFunction
extends RangeFunction

Class Name : DoublePowerLawRangeFunction
Project ref : SPIS project
File name : DoublePowerLawRangeFunction.java
File type : class
Copyright : ONERA, 2 Av. E. Belin, 31055 Toulouse cedex, France http://www.onecert.fr
Status : under development
Creation : May 3, 2004
Modification :

Description : implements the range function l0*(r1*(E/E0)^n1 + r2*(E/E0)^n2).
Also returns the range function derivatives (= energy loss function...), which is used for approximate dose profile computation close to the surface, in particular for secondary emission.
The constructor inputs are in NASCAP units (Angstroms and keV, see below), but the computeXX() functions use SPIS more international units (meters and eVs)
In each ParameterSet (one set per material in ParameterSet[] parameter array), passed to the constructor, parameters must be:
- 0: NASCAP param 7: Range parameter r1 [Angstroms] in the range expression l0*(r1 (E/E0)^n1 + r2 (E/E0)^n2)
- 1: NASCAP param 8: Range parameter n1 [-]
- 2: NASCAP param 9: Range parameter r2 [Angstroms]
- 3: NASCAP param 10: Range parameter n2 [-]
NB: data in NASCAP databases are for E0 = 1000 eV (eV are energy units in SPIS), and l0 = 1e-10 m = 1A (length units are meters in SPIS, but E0 and l0 are defined in the constructors and values different of 1000 and 1e-10 may be used for non-NASCAP-originating parameters.

Versions and anomalies correction :

Version numberAuthor (name, e-mail) Corrections/Modifications
0.1 JF Roussel, roussel@onecert.frCreation


Version:
0.1
Author:
JF Roussel

Field Summary
private  float E0
          energy unit [eV] (usually 1000 eV)
private  float l0
          length unit in meters (usually 1e-10 m = 1 Angstrom)
private  ParameterSet[] params
          Double power law parameters
 
Fields inherited from class spis.Surf.InteractModel.FunctionOfParticle
defaultParamsId, materialRange, modelId, particleId, partTable
 
Constructor Summary
DoublePowerLawRangeFunction(ParameterSet[] params_, float E0_, float l0_, int modelId, int particleId, PartTable partTable)
          Default constructor.
 
Method Summary
protected  float compute(float E, int parId)
          Returns the range as a function of energy.
 float computeDeriv(float E)
          returns dR/dE as a function of energy
 float computeDeriv(float E, float matModId, float matId, float partId)
          returns dR/dE as a function of energy, depending on material Id (it is used for approximata dose profile computation close to the surface, in particular for secondary emission)
private  float computeDeriv(float E, int parId)
           
 float computeSecondDeriv(float E)
          returns d2R/dE2 as a function of energy
 float computeSecondDeriv(float E, float matModId, float matId, float partId)
          returns d2R/dE2 as a function of energy, depending on material Id (it may be used for approximata dose profile computation close to the surface, in particular for secondary emission)
private  float computeSecondDeriv(float E, int parId)
           
 
Methods inherited from class spis.Surf.InteractModel.FunctionOfParticleE
compute, compute, compute, compute
 
Methods inherited from class spis.Surf.InteractModel.FunctionOfParticle
getDefaultParamsId, getMaterialRange, getModelId, getParticleId, getPartTable, selectParamSet, setDefaultParams, setDefaultParamsId, setMaterialRange, setModelId, setParticleId, setPartTable
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

params

private ParameterSet[] params
Double power law parameters


E0

private float E0
energy unit [eV] (usually 1000 eV)


l0

private float l0
length unit in meters (usually 1e-10 m = 1 Angstrom)

Constructor Detail

DoublePowerLawRangeFunction

public DoublePowerLawRangeFunction(ParameterSet[] params_,
                                   float E0_,
                                   float l0_,
                                   int modelId,
                                   int particleId,
                                   PartTable partTable)
Default constructor.
Each parameter set

Parameters:
E0_ - reference energy in l0*(r1*(E/E0)^n1 + r2*(E/E0)^n2 law) (usually 1000 eV in NASCAP databases)
l0_ - reference length in l0*(r1*(E/E0)^n1 + r2*(E/E0)^n2 law) (usually 1e-10 in NASCAP databases)
partTable - particle table the particle Id refers to
Method Detail

compute

protected float compute(float E,
                        int parId)
Description copied from class: RangeFunction
Returns the range as a function of energy. May not always be needed, since material-indexed function should be used in principle (may even be forbidden => throws exception).

Specified by:
compute in class RangeFunction
Parameters:
E - particle energy [eV] (and not keV as often)
parId - Id of the parameter set to be used (i.e. material Id)
Returns:
range [m] (not Angstrom, translation is done by l0)
See Also:
FunctionOfParticleE.compute(float, float, float, float)

computeDeriv

public float computeDeriv(float E,
                          float matModId,
                          float matId,
                          float partId)
Description copied from class: RangeFunction
returns dR/dE as a function of energy, depending on material Id (it is used for approximata dose profile computation close to the surface, in particular for secondary emission)

Specified by:
computeDeriv in class RangeFunction
Parameters:
E - particle energy [eV] (and not keV as often)
matModId -
matId -
partId -
Returns:
d(range)/dE [m/eV]
See Also:
RangeFunction.computeDeriv(float, float, float, float)

computeDeriv

public float computeDeriv(float E)
Description copied from class: RangeFunction
returns dR/dE as a function of energy

Specified by:
computeDeriv in class RangeFunction
Parameters:
E - particle energy [eV] (and not keV as often)
Returns:
d(range)/dE [m/eV]
See Also:
RangeFunction.computeDeriv(float)

computeDeriv

private float computeDeriv(float E,
                           int parId)
Parameters:
E - particle energy [eV] (and not keV as often)
Returns:
d(range)/dE [m/eV]

computeSecondDeriv

public float computeSecondDeriv(float E,
                                float matModId,
                                float matId,
                                float partId)
Description copied from class: RangeFunction
returns d2R/dE2 as a function of energy, depending on material Id (it may be used for approximata dose profile computation close to the surface, in particular for secondary emission)

Specified by:
computeSecondDeriv in class RangeFunction
Parameters:
E - particle energy [eV] (and not keV as often)
matModId -
matId -
partId -
Returns:
d2(range)/dE2 [m/eV2]
See Also:
RangeFunction.computeSecondDeriv(float, float, float, float)

computeSecondDeriv

public float computeSecondDeriv(float E)
Description copied from class: RangeFunction
returns d2R/dE2 as a function of energy

Specified by:
computeSecondDeriv in class RangeFunction
Parameters:
E - particle energy [eV] (and not keV as often)
Returns:
d2(range)/dE2 [m/eV2]
See Also:
RangeFunction.computeSecondDeriv(float)

computeSecondDeriv

private float computeSecondDeriv(float E,
                                 int parId)
Parameters:
E - particle energy [eV] (and not keV as often)
Returns:
d2(range)/dE2 [m/eV2]