Getting Started
1. Prerequisites
Before using sablib, ensure that you have the following installed:
- C++ Compiler: Support for C++17 or later.
- CMake: Version 3.10 or later.
- Eigen 3: Version 3.4.0 or later.
2. Installation
Option A: Using vcpkg
sablib provides a vcpkg port. First, clone this repository:
git clone https://github.com/Izadori/sablib.git
Then install with the --overlay-ports option:
vcpkg install sablib --overlay-ports=<path/to/sablib>/vcpkg/ports
That's it! Eigen3 is automatically installed as a dependency.
Option B: Using Conan
sablib provides a Conan recipe. First, clone this repository:
git clone https://github.com/Izadori/sablib.git
Then install and build:
cd sablib
conan install conan/sablib --output-folder=conan/build --build=missing
conan build conan/sablib --output-folder=conan/build
That's it! Eigen3 is automatically installed as a dependency.
Option C: Cloning and Building Manually
To clone the sablib repository from GitHub, use the following command:
git clone https://github.com/Izadori/sablib.git
sablib can be built as a static or shared library using CMake directly:
cd sablib
mkdir build
cd build
# For static library (default)
cmake ..
# For shared library (.dll on Windows, .so on Linux, .dylib on macOS)
cmake .. -DBUILD_SHARED_LIBS=ON
# Build the library
cmake --build . --config Release
If Eigen3 is installed in a non-standard location, you might need to specify its path:
cmake .. -DCMAKE_PREFIX_PATH="path/to/Eigen3"
cmake --build . --config Release
2.1 Installation
To install sablib to your system (or a specific directory), use the following commands:
# Specify the installation directory (optional)
cmake .. -DCMAKE_INSTALL_PREFIX="/path/to/install"
# Install the library and headers
cmake --install . --config Release
After installation, the headers will be located in ${CMAKE_INSTALL_PREFIX}/include/sablib and the library in ${CMAKE_INSTALL_PREFIX}/lib. On Windows, the DLL will be in ${CMAKE_INSTALL_PREFIX}/bin.
3. Usage Example
Here is a simple example showing how to use the Whittaker smoother in your own C++ program.
Sample Program: main.cpp
#include <cmath>
#include <cstdlib>
#include <iostream>
#include <vector>
int main()
{
const int N = 100;
std::vector<double> signal((size_t)N);
for (int i = 0; i < N; ++i) {
double t = (double)i / N;
double baseline = 0.5 * t + 0.1;
double peak = 2.0 * std::exp(-std::pow((t - 0.5) / 0.05, 2));
double noise = 0.05 * ((double)std::rand() / RAND_MAX - 0.5);
signal[i] = baseline + peak + noise;
}
double lambda = 1.0;
unsigned int s = 2;
try {
std::cout << "Original\tSmoothed" << std::endl;
for (size_t i = 0; i < signal.size(); ++i) {
std::cout << signal[i] << "\t" << smoothed[i] << std::endl;
}
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
return 1;
}
return 0;
}
Header file of sablib, a C++ library for signal smoothing and baseline estimation.
const std::vector< double > Whittaker(const std::vector< double > &y, const std::vector< double > &w, const double lambda, const unsigned int s)
Performs Whittaker smoothing (std::vector<double> version, with weights).
Building your project with CMake
Via vcpkg
If you installed sablib via vcpkg, integrate it with the vcpkg toolchain file and use find_package:
cmake_minimum_required(VERSION 3.10)
project(my_sablib_project CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(sablib CONFIG REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE sablib::sablib)
Build with the vcpkg toolchain:
cmake .. -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build .
Via Conan
If you installed sablib via Conan, integrate it with the Conan toolchain file and use find_package:
cmake_minimum_required(VERSION 3.10)
project(my_sablib_project CXX)
set(CMAKE_CXX_STANDARD 17)
find_package(sablib CONFIG REQUIRED)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE sablib::sablib)
Build with the Conan toolchain:
cmake .. -DCMAKE_TOOLCHAIN_FILE=conan/build/conan_toolchain.cmake
cmake --build .
Manually
To build your project and link against a manually built sablib, use a CMakeLists.txt like this:
cmake_minimum_required(VERSION 3.10)
project(my_sablib_project CXX)
set(CMAKE_CXX_STANDARD 17)
# Find Eigen3
find_package(Eigen3 REQUIRED NO_MODULE)
# Set the path to the sablib directory
set(SABLIB_DIR "/path/to/sablib")
# Include sablib headers
include_directories(${SABLIB_DIR})
# Add your executable
add_executable(my_app main.cpp)
# Link against the pre-built sablib library
# Assuming libsablib.a is in the build folder
find_library(SABLIB_LIB NAMES sablib libsablib PATHS "${SABLIB_DIR}/build")
target_link_libraries(my_app PRIVATE ${SABLIB_LIB} Eigen3::Eigen)
Manual Compilation (Command Line)
If you prefer not to use CMake, you can compile directly using your preferred compiler. Ensure you have the paths to sablib and Eigen3 headers correctly specified.
Using g++ (MinGW / Linux)
g++ main.cpp -std=c++17 \
-I/path/to/sablib \
-I/path/to/eigen3 \
-L/path/to/sablib/build \
-lsablib -o my_app
Using cl.exe (MSVC)
Open a Developer Command Prompt for Visual Studio and run:
cl /EHsc /std:c++17 main.cpp ^
/I \path\to\sablib ^
/I \path\to\eigen3 ^
/link /LIBPATH:\path\to\sablib\build ^
sablib.lib /out:my_app.exe