BlosSOM
Interactive dimensionality reduction on large datasets (EmbedSOM and FLOWER combined)
BlosSOM architecture

Technologies

BlosSOM is written in C++ using GLFW for rendering and Dear ImGUI for graphical user interface. The NVIDIA CUDA platform is used by EmbedSOM algorithm for GPU computations.

Render cycle

This application has graphical output that is rendered in cycles. One cycle looks as follows (main() method in the main.cpp file):

timer.tick();
view.update();
state.update();
renderer.update();
imgui.render();

State update

The main algorithm updates happen in the State update cycle that looks as follows (State::update() method in the state.h file):

stats.update();
trans.update();
scaled.update();
if(kmeans) kmeans_landmark_step();
if(knn_edges) make_knn_edges();
if(graph_layout) graph_layout_step();
if(tsne) tsne_layout_step();
colors.update();
scatter.update();
void graph_layout_step(GraphLayoutData &data, bool vert_pressed, int vert_ind, LandmarkModel &lm, float time)
One iteration step of the landmark layouting algorithm.
void kmeans_landmark_step(KMeansData &data, const ScaledData &model, size_t iters, float alpha, float gravity, LandmarkModel &lm)
Run a k-means-like optimization of high-dimensional landmark positions.
void som_landmark_step(KMeansData &data, const ScaledData &model, size_t iters, float alpha, float sigma, LandmarkModel &lm)
Run a SOM to optimize high-dimensional landmark positions.
void make_knn_edges(KnnEdgesData &data, LandmarkModel &landmarks, const size_t kns)
Definition: knn_edges.cpp:33
void tsne_layout_step(TSNELayoutData &data, bool vert_pressed, int vert_ind, LandmarkModel &lm, float time)
Optimize the positions of low-dimensional landmarks using the t-SNE algorithm.
Definition: tsne_layout.cpp:28

For further information about classes and files see Doxygen documentation of the public attributes of the Application and State classes.