Skip to content
Snippets Groups Projects
Commit ef86c55c authored by Malte Albrecht's avatar Malte Albrecht
Browse files

working on embedding julia... not fully working yet

parent 54d5b000
No related branches found
No related tags found
No related merge requests found
......@@ -22,11 +22,11 @@ project :
<cxxflags>-I$JULIA_DIR/include/julia
<cxxflags>-fPIC
<cxxflags>-Wall
# <linkflags>-L$JULIA_DIR/lib
# <linkflags>-ljulia
<linkflags>-L$JULIA_DIR/lib
<linkflags>-ljulia
<linkflags>-L$JULIA_DIR/lib/julia/libstdc++.so.6
<linkflags>-Wl,--export-dynamic
# <cxxflags>-DJULIA_ENABLE_THREADING=0
<cxxflags>-DJULIA_ENABLE_THREADING=1
;
actions rootlibs
......
......@@ -26,54 +26,24 @@
#include "Utils/PawianConstants.hh"
#include "qft++/relativistic-quantum-mechanics/Utils.hh"
#include "qft++Extension/PawianUtils.hh"
#include <dlfcn.h>
extern "C" {
void (*jl_initPWA)() =NULL;
void (*jl_atexit_hookPWA)(int) =NULL;
jl_value_t* (*jl_box_float64PWA)(double)=NULL;
jl_module_t* (*jl_loadPWA)(const char*)=NULL;
jl_function_t* (*jl_get_functionPWA)(jl_module_t*, std::string)=NULL;
jl_array_t* (*jl_callPWA)(jl_function_t*, jl_value_t**, int)=NULL;
double* (*jl_array_dataPWA)(jl_array_t*)=NULL;
bool (*jl_exception_occurredPWA)(void)=NULL;
}
PhaseSpaceIsobarBBUnstable::PhaseSpaceIsobarBBUnstable(double mass1, double mass2, std::string type):
PhaseSpaceIsobar(mass1, mass2)
{
obj = dlopen ("libjulia.so", RTLD_LAZY);
if (!obj) {
std::string err = dlerror();
fprintf(stderr, "Fatal in PhaseSpaceIsobarBBUnstable::PhaseSpaceIsobarBBUnstable: cannot load library %s\n", err.c_str());
exit(1);
}
m_pathToModule+= getenv("TOP_DIR");
m_pathToModule+="/PwaDynamics/basdevant-berger-cm.jl";
jl_initPWA = (void (*)()) dlsym (obj, "jl_init");
jl_atexit_hookPWA = (void (*)(int)) dlsym (obj, "jl_atexit_hook");
jl_box_float64PWA =(jl_value_t* (*) (double) ) dlsym (obj, "jl_box_float64");
jl_loadPWA = (jl_module_t* (*)(const char*)) dlsym (obj, "jl_load");
jl_get_functionPWA = (jl_function_t* (*)(jl_module_t*, std::string)) dlsym (obj, "jl_get_function");
jl_callPWA = (jl_array_t* (*)(jl_function_t*, jl_value_t**, int)) dlsym (obj, "jl_call");
jl_exception_occurredPWA = (bool (*)(void)) dlsym (obj, "jl_exception_occurred");
jl_array_dataPWA = (double* (*) (jl_array_t*)) dlsym (obj, "jl_array_data");
jl_initPWA();
// jl_init();
m_srealHO = jl_box_float64PWA(0.0);
m_simagHO = jl_box_float64PWA(0.0);
m_m1_1HO = jl_box_float64PWA(0.0);
m_m1_2HO = jl_box_float64PWA(0.0);
m_m2_1HO = jl_box_float64PWA(0.0);
m_m2_2HO = jl_box_float64PWA(0.0);
m_mR1HO = jl_box_float64PWA(0.0);
m_mR2HO = jl_box_float64PWA(0.0);
m_f1HO = jl_box_float64PWA(0.0);
m_f2HO = jl_box_float64PWA(0.0);
m_epsilonHO = jl_box_float64PWA(0.0);
jl_init();
m_srealHO = jl_box_float64(0.0);
m_simagHO = jl_box_float64(0.0);
m_m1_1HO = jl_box_float64(0.0);
m_m1_2HO = jl_box_float64(0.0);
m_m2_1HO = jl_box_float64(0.0);
m_m2_2HO = jl_box_float64(0.0);
m_mR1HO = jl_box_float64(0.0);
m_mR2HO = jl_box_float64(0.0);
m_f1HO = jl_box_float64(0.0);
m_f2HO = jl_box_float64(0.0);
m_epsilonHO = jl_box_float64(0.0);
loadModule(m_pathToModule.c_str());
double RhoPiArgs[9] = {0.14, 0.14, 0.14, 0.14, 0.758287544, 0.442718872, 0.14, 0.0, 0.0};
setArgs(RhoPiArgs);
......@@ -81,7 +51,7 @@ PhaseSpaceIsobarBBUnstable::PhaseSpaceIsobarBBUnstable(double mass1, double mass
}
PhaseSpaceIsobarBBUnstable::~PhaseSpaceIsobarBBUnstable(){
jl_atexit_hookPWA(0);
jl_atexit_hook(0);
}
complex<double> PhaseSpaceIsobarBBUnstable::factor(const double mass){
......@@ -141,57 +111,57 @@ complex<double> PhaseSpaceIsobarBBUnstable::ChewM(const complex<double> mass){
bool PhaseSpaceIsobarBBUnstable::loadModule(std::string _moduleDefinitionPath){
bool result = false;
m_mod = (jl_module_t*) jl_loadPWA(_moduleDefinitionPath.c_str());
m_func = jl_get_functionPWA(m_mod, "bbcm");
if (!jl_exception_occurredPWA())result = true;
m_mod = (jl_module_t*) jl_load(_moduleDefinitionPath.c_str());
m_func = jl_get_function(m_mod, "bbcm");
if (!jl_exception_occurred())result = true;
return result;
}
double* PhaseSpaceIsobarBBUnstable::computeFactor(double* _inS){
m_srealHO = jl_box_float64PWA(_inS[0]);
m_simagHO = jl_box_float64PWA(_inS[1]);
m_srealHO = jl_box_float64(_inS[0]);
m_simagHO = jl_box_float64(_inS[1]);
jl_value_t* allargs[] = {m_srealHO, m_simagHO, m_m1_1HO, m_m1_2HO, m_m2_1HO, m_m2_2HO, m_mR1HO, m_f1HO, m_mR2HO, m_f2HO, m_epsilonHO};
jl_array_t *ret = (jl_array_t*) jl_callPWA(m_func, allargs, 11);
double *retVal = (double*) jl_array_dataPWA(ret);
jl_array_t *ret = (jl_array_t*) jl_call(m_func, allargs, 11);
double *retVal = (double*) jl_array_data(ret);
return retVal;
}
double* PhaseSpaceIsobarBBUnstable::computeFactor(double _inSreal){
m_srealHO = jl_box_float64PWA(_inSreal);
m_simagHO = jl_box_float64PWA(0.0);
m_srealHO = jl_box_float64(_inSreal);
m_simagHO = jl_box_float64(0.0);
jl_value_t* allargs[] = {m_srealHO, m_simagHO, m_m1_1HO, m_m1_2HO, m_m2_1HO, m_m2_2HO, m_mR1HO, m_f1HO, m_mR2HO, m_f2HO, m_epsilonHO};
jl_array_t *ret = (jl_array_t*) jl_callPWA(m_func, allargs, 11);
double *retVal = (double*) jl_array_dataPWA(ret);
jl_array_t *ret = (jl_array_t*) jl_call(m_func, allargs, 11);
double *retVal = (double*) jl_array_data(ret);
return retVal;
}
double* PhaseSpaceIsobarBBUnstable::computeFactor(){
jl_value_t* allargs[] = {m_srealHO, m_simagHO, m_m1_1HO, m_m1_2HO, m_m2_1HO, m_m2_2HO, m_mR1HO, m_f1HO, m_mR2HO, m_f2HO, m_epsilonHO};
jl_array_t *ret = (jl_array_t*) jl_callPWA(m_func, allargs, 11);
double *retVal = (double*) jl_array_dataPWA(ret);
jl_array_t *ret = (jl_array_t*) jl_call(m_func, allargs, 11);
double *retVal = (double*) jl_array_data(ret);
return retVal;
}
bool PhaseSpaceIsobarBBUnstable::setArgs(double* _inArgs){
bool result = false;
m_m1_1HO = jl_box_float64PWA(_inArgs[0]);
m_m1_2HO = jl_box_float64PWA(_inArgs[1]);
m_m2_1HO = jl_box_float64PWA(_inArgs[2]);
m_m2_2HO = jl_box_float64PWA(_inArgs[3]);
m_mR1HO = jl_box_float64PWA(_inArgs[4]);
m_f1HO = jl_box_float64PWA(_inArgs[5]);
m_mR2HO = jl_box_float64PWA(_inArgs[6]);
m_f2HO = jl_box_float64PWA(_inArgs[7]);
m_epsilonHO = jl_box_float64PWA(_inArgs[8]);
if (!jl_exception_occurredPWA())result = true;
m_m1_1HO = jl_box_float64(_inArgs[0]);
m_m1_2HO = jl_box_float64(_inArgs[1]);
m_m2_1HO = jl_box_float64(_inArgs[2]);
m_m2_2HO = jl_box_float64(_inArgs[3]);
m_mR1HO = jl_box_float64(_inArgs[4]);
m_f1HO = jl_box_float64(_inArgs[5]);
m_mR2HO = jl_box_float64(_inArgs[6]);
m_f2HO = jl_box_float64(_inArgs[7]);
m_epsilonHO = jl_box_float64(_inArgs[8]);
if (!jl_exception_occurred())result = true;
return result;
}
bool PhaseSpaceIsobarBBUnstable::setS(double* _inS){
bool result = false;
m_srealHO = jl_box_float64PWA(_inS[0]);
m_simagHO = jl_box_float64PWA(_inS[1]);
if (!jl_exception_occurredPWA())result = true;
m_srealHO = jl_box_float64(_inS[0]);
m_simagHO = jl_box_float64(_inS[1]);
if (!jl_exception_occurred())result = true;
return result;
}
......
......@@ -64,8 +64,8 @@ public:
virtual complex<double> ChewM(const complex<double> mass);
protected:
void* obj;
private:
jl_module_t* m_mod;
......
......@@ -68,3 +68,4 @@ function bbcm(sreal,simag,m11,m21,m12,m22,mR1,fR1,mR2,fR2,epsilon)
return resultCmplx
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment