1
0
Fork 0
mirror of https://github.com/gwm17/catima.git synced 2024-11-23 02:38:51 -05:00

obsolete files removed

This commit is contained in:
hrocho 2019-10-08 19:48:12 +02:00
parent 6697535fac
commit a7581f9f69
7 changed files with 0 additions and 837 deletions

View File

@ -1,550 +0,0 @@
"""
catima python module
~~~~~~~~~~~
This module provides interface to the catima c++ library
:copyright: (c) 2017 by Andrej Prochazka
:licence: GNU Affero General Public License, see LICENCE for more details
"""
cimport catimac
from libcpp.vector cimport vector
from enum import IntEnum
import numpy
cdef class Material:
cdef catimac.Material cbase
def __cinit__(self, elements=None, thickness=None, density=None, i_potential=None):
self.cbase = catimac.Material()
if(elements and (isinstance(elements[0],float) or isinstance(elements[0],int))):
self.cbase.add_element(elements[0],elements[1],elements[2])
if(elements and isinstance(elements[0],list)):
for e in elements:
self.cbase.add_element(e[0],e[1],e[2])
self.cbase.calculate()
if(not thickness is None):
self.thickness(thickness)
if(not density is None):
self.density(density)
if(not i_potential is None):
self.I(i_potential)
cdef from_c(self, catimac.Material &other):
self.cbase = other
cdef catimac.Material getc(self):
cdef catimac.Material res
res = self.cbase
return res
def copy(self):
res = Material()
res.cbase = self.cbase
return res
def add_element(self, a, z , s):
self.cbase.add_element(a, z, s)
def ncomponents(self):
return self.cbase.ncomponents()
def molar_mass(self):
return self.cbase.M()
def M(self):
return self.cbase.M()
def density(self, val=None):
if(val is None):
return self.cbase.density()
else:
return self.cbase.density(val)
def thickness(self, val=None):
if(val is None):
return self.cbase.thickness()
else:
return self.cbase.thickness(val)
def thickness_cm(self, val):
return self.cbase.thickness_cm(val)
def I(self, val=None):
if(val is None):
return self.cbase.I()
else:
return self.cbase.I(val)
class material(IntEnum):
PLASTIC = 201
AIR = 202
CH2 = 203
LH2 = 204
LD2 = 205
WATER = 206
DIAMOND = 207
GLASS = 208
ALMG3 = 209
ARCO2_30 = 210
CF4 = 211
ISOBUTANE = 212
KAPTON = 213
MYLAR = 214
NAF = 215
P10 = 216
POLYOLEFIN = 217
CMO2 = 218
SUPRASIL = 219
HAVAR = 220
STEEL = 221
METHANE = 222
def get_material(int matid):
res = Material()
cdef catimac.Material cres = catimac.get_material(matid);
res.from_c(cres)
return res
cdef class Target:
cdef catimac.Target cbase
def __cinit__(self,a,z,stn):
self.cbase.A = a
self.cbase.Z = z
self.cbase.stn = stn
def A(self):
return self.cbase.A
def Z(self):
return self.cbase.Z
def stn(self):
return self.cbase.stn
cdef class Layers:
cdef public:
materials
def __init__(self):
self.materials=[]
def add(self,Material m):
self.materials.append(m.copy())
def num(self):
return len(self.materials)
def get(self, key):
return self.materials[key]
def __getitem__(self, key):
if(isinstance(key,int) and key<self.num()):
return self.get(key)
return None
def __add__(self, other):
res = Layers()
for e in self.materials:
res.add(e)
if(isinstance(other,Layers)):
for e in other.materials:
res.add(e)
if(isinstance(other,Material)):
res.add(other.copy())
return res
cdef catimac.Layers getc(self):
cdef catimac.Layers res
#for l in self.materials:
# res.add(l.getc())
return res
cdef class Projectile:
cdef catimac.Projectile cbase
def __cinit__(self, A, Z, Q=None,T=None):
self.cbase.A = A
self.cbase.Z = Z
self.cbase.Q = Z
if(Q):
self.cbase.Q = Q
if(T):
self.cbase.T = T
def T(self,val=None):
if(val is None):
return self.cbase.T
self.cbase.T = val;
def __call__(self,val=None):
if(val is None):
return self.cbase.T
else:
self.T(val)
return self
def A(self):
return self.cbase.A
def Z(self):
return self.cbase.Z
def Q(self):
return self.cbase.Q
cdef class Result:
cdef public double Ein
cdef public double Eout
cdef public double Eloss
cdef public double range
cdef public double dEdxi
cdef public double dEdxo
cdef public double sigma_E
cdef public double sigma_a
cdef public double sigma_r
cdef public double tof
cdef public double sp
def __init__(self):
self.Ein=0.0
self.Eout=0.0
self.Eloss=0.0
self.range=0.0
self.dEdxi=0.0
self.dEdxo=0.0
self.sigma_E=0.0
self.sigma_a=0.0
self.sigma_r=0.0
self.tof=0.0
self.sp=1.0
def get_dict(self):
return {"Ein":self.Ein,
"Eout":self.Eout,
"Eloss":self.Eloss,
"range":self.range,
"dEdxi":self.dEdxi,
"dEdxo":self.dEdxo,
"sigma_E":self.sigma_E,
"sigma_a":self.sigma_a,
"sigma_r":self.sigma_r,
"tof":self.tof,
"sp":self.sp,
}
def __getitem__(self,key):
d = self.get_dict()
if(key in d):
return d[key]
cdef setc(self,catimac.Result &val):
self.Ein=val.Ein
self.Eout=val.Eout
self.Eloss=val.Eloss
self.range=val.range
self.dEdxi=val.dEdxi
self.dEdxo=val.dEdxo
self.sigma_E=val.sigma_E
self.sigma_a=val.sigma_a
self.sigma_r=val.sigma_r
self.tof=val.tof
self.sp=val.sp
cdef class MultiResult:
cdef public Result total_result
cdef public results
cdef public total
def __init__(self):
self.total_result = Result()
self.results = []
self.total = {}
cdef setc(self, catimac.MultiResult &val):
self.total_result.setc(val.total_result)
for e in val.results:
self.results.append(e)
self.total = self.total_result.get_dict()
def __getitem__(self,key):
if(isinstance(key,int) and key<len(self.results)):
return self.results[key]
if(isinstance(key,str) and key in self.total):
return self.total[key]
return None
def getJSON(self):
res = {}
res["result"] = self.total
res["partial"] = []
for r in self.results:
res["partial"].append(r)
return res
class z_eff_type(IntEnum):
none = 0,
pierce_blann = 1
anthony_landorf = 2
hubert = 3
winger = 4
schiwietz = 5
global_code = 6
atima14 = 7
class omega_type(IntEnum):
atima = 0,
bohr = 1
class skip_calculation(IntEnum):
skip_none = 0
skip_tof = 1
skip_sigma_a = 2
skip_sigma_r = 4
class corrections(IntEnum):
no_barkas = 1
no_lindhard = 2
no_shell_correction = 4
no_highenergy = 8
cdef class Config:
cdef catimac.Config cbase
def __cinit__(self):
#self.cbase = catimac.Config()
self.cbase.z_effective = z_eff_type.pierce_blann
self.cbase.skip = 0
self.cbase.calculation = 1
self.cbase.corrections = 0
def z_effective(self, val=None):
if(val is None):
return self.cbase.z_effective
else:
self.cbase.z_effective = val
def skip_calculation(self, val=None):
if(val is None):
return self.cbase.skip
else:
self.cbase.skip = val
def corrections(self, val=None):
if(val is None):
return self.cbase.corrections
else:
self.cbase.corrections = val
def calculation(self, val=None):
if(val is None):
return self.cbase.calculation
else:
self.cbase.calculation = val
def set(self,other):
if("z_effective" in other):
self.cbase.z_effective = other["z_effective"]
if("calculation" in other):
self.cbase.calculation = other["calculation"]
if("corrections" in other):
self.cbase.corrections = other["corrections"]
def get(self):
res = {}
res["z_effective"] = self.cbase.z_effective
res["corrections"] = self.cbase.corrections
res["calculation"] = self.cbase.calculation
res["skip"] = self.cbase.skip
return res
def print_info(self):
print("z_effective = %s"%z_eff_type(self.cbase.z_effective))
print("calculation = %s"%omega_type(self.cbase.dedx_straggling))
default_config = Config()
def calculate(Projectile projectile, material, energy = None, config=default_config):
if(not energy is None):
projectile.T(energy)
if(isinstance(material,Material)):
return calculate_material(projectile, material, config = config)
if(isinstance(material,Layers)):
return calculate_layers(projectile, material, config = config)
def calculate_material(Projectile projectile, Material material, energy = None, Config config = default_config):
if(not energy is None):
projectile.T(energy)
cdef catimac.Result cres = catimac.calculate(projectile.cbase,material.cbase,config.cbase)
res = Result()
res.setc(cres)
return res
def calculate_layers(Projectile projectile, Layers layers, energy = None, Config config = default_config):
cdef catimac.Layers clayers
clayers = catimac.Layers()
clayers = get_clayers(layers)
if(not energy is None):
projectile.T(energy)
cdef catimac.MultiResult cres = catimac.calculate(projectile.cbase, clayers, config.cbase)
res = MultiResult()
res.setc(cres)
return res
cdef catimac.Layers get_clayers(Layers layers):
cdef catimac.Layers res
cdef catimac.Material m
for l in layers.materials:
m = get_cmaterial(l)
res.add(m)
return res
cdef catimac.Material get_cmaterial(Material material):
cdef catimac.Material res
res = material.cbase
return res
def projectile_range(Projectile projectile, Material material, energy = None, Config config = default_config):
if(isinstance(energy,numpy.ndarray)):
res = numpy.empty(energy.size)
for i,e in enumerate(energy):
projectile.T(e)
res[i] = catimac.range(projectile.cbase, material.cbase, config.cbase)
return res
elif(energy is not None):
projectile.T(energy)
return catimac.range(projectile.cbase, material.cbase, config.cbase);
def dedx_from_range(Projectile projectile, Material material, energy = None, Config config = default_config):
if(isinstance(energy,numpy.ndarray)):
res = catimac.dedx_from_range(projectile.cbase, <vector[double]>energy.tolist(), material.cbase, config.cbase)
return numpy.asarray(res);
if(isinstance(energy,list)):
return catimac.dedx_from_range(projectile.cbase, <vector[double]>energy, material.cbase, config.cbase)
if(energy is not None):
projectile.T(energy)
return catimac.dedx_from_range(projectile.cbase, material.cbase, config.cbase);
def domega2de(Projectile projectile, Material material, energy = None, Config config = default_config):
if(isinstance(energy,numpy.ndarray)):
res = numpy.empty(energy.size)
for i,e in enumerate(energy):
res[i] = catimac.domega2de(projectile.cbase, e, material.cbase, config.cbase)
return res
if(energy is None):
energy = projectile.T()
return catimac.domega2de(projectile.cbase, energy, material.cbase, config.cbase);
def da2de(Projectile projectile, Material material, energy = None, Config config = default_config):
if(isinstance(energy,numpy.ndarray)):
res = numpy.empty(energy.size)
for i,e in enumerate(energy):
res[i] = catimac.da2de(projectile.cbase, e, material.cbase, config.cbase)
return res
if(energy is None):
energy = projectile.T()
return catimac.da2de(projectile.cbase, energy, material.cbase, config.cbase);
def dedx(Projectile projectile, Material material, energy = None, Config config = default_config):
if(isinstance(energy,numpy.ndarray)):
res = numpy.empty(energy.size)
for i,e in enumerate(energy):
projectile.T(e)
res[i] = catimac.dedx(projectile.cbase, material.cbase, config.cbase)
return res
if(energy is not None):
projectile.T(energy)
return catimac.dedx(projectile.cbase, material.cbase, config.cbase)
def domega2dx(Projectile projectile, Material material, energy = None, Config config = default_config):
if(isinstance(energy,numpy.ndarray)):
res = numpy.empty(energy.size)
for i,e in enumerate(energy):
res[i] = catimac.domega2dx(projectile.cbase, e, material.cbase, config.cbase)
return res
if(energy is None):
energy = projectile.T()
return catimac.domega2dx(projectile.cbase, energy, material.cbase, config.cbase)
def energy_out(Projectile projectile, Material material, energy = None, Config config = default_config):
if(isinstance(energy,numpy.ndarray)):
res = catimac.energy_out(projectile.cbase, <vector[double]>energy.tolist(), material.cbase, config.cbase)
return numpy.asarray(res)
if(isinstance(energy,list)):
return catimac.energy_out(projectile.cbase, <vector[double]>energy, material.cbase, config.cbase)
if(energy is None):
energy = projectile.T()
return catimac.energy_out(projectile.cbase, <double>energy, material.cbase, config.cbase)
def w_magnification(Projectile projectile, Material material, energy = None, Config config = default_config):
if(energy is None):
energy = projectile.T()
return catimac.w_magnification(projectile.cbase,energy, material.cbase, config.cbase)
def bethek_dedx_e(Projectile projectile, Target t, Config c = default_config, Ipot=0.0):
return catimac.bethek_dedx_e(projectile.cbase, t.cbase,c.cbase,Ipot)
def lindhard(Projectile projectile):
return catimac.bethek_lindhard(projectile.cbase);
def lindhard_X(Projectile projectile):
return catimac.bethek_lindhard_X(projectile.cbase);
def z_effective(Projectile p, Target t, Config c = default_config):
return catimac.z_effective(p.cbase, t.cbase, c.cbase)
def z_eff_Pierce_Blann(double z, double beta):
return catimac.z_eff_Pierce_Blann(z,beta)
def z_eff_Anthony_Landford(double pz, double beta, double tz):
return catimac.z_eff_Anthony_Landford(pz, beta, tz);
def z_eff_Hubert(double pz, double E, double tz):
return catimac.z_eff_Hubert(pz, E, tz);
def z_eff_Winger(double pz, double beta, double tz):
return catimac.z_eff_Winger(pz, beta, tz);
def z_eff_global(double pz, double E, double tz):
return catimac.z_eff_global(pz, E, tz);
def z_eff_atima14(double pz, double E, double tz):
return catimac.z_eff_atima14(pz, E, tz);
def z_eff_Schiwietz(double pz, double beta, double tz):
return catimac.z_eff_Schiwietz(pz, beta, tz);
def gamma_from_T(double T):
return catimac.gamma_from_T(T);
def beta_from_T(double T):
return catimac.beta_from_T(T);
def get_data(Projectile projectile, Material material, Config config = default_config):
data = catimac.get_data(projectile.cbase, material.cbase, config.cbase)
return [data.range,data.range_straggling,data.angular_variance]
# constants
max_datapoints = catimac.max_datapoints
max_storage_data = catimac.max_storage_data
logEmin = catimac.logEmin
logEmax = catimac.logEmax
def energy_table(unsigned int i):
if(i<catimac.energy_table.num):
return catimac.energy_table(i)
else:
return -1.0
def get_energy_table():
r = [catimac.energy_table(x) for x in range(catimac.energy_table.num)]
return r
def storage_info():
res = []
for i in range(catimac.max_storage_data):
data = catimac._storage.Get(i)
if(data.p.A>0 and data.p.Z>0 and data.m.ncomponents()>0):
matter = []
for j in range(data.m.ncomponents()):
e = data.m.get_element(j)
matter.append([e.A,e.Z,e.stn])
res.append({"projectile":[data.p.A,data.p.Z],"matter":matter, "config":data.config})
return res
def catima_info():
print("CATIMA version = 1.1")
print("number of energy points = %g"%max_datapoints)
print("min energy point = 10^%g MeV/u"%logEmin)
print("max energy point = 10^%g MeV/u"%logEmax)

View File

@ -1,143 +0,0 @@
"""
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.pair cimport pair
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
double sp
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 thickness_cm(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 corrections;
char calculation;
cdef extern from "catima/catima.h" namespace "catima":
cdef double dedx(Projectile &p, const Material &t,const Config &c)
cdef double domega2dx(Projectile &p, double T, const Material &mat, const Config &c)
cdef double range(Projectile &p, const Material &t, const Config &c);
cdef double dedx_from_range(Projectile &p, 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 pair[double,double] w_magnification(Projectile p, double E, const Material &t, 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 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"
bool reactions "catima::reactions"
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, const Config c);

View File

@ -1,69 +0,0 @@
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\begin{document}
\section{splines caclulations}
Splines data points are calculated at fixed energies. The energy points are uniformly distributed in logarithmic range.
The number of points and logarithmic limits are defined in \textit{constants.h}.
The number of points is \textit{max\_datapoints}, log limits are \textit{logEmin} and \textit{logEmax}.
The energy points are stored in \textit{EnergyTable} class and precalculated values are stored in \textit{energy\_table} variable.
the double array can be accessed as energy\_table.values.
The integration is done using GSL numerical integration library.
\subsection{range spline precision}
The range spline precision is checked via calculating dE/dx from inverse derivative of range spline and compared to directly calculated dE/dx.
\begin{figure}[h]
\centering
\includegraphics[width=6.5cm]{plots/dedx_difs_n500.png}
\includegraphics[width=6.5cm]{plots/dedx_difs_n400.png}
\includegraphics[width=6.5cm]{plots/dedx_difs_n300.png}
\includegraphics[width=6.5cm]{plots/dedx_difs_n200.png}
\caption{Relative difference of dE/dx calculated directly and from range spline, number of range spline datapoints = 500(top left), 400(top right), 300(bottom left), 200(bottom right)}
\end{figure}
\section{Lindhard-Soerensen}
The Lindhard-Soerensen (LS) corrections to energy loss and energy loss straggling can be calculated directly or from precalculated values, which is useful when performance is needed. The precalculated LS coefficients are calculated at predefined log distributed energies. Below and above the energy limits the functions returns the value at minimal or maximal precalculated value. The take into account the different masses the Ls coefficients are precalculated for 2 different masses and final coefficients are estimated using a linear interpolation between the two calculations.
The calculated LS coefficients are plotted in Fig. \ref{ls}.
For the comparison and check of precalculated LS coefficients the LS coefficients and relative difference to directly calculated coefficients for different masses and charges are plotted in Figures \ref{ls_prec} amd \ref{lsX_prec}.
\begin{figure}
\centering
\includegraphics[width=6.5cm]{plots/ls.png}
\includegraphics[width=6.5cm]{plots/lsX.png}
\caption{LS corrections for energy loss and energy loss straggling for different energies and projectile}
\label{ls}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=12cm]{plots/ls_precision.png}
\caption{LS corrections for energy loss directly calculated and calculated from the tabulated values for different Z and A. On the right the relative differences are plotted. The lowest energy for precalculation was set to 1 MeV/u.}
\label{ls_prec}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=12cm]{plots/lsX_precision.png}
\caption{LS corrections for energy loss directly calculated and calculated from the tabulated values for different Z and A. On the right the relative differences are plotted. The lowest energy for precalculation was set to 1 MeV/u.}
\label{lsX_prec}
\end{figure}
\section{Benchmarks}
\subsection{Thin Target Approximation}
test: projectile: 238U@700MeV/u - 30GeV/u, material: C(1mg/cm2), 30000 calculation in loop.
reults: with thin target pproximation: 2.4s, without: 2.4s
\end{document}

Binary file not shown.

View File

@ -1,31 +0,0 @@
#include "catima/catima.h"
#include <iostream>
using std::cout;
using std::endl;
int main(){
catima::Material graphite;
graphite.add_element(12,6,1); // arguments are A,Z, stoichiometric number
graphite.density(1.8); // density in g/cm3
graphite.thickness(2.0); // thickness in g/cm2
catima::Material water({ // material with 2 atoms
{1,1,2}, // 1H - two atoms
{16,8,1} // 16O - 1 atom
});
water.density(1.0).thickness(2.0);
catima::Projectile p(12,6); // define projectile, ie 12C
catima::Layers layer1; // create layers from materials defined above
layer1.add(graphite);
layer1.add(water);
layer1.add(graphite);
auto results = catima::calculate(p(1000),layer1); //calculate rtansport through layers with initial energy 1000 MeV/u
return 0;
}

View File

@ -1,27 +0,0 @@
#include "catima/catima.h"
#include "catima/reactions.h"
#include <iostream>
using std::cout;
using std::endl;
int main(){
catima::Material target = catima::get_material(4);
target.thickness(1.0); // thickness in g/cm2
catima::Projectile p(12,6); // define projectile, ie 12C
double cs = 45;
double rcsi = 870;
double rcso = 860;
cout<<"C->Be\n";
cout<<"t(g/cm2)\t rate"<<endl;
for(double t=0.25; t<=5;t+=0.25){
target.thickness(t);
double r = production_rate(45,rcsi, rcso, target);
cout<<t<<"\t"<<r<<endl;
}
return 0;
}

View File

@ -1,17 +0,0 @@
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
setup(
ext_modules = cythonize(
[Extension("catima", ["catima.pyx"],
language="c++",
libraries=["catima"],
library_dirs=["${CMAKE_CURRENT_BINARY_DIR}/lib"],
include_dirs=["${CMAKE_CURRENT_BINARY_DIR}/include"],
# extra_objects=["${CATIMA_LIB}"],
extra_compile_args=["-std=c++14"],
extra_link_args=["-std=c++14"]
),
])
)