diff --git a/CPET/source/cluster.py b/CPET/source/cluster.py index 454337c..e0c1a86 100644 --- a/CPET/source/cluster.py +++ b/CPET/source/cluster.py @@ -502,4 +502,4 @@ def cluster_analyze(self): plt.show() if self.plot_dwell_times == True: print(0) - return compressed_dictionary + return compressed_dictionary \ No newline at end of file diff --git a/CPET/source/scripts/triangulation.ipynb b/CPET/source/scripts/triangulation.ipynb new file mode 100644 index 0000000..987387d --- /dev/null +++ b/CPET/source/scripts/triangulation.ipynb @@ -0,0 +1,226 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Max distance: 10.2571\n", + "Min distance: 0.0\n", + "Max curvature: 23.0602\n", + "Min curvature: 0.00173876\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/test/1ued.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Max distance: 10.2571\n", + "Min distance: 0.0\n", + "Max curvature: 23.0602\n", + "Min curvature: 0.00173876\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/test/1sy7.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Max distance: 10.2571\n", + "Min distance: 0.0\n", + "Max curvature: 23.0602\n", + "Min curvature: 0.00173876\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/test/1u5u.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Max distance: 10.2571\n", + "Min distance: 0.0\n", + "Max curvature: 23.0602\n", + "Min curvature: 0.00173876\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/test/1si8.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Max distance: 10.2571\n", + "Min distance: 0.0\n", + "Max curvature: 23.0602\n", + "Min curvature: 0.00173876\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/test/1ulw.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Max distance: 10.2571\n", + "Min distance: 0.0\n", + "Max curvature: 23.0602\n", + "Min curvature: 0.00173876\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/2w0a.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3atj.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/3mgx.top\n", + "Plotting histo for /home/santiagovargas/dev/CPET-python/data/triangulation/topo/test/1lga.top\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from CPET.source.calculator import calculator\n", + "from CPET.utils.calculator import make_histograms, construct_distance_matrix, construct_distance_matrix_alt2, construct_distance_matrix_alt\n", + "import glob as glob \n", + "import numpy as np \n", + "import matplotlib.pyplot as plt\n", + "import matplotlib\n", + "\n", + "def relative_descriptor(target_file, reference_folder, representation= 'topology'):\n", + " \"\"\"\n", + " Compute a relative descriptor as the distance between the target file and a reference folder files.\n", + "\n", + " target_file: str\n", + " The path to the target file\n", + " reference_folder: str\n", + " The path to the reference folder\n", + " representation: str\n", + " The representation of the target file. Default is 'topology'. TODO: add field\n", + " \"\"\"\n", + " files_reference = glob.glob(reference_folder + '/*')\n", + " #iles = files_reference + [target_file]\n", + " histogram_relative = make_histograms_reference(target_file, files_reference, plot=False)[-1]\n", + " \n", + " return histogram_relative\n", + "\n", + "\n", + "\n", + "folder_ref = \"/home/santiagovargas/dev/CPET-python/data/triangulation/topo/reference/\"\n", + "folder_targets = \"/home/santiagovargas/dev/CPET-python/data/triangulation/topo/test/\"\n", + "\n", + "files_reference = glob.glob(folder_ref + '/*top')\n", + "hists_relative = []\n", + "for file in glob.glob(folder_targets + '/*top'):\n", + " hists_relative.append(relative_descriptor(file, folder_ref))" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(hists_relative)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "def distance_numpy(hist1, hist2):\n", + " a = (hist1 - hist2) ** 2\n", + " b = hist1 + hist2\n", + " return np.sum(np.divide(a, b, out=np.zeros_like(a), where=b != 0)) / 2.0\n", + "\n", + "\n", + "\n", + "import numpy as np \n", + "matrix=construct_distance_matrix_alt2(hists_relative)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0. , 0.68727954, 0.405438 , 0.64837804, 0.40238082,\n", + " 0.41366259],\n", + " [0.68727954, 0. , 0.7427908 , 0.30940483, 0.66417552,\n", + " 0.73072972],\n", + " [0.405438 , 0.7427908 , 0. , 0.69009109, 0.41037958,\n", + " 0.39228161],\n", + " [0.64837804, 0.30940483, 0.69009109, 0. , 0.61979415,\n", + " 0.67900257],\n", + " [0.40238082, 0.66417552, 0.41037958, 0.61979415, 0. ,\n", + " 0.40010306],\n", + " [0.41366259, 0.73072972, 0.39228161, 0.67900257, 0.40010306,\n", + " 0. ]])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "matrix" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "CPET_ENV", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +}