1
0
Fork 0
mirror of https://github.com/gwm17/catima.git synced 2024-12-03 07:28:49 -05:00
catima/catimac.pxd
2018-02-14 11:53:56 +01:00

139 lines
4.9 KiB
Cython

"""
catima cython
~~~~~~~~~~~~~~~~~
:copyright: (c) 2017 by Andrej Prochazka
:licence: GNU Affero General Public License, see LICENCE for more details
"""
from libcpp.vector cimport vector
from libcpp cimport bool
cdef extern from "catima/structures.h" namespace "catima":
cdef struct Target:
double A
int Z
double stn
cdef struct Projectile:
double A
double Z
double Q
double T
cdef struct Result:
double Ein
double Eout
double Eloss
double range
double dEdxi
double dEdxo
double sigma_E
double sigma_a
double sigma_r
double tof
cdef cppclass MultiResult:
vector[Result] results
Result total_result
cdef cppclass Material:
Material() except +
void add_element(double , int , double )
Target get_element(int)
int ncomponents()
double M()
double density()
void density(double val)
double thickness()
void thickness(double val)
void calculate()
double I()
void I(double val)
cdef cppclass Layers:
Layers() except +
const vector[Material]& get_materials() const
void add(Material m)
int num()const
Material& operator[](int i)
Layers& operator=(const Layers& other)
cdef extern from "catima/material_database.h" namespace "catima":
cdef Material get_material(int)
cdef extern from "catima/config.h" namespace "catima":
cdef struct Config:
char z_effective;
char skip;
char dedx;
char dedx_straggling
cdef extern from "catima/catima.h" namespace "catima":
cdef double dedx(Projectile &p, double T, const Material &t,const Config &c)
cdef double domega2dx(Projectile &p, double T, const Material &mat, const Config &c)
cdef double range(Projectile &p, double T, const Material &t, const Config &c);
cdef double dedx_from_range(Projectile &p, double T, const Material &t, const Config &c);
cdef vector[double] dedx_from_range(Projectile &p, vector[double] &T, const Material &t, const Config &c);
cdef double energy_out(Projectile &p, double T, const Material &t, const Config &c);
cdef vector[double] energy_out(Projectile &p, vector[double] &T, const Material &t, const Config &c);
cdef double domega2de(Projectile &p, double T, const Material &t, const Config &c);
cdef double da2de(Projectile &p, double T, const Material &t, const Config &c);
cdef double range_straggling(Projectile &p, double T, const Material &t, const Config &c);
cdef double da2dx(Projectile &p, double T, const Material &t, const Config &c);
cdef double angular_variance(Projectile &p, double T, const Material &t, const Config& c);
cdef Result calculate(Projectile &p, const Material &t, const Config &c);
cdef MultiResult calculate(Projectile &p, const Layers &layers, const Config &c);
cdef extern from "catima/calculations.h" namespace "catima":
cdef double bethek_lindhard(const Projectile &p);
cdef double bethek_lindhard_X(const Projectile &p);
cdef double bethek_dedx_e(Projectile &p,const Target &t, const Config &c, double I);
cdef double sezi_dedx_e(const Projectile &p, const Target &t);
cdef double z_effective(const Projectile &p, const Target &t, const Config &c);
cdef double z_eff_Pierce_Blann(double z, double beta);
cdef double z_eff_Anthony_Landford(double pz, double beta, double tz);
cdef double z_eff_Hubert(double pz, double E, double tz);
cdef double z_eff_Winger(double pz, double beta, double tz);
cdef double z_eff_global(double pz, double E, double tz);
cdef double z_eff_atima14(double pz, double E, double tz);
cdef double z_eff_Schiwietz(double pz, double beta, double tz);
cdef double gamma_from_T(double T);
cdef double beta_from_T(double T);
cdef extern from "catima/constants.h" namespace "catima":
int max_datapoints "catima::max_datapoints"
int max_storage_data "catima::max_storage_data"
int logEmin "catima::logEmin"
int logEmax "catima::logEmax"
cdef extern from "catima/storage.h" namespace "catima":
cdef cppclass Interpolator:
Interpolator(const double *x, const double *y, int num) except +
double eval(double)
double derivative(double)
cdef cppclass DataPoint:
Projectile p
Material m
Config config
vector[double] range
vector[double] range_straggling
vector[double] angular_variance
cdef cppclass Data:
Data() except +
DataPoint& Get(unsigned int i)
int GetN()
cdef cppclass EnergyTableType "catima::EnergyTable[max_datapoints]":
size_t num;
double operator()(int i)
cdef EnergyTableType energy_table;
cdef Data _storage;
cdef DataPoint& get_data(const Projectile &p, const Material &t, Config c);