From 9d55b145c2127fd7736f43cd6db19fb1bf56c4d4 Mon Sep 17 00:00:00 2001
From: mkirsz <s1351949@sms.ed.ac.uk>
Date: Mon, 21 Oct 2024 13:42:09 +0100
Subject: [PATCH] Major reorganisation

---
 CMakeLists.txt                                |  55 ++-
 .../functions/basis_functions/dm_bf_all.h     |   2 -
 .../functions/basis_functions/dm_bf_base.cpp  |   2 -
 design_matrix/functions/dm_f_all.h            |   2 -
 design_matrix/functions/dm_function_base.cpp  |   2 -
 design_matrix/functions/kernels/dm_kern_all.h |   7 -
 .../tadah/mlip/analytics}/analytics.h         |   4 +-
 .../tadah/mlip/analytics}/statistics.h        |   2 +-
 atom.h => include/tadah/mlip/atom.h           |   5 +-
 .../tadah/mlip/descriptors_calc.h             |  20 +-
 .../tadah/mlip/descriptors_calc.hpp           |   2 +-
 .../tadah/mlip/descriptors_calc_base.h        |   8 +-
 .../tadah/mlip/design_matrix}/design_matrix.h |  11 +-
 .../functions/basis_functions/dm_bf_all.h     |   2 +
 .../functions/basis_functions/dm_bf_base.h    |  11 +-
 .../functions/basis_functions/dm_bf_linear.h  |   4 +-
 .../basis_functions/dm_bf_polynomial2.h       |   5 +-
 .../mlip/design_matrix/functions/dm_f_all.h   |   2 +
 .../functions/dm_function_base.h              |  12 +-
 .../functions/kernels/dm_kern_all.h           |   7 +
 .../functions/kernels/dm_kern_base.h          |  11 +-
 .../functions/kernels/dm_kern_linear.h        |   4 +-
 .../functions/kernels/dm_kern_lq.h            |   4 +-
 .../functions/kernels/dm_kern_polynomial.h    |   4 +-
 .../functions/kernels/dm_kern_quadratic.h     |   4 +-
 .../functions/kernels/dm_kern_rbf.h           |   4 +-
 .../functions/kernels/dm_kern_sigmoid.h       |   4 +-
 {models => include/tadah/mlip/models}/basis.h |   8 +-
 include/tadah/mlip/models/m_all.h             |   3 +
 {models => include/tadah/mlip/models}/m_blr.h |  32 +-
 {models => include/tadah/mlip/models}/m_krr.h |  15 +-
 .../tadah/mlip/models}/m_tadah_base.h         |  18 +-
 nn_finder.h => include/tadah/mlip/nn_finder.h |   6 +-
 .../tadah/mlip/normaliser.h                   |   8 +-
 .../tadah/mlip/output}/output.h               |  14 +-
 .../tadah/mlip/st_descriptors.h               |   6 +-
 .../tadah/mlip/st_descriptors_db.h            |   6 +-
 structure.h => include/tadah/mlip/structure.h |   4 +-
 .../tadah/mlip/structure_db.h                 |   4 +-
 trainer.h => include/tadah/mlip/trainer.h     |  17 +-
 version.h => include/tadah/mlip/version.h     |   0
 models/m_all.h                                |   3 -
 models/m_blr.cpp                              |   2 -
 models/m_krr.cpp                              |   2 -
 models/m_krr_work.h                           | 357 ------------------
 {analytics => src}/analytics.cpp              |   4 +-
 atom.cpp => src/atom.cpp                      |   4 +-
 src/dm_bf_base.cpp                            |   2 +
 .../basis_functions => src}/dm_bf_linear.cpp  |   2 +-
 .../dm_bf_polynomial2.cpp                     |   2 +-
 {design_matrix/functions => src}/dm_f_all.cpp |   2 +-
 src/dm_function_base.cpp                      |   2 +
 .../kernels => src}/dm_kern_base.cpp          |   2 +-
 .../kernels => src}/dm_kern_linear.cpp        |   2 +-
 .../functions/kernels => src}/dm_kern_lq.cpp  |   2 +-
 .../kernels => src}/dm_kern_polynomial.cpp    |   2 +-
 .../kernels => src}/dm_kern_quadratic.cpp     |   2 +-
 .../functions/kernels => src}/dm_kern_rbf.cpp |   2 +-
 .../kernels => src}/dm_kern_sigmoid.cpp       |   2 +-
 {models => src}/m_all.cpp                     |   2 +-
 src/m_blr.cpp                                 |   2 +
 src/m_krr.cpp                                 |   2 +
 {models => src}/m_tadah_base.cpp              |   2 +-
 nn_finder.cpp => src/nn_finder.cpp            |   2 +-
 st_descriptors.cpp => src/st_descriptors.cpp  |   2 +-
 .../st_descriptors_db.cpp                     |   2 +-
 {analytics => src}/statistics.cpp             |   3 +-
 structure.cpp => src/structure.cpp            |   5 +-
 structure_db.cpp => src/structure_db.cpp      |   2 +-
 tests/test_atom.cpp                           |  63 ----
 tests/test_main.cpp                           |   3 -
 tests/test_structure.cpp                      | 118 ------
 utils/DX_FD.h                                 | 272 -------------
 73 files changed, 202 insertions(+), 1015 deletions(-)
 delete mode 100644 design_matrix/functions/basis_functions/dm_bf_all.h
 delete mode 100644 design_matrix/functions/basis_functions/dm_bf_base.cpp
 delete mode 100644 design_matrix/functions/dm_f_all.h
 delete mode 100644 design_matrix/functions/dm_function_base.cpp
 delete mode 100644 design_matrix/functions/kernels/dm_kern_all.h
 rename {analytics => include/tadah/mlip/analytics}/analytics.h (95%)
 rename {analytics => include/tadah/mlip/analytics}/statistics.h (94%)
 rename atom.h => include/tadah/mlip/atom.h (96%)
 rename descriptors_calc.h => include/tadah/mlip/descriptors_calc.h (90%)
 rename descriptors_calc.hpp => include/tadah/mlip/descriptors_calc.hpp (99%)
 rename descriptors_calc_base.h => include/tadah/mlip/descriptors_calc_base.h (64%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/design_matrix.h (97%)
 create mode 100644 include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_all.h
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/basis_functions/dm_bf_base.h (74%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/basis_functions/dm_bf_linear.h (82%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/basis_functions/dm_bf_polynomial2.h (82%)
 create mode 100644 include/tadah/mlip/design_matrix/functions/dm_f_all.h
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/dm_function_base.h (81%)
 create mode 100644 include/tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/kernels/dm_kern_base.h (80%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/kernels/dm_kern_linear.h (87%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/kernels/dm_kern_lq.h (60%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/kernels/dm_kern_polynomial.h (64%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/kernels/dm_kern_quadratic.h (63%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/kernels/dm_kern_rbf.h (60%)
 rename {design_matrix => include/tadah/mlip/design_matrix}/functions/kernels/dm_kern_sigmoid.h (62%)
 rename {models => include/tadah/mlip/models}/basis.h (95%)
 create mode 100644 include/tadah/mlip/models/m_all.h
 rename {models => include/tadah/mlip/models}/m_blr.h (97%)
 rename {models => include/tadah/mlip/models}/m_krr.h (97%)
 rename {models => include/tadah/mlip/models}/m_tadah_base.h (91%)
 rename nn_finder.h => include/tadah/mlip/nn_finder.h (90%)
 rename normaliser.h => include/tadah/mlip/normaliser.h (95%)
 rename {output => include/tadah/mlip/output}/output.h (97%)
 rename st_descriptors.h => include/tadah/mlip/st_descriptors.h (94%)
 rename st_descriptors_db.h => include/tadah/mlip/st_descriptors_db.h (88%)
 rename structure.h => include/tadah/mlip/structure.h (99%)
 rename structure_db.h => include/tadah/mlip/structure_db.h (98%)
 rename trainer.h => include/tadah/mlip/trainer.h (98%)
 rename version.h => include/tadah/mlip/version.h (100%)
 delete mode 100644 models/m_all.h
 delete mode 100644 models/m_blr.cpp
 delete mode 100644 models/m_krr.cpp
 delete mode 100644 models/m_krr_work.h
 rename {analytics => src}/analytics.cpp (98%)
 rename atom.cpp => src/atom.cpp (91%)
 create mode 100644 src/dm_bf_base.cpp
 rename {design_matrix/functions/basis_functions => src}/dm_bf_linear.cpp (96%)
 rename {design_matrix/functions/basis_functions => src}/dm_bf_polynomial2.cpp (97%)
 rename {design_matrix/functions => src}/dm_f_all.cpp (96%)
 create mode 100644 src/dm_function_base.cpp
 rename {design_matrix/functions/kernels => src}/dm_kern_base.cpp (97%)
 rename {design_matrix/functions/kernels => src}/dm_kern_linear.cpp (97%)
 rename {design_matrix/functions/kernels => src}/dm_kern_lq.cpp (80%)
 rename {design_matrix/functions/kernels => src}/dm_kern_polynomial.cpp (83%)
 rename {design_matrix/functions/kernels => src}/dm_kern_quadratic.cpp (83%)
 rename {design_matrix/functions/kernels => src}/dm_kern_rbf.cpp (81%)
 rename {design_matrix/functions/kernels => src}/dm_kern_sigmoid.cpp (82%)
 rename {models => src}/m_all.cpp (89%)
 create mode 100644 src/m_blr.cpp
 create mode 100644 src/m_krr.cpp
 rename {models => src}/m_tadah_base.cpp (98%)
 rename nn_finder.cpp => src/nn_finder.cpp (99%)
 rename st_descriptors.cpp => src/st_descriptors.cpp (97%)
 rename st_descriptors_db.cpp => src/st_descriptors_db.cpp (90%)
 rename {analytics => src}/statistics.cpp (94%)
 rename structure.cpp => src/structure.cpp (98%)
 rename structure_db.cpp => src/structure_db.cpp (98%)
 delete mode 100644 tests/test_atom.cpp
 delete mode 100644 tests/test_main.cpp
 delete mode 100644 tests/test_structure.cpp
 delete mode 100644 utils/DX_FD.h

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7236085..c016eeb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -49,57 +49,44 @@ get_filename_component(BUILD_DIR_NAME ${CMAKE_BINARY_DIR} NAME)
 FetchContent_Declare(
     Tadah.MODELS
     GIT_REPOSITORY https://git.ecdf.ed.ac.uk/tadah/models.git
-    GIT_TAG origin/main
-    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../MODELS
-    PATCH_COMMAND  mkdir -p ${BUILD_DIR_NAME}
-    BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../MODELS/${BUILD_DIR_NAME}
+    GIT_TAG origin/develop
+    #SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../MODELS
+    #PATCH_COMMAND  mkdir -p ${BUILD_DIR_NAME}
+    #BINARY_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../MODELS/${BUILD_DIR_NAME}
     )
 
 FetchContent_MakeAvailable(Tadah.MODELS)
 
-file(GLOB MLIP_SRC CONFIGURE_DEPENDS "*.cpp" "*.h" "*.hpp")
-file(GLOB_RECURSE ANALYTICS_SRC CONFIGURE_DEPENDS 
-    "analytics/*.cpp" "analytics/*.h" "analytics/*.hpp")
-file(GLOB_RECURSE DESIGN_MATRIX_SRC CONFIGURE_DEPENDS 
-    "design_matrix/*.cpp" "design_matrix/*.h" "design_matrix/*.hpp")
-file(GLOB_RECURSE MODELS_SRC CONFIGURE_DEPENDS 
-    "models/*.cpp" "models/*.h" "models/*.hpp")
-file(GLOB_RECURSE OUTPUT_SRC CONFIGURE_DEPENDS 
-    "output/*.cpp" "output/*.h" "output/*.hpp")
-#file(GLOB_RECURSE UTILS_SRC CONFIGURE_DEPENDS "utils/*.cpp")
-
-add_library(tadah.mlip.obj OBJECT
-    ${MLIP_SRC}
-    ${ANALYTICS_SRC}
-    ${DESIGN_MATRIX_SRC}
-    ${MODELS_SRC}
-    ${OUTPUT_SRC}
-    )
-
-target_link_libraries(tadah.mlip.obj PRIVATE config::rc)
+file(GLOB MLIP_SRC CONFIGURE_DEPENDS "src/*.cpp")
+add_library(tadah.mlip ${MLIP_SRC})
+target_link_libraries(tadah.mlip PRIVATE config::rc)
+target_link_libraries(tadah.mlip PUBLIC Tadah.MODELS)
+target_include_directories(tadah.mlip PUBLIC include)
+target_include_directories(tadah.mlip PUBLIC ${Tadah.MODELS_SOURCE_DIR}/include)
+target_include_directories(tadah.mlip PUBLIC ${Tadah.CORE_SOURCE_DIR}/include)
+target_include_directories(tadah.mlip PUBLIC ${Tadah.CORE_SOURCE_DIR}/external/toml11)
 
 if(TADAH_ENABLE_OPENMP)
     find_package(OpenMP REQUIRED)
-    target_link_libraries(tadah.mlip.obj PUBLIC OpenMP::OpenMP_CXX)
+    target_link_libraries(tadah.mlip PUBLIC OpenMP::OpenMP_CXX)
 endif()
 
 if (TADAH_BUILD_MPI)
     find_package(MPI REQUIRED)
-    target_link_libraries(tadah.mlip.obj PUBLIC MPI::MPI_CXX)
+    target_link_libraries(tadah.mlip PUBLIC MPI::MPI_CXX)
     add_compile_definitions(TADAH_BUILD_MPI)
 endif()
 
-add_library(tadah.mlip $<TARGET_OBJECTS:tadah.mlip.obj>)
 
 if(TADAH_BUILD_TESTS)
     include(CTest) 
     add_subdirectory(tests)
 endif()
 
-set(TADAH_MLIP_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/tadah/MLIP)
-file(GLOB MLIP_H CONFIGURE_DEPENDS "*.h" "*.hpp")
-install(FILES ${MLIP_H} DESTINATION ${TADAH_MLIP_INSTALL_DIR})
-install(DIRECTORY analytics DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
-install(DIRECTORY design_matrix DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
-install(DIRECTORY models DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
-install(DIRECTORY output DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
+#set(TADAH_MLIP_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include/tadah/MLIP)
+#file(GLOB MLIP_H CONFIGURE_DEPENDS "*.h" "*.hpp")
+#install(FILES ${MLIP_H} DESTINATION ${TADAH_MLIP_INSTALL_DIR})
+#install(DIRECTORY analytics DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
+#install(DIRECTORY design_matrix DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
+#install(DIRECTORY models DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
+#install(DIRECTORY output DESTINATION ${TADAH_MLIP_INSTALL_DIR} FILES_MATCHING REGEX "(.+.h|.+.hpp)")
diff --git a/design_matrix/functions/basis_functions/dm_bf_all.h b/design_matrix/functions/basis_functions/dm_bf_all.h
deleted file mode 100644
index b985440..0000000
--- a/design_matrix/functions/basis_functions/dm_bf_all.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "dm_bf_linear.h"
-#include "dm_bf_polynomial2.h"
diff --git a/design_matrix/functions/basis_functions/dm_bf_base.cpp b/design_matrix/functions/basis_functions/dm_bf_base.cpp
deleted file mode 100644
index 4ed6543..0000000
--- a/design_matrix/functions/basis_functions/dm_bf_base.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "dm_bf_base.h"
-DM_BF_Base::~DM_BF_Base() {}
diff --git a/design_matrix/functions/dm_f_all.h b/design_matrix/functions/dm_f_all.h
deleted file mode 100644
index 38a3183..0000000
--- a/design_matrix/functions/dm_f_all.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "basis_functions/dm_bf_all.h"
-#include "kernels/dm_kern_all.h"
diff --git a/design_matrix/functions/dm_function_base.cpp b/design_matrix/functions/dm_function_base.cpp
deleted file mode 100644
index 6db860e..0000000
--- a/design_matrix/functions/dm_function_base.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "dm_function_base.h"
-
diff --git a/design_matrix/functions/kernels/dm_kern_all.h b/design_matrix/functions/kernels/dm_kern_all.h
deleted file mode 100644
index 0f050e6..0000000
--- a/design_matrix/functions/kernels/dm_kern_all.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#include "dm_kern_base.h"
-#include "dm_kern_linear.h"
-#include "dm_kern_rbf.h"
-#include "dm_kern_lq.h"
-#include "dm_kern_polynomial.h"
-#include "dm_kern_sigmoid.h"
-#include "dm_kern_quadratic.h"
diff --git a/analytics/analytics.h b/include/tadah/mlip/analytics/analytics.h
similarity index 95%
rename from analytics/analytics.h
rename to include/tadah/mlip/analytics/analytics.h
index d813c33..4a7dc4a 100644
--- a/analytics/analytics.h
+++ b/include/tadah/mlip/analytics/analytics.h
@@ -1,8 +1,8 @@
 #ifndef ANALYTICS_H
 #define ANALYTICS_H
 
-#include "../structure_db.h"
-#include "../../CORE/core_types.h"
+#include <tadah/mlip/structure_db.h>
+#include <tadah/core/core_types.h>
 
 
 /** Class for analysing and comparing datasets
diff --git a/analytics/statistics.h b/include/tadah/mlip/analytics/statistics.h
similarity index 94%
rename from analytics/statistics.h
rename to include/tadah/mlip/analytics/statistics.h
index 8c0245e..0d86664 100644
--- a/analytics/statistics.h
+++ b/include/tadah/mlip/analytics/statistics.h
@@ -1,7 +1,7 @@
 #ifndef STATISTICS_H
 #define STATISTICS_H
 
-#include "../../CORE/core_types.h"
+#include <tadah/core/core_types.h>
 
 /** Some basis statistical tools */
 class Statistics {
diff --git a/atom.h b/include/tadah/mlip/atom.h
similarity index 96%
rename from atom.h
rename to include/tadah/mlip/atom.h
index dfef91a..4a6fd87 100644
--- a/atom.h
+++ b/include/tadah/mlip/atom.h
@@ -1,10 +1,11 @@
 #ifndef ATOM_H
 #define ATOM_H
 
+#include <tadah/core/element.h>
+#include <tadah/core/core_types.h>
+
 #include <string>
 #include <iostream>
-#include "../CORE/element.h"
-#include "../CORE/core_types.h"
 
 /**
  * Container to represent atom properties
diff --git a/descriptors_calc.h b/include/tadah/mlip/descriptors_calc.h
similarity index 90%
rename from descriptors_calc.h
rename to include/tadah/mlip/descriptors_calc.h
index 06e82c7..640a862 100644
--- a/descriptors_calc.h
+++ b/include/tadah/mlip/descriptors_calc.h
@@ -1,16 +1,16 @@
 #ifndef DESCRIPTORS_CALC_H
 #define DESCRIPTORS_CALC_H
 
-#include "descriptors_calc_base.h"
-#include "../CORE/config/config.h"
-#include "structure.h"
-#include "structure_db.h"
-#include "st_descriptors.h"
-#include "st_descriptors_db.h"
-#include "../MODELS/descriptors/d2/d2_base.h"
-#include "../MODELS/descriptors/d3/d3_base.h"
-#include "../MODELS/descriptors/dm/dm_base.h"
-#include "../MODELS/cutoffs/cutoffs.h"
+#include <tadah/mlip/descriptors_calc_base.h>
+#include <tadah/mlip/structure.h>
+#include <tadah/mlip/structure_db.h>
+#include <tadah/mlip/st_descriptors.h>
+#include <tadah/mlip/st_descriptors_db.h>
+#include <tadah/core/config.h>
+#include <tadah/models/descriptors/d2/d2_base.h>
+#include <tadah/models/descriptors/d3/d3_base.h>
+#include <tadah/models/descriptors/dm/dm_base.h>
+#include <tadah/models/cutoffs.h>
 
 /** \brief Descriptors calculator
  *
diff --git a/descriptors_calc.hpp b/include/tadah/mlip/descriptors_calc.hpp
similarity index 99%
rename from descriptors_calc.hpp
rename to include/tadah/mlip/descriptors_calc.hpp
index 5d5cdfe..5afb987 100644
--- a/descriptors_calc.hpp
+++ b/include/tadah/mlip/descriptors_calc.hpp
@@ -4,7 +4,7 @@
 // This file is includeed back to descriptors_calc.h
 // So There is no need to include headers
 // Useful for debugging though...
-#include "descriptors_calc.h"
+#include <tadah/mlip/descriptors_calc.h>
 
 #include <cstdio>
 template <typename D2, typename D3, typename DM, typename C2, typename C3, typename CM>
diff --git a/descriptors_calc_base.h b/include/tadah/mlip/descriptors_calc_base.h
similarity index 64%
rename from descriptors_calc_base.h
rename to include/tadah/mlip/descriptors_calc_base.h
index 0d5d9db..a56c26f 100644
--- a/descriptors_calc_base.h
+++ b/include/tadah/mlip/descriptors_calc_base.h
@@ -1,10 +1,10 @@
 #ifndef DC_Base_H
 #define DC_Base_H
 
-#include "structure.h"
-#include "structure_db.h"
-#include "st_descriptors.h"
-#include "st_descriptors_db.h"
+#include <tadah/mlip/structure.h>
+#include <tadah/mlip/structure_db.h>
+#include <tadah/mlip/st_descriptors.h>
+#include <tadah/mlip/st_descriptors_db.h>
 
 class DC_Base {
     public:
diff --git a/design_matrix/design_matrix.h b/include/tadah/mlip/design_matrix/design_matrix.h
similarity index 97%
rename from design_matrix/design_matrix.h
rename to include/tadah/mlip/design_matrix/design_matrix.h
index 5c08a9a..3f87b5f 100644
--- a/design_matrix/design_matrix.h
+++ b/include/tadah/mlip/design_matrix/design_matrix.h
@@ -1,12 +1,13 @@
 #ifndef DESIGN_MATRIX_H
 #define DESIGN_MATRIX_H
 
+#include <tadah/mlip/st_descriptors_db.h>
+#include <tadah/mlip/structure_db.h>
+#include <tadah/mlip/descriptors_calc.h>
+#include <tadah/mlip/normaliser.h>
+#include <tadah/core/config.h>
+
 #include <stdexcept>
-#include "../../CORE/config/config.h"
-#include "../st_descriptors_db.h"
-#include "../structure_db.h"
-#include "../descriptors_calc.h"
-#include "../normaliser.h"
 
 
 class DesignMatrixBase {
diff --git a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_all.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_all.h
new file mode 100644
index 0000000..48179cf
--- /dev/null
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_all.h
@@ -0,0 +1,2 @@
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h>
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h>
diff --git a/design_matrix/functions/basis_functions/dm_bf_base.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
similarity index 74%
rename from design_matrix/functions/basis_functions/dm_bf_base.h
rename to include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
index 2ef9da1..98b1c37 100644
--- a/design_matrix/functions/basis_functions/dm_bf_base.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
@@ -1,12 +1,13 @@
 #ifndef DM_BASIS_FUNCTIONS_H
 #define DM_BASIS_FUNCTIONS_H
 
+#include <tadah/mlip/design_matrix/functions/dm_function_base.h>
+#include <tadah/mlip/structure.h>
+#include <tadah/mlip/st_descriptors.h>
+#include <tadah/core/core_types.h>
+#include <tadah/models/functions/basis_functions/bf_base.h>
+
 #include <iostream>
-#include "../dm_function_base.h"
-#include "../../../../CORE/core_types.h"
-#include "../../../../MODELS/functions/basis_functions/bf_base.h"
-#include "../../../structure.h"
-#include "../../../st_descriptors.h"
 
 struct DM_BF_Base: public DM_Function_Base, public virtual BF_Base {
     virtual ~DM_BF_Base();
diff --git a/design_matrix/functions/basis_functions/dm_bf_linear.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
similarity index 82%
rename from design_matrix/functions/basis_functions/dm_bf_linear.h
rename to include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
index 36b7813..107ac26 100644
--- a/design_matrix/functions/basis_functions/dm_bf_linear.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
@@ -1,8 +1,8 @@
 #ifndef DM_BF_LINEAR_H
 #define DM_BF_LINEAR_H
 
-#include "dm_bf_base.h"
-#include "../../../../MODELS/functions/basis_functions/bf_linear.h"
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h>
+#include <tadah/models/functions/basis_functions/bf_linear.h>
 
 struct DM_BF_Linear: public DM_BF_Base, public BF_Linear
 {
diff --git a/design_matrix/functions/basis_functions/dm_bf_polynomial2.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
similarity index 82%
rename from design_matrix/functions/basis_functions/dm_bf_polynomial2.h
rename to include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
index ff8f634..b0ce413 100644
--- a/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
@@ -1,7 +1,8 @@
 #ifndef DM_BF_POLYNOMIAL2_H
 #define DM_BF_POLYNOMIAL2_H
-#include "dm_bf_base.h"
-#include "../../../../MODELS/functions/basis_functions/bf_polynomial2.h"
+
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h>
+#include <tadah/models/functions/basis_functions/bf_polynomial2.h>
 
 struct DM_BF_Polynomial2: public DM_BF_Base, public BF_Polynomial2
 {
diff --git a/include/tadah/mlip/design_matrix/functions/dm_f_all.h b/include/tadah/mlip/design_matrix/functions/dm_f_all.h
new file mode 100644
index 0000000..201905a
--- /dev/null
+++ b/include/tadah/mlip/design_matrix/functions/dm_f_all.h
@@ -0,0 +1,2 @@
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_all.h>
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h>
diff --git a/design_matrix/functions/dm_function_base.h b/include/tadah/mlip/design_matrix/functions/dm_function_base.h
similarity index 81%
rename from design_matrix/functions/dm_function_base.h
rename to include/tadah/mlip/design_matrix/functions/dm_function_base.h
index 1838f86..6b7b5a9 100644
--- a/design_matrix/functions/dm_function_base.h
+++ b/include/tadah/mlip/design_matrix/functions/dm_function_base.h
@@ -1,12 +1,12 @@
 #ifndef DM_FUNCTION_H
 #define DM_FUNCTION_H
 
-#include "../../../CORE/config/config.h"
-#include "../../../CORE/registry.h"
-#include "../../../CORE/core_types.h"
-#include "../../../MODELS/functions/function_base.h"
-#include "../../structure.h"
-#include "../../st_descriptors.h"
+#include <tadah/core/config.h>
+#include <tadah/core/registry.h>
+#include <tadah/core/core_types.h>
+#include <tadah/models/functions/function_base.h>
+#include <tadah/mlip/structure.h>
+#include <tadah/mlip/st_descriptors.h>
 
 #include <iomanip>
 #include <iostream>
diff --git a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h
new file mode 100644
index 0000000..b53a2f6
--- /dev/null
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h
@@ -0,0 +1,7 @@
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h>
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_rbf.h>
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_lq.h>
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_polynomial.h>
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_sigmoid.h>
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_quadratic.h>
diff --git a/design_matrix/functions/kernels/dm_kern_base.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
similarity index 80%
rename from design_matrix/functions/kernels/dm_kern_base.h
rename to include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
index 929b3a1..cf0c12f 100644
--- a/design_matrix/functions/kernels/dm_kern_base.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
@@ -1,12 +1,13 @@
 #ifndef DM_KERN_BASE_H
 #define DM_KERN_BASE_H
 
+#include <tadah/mlip/design_matrix/functions/dm_function_base.h>
+#include <tadah/mlip/structure.h>
+#include <tadah/mlip/st_descriptors.h>
+#include <tadah/core/core_types.h>
+#include <tadah/models/functions/kernels/kern_base.h>
+
 #include <iostream>
-#include "../dm_function_base.h"
-#include "../../../../CORE/core_types.h"
-#include "../../../../MODELS/functions/kernels/kern_base.h"
-#include "../../../structure.h"
-#include "../../../st_descriptors.h"
 
 /** \brief Abstract class to be used as a base for all kernels.
  *
diff --git a/design_matrix/functions/kernels/dm_kern_linear.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
similarity index 87%
rename from design_matrix/functions/kernels/dm_kern_linear.h
rename to include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
index d677d28..5c75dad 100644
--- a/design_matrix/functions/kernels/dm_kern_linear.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
@@ -1,8 +1,8 @@
 #ifndef DM_KERN_LINEAR_H
 #define DM_KERN_LINEAR_H
 
-#include "dm_kern_base.h"
-#include "../../../../MODELS/functions/kernels/kern_linear.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
+#include <tadah/models/functions/kernels/kern_linear.h>
 /**
  * Linear kernel also knows as dot product kernel
  *
diff --git a/design_matrix/functions/kernels/dm_kern_lq.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_lq.h
similarity index 60%
rename from design_matrix/functions/kernels/dm_kern_lq.h
rename to include/tadah/mlip/design_matrix/functions/kernels/dm_kern_lq.h
index dc77a83..f0b4445 100644
--- a/design_matrix/functions/kernels/dm_kern_lq.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_lq.h
@@ -1,8 +1,8 @@
 #ifndef DM_KERN_LQ_H
 #define DM_KERN_LQ_H
 
-#include "dm_kern_base.h"
-#include "../../../../MODELS/functions/kernels/kern_lq.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
+#include <tadah/models/functions/kernels/kern_lq.h>
 
 class DM_Kern_LQ :  public DM_Kern_Base, public Kern_LQ {
     public:
diff --git a/design_matrix/functions/kernels/dm_kern_polynomial.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_polynomial.h
similarity index 64%
rename from design_matrix/functions/kernels/dm_kern_polynomial.h
rename to include/tadah/mlip/design_matrix/functions/kernels/dm_kern_polynomial.h
index 2a5695f..5094370 100644
--- a/design_matrix/functions/kernels/dm_kern_polynomial.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_polynomial.h
@@ -1,8 +1,8 @@
 #ifndef DM_KERN_POLYNOMIAL_H
 #define DM_KERN_POLYNOMIAL_H
 
-#include "dm_kern_base.h"
-#include "../../../../MODELS/functions/kernels/kern_polynomial.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
+#include <tadah/models/functions/kernels/kern_polynomial.h>
 
 class DM_Kern_Polynomial :  public DM_Kern_Base, public Kern_Polynomial {
     public:
diff --git a/design_matrix/functions/kernels/dm_kern_quadratic.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_quadratic.h
similarity index 63%
rename from design_matrix/functions/kernels/dm_kern_quadratic.h
rename to include/tadah/mlip/design_matrix/functions/kernels/dm_kern_quadratic.h
index 3f432cf..ecb8535 100644
--- a/design_matrix/functions/kernels/dm_kern_quadratic.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_quadratic.h
@@ -1,8 +1,8 @@
 #ifndef DM_KERN_QUADRATIC_H
 #define DM_KERN_QUADRATIC_H
 
-#include "dm_kern_base.h"
-#include "../../../../MODELS/functions/kernels/kern_quadratic.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
+#include <tadah/models/functions/kernels/kern_quadratic.h>
 
 class DM_Kern_Quadratic :  public DM_Kern_Base, public Kern_Quadratic {
     public:
diff --git a/design_matrix/functions/kernels/dm_kern_rbf.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_rbf.h
similarity index 60%
rename from design_matrix/functions/kernels/dm_kern_rbf.h
rename to include/tadah/mlip/design_matrix/functions/kernels/dm_kern_rbf.h
index 8851e3a..7e1251a 100644
--- a/design_matrix/functions/kernels/dm_kern_rbf.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_rbf.h
@@ -1,8 +1,8 @@
 #ifndef DM_KERN_RBF_H
 #define DM_KERN_RBF_H
 
-#include "dm_kern_base.h"
-#include "../../../../MODELS/functions/kernels/kern_rbf.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
+#include <tadah/models/functions/kernels/kern_rbf.h>
 
 class DM_Kern_RBF :  public DM_Kern_Base, public Kern_RBF {
     public:
diff --git a/design_matrix/functions/kernels/dm_kern_sigmoid.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_sigmoid.h
similarity index 62%
rename from design_matrix/functions/kernels/dm_kern_sigmoid.h
rename to include/tadah/mlip/design_matrix/functions/kernels/dm_kern_sigmoid.h
index 0c18643..c62a50e 100644
--- a/design_matrix/functions/kernels/dm_kern_sigmoid.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_sigmoid.h
@@ -1,8 +1,8 @@
 #ifndef DM_KERN_SIGMOID_H
 #define DM_KERN_SIGMOID_H
 
-#include "dm_kern_base.h"
-#include "../../../../MODELS/functions/kernels/kern_sigmoid.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
+#include <tadah/models/functions/kernels/kern_sigmoid.h>
 
 class DM_Kern_Sigmoid :  public DM_Kern_Base, public Kern_Sigmoid {
     public:
diff --git a/models/basis.h b/include/tadah/mlip/models/basis.h
similarity index 95%
rename from models/basis.h
rename to include/tadah/mlip/models/basis.h
index 509d170..74a4071 100644
--- a/models/basis.h
+++ b/include/tadah/mlip/models/basis.h
@@ -1,10 +1,10 @@
 #ifndef BASIS_H
 #define BASIS_H
 
-#include "../../CORE/config/config.h"
-#include "../../CORE/core_types.h"
-#include "../st_descriptors_db.h"
-#include "../st_descriptors.h"
+#include <tadah/mlip/st_descriptors_db.h>
+#include <tadah/mlip/st_descriptors.h>
+#include <tadah/core/core_types.h>
+#include <tadah/core/config.h>
 
 #include <numeric>
 #include <stdexcept>
diff --git a/include/tadah/mlip/models/m_all.h b/include/tadah/mlip/models/m_all.h
new file mode 100644
index 0000000..d155789
--- /dev/null
+++ b/include/tadah/mlip/models/m_all.h
@@ -0,0 +1,3 @@
+//#include "m_tadah_base.h"
+#include <tadah/mlip/models/m_blr.h>
+#include <tadah/mlip/models/m_krr.h>
diff --git a/models/m_blr.h b/include/tadah/mlip/models/m_blr.h
similarity index 97%
rename from models/m_blr.h
rename to include/tadah/mlip/models/m_blr.h
index ae41461..4a88a45 100644
--- a/models/m_blr.h
+++ b/include/tadah/mlip/models/m_blr.h
@@ -1,3 +1,19 @@
+#ifndef M_BLR_H
+#define M_BLR_H
+
+#include <tadah/mlip/models/m_tadah_base.h>
+#include <tadah/mlip/descriptors_calc.h>
+#include <tadah/mlip/design_matrix/design_matrix.h>
+#include <tadah/mlip/design_matrix/functions/dm_function_base.h>
+#include <tadah/mlip/normaliser.h>
+#include <tadah/models/m_blr_train.h>
+#include <tadah/core/config.h>
+
+#include <limits>
+#include <stdexcept>
+#include <type_traits>
+#include <iostream>
+
 /** Bayesian Linear Regression
  *
  * Model supported training modes:
@@ -50,22 +66,6 @@
  *
  * @tparam BF DM_BF_Base child, Basis function
  */
-#ifndef M_BLR_H
-#define M_BLR_H
-
-#include "m_tadah_base.h"
-#include "../descriptors_calc.h"
-#include "../design_matrix/design_matrix.h"
-#include "../design_matrix/functions/dm_function_base.h"
-#include "../normaliser.h"
-#include "../../MODELS/m_blr_train.h"
-#include "../../CORE/config/config.h"
-
-#include <limits>
-#include <stdexcept>
-#include <type_traits>
-#include <iostream>
-
 
 template
 <class BF=DM_Function_Base&>
diff --git a/models/m_krr.h b/include/tadah/mlip/models/m_krr.h
similarity index 97%
rename from models/m_krr.h
rename to include/tadah/mlip/models/m_krr.h
index 73443a3..a2cc52f 100644
--- a/models/m_krr.h
+++ b/include/tadah/mlip/models/m_krr.h
@@ -1,13 +1,14 @@
 #ifndef M_KRR_H
 #define M_KRR_H
 
-#include "basis.h"
-#include "m_tadah_base.h"
-#include "../descriptors_calc.h"
-#include "../design_matrix/design_matrix.h"
-#include "../design_matrix/functions/dm_function_base.h"
-#include "../../MODELS/m_krr_train.h"
-#include "../../CORE/config/config.h"
+#include <tadah/mlip/models/m_tadah_base.h>
+#include <tadah/mlip/descriptors_calc.h>
+#include <tadah/mlip/design_matrix/design_matrix.h>
+#include <tadah/mlip/design_matrix/functions/dm_function_base.h>
+#include <tadah/mlip/normaliser.h>
+#include <tadah/models/m_krr_train.h>
+#include <tadah/core/config.h>
+#include <tadah/mlip/models/basis.h>
 
 #include <limits>
 #include <stdexcept>
diff --git a/models/m_tadah_base.h b/include/tadah/mlip/models/m_tadah_base.h
similarity index 91%
rename from models/m_tadah_base.h
rename to include/tadah/mlip/models/m_tadah_base.h
index f0f4a31..c98e4e6 100644
--- a/models/m_tadah_base.h
+++ b/include/tadah/mlip/models/m_tadah_base.h
@@ -1,15 +1,15 @@
 #ifndef M_TADAH_BASE_H
 #define M_TADAH_BASE_H
 
-#include "../structure.h"
-#include "../structure_db.h"
-#include "../st_descriptors.h"
-#include "../st_descriptors_db.h"
-#include "../normaliser.h"
-#include "../descriptors_calc_base.h"
-#include "../../CORE/core_types.h"
-#include "../../MODELS/m_core.h"
-#include "../../MODELS/m_predict.h"
+#include <tadah/mlip/structure.h>
+#include <tadah/mlip/structure_db.h>
+#include <tadah/mlip/st_descriptors.h>
+#include <tadah/mlip/st_descriptors_db.h>
+#include <tadah/mlip/normaliser.h>
+#include <tadah/mlip/descriptors_calc_base.h>
+#include <tadah/core/core_types.h>
+#include <tadah/models/m_core.h>
+#include <tadah/models/m_predict.h>
 
 /** This interface provides functionality required from all models.
  */
diff --git a/nn_finder.h b/include/tadah/mlip/nn_finder.h
similarity index 90%
rename from nn_finder.h
rename to include/tadah/mlip/nn_finder.h
index 16df1aa..e263514 100644
--- a/nn_finder.h
+++ b/include/tadah/mlip/nn_finder.h
@@ -1,9 +1,9 @@
 #ifndef NN_FINDER_H
 #define NN_FINDER_H
 
-#include "../CORE/config/config.h"
-#include "structure.h"
-#include "structure_db.h"
+#include <tadah/core/config.h>
+#include <tadah/mlip/structure.h>
+#include <tadah/mlip/structure_db.h>
 
 /** Nearest Neighbour Finder
  *
diff --git a/normaliser.h b/include/tadah/mlip/normaliser.h
similarity index 95%
rename from normaliser.h
rename to include/tadah/mlip/normaliser.h
index 66e1252..72e8be1 100644
--- a/normaliser.h
+++ b/include/tadah/mlip/normaliser.h
@@ -1,10 +1,10 @@
 #ifndef NORMALISER_H
 #define NORMALISER_H
 
-#include "st_descriptors_db.h"
-#include "../CORE/normaliser_core.h"
-#include "../CORE/config/config.h"
-#include "../CORE/core_types.h"
+#include <tadah/mlip/st_descriptors_db.h>
+#include <tadah/core/normaliser_core.h>
+#include <tadah/core/config.h>
+#include <tadah/core/core_types.h>
 
 #include <limits>
 #include <stdexcept>
diff --git a/output/output.h b/include/tadah/mlip/output/output.h
similarity index 97%
rename from output/output.h
rename to include/tadah/mlip/output/output.h
index 4394a6d..c995789 100644
--- a/output/output.h
+++ b/include/tadah/mlip/output/output.h
@@ -1,13 +1,16 @@
+#ifndef OUTPUT_H
+#define OUTPUT_H
+
+#include <tadah/mlip/structure_db.h>
+#include <tadah/core/config.h>
+#include <tadah/core/utils/utils.h>
+#include <tadah/core/core_types.h>
+
 #include <ios>
 #include <iostream>
 #include <iomanip>
 #include <string>
 
-#include "../../CORE/config/config.h"
-#include "../structure_db.h"
-#include "../../CORE/utils/utils.h"
-#include "../../CORE/core_types.h"
-
 class Output {
     private:
         Config &pot_config;
@@ -188,3 +191,4 @@ class Output {
             out_stress.close();
         }
 };
+#endif // !OUTPUT_H
diff --git a/st_descriptors.h b/include/tadah/mlip/st_descriptors.h
similarity index 94%
rename from st_descriptors.h
rename to include/tadah/mlip/st_descriptors.h
index b487c02..56618d5 100644
--- a/st_descriptors.h
+++ b/include/tadah/mlip/st_descriptors.h
@@ -1,9 +1,9 @@
 #ifndef ST_DESCRIPTORS_H
 #define ST_DESCRIPTORS_H
 
-#include "structure.h"
-#include "../CORE/config/config.h"
-#include "../CORE/core_types.h"
+#include <tadah/mlip/structure.h>
+#include <tadah/core/config.h>
+#include <tadah/core/core_types.h>
 
 #include <vector>
 
diff --git a/st_descriptors_db.h b/include/tadah/mlip/st_descriptors_db.h
similarity index 88%
rename from st_descriptors_db.h
rename to include/tadah/mlip/st_descriptors_db.h
index 54b569c..db8843c 100644
--- a/st_descriptors_db.h
+++ b/include/tadah/mlip/st_descriptors_db.h
@@ -1,9 +1,9 @@
 #ifndef ST_DESCRIPTORS_DB_H
 #define ST_DESCRIPTORS_DB_H
 
-#include "../CORE/config/config.h"
-#include "st_descriptors.h"
-#include "structure_db.h"
+#include <tadah/core/config.h>
+#include <tadah/mlip/st_descriptors.h>
+#include <tadah/mlip/structure_db.h>
 
 
 /** \brief Container for StDescriptors.
diff --git a/structure.h b/include/tadah/mlip/structure.h
similarity index 99%
rename from structure.h
rename to include/tadah/mlip/structure.h
index 5b12357..f42580e 100644
--- a/structure.h
+++ b/include/tadah/mlip/structure.h
@@ -1,8 +1,8 @@
 #ifndef STRUCTURE_h
 #define STRUCTURE_h
 
-#include "atom.h"
-#include "../CORE/core_types.h"
+#include <tadah/mlip/atom.h>
+#include <tadah/core/core_types.h>
 
 #include <string>
 #include <iostream>
diff --git a/structure_db.h b/include/tadah/mlip/structure_db.h
similarity index 98%
rename from structure_db.h
rename to include/tadah/mlip/structure_db.h
index 37bcedd..678a5e3 100644
--- a/structure_db.h
+++ b/include/tadah/mlip/structure_db.h
@@ -1,8 +1,8 @@
 #ifndef STRUCTURE_DB_h
 #define STRUCTURE_DB_h
 
-#include "structure.h"
-#include "../CORE/config/config.h"
+#include <tadah/mlip/structure.h>
+#include <tadah/core/config.h>
 
 #include <string>
 #include <iostream>
diff --git a/trainer.h b/include/tadah/mlip/trainer.h
similarity index 98%
rename from trainer.h
rename to include/tadah/mlip/trainer.h
index 3f72c8c..aa56cae 100644
--- a/trainer.h
+++ b/include/tadah/mlip/trainer.h
@@ -1,14 +1,15 @@
 #ifndef MPI_TRAINER_H
 #define MPI_TRAINER_H
+#include <tadah/mlip/descriptors_calc.h>
+#include <tadah/mlip/design_matrix/design_matrix.h>
+#include <tadah/mlip/trainer.h>
+#include <tadah/mlip/design_matrix/functions/dm_function_base.h>
+#include <tadah/mlip/models/m_tadah_base.h>
+#include <tadah/mlip/nn_finder.h>
+#include <tadah/core/config.h>
+#include <tadah/models/dc_selector.h>
+
 #include <iostream>
-#include "../CORE/config/config.h"
-#include "../MODELS/dc_selector.h"
-#include "descriptors_calc.h"
-#include "../MLIP/design_matrix/design_matrix.h"
-#include "../MLIP/trainer.h"
-#include "design_matrix/functions/dm_function_base.h"
-#include "models/m_tadah_base.h"
-#include "nn_finder.h"
 
 class Trainer {
   public:
diff --git a/version.h b/include/tadah/mlip/version.h
similarity index 100%
rename from version.h
rename to include/tadah/mlip/version.h
diff --git a/models/m_all.h b/models/m_all.h
deleted file mode 100644
index 21c64a1..0000000
--- a/models/m_all.h
+++ /dev/null
@@ -1,3 +0,0 @@
-//#include "m_tadah_base.h"
-#include "m_blr.h"
-#include "m_krr.h"
diff --git a/models/m_blr.cpp b/models/m_blr.cpp
deleted file mode 100644
index 6935092..0000000
--- a/models/m_blr.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "m_blr.h"
-#include "../../CORE/registry.h"
diff --git a/models/m_krr.cpp b/models/m_krr.cpp
deleted file mode 100644
index 03322f5..0000000
--- a/models/m_krr.cpp
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "m_krr.h"
-#include "../../CORE/registry.h"
diff --git a/models/m_krr_work.h b/models/m_krr_work.h
deleted file mode 100644
index e962d14..0000000
--- a/models/m_krr_work.h
+++ /dev/null
@@ -1,357 +0,0 @@
-#ifndef M_KRR_H
-#define M_KRR_H
-
-#include "basis.h"
-#include "m_tadah_base.h"
-#include "../descriptors_calc.h"
-#include "../design_matrix/design_matrix.h"
-#include "../design_matrix/functions/dm_function_base.h"
-#include "../../MODELS/m_krr_train.h"
-#include "../../CORE/config/config.h"
-
-#include <limits>
-#include <stdexcept>
-#include <type_traits>
-#include <iostream>
-
-/** Kernel Ridge Regression implemented via Empirical Kernel Map
- *
- * **Optional Config keys**:
- *
- *  - \ref LAMBDA = 0  -> use OLS
- *  - \ref LAMBDA > 0  -> manually set to given value
- *  - \ref LAMBDA = -1 -> use evidence approximation to find \f$\lambda\f$
- *  - \ref SBASIS N    -> Use N basis functions when nonlinear K is used
- *
- * @tparam K DM_Kern_Base child, Kernel function
- */
-template
-<class K=DM_Function_Base&>
-class M_KRR: public M_Tadah_Base,
-    public M_KRR_Train<K>
-    //public M_KRR_Predict<K>
-{
-
-    public:
-
-        /** This constructor will preapare this object for either training
-         *  or prediction (if potential is provides as a Config)
-         *
-         * Usage example:
-         *
-         * \code{.cpp}
-         * Config config("Config");
-         * M_KRR<Kern_Linear> krr(config);
-         * \endcode
-         *
-         */
-        using M_KRR_Train<K>::config;
-        using M_KRR_Train<K>::kernel;
-        using M_KRR_Train<K>::ekm;
-        M_KRR(Config &c):
-            M_KRR_Train<K>(c),
-            basis(c),
-            desmat(kernel,c)
-    {
-        norm = Normaliser(c);
-        //if (kernel.get_label()!="Kern_Linear" && config.exist("BASIS")) {
-        if (config.exist("BASIS")) {
-            basis.read_basis_from_config();
-            for (int i=0; i<basis.b.cols(); ++i)
-                std::cout << basis.b.col(i) << std::endl;
-            kernel.set_basis(basis.b);
-        }
-    }
-
-        /** This constructor will preapare this object for either training
-         *  or prediction (if potential is provides as a Config)
-         *
-         * Usage example:
-
-         * \code{.cpp}
-         * Config config("Config");
-         * Kern_Linear kernel(config);
-         * M_KRR<> krr(kernel, config);
-         * \endcode
-         *
-         */
-        M_KRR(K &kernel, Config &c):
-            M_KRR_Train<K>(kernel,c),
-            basis(c),
-            desmat(kernel,c)
-    {
-        norm = Normaliser(c);
-        //if (kernel.get_label()!="Kern_Linear" && config.exist("BASIS")) {
-        if (config.exist("BASIS")) {
-            basis.read_basis_from_config();
-            for (int i=0; i<basis.b.cols(); ++i)
-                std::cout << basis.b.col(i) << std::endl;
-            kernel.set_basis(basis.b);
-        }
-    }
-
-        double epredict(const aed_type2 &aed) {
-            return kernel.epredict(weights,aed);
-        };
-
-        double fpredict(const fd_type &fdij, const aed_type2 &aedi, const size_t k) {
-            return kernel.fpredict(weights,fdij,aedi,k);
-        }
-
-        force_type fpredict(const fd_type &fdij, const aed_type2 &aedi) {
-            return kernel.fpredict(weights,fdij,aedi);
-        }
-
-        void train(StDescriptorsDB &st_desc_db, const StructureDB &stdb) {
-
-            //if(config.template get<bool>("NORM"))
-            //    norm = Normaliser(config,st_desc_db);
-
-            desmat.build(st_desc_db,stdb);
-            train(desmat);
-        }
-
-        void train(StructureDB &stdb, DC_Base &dc) {
-
-            // NEW IMPLEMENTATION OF KRR //
-            std::string force=config.template get<std::string>("FORCE");
-            std::string stress=config.template get<std::string>("STRESS");
-            config.remove("FORCE");
-            config.remove("STRESS");
-            config.add("FORCE", "false");
-            config.add("STRESS", "false");
-            StDescriptorsDB st_desc_db_temp = dc.calc(stdb);
-            if(config.template get<bool>("NORM")) {
-                norm = Normaliser(config);
-                norm.learn(st_desc_db_temp);
-                norm.normalise(st_desc_db_temp);
-            }
-            config.remove("FORCE");
-            config.remove("STRESS");
-            config.add("FORCE", force);
-            config.add("STRESS", stress);
-            basis.prep_basis_for_krr(st_desc_db_temp,stdb);
-            kernel.set_basis(basis.b);
-            M_KRR_Train<K>::train2(basis);
-        }
-
-        Structure predict(const Config &c, StDescriptors &std, const Structure &st) {
-            // Used by tadah interface when predicting without -e flag
-            if(config.template get<bool>("NORM") && !std.normalised && kernel.get_label()!="Kern_Linear")
-                norm.normalise(std);
-            return M_Tadah_Base::predict(c,std,st);
-        }
-
-        StructureDB predict(Config &c, const StructureDB &stdb, DC_Base &dc) {
-            return M_Tadah_Base::predict(c,stdb,dc);
-        }
-
-        Config get_param_file() {
-            Config c = config;
-            c.remove("ALPHA");
-            c.remove("BETA");
-            c.remove("DBFILE");
-            c.remove("FORCE");
-            c.remove("STRESS");
-            c.remove("VERBOSE");
-
-            c.clear_internal_keys();
-            c.remove("MODEL");
-            c.add("MODEL", label);
-            c.add("MODEL", kernel.get_label());
-
-            for (size_t i=0;i<weights.size();++i) {
-                c.add("WEIGHTS", weights(i));
-            }
-
-            if(config.template get<bool>("NORM")) {
-                for (size_t i=0;i<norm.mean.size();++i) {
-                    c.add("NMEAN", norm.mean[i]);
-                }
-                for (size_t i=0;i<norm.std_dev.size();++i) {
-                    c.add("NSTDEV", norm.std_dev[i]);
-                }
-            }
-            //if (kernel.get_label()!="Kern_Linear") {
-                // dump basis to the config file file
-                // make sure keys are not accidently assigned
-                if (c.exist("SBASIS"))
-                    c.remove("SBASIS");
-                if (c.exist("BASIS"))
-                    c.remove("BASIS");
-                c.add("SBASIS", basis.b.cols());
-                for (size_t i=0;i<basis.b.cols();++i) {
-                    for (size_t j=0;j<basis.b.rows();++j) {
-                        c.add("BASIS", basis.b(j,i));
-                    }
-                }
-            //}
-            return c;
-        }
-        StructureDB predict(Config config_pred, StructureDB &stdb, DC_Base &dc,
-                aed_type2 &predicted_error) {
-
-            LinearRegressor::read_sigma(config_pred,Sigma);
-            DesignMatrix<K> dm(kernel,config_pred);
-            dm.scale=false; // do not scale energy, forces and stresses
-            dm.build(stdb,norm,dc);
-
-            //ekm.configure(basis.b);
-            //ekm.project(dm.Phi);
-
-
-
-            // compute error
-            predicted_error = T_MDMT_diag(dm.Phi, Sigma);
-            double beta = config.template get<double>("BETA");
-            predicted_error += 1.0/beta;
-
-            // compute energy, forces and stresses
-            aed_type2 Tpred = T_dgemv(dm.Phi, weights);
-
-            // Construct StructureDB object with predicted values
-            StructureDB stdb_;
-            stdb_.structures.resize(stdb.size());
-            size_t i=0;
-            for (size_t s=0; s<stdb.size(); ++s) {
-                stdb_(s) = Structure(stdb(s));
-
-                predicted_error(i) = sqrt(predicted_error(i));
-
-                stdb_(s).energy = Tpred(i++);
-                if (config_pred.get<bool>("FORCE")) {
-                    for (size_t a=0; a<stdb(s).natoms(); ++a) {
-                        for (size_t k=0; k<3; ++k) {
-                            predicted_error(i) = sqrt(predicted_error(i));
-                            stdb_(s).atoms[a].force[k] = Tpred(i++);
-                        }
-                    }
-                }
-                if (config_pred.get<bool>("STRESS")) {
-                    for (size_t x=0; x<3; ++x) {
-                        for (size_t y=x; y<3; ++y) {
-                            predicted_error(i) = sqrt(predicted_error(i));
-                            stdb_(s).stress(x,y) = Tpred(i++);
-                            if (x!=y)
-                                stdb_(s).stress(y,x) = stdb_(s).stress(x,y);
-                        }
-                    }
-                }
-            }
-            return stdb_;
-        }
-        StructureDB predict(StructureDB &stdb) {
-            if(!trained) throw std::runtime_error("This object is not trained!\n\
-                    Hint: check different predict() methods.");
-
-            phi_type &Phi = desmat.Phi;
-
-            // compute energy, forces and stresses
-            aed_type2 Tpred = T_dgemv(Phi, weights);
-
-            double eweightglob=config.template get<double>("EWEIGHT");
-            double fweightglob=config.template get<double>("FWEIGHT");
-            double sweightglob=config.template get<double>("SWEIGHT");
-
-            // Construct StructureDB object with predicted values
-            StructureDB stdb_;
-            stdb_.structures.resize(stdb.size());
-            size_t s=0;
-            size_t i=0;
-            while (i<Phi.rows()) {
-
-                stdb_(s).energy = Tpred(i++)*stdb(s).natoms()/eweightglob/stdb(s).eweight;
-                if (config.template get<bool>("FORCE")) {
-                    stdb_(s).atoms.resize(stdb(s).natoms());
-                    for (size_t a=0; a<stdb(s).natoms(); ++a) {
-                        for (size_t k=0; k<3; ++k) {
-                            stdb_(s).atoms[a].force[k] = Tpred(i++)/fweightglob/stdb(s).fweight;
-                        }
-                    }
-                }
-                if (config.template get<bool>("STRESS")) {
-                    for (size_t x=0; x<3; ++x) {
-                        for (size_t y=x; y<3; ++y) {
-                            stdb_(s).stress(x,y) = Tpred(i++)/sweightglob/stdb(s).sweight;
-                            if (x!=y)
-                                stdb_(s).stress(y,x) = stdb_(s).stress(x,y);
-                        }
-                    }
-                }
-                s++;
-            }
-            return stdb_;
-        }
-
-    private:
-        std::string label="M_KRR";
-        Basis<K> basis;
-        DesignMatrix<K> desmat;
-
-        t_type convert_to_nweights(const t_type &weights) const {
-            if(kernel.get_label()!="Kern_Linear") {
-                throw std::runtime_error("Cannot convert weights to nweights for\n\
-                        non linear kernel\n");
-            }
-            t_type kw(weights.rows());
-            kw.set_zero();
-            if(config.template get<bool>("NORM") && kernel.get_label()=="Kern_Linear") {
-                // normalise weights such that when predict is called
-                // we can supply it with a non-normalised descriptor
-                kw.resize(weights.rows());
-                kw(0) = weights(0);
-                for (size_t i=1; i<weights.size(); ++i) {
-
-                    if (norm.std_dev[i] > std::numeric_limits<double>::min())
-                        kw(i) = weights(i) / norm.std_dev[i];
-                    else
-                        kw(i) = weights(i);
-
-                    kw(0) -= norm.mean[i]*kw(i);
-
-                }
-            }
-            return kw;
-        }
-        // The opposite of convert_to_nweights()
-        t_type convert_to_weights(const t_type &kw) const {
-            if(kernel.get_label()!="Kern_Linear") {
-                throw std::runtime_error("Cannot convert nweights to weights for\n\
-                        non linear kernel\n");
-            }
-            // convert normalised weights back to "normal"
-            t_type w(kw.rows());
-            w.set_zero();
-            w(0) = kw(0);
-            for (size_t i=1; i<kw.size(); ++i) {
-                if (norm.std_dev[i] > std::numeric_limits<double>::min())
-                    w(i) = kw(i) * norm.std_dev[i];
-                else
-                    w(i) = kw(i);
-
-                w(0) += kw(i)*norm.mean[i];
-            }
-            return w;
-        }
-
-        template <typename D>
-            void train(D &desmat) {
-                phi_type &Phi = desmat.Phi;
-                t_type &T = desmat.T;
-                M_KRR_Train<K>::train(Phi,T);
-
-                //if (config.template get<bool>("NORM") &&
-                //        kernel.get_label()=="Kern_Linear") {
-                //    weights = convert_to_nweights(weights);
-                //}
-            }
-
-        // Do we want to confuse user with those and make them public?
-        // Either way they must be stated as below to silence clang warning
-        using M_KRR_Train<K>::predict;
-        using M_KRR_Train<K>::train;
-        using M_KRR_Train<K>::trained;
-        using M_KRR_Train<K>::weights;
-        using M_KRR_Train<K>::Sigma;
-};
-#endif
diff --git a/analytics/analytics.cpp b/src/analytics.cpp
similarity index 98%
rename from analytics/analytics.cpp
rename to src/analytics.cpp
index 9a8b3ea..4865127 100644
--- a/analytics/analytics.cpp
+++ b/src/analytics.cpp
@@ -1,5 +1,5 @@
-#include "analytics.h"
-#include "statistics.h"
+#include <tadah/mlip/analytics/analytics.h>
+#include <tadah/mlip/analytics/statistics.h>
 
 Analytics::Analytics(const StructureDB &st, const StructureDB &stp):
     st(st),
diff --git a/atom.cpp b/src/atom.cpp
similarity index 91%
rename from atom.cpp
rename to src/atom.cpp
index 98cd929..a84be1e 100644
--- a/atom.cpp
+++ b/src/atom.cpp
@@ -1,5 +1,5 @@
-#include "atom.h"
-#include "../CORE/periodic_table.h"
+#include <tadah/mlip/atom.h>
+#include <tadah/core/periodic_table.h>
 #include <iomanip>
 
 Atom::Atom() {}
diff --git a/src/dm_bf_base.cpp b/src/dm_bf_base.cpp
new file mode 100644
index 0000000..e68de39
--- /dev/null
+++ b/src/dm_bf_base.cpp
@@ -0,0 +1,2 @@
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h>
+DM_BF_Base::~DM_BF_Base() {}
diff --git a/design_matrix/functions/basis_functions/dm_bf_linear.cpp b/src/dm_bf_linear.cpp
similarity index 96%
rename from design_matrix/functions/basis_functions/dm_bf_linear.cpp
rename to src/dm_bf_linear.cpp
index 8b3241a..f04f66e 100644
--- a/design_matrix/functions/basis_functions/dm_bf_linear.cpp
+++ b/src/dm_bf_linear.cpp
@@ -1,4 +1,4 @@
-#include "dm_bf_linear.h"
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_BF_Linear> DM_BF_Linear_1( "BF_Linear" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_BF_Linear> DM_BF_Linear_2( "BF_Linear" );
diff --git a/design_matrix/functions/basis_functions/dm_bf_polynomial2.cpp b/src/dm_bf_polynomial2.cpp
similarity index 97%
rename from design_matrix/functions/basis_functions/dm_bf_polynomial2.cpp
rename to src/dm_bf_polynomial2.cpp
index 9543e92..51c3f56 100644
--- a/design_matrix/functions/basis_functions/dm_bf_polynomial2.cpp
+++ b/src/dm_bf_polynomial2.cpp
@@ -1,4 +1,4 @@
-#include "dm_bf_polynomial2.h"
+#include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_BF_Polynomial2> DM_BF_Polynomial2_1( "BF_Polynomial2" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_BF_Polynomial2> DM_BF_Polynomial2_2( "BF_Polynomial2" );
diff --git a/design_matrix/functions/dm_f_all.cpp b/src/dm_f_all.cpp
similarity index 96%
rename from design_matrix/functions/dm_f_all.cpp
rename to src/dm_f_all.cpp
index 5d174a0..64a583a 100644
--- a/design_matrix/functions/dm_f_all.cpp
+++ b/src/dm_f_all.cpp
@@ -1,4 +1,4 @@
-#include "dm_f_all.h"
+#include <tadah/mlip/design_matrix/functions/dm_f_all.h>
 
 template<> CONFIG::Registry<DM_Function_Base>::Map CONFIG::Registry<DM_Function_Base>::registry{};
 template<> CONFIG::Registry<DM_Function_Base,Config&>::Map CONFIG::Registry<DM_Function_Base,Config&>::registry{};
diff --git a/src/dm_function_base.cpp b/src/dm_function_base.cpp
new file mode 100644
index 0000000..8c7af9b
--- /dev/null
+++ b/src/dm_function_base.cpp
@@ -0,0 +1,2 @@
+#include <tadah/mlip/design_matrix/functions/dm_function_base.h>
+
diff --git a/design_matrix/functions/kernels/dm_kern_base.cpp b/src/dm_kern_base.cpp
similarity index 97%
rename from design_matrix/functions/kernels/dm_kern_base.cpp
rename to src/dm_kern_base.cpp
index 7227a1b..92d62af 100644
--- a/design_matrix/functions/kernels/dm_kern_base.cpp
+++ b/src/dm_kern_base.cpp
@@ -1,4 +1,4 @@
-#include "dm_kern_base.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
 
 DM_Kern_Base::~DM_Kern_Base() {}
 size_t DM_Kern_Base::get_phi_cols(const Config &)
diff --git a/design_matrix/functions/kernels/dm_kern_linear.cpp b/src/dm_kern_linear.cpp
similarity index 97%
rename from design_matrix/functions/kernels/dm_kern_linear.cpp
rename to src/dm_kern_linear.cpp
index 28fa629..c04a361 100644
--- a/design_matrix/functions/kernels/dm_kern_linear.cpp
+++ b/src/dm_kern_linear.cpp
@@ -1,4 +1,4 @@
-#include "dm_kern_linear.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Linear> DM_Kern_Linear_1( "Kern_Linear" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Linear> DM_Kern_Linear_2( "Kern_Linear" );
diff --git a/design_matrix/functions/kernels/dm_kern_lq.cpp b/src/dm_kern_lq.cpp
similarity index 80%
rename from design_matrix/functions/kernels/dm_kern_lq.cpp
rename to src/dm_kern_lq.cpp
index 590406c..0333db0 100644
--- a/design_matrix/functions/kernels/dm_kern_lq.cpp
+++ b/src/dm_kern_lq.cpp
@@ -1,4 +1,4 @@
-#include "dm_kern_lq.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_lq.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_LQ> DM_Kern_LQ_1( "Kern_LQ" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_LQ> DM_Kern_LQ_2( "Kern_LQ" );
diff --git a/design_matrix/functions/kernels/dm_kern_polynomial.cpp b/src/dm_kern_polynomial.cpp
similarity index 83%
rename from design_matrix/functions/kernels/dm_kern_polynomial.cpp
rename to src/dm_kern_polynomial.cpp
index b533b00..b5fccbd 100644
--- a/design_matrix/functions/kernels/dm_kern_polynomial.cpp
+++ b/src/dm_kern_polynomial.cpp
@@ -1,4 +1,4 @@
-#include "dm_kern_polynomial.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_polynomial.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Polynomial> DM_Kern_Polynomial_1( "Kern_Polynomial" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Polynomial> DM_Kern_Polynomial_2( "Kern_Polynomial" );
diff --git a/design_matrix/functions/kernels/dm_kern_quadratic.cpp b/src/dm_kern_quadratic.cpp
similarity index 83%
rename from design_matrix/functions/kernels/dm_kern_quadratic.cpp
rename to src/dm_kern_quadratic.cpp
index f710de2..402c777 100644
--- a/design_matrix/functions/kernels/dm_kern_quadratic.cpp
+++ b/src/dm_kern_quadratic.cpp
@@ -1,4 +1,4 @@
-#include "dm_kern_quadratic.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_quadratic.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Quadratic> DM_Kern_Quadratic_1( "Kern_Quadratic" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Quadratic> DM_Kern_Quadratic_2( "Kern_Quadratic" );
diff --git a/design_matrix/functions/kernels/dm_kern_rbf.cpp b/src/dm_kern_rbf.cpp
similarity index 81%
rename from design_matrix/functions/kernels/dm_kern_rbf.cpp
rename to src/dm_kern_rbf.cpp
index 2a2112a..7ff05ef 100644
--- a/design_matrix/functions/kernels/dm_kern_rbf.cpp
+++ b/src/dm_kern_rbf.cpp
@@ -1,4 +1,4 @@
-#include "dm_kern_rbf.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_rbf.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_RBF> DM_Kern_RBF_1( "Kern_RBF" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_RBF> DM_Kern_RBF_2( "Kern_RBF" );
diff --git a/design_matrix/functions/kernels/dm_kern_sigmoid.cpp b/src/dm_kern_sigmoid.cpp
similarity index 82%
rename from design_matrix/functions/kernels/dm_kern_sigmoid.cpp
rename to src/dm_kern_sigmoid.cpp
index bf84723..d1fb598 100644
--- a/design_matrix/functions/kernels/dm_kern_sigmoid.cpp
+++ b/src/dm_kern_sigmoid.cpp
@@ -1,4 +1,4 @@
-#include "dm_kern_sigmoid.h"
+#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_sigmoid.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Sigmoid> DM_Kern_Sigmoid_1( "Kern_Sigmoid" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Sigmoid> DM_Kern_Sigmoid_2( "Kern_Sigmoid" );
diff --git a/models/m_all.cpp b/src/m_all.cpp
similarity index 89%
rename from models/m_all.cpp
rename to src/m_all.cpp
index 6d50651..9c67972 100644
--- a/models/m_all.cpp
+++ b/src/m_all.cpp
@@ -1,4 +1,4 @@
-#include "m_all.h"
+#include <tadah/mlip/models/m_all.h>
 
 template<> CONFIG::Registry<M_Tadah_Base,DM_Function_Base&,Config&>::Map CONFIG::Registry<M_Tadah_Base,DM_Function_Base&,Config&>::registry{};
 CONFIG::Registry<M_Tadah_Base,DM_Function_Base&,Config&>::Register<M_KRR<>> M_KRR_1("M_KRR");
diff --git a/src/m_blr.cpp b/src/m_blr.cpp
new file mode 100644
index 0000000..bdb85a7
--- /dev/null
+++ b/src/m_blr.cpp
@@ -0,0 +1,2 @@
+#include <tadah/mlip/models/m_blr.h>
+#include <tadah/core/registry.h>
diff --git a/src/m_krr.cpp b/src/m_krr.cpp
new file mode 100644
index 0000000..d3cff34
--- /dev/null
+++ b/src/m_krr.cpp
@@ -0,0 +1,2 @@
+#include <tadah/mlip/models/m_krr.h>
+#include <tadah/core/registry.h>
diff --git a/models/m_tadah_base.cpp b/src/m_tadah_base.cpp
similarity index 98%
rename from models/m_tadah_base.cpp
rename to src/m_tadah_base.cpp
index 1ebf99c..11cac06 100644
--- a/models/m_tadah_base.cpp
+++ b/src/m_tadah_base.cpp
@@ -1,4 +1,4 @@
-#include "m_tadah_base.h"
+#include <tadah/mlip/models/m_tadah_base.h>
 
 void M_Tadah_Base::
 fpredict(const size_t a, force_type &v,
diff --git a/nn_finder.cpp b/src/nn_finder.cpp
similarity index 99%
rename from nn_finder.cpp
rename to src/nn_finder.cpp
index 8b63a42..1fedb4e 100644
--- a/nn_finder.cpp
+++ b/src/nn_finder.cpp
@@ -1,4 +1,4 @@
-#include "nn_finder.h"
+#include <tadah/mlip/nn_finder.h>
 #include <limits>
 
 NNFinder::NNFinder(Config &config):
diff --git a/st_descriptors.cpp b/src/st_descriptors.cpp
similarity index 97%
rename from st_descriptors.cpp
rename to src/st_descriptors.cpp
index bb9a5c2..e7a2840 100644
--- a/st_descriptors.cpp
+++ b/src/st_descriptors.cpp
@@ -1,4 +1,4 @@
-#include "st_descriptors.h"
+#include <tadah/mlip/st_descriptors.h>
 
 StDescriptors::StDescriptors(const Structure &s, const Config &c):
     // fully initialize aed
diff --git a/st_descriptors_db.cpp b/src/st_descriptors_db.cpp
similarity index 90%
rename from st_descriptors_db.cpp
rename to src/st_descriptors_db.cpp
index 87c1591..9f80ce0 100644
--- a/st_descriptors_db.cpp
+++ b/src/st_descriptors_db.cpp
@@ -1,4 +1,4 @@
-#include "st_descriptors_db.h"
+#include <tadah/mlip/st_descriptors_db.h>
 
 StDescriptorsDB::StDescriptorsDB(const StructureDB &stdb, Config &config):
     st_descs(stdb.size())
diff --git a/analytics/statistics.cpp b/src/statistics.cpp
similarity index 94%
rename from analytics/statistics.cpp
rename to src/statistics.cpp
index fce8019..255d867 100644
--- a/analytics/statistics.cpp
+++ b/src/statistics.cpp
@@ -1,4 +1,5 @@
-#include "statistics.h"
+#include <tadah/mlip/analytics/statistics.h>
+
 #include <cmath>
 
 double Statistics::res_sum_sq(const vec &obs, const vec &pred) {
diff --git a/structure.cpp b/src/structure.cpp
similarity index 98%
rename from structure.cpp
rename to src/structure.cpp
index e3d504c..d6e0b8d 100644
--- a/structure.cpp
+++ b/src/structure.cpp
@@ -1,7 +1,8 @@
-#include "structure.h"
+#include <tadah/mlip/structure.h>
+#include <tadah/core/periodic_table.h>
+
 #include <stdexcept>
 #include <cmath>
-#include "../CORE/periodic_table.h"
 
 Structure::Structure() {}
 
diff --git a/structure_db.cpp b/src/structure_db.cpp
similarity index 98%
rename from structure_db.cpp
rename to src/structure_db.cpp
index da7f8fc..c6e9733 100644
--- a/structure_db.cpp
+++ b/src/structure_db.cpp
@@ -1,4 +1,4 @@
-#include "structure_db.h"
+#include <tadah/mlip/structure_db.h>
 
 StructureDB::StructureDB() {}
 StructureDB::StructureDB(const Config &config) {
diff --git a/tests/test_atom.cpp b/tests/test_atom.cpp
deleted file mode 100644
index fa435f1..0000000
--- a/tests/test_atom.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-#include "catch2/catch.hpp"
-#include "../atom.h"
-#include <string>
-
-
-char symbol1[]="Ti";
-int Z1 = 22;
-Vec3d pos1(1.0,2.0,3.0);
-Vec3d force1(4.0,5.0,6.0);
-Element element1(symbol1,Z1);
-
-char symbol2[]="Nb";
-int Z2 = 41;
-Vec3d pos2(-1.0,-2.0,-3.0);
-Vec3d force2(-4.0,-5.0,-6.0);
-Element element2(symbol2,Z2);
-
-TEST_CASE( "Testing Atom class constructor", "[atom]" ) {
-
-
-    // Trivial case 1/2
-    Atom a(element1, 1.0, 2.0, 3.0, 
-            4.0, 5.0, 6.0);
-
-    REQUIRE( pos1 == a.position );
-    REQUIRE( force1 == a.force );
-    REQUIRE( symbol1[0] == a.symbol[0] );
-    REQUIRE( symbol1[1] == a.symbol[1] );
-    REQUIRE( Z1 == a.Z );
-
-    // Trivial case 2/2
-    Atom b;
-    b.position = pos1;
-    b.force = force1;
-    b.symbol[0] = symbol1[0];
-    b.symbol[1] = symbol1[1];
-    b.Z = Z1;
-
-    REQUIRE( pos1 == b.position );
-    REQUIRE( force1 == b.force );
-    REQUIRE( symbol1[0] == b.symbol[0] );
-    REQUIRE( symbol1[1] == b.symbol[1] );
-    REQUIRE( Z1 == b.Z );
-
-    REQUIRE( a == b );
-}
-TEST_CASE( "Testing Atom operator==", "[atom_operator==]" ) {
-    Atom a(element1, 1.0, 2.0, 3.0, 
-            4.0, 5.0, 6.0);
-    Atom b(element1, 1.0, 2.0, 3.0, 
-            4.0, 5.0, 6.0);
-    REQUIRE(a==b);
-
-    Atom c(element2, -1.0, -2.0, -3.0, 
-            -4.0, -5.0, -6.0);
-    REQUIRE(!(a==c));
-}
-TEST_CASE( "Testing Atom copy", "[atom_copy]" ) {
-    Atom a(element1, 1.0, 2.0, 3.0, 
-            4.0, 5.0, 6.0);
-    Atom b=a;
-    REQUIRE(a==b);
-}
diff --git a/tests/test_main.cpp b/tests/test_main.cpp
deleted file mode 100644
index 8d41722..0000000
--- a/tests/test_main.cpp
+++ /dev/null
@@ -1,3 +0,0 @@
-#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
-#include "catch2/catch.hpp"
-// No test in this file...
diff --git a/tests/test_structure.cpp b/tests/test_structure.cpp
deleted file mode 100644
index 99a46a0..0000000
--- a/tests/test_structure.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <string>
-#include <filesystem>
-#include "catch2/catch.hpp"
-#include "../atom.h"
-#include "../structure.h"
-
-// Conversion factor from eV/A^3 to kbar;
-double fac = 1602.1766208;
-
-TEST_CASE( "Testing Structure class volume", "[structure_volume]" ) {
-    //using vec=Eigen::Vector3d;
-
-    //std::string symbol="Ti";
-    //std::string name="Titanium";
-    //int Z = 22;
-    //vec pos(1.0,2.0,3.0);
-    //vec force(4.0,5.0,6.0);
-    //Element element(symbol,name,Z);
-
-    //Atom a(element, 1.0, 2.0, 3.0, 
-    //        4.0, 5.0, 6.0);
-
-    Structure st;
-    // Integer volume
-    st.cell.load(2,-1,3,
-               3,2,-4,
-              -2,0,1);
-
-    REQUIRE(st.get_volume() == 11 );
-
-    // double volume
-    st.cell.load(5.0147,5.0104,-5.0018,
-              -9.9924,-3.3395,-9.9662,
-              -25.6396,38.4594,12.8198);
-
-    REQUIRE(st.get_volume() == Approx(5980.0279772134).epsilon(1e-10));
-
-
-}
-TEST_CASE( "Testing Structure virial pressure calculations", "[structure_virial_pressures]" ) {
-
-    Structure st;
-    st.cell.load(9.374769,0.0,0.0,
-               0.0,9.374769,0.0,
-               0.0,0.0,9.374769);
-
-    REQUIRE(st.get_volume() == Approx(823.91));
-
-    st.stress.load(257.0893807653,0.0,0.0,
-                 0.0,257.0893807653,0.0,
-                 0.0,0.0,257.0893807653);
-    REQUIRE(fac*st.get_virial_pressure() == Approx(499.93));
-
-}
-TEST_CASE( "Testing Structure read and write", "[structure_read_write]" ) {
-    Structure st;
-    st.read("tests_data/structure_1.dat");
-
-    REQUIRE(st.get_volume() == Approx(989.521812));
-
-    REQUIRE(fac*st.get_virial_pressure() == Approx(26.705578));
-    REQUIRE(fac*st.get_pressure(300) == Approx(28.965914));
-    REQUIRE(fac*st.get_pressure(0) == Approx(26.705578));
-
-    std::string tempfile = std::tmpnam(nullptr);
-    st.save(tempfile);
-
-    Structure st_temp;
-    st_temp.read(tempfile);
-
-    REQUIRE(st_temp.get_volume() == Approx(989.521812));
-
-    REQUIRE(fac*st_temp.get_virial_pressure() == Approx(26.705578));
-    REQUIRE(fac*st_temp.get_pressure(300) == Approx(28.965914));
-    REQUIRE(fac*st_temp.get_pressure(0) == Approx(26.705578));
-
-    REQUIRE(st==st_temp);
-
-    std::remove(tempfile.c_str());
-
-}
-TEST_CASE( "Testing Structure compare", "[structure_compare]" ) {
-    Structure st;
-    st.read("tests_data/structure_1.dat");
-    std::string tempfile = std::tmpnam(nullptr);
-    st.save(tempfile);
-
-    Structure st_temp;
-    st_temp.read(tempfile);
-
-    SECTION("Compare unchanged") {
-        REQUIRE(st==st_temp);
-    }
-    SECTION("Compare symbols") {
-        REQUIRE(st==st_temp);
-        st_temp.atoms[0].symbol[0]='X';
-        st_temp.atoms[0].symbol[1]='X';
-        REQUIRE(!(st==st_temp));
-    }
-    SECTION("Compare position") {
-        REQUIRE(st==st_temp);
-        st_temp.atoms[0].position(0.12,0.13,10.14);
-        REQUIRE(!(st==st_temp));
-    }
-    SECTION("Compare force") {
-        REQUIRE(st==st_temp);
-        st_temp.atoms[0].force(1.12, 0.13, 0.134);
-        REQUIRE(!(st==st_temp));
-    }
-
-    std::remove(tempfile.c_str());
-}
-TEST_CASE( "Testing Structure copy", "[structure_copy]" ) {
-    Structure st;
-    st.read("tests_data/structure_1.dat");
-    Structure st2=st;
-        REQUIRE(st==st2);
-}
diff --git a/utils/DX_FD.h b/utils/DX_FD.h
deleted file mode 100644
index d5acbaa..0000000
--- a/utils/DX_FD.h
+++ /dev/null
@@ -1,272 +0,0 @@
-#ifndef TADAH_DX_FD_H
-#define TADAH_DX_FD_H
-#include "../../CORE/config/config.h"
-#include "../../CORE/core_types.h"
-#include "../../MODELS/descriptors/d_all.h"
-#include "../../MODELS/cutoffs/cut_all.h"
-#include "../../LIBS/Eigen/Dense"
-#include <vector>
-
-typedef Eigen::VectorXd rhoi_type;
-class DX_FD {
-    public:
-        DX_FD() {};
-        template <typename D2, typename C>
-            void test_d2() {
-                double rcut = 6.0;
-                Config config;
-                config.remove("INIT2B");
-                config.remove("VERBOSE");
-                config.remove("BIAS");
-                config.add("VERBOSE", 1);
-                config.add("INIT2B","true");
-                config.add("BIAS","false");
-                config.add("RCUT2B",rcut);
-                config.add("CGRID2B","-1 5 1.1 5.0");
-                //std::cout << config << std::endl;
-                C cutoff(rcut);
-                D2 d2(config);
-                test_d2(&d2,&cutoff);
-            }
-        void test_d2(D2_Base *d2, Cut_Base *cutoff, double h=1e-4) {
-
-            // Setup
-            aed_type2 aed(d2->size());
-            aed_type2 aedp(d2->size());
-            aed_type2 aedn(d2->size());
-
-            // Initial configuration
-            Atom a1("a1",0.1,7.2,1.3,0,0,0);
-            Atom a2("a2",2.2,4.1,1.8,0,0,0);
-            double r12 = (a1.position-a2.position).norm();
-            double fc12 = cutoff->calc(r12);
-            double fcp12 = cutoff->calc_prime(r12);  // cutoff prime
-
-            // "Positive" displacement
-            double r12p = r12+h;
-            double fc12p = cutoff->calc(r12p);
-
-            // "Negative" displacement
-            double r12n = r12-h;
-            double fc12n = cutoff->calc(r12n);
-
-            d2->calc_aed(r12, r12*r12,fc12,aed);
-            d2->calc_aed(r12p, r12p*r12p,fc12p,aedp);
-            d2->calc_aed(r12n, r12n*r12n,fc12n,aedn);
-
-            fd_type fd(d2->size(),3);    // true fd
-            fd_type fd1a(d2->size(),3);   // finite difference fd(approx)
-
-            d2->calc_dXijdri(r12,r12*r12,fc12,fcp12,fd);
-            d2->calc_fd_approx(r12,fc12p,fc12n,aedp,aedn,fd1a,h);
-
-            std::cout << "\nfd:\n" <<  fd << std::endl;
-            std::cout << "\nfda:\n" <<  fd1a << std::endl;
-            std::cout << "\nfd-fd1a:\n" <<  fd-fd1a << std::endl;
-        }
-        template <typename DM, typename C>
-            void test_dm() {
-                double rcut = 5.3;
-                Config config;
-                config.remove("INITMB");
-                config.add("INITMB","true");
-                config.remove("BIAS");
-                config.add("BIAS","false");
-                config.add("RCUTMB",rcut);
-                config.add("AGRIDMB",3);
-                config.add("SGRIDMB","-2 3 0.01 0.4");
-                config.add("CGRIDMB","-1 2 0.0 3.0");
-                config.add("SETFL","/home/s1351949/PROJECTS/tadah/workspace/Ta/Ta1_Ravelo_2013.eam.alloy");
-                config.remove("VERBOSE");
-                config.add("VERBOSE", 0);
-                //std::cout << config << std::endl;
-                C cutoff(rcut);
-                DM dm(config);
-                test_dm(&dm,&cutoff);
-            }
-        void test_dm(DM_Base *dm, Cut_Base *cutoff, double h=1e-4) {
-
-            // Initial configuration
-            vec3d r1(0.0,0.1,0.0);
-            vec3d r2(1.1,0.3,1.1);
-            vec3d r3(3.1,4.2,0.8);
-            vec3d r4(2.1,0.0,3.8);
-
-            std::vector<vec3d> rs = {r1,r2,r3,r4};
-            std::cout << "  True FD: " << std::endl;
-            std::vector<fd_type> fdi = calc_true_fd_dm(dm,cutoff,rs);
-            std::cout << "  Finite difference FD: " << std::endl;
-            std::vector<fd_type> fda = calc_apporx_fd_dm(dm,cutoff,rs,h);
-
-            std::cout << "  Difference True-Approximation: " << std::endl;
-            for (size_t i=0; i<fdi.size(); ++i) {
-                std::cout << "fd" << i << ":\n" <<  fdi[i]-fda[i] << std::endl;
-            }
-
-
-        }
-        std::vector<fd_type> calc_true_fd_dm(DM_Base *dm, Cut_Base *cutoff, std::vector<vec3d> &rs) {
-            vec3d
-            // Copy vector to matrix
-            Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> rsm(rs.size(),3);   // [N,3]
-            for (size_t i=0; i<rs.size(); ++i ) {
-                for (size_t j=0; j<3; ++j ) {
-                    rsm(i,j) = rs[i][j];
-                }
-            }
-
-            Eigen::Matrix<vec3d,Eigen::Dynamic,Eigen::Dynamic> vecij(rs.size(),rs.size()); // [N,N]
-            std::vector<aed_type> aeds(rs.size(), aed_type(dm->size()));
-            std::vector<rhoi_type> rhois(rs.size());
-            Eigen::Matrix<fd_type,Eigen::Dynamic,Eigen::Dynamic> fdij(rs.size(),rs.size()); // [N,N]
-            std::vector<fd_type> fdi(rs.size()); // [N,1]
-
-
-            // Initialize all data structures
-            for (size_t i=0; i<rs.size(); ++i ) {
-                dm->init_rhoi(rhois[i]);
-                aeds[i].set_zero();
-                fdi[i] = fd_type(dm->size(),3);
-                fdi[i].set_zero();
-                for (size_t j=i+1; j<rs.size(); ++j ) {
-                    fdij(i,j) = fd_type(dm->size(),3);
-                    fdij(i,j).set_zero();
-                }
-            }
-
-            for (size_t i=0; i<rs.size(); ++i ) {
-                for (size_t j=0; j<rs.size(); ++j ) {
-                    vecij(i,j) = rsm.row(i) - rsm.row(j);
-                }
-            }
-
-            for (size_t i=0; i<rs.size(); ++i ) {
-
-                // Calculate densities
-                for (size_t j=i+1; j<rs.size(); ++j ) {
-                    vec3d &vij = vecij(i,j);
-                    vec3d &vji = vecij(j,i);
-                    double rij = vij.norm();
-                    double fcij = cutoff->calc(rij);
-                    dm->calc_rho(rij,rij*rij,fcij,vij,rhois[i]);
-                    dm->calc_rho(rij,rij*rij,fcij,vji,rhois[j]);
-                }
-
-                // Calculate energy and derivative of the embedding
-                // function at the atom
-                dm->calc_aed(rhois[i], aeds[i]);
-
-            }
-
-            for (size_t i=0; i<rs.size(); ++i ) {
-
-                for (size_t j=i+1; j<rs.size(); ++j ) {
-                    vec3d &vij = vecij(i,j);
-                    double rij = vij.norm();
-                    double fcij = cutoff->calc(rij);
-                    double fcpij = cutoff->calc_prime(rij);
-                    int mode = dm->calc_dXijdri_dXjidri(rij,rij*rij,vij,fcij,fcpij,rhois[i],rhois[j],fdij(i,j));
-                    if (mode==0) {
-                        for (size_t k=0; k<3; ++k ) {
-                            fdi[i].col(k) += vij(k)*fdij(i,j).col(0)/rij;
-                            fdi[j].col(k) -= vij(k)*fdij(i,j).col(0)/rij;
-                        }
-                    }
-                    else {
-                        fdi[i] += fdij(i,j);
-                        fdi[j] -= fdij(i,j);
-                    }
-                }
-                std::cout << "fd" << i << ":\n" <<  fdi[i] << std::endl;
-            }
-
-            return fdi;
-        }
-        std::vector<fd_type> calc_apporx_fd_dm(DM_Base *dm, Cut_Base *cutoff, std::vector<vec3d> &rs, double h) {
-            // Copy vector to matrix
-            Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> rsp(rs.size(),3);   // [N,3]
-            Eigen::Matrix<double,Eigen::Dynamic,Eigen::Dynamic> rsn(rs.size(),3);   // [N,3]
-
-            Eigen::Matrix<vec3d,Eigen::Dynamic,Eigen::Dynamic> vecijp(rs.size(),rs.size()); // [N,N]
-            Eigen::Matrix<vec3d,Eigen::Dynamic,Eigen::Dynamic> vecijn(rs.size(),rs.size()); // [N,N]
-            std::vector<aed_type> aedp(rs.size(), aed_type(dm->size()));
-            std::vector<aed_type> aedn(rs.size(), aed_type(dm->size()));
-            std::vector<rhoi_type> rhoip(rs.size());
-            std::vector<rhoi_type> rhoin(rs.size());
-            std::vector<fd_type> fdi(rs.size()); // [N,1]
-
-            // reset all positions
-            for (size_t i=0; i<rs.size(); ++i ) {
-                fdi[i] = fd_type(dm->size(),3);
-                fdi[i].set_zero();
-                dm->init_rhoi(rhoip[i]);
-                dm->init_rhoi(rhoin[i]);
-                aedn[i].set_zero();
-                for (size_t k=0; k<3; ++k ) {
-                    rsp(i,k) = rs[i][k];
-                    rsn(i,k) = rs[i][k];
-                }
-            }
-
-
-
-            for (size_t ii=0; ii<rs.size(); ++ii ) {
-                for (size_t k=0; k<3; ++k ) {
-
-                    // displace atom ii by h in +/-k direction
-                    rsp(ii,k) = rs[ii][k] + h;
-                    rsn(ii,k) = rs[ii][k] - h;
-
-                    // reset arrays for new k
-                    for (size_t i=0; i<rs.size(); ++i ) {
-                        aedp[i].set_zero();
-                        aedn[i].set_zero();
-                        rhoip[i].set_zero();
-                        rhoin[i].set_zero);
-                    }
-
-                    for (size_t i=0; i<rs.size(); ++i ) {
-                        for (size_t j=i+1; j<rs.size(); ++j ) {
-                            vecijp(i,j) = rsp.row(i) - rsp.row(j);
-                            vecijn(i,j) = rsn.row(i) - rsn.row(j);
-                            vec3d vijp = vecijp(i,j);
-                            vec3d vijn = vecijn(i,j);
-                            vec3d vjip = -vijp;
-                            vec3d vjin = -vijn;
-                            double rijp = vijp.norm();
-                            double rijn = vijn.norm();
-                            double fcijp = cutoff->calc(rijp);
-                            double fcijn = cutoff->calc(rijn);
-                            dm->calc_rho(rijp,rijp*rijp,fcijp,vijp,rhoip[i]);
-                            dm->calc_rho(rijp,rijp*rijp,fcijp,vjip,rhoip[j]);
-                            dm->calc_rho(rijn,rijn*rijn,fcijn,vijn,rhoin[i]);
-                            dm->calc_rho(rijn,rijn*rijn,fcijn,vjin,rhoin[j]);
-                        }
-
-                        dm->calc_aed(rhoip[i], aedp[i]);
-                        dm->calc_aed(rhoin[i], aedn[i]);
-                        fdi[ii].col(k) += (aedp[i]-aedn[i])/(2*h);
-                    }
-                    // reset back position for next k
-                    rsp(ii,k) = rs[ii][k];
-                    rsn(ii,k) = rs[ii][k];
-                }
-
-                std::cout << "fd" << ii << ":\n" <<  fdi[ii] << std::endl;
-            }
-            return fdi;
-        }
-
-
-};
-class Lattice {
-    public:
-        double a; // lattice parameter
-        double b; // lattice parameter
-        double c; // lattice parameter
-        double alpha; // Angle
-        double betta; // Angle
-        double gamma; // Angle
-};
-#endif
-
-- 
GitLab