Range - the -dE/dx and range C/C++ library


by Ricardo Yanez
Last updated: February 24, 2010

Range is a stopping power and range library written in C. It creates and stores in memory range tables based on the Northcliffe-Schilling[1] and Hubert-Bimbot-Gauvin[2] correlations that are used to calculate the energy loss of an ion after passage through a foil, or the incoming energy prior to passage based on the outgoing energy.

Since the Northcliffe-Schilling and Hubert-Bimbot-Gauvin correlations are valid for E/A < 12 MeV/A and 2.5 < E/A < 500 MeV/A, respectively, this library is mostly useful in analyzes of nuclear physics experiments in the low (E/A < 10 A MeV) and intermediate (10 < E/A < 150 A MeV) energy regimes, where usually a projectile, or reaction product, loose energy in the target material, dead layers in a detector, or in transmission detectors where only a fraction of the energy is deposited.

The library consists of four functions, passage(), egassap(), rangen() and thickn(), and the program range which is a front-end useful for quick estimations. The function passage() returns the ion energy after passage through an absorber, whereas egassap() returns the ingoing ion energy, given the energy after passage. If you know the energy of a beam, passage() can be used to calculate the energy deposited in a detector. Similarly, if you know the energy deposited by a reaction product in a detector, egassap() can be used to calculate its initial energy. The function rangen() returns the range of a projectile in a given material, and the function thickn() returns the foil thickness needed to produce a given energy loss. Manual pages and examples are available.

License

range is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version.

This is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the GNU General Public License for more details.

Download

File: range-0.1.3.tar.gz

Size: 359468 bytes

MD5 checksum: cc0d7ac71894bb00b4092c2de2ab3e87

Install

Untar the source,

$ tar -zxvf range-0.1.3.tar.gz

For a basic installation do shell commands,

$ cd range-0.1.3
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig

Do

$ ./configure --help
for more configuration options.

On Debian systems, install packages devscripts, debhelper and fakeroot, then

$ cd range-0.1.3
$ debuild binary
$ cd ..
$ dpkg -i range_0.1.3-1_i386.deb range-dev_0.1.3-1_i386.deb

Usage

Do 'man range' to see the synopsis and description of the range program.

Do 'man 3 passage' to see the synopsis and description of the range functions.

Example

In /usr/local/share/doc/range/examples/ you can find an example. Compile the code with,

$ gcc -O -Wall passage-example.c -o passage -lrange -lm [-I/usr/local/include] [-L/usr/local/lib]

and run,

$ ./passage
 
Calculating the energy of an alpha particle in air
 
Initial          mm of air          final
energy                              energy
(MeV)                               [1]             [2]
-------          ---------          ------
  25.0            0.500              23.60           23.57
  25.0            1.000              22.14           22.08
  25.0            1.500              20.60           20.50
  25.0            2.000              18.96           18.82
  25.0            2.500              17.21           17.01
  25.0            3.000              15.30           15.05
  25.0            3.500              13.19           12.87
  25.0            4.000              10.78           10.38
  25.0            4.500               7.88            7.37
  25.0            5.000               3.74            2.72
 
[1] Northcliffe-Schilling correlations
[2] Hubert-Bimbot-Gauvin correlations

Range in ROOT

To use the range functions in ROOT load the library with,

gSystem->Load("/usr/local/lib/librange")

then compile the code as usual. For example, testRange.C,

root [0] gSystem->Load("/usr/local/lib/librange")
root [1] .L testRange.C++
root [2] testRange()
98.9758
119.114
139.215
157.807
263.747

Notes

The method of constructing range tables to interpolate to desired range values is due to Prof. Jan-Olov Liljenzin, Chalmers Institute of Technology, Sweden. The original program written in FORTRAN was inherited to me during my time as a Ph.D. student at Uppsala University. Since the source code was not intended for the general public it was never copyrighted in any sense. I have taken the liberty to take parts of the original code, at least the spirit, port it to C and license it under GPL in the interest of a broader scientific community.

References

[1] - C. Northcliffe, R.F. Schilling, Nucl. Data Tables A7, 233 (1970).

[2] - F. Hubert, R. Rimbot and H. Gauvin, Atomic Data and Nuclear Data Tables 46, pp. 1-213 (1990).



This document was generated using AFT v5.096