From aecc9fe30eebbda0dcbaa8f2860bba6da4e3d18d Mon Sep 17 00:00:00 2001 From: berti_r Date: Fri, 18 Jul 2025 09:20:34 +0200 Subject: [PATCH] save conf --- Config/config.json | 4 +- .../metrology_functions.cpython-313.pyc | Bin 21233 -> 21707 bytes Scripts/metrology_functions.py | 42 ++++++-- .../conf_20250718.json | 1 + .../20250718_090842_static_0/static_0.dat | 50 +++++++++ notebooks/Untitled.ipynb | 101 ++++++++++++++++++ notebooks/sample.ipynb | 32 +++--- 7 files changed, 206 insertions(+), 24 deletions(-) create mode 100644 data/data20250718_alignment_tests/20250718_090842_static_0/conf_20250718.json create mode 100644 data/data20250718_alignment_tests/20250718_090842_static_0/static_0.dat diff --git a/Config/config.json b/Config/config.json index 00f98f7..3982140 100644 --- a/Config/config.json +++ b/Config/config.json @@ -1,9 +1,9 @@ { - "Number_of_cycles": 10, + "Number_of_cycles": 50, "Amplitude_mm": 1, "Time_in_beam_s": 5, "Time_out_of_beam_s": 10, - "Exposure_time": 0.0003, + "Exposure_time": 0.0004, "Img_Processing": 1, "pixel_size_mu": 0.275 } \ No newline at end of file diff --git a/Scripts/__pycache__/metrology_functions.cpython-313.pyc b/Scripts/__pycache__/metrology_functions.cpython-313.pyc index dabac194367373f0986e0c206b229b8c655101b7..7f1c3b81d3aed1db32b42a5e86043d6b4985291c 100644 GIT binary patch delta 2367 zcmah~eN0defhe`wTYU(P?w8!`UjV#uQLJ27hXoL9il=xyHbo_o&k z+Z^sg6Ua|OW&D%5__aqnLdQknhF$%V*mi9|qiw1Uw!()aQD~=u)o2qhNYg=a7BDOlt%ZI2R z2-F4OEm3rGLd;6E6;|vwM|+7~F(!xO(V5&DcF1!KTHWspS#ucP_`mg^lntweYGX9ya&J!v^>XK0OqJdx_Uyu_&>*s+HP^ zuBVE5nkw}^j9C@iBSN^OMXT9Rzs+%U-?2wxb$Fn@weMiebA%2Qsp>a13l-qG+<~)Vuat)%#U+ zBBkOO`@p$!g5pIgLMoY-vtmr5?doz^k`r;79HgbVxq4(98gx|LE~UI?g@@Wu^i;~J zGZsoZtB`TJ8Tmn^>hFujMQ2GM&sN#gw{|A<#@Vrx0^gHUqmB2WxOuRZqZb z1RmK1-IwR)Ew;(t-M#x_d+y1%G3vT;VqU12c1$-;_goZe^MTI=)1-N~d0$}P$kRKf zc1({dW|#$6UDwzjBzO!O%983 ziLOQE1bew+icA&)D}EAO5^C_iX#!yorK39&t^YgRsp`l2IB>difb61Fsb zn7zMxlFYE)y79V4Q1K|jE`;3(dk`K&cpPCb`>}3-oGtX#zicL*1!LneLWT+_Z>Z$; zU!eUm`?RUOY#WG*J^{re$@C)XKV~h>&EzANZLTK=3r{t#(2y%^?xspoV5e^yxON6P z2N8ZiSEHO0X)c=0$civ5i84w{=WlKCkom$`i-wS2*aQ9=@-utJ@7Etk=i`M-{)0Nl z6v|H^;5Q7?!S-&vuKNne3ZEGo@|Mx-(Rc{q1%$&0FCrX8__vJlPX;=^;WMEAP4My>l#=00E<>Z4bQDgZCvht^hs(uJ*C6|Q))(-Q=ED7fE&RlCtmCFo zPi<^0mXc(@dX3}OU`ou&(qJt#ljN_Z4d4u&`rol*XH&KH>rwiniumkkuJ~qZwEE&_ zykcZj8kN*o6;mky70lq1YCcgJe|2F$@xwz0z*$EGe8WC5i{gx3&!0A35lez&|S`d zD}oSvB6Q1DxT&lGsI8?|m=xpiSX72ql(y4O_EqS_RoHP}Ek(`(w&0y@UP2F`aw9#) z-s|+1W7Q~zteAsd7@%4((OVhc<#CLFs2GdkC)05nWKCVodbKU**htsC zGrHn8^8?`qMC4&k(s;AQmfl!GQX9OQDHV~DGP~$pZgpy=Xk6-(Sw(@{mJ^Nl zb?J-Pyn;A{LT*nQXF&Rs!nq@$y-HDVe=Fqh);hs*mu6#-igsAG|b9~iz4vc@NRd&NTfAQ}%L zj3OLHID&8t;a()(Mg#VnW{$>Fk;E2C;DdTVtyxlGNmXU48Kte!6y?!y1`MJ_%Z(@0 z1no*FT@|o1{RE@vRAbp?3$PlO-(U@GRm7VKwk_j_r}7`Nt?_%pgW;H*YSGJJD6c&x zB~x;b2WnYv@lX+*#k~JH&q>@%FQpoku!Jb~mBuIgCrU<7*R1KU&a}<_a=)zSs@bxa zgS*l5tYKL@Y0eBTa~a8NY=^Ie>}2oyD(yoUa1X+p?6S{gKZ;@z!rSboZ{~0_o)DSU zOmaM_4$^Y8{ijODP*;y|3ZW4I9?N=k)eGh5H+bT=cN8(jCQgS9Nyxrm%+Cpt@skA2yBwtP24 z6OGxIsR!is9U`IoQMs6&WTWfEA}kTjl9W{Fg>GtuFS>~Ru&&CPKtoP8)2Px%m#}>Q zT(jPmCz#LwSn*+fL42@ZjmDzDj~jjC?3}-Rrp_h&fdQAeh)>4CnkAf26gjNYhmf6j l*lqs|5mUs;D&d7mY@(=y6@9qEq diff --git a/Scripts/metrology_functions.py b/Scripts/metrology_functions.py index 570d771..a15992e 100644 --- a/Scripts/metrology_functions.py +++ b/Scripts/metrology_functions.py @@ -82,9 +82,37 @@ def gaussian_2d(coords, amplitude, x0, y0, sigma_x, sigma_y, offset): return amplitude * np.exp( -(((x - x0) ** 2) / (2 * sigma_x ** 2) + ((y - y0) ** 2) / (2 * sigma_y ** 2)) ) + offset -def band_pass_filter(image, low_radius, high_radius): +def compute_gradient(img, pos, h=1e-2): + x, y = pos + x_int, y_int = int(x), int(y) + + # Ensure position is within bounds + if x_int <= 0 or x_int >= img.shape[1] - 1 or y_int <= 0 or y_int >= img.shape[0] - 1: + return np.array([0.0, 0.0]) + + # Use central difference + dx = (img[y_int, x_int + 1] - img[y_int, x_int - 1]) / 2 + dy = (img[y_int + 1, x_int] - img[y_int - 1, x_int]) / 2 + return np.array([dx, dy]) +def gradient_ascent(img, start_pos, lr=0.8, max_iter=1000, tol=1e-4): + pos = np.array(start_pos, dtype=float) + path = [tuple(pos)] + + for i in range(max_iter): + grad = compute_gradient(img, pos) + if np.linalg.norm(grad) < tol: + break + pos += lr * grad + + # Clip to image boundaries + pos = np.clip(pos, [0, 0], [img.shape[1] - 1, img.shape[0] - 1]) + path.append(tuple(pos)) + + return pos, path + +def band_pass_filter(img_float, low_radius, high_radius): # Convert to float32 for FFT - img_float = np.float32(image) + # Get shape rows, cols = img_float.shape @@ -112,12 +140,12 @@ def band_pass_filter(image, low_radius, high_radius): def __process_img(img , retimg=0): img_np = np.array(img) - img = band_pass_filter(img_np,15,25) img = cv2.GaussianBlur(img,(5,5),0) img = spnd.zoom(img, 4,order=3) z = np.array(img) - """# Create a test image (e.g., 2D Gaussian) + #z = band_pass_filter(z,5,10) + # Create a test image (e.g., 2D Gaussian) x = np.linspace(0, z.shape[0], z.shape[0]) y = np.linspace(0, z.shape[1], z.shape[1]) x, y = np.meshgrid(x, y) @@ -126,12 +154,14 @@ def __process_img(img , retimg=0): # Flatten and fit x_gues, y_gues = image_center_of_mass(img, plot=False, verbose=False) - initial_guess = (180, x_gues, y_gues, 4, 4, 1) + """ + initial_guess = (180, x_gues, y_gues, 10, 10, 1) popt, _ = curve_fit(gaussian_2d, (x.ravel(), y.ravel()), z.ravel(), p0=initial_guess) x = popt[1] y = popt[2]""" - y,x = np.unravel_index(np.argmax(z), z.shape) + result , path = gradient_ascent(img, (x_gues, y_gues)) + #y,x = np.unravel_index(np.argmax(z), z.shape) #ret1, th1 = cv2.threshold(img, 196, 255, cv2.THRESH_BINARY) #x, y = image_center_of_mass(img, plot=False, verbose=False) if retimg: diff --git a/data/data20250718_alignment_tests/20250718_090842_static_0/conf_20250718.json b/data/data20250718_alignment_tests/20250718_090842_static_0/conf_20250718.json new file mode 100644 index 0000000..c862912 --- /dev/null +++ b/data/data20250718_alignment_tests/20250718_090842_static_0/conf_20250718.json @@ -0,0 +1 @@ +{"Number_of_cycles": 50, "Amplitude_mm": 1, "Time_in_beam_s": 5, "Time_out_of_beam_s": 10, "Exposure_time": 0.0004, "Img_Processing": 1, "pixel_size_mu": 0.275} \ No newline at end of file diff --git a/data/data20250718_alignment_tests/20250718_090842_static_0/static_0.dat b/data/data20250718_alignment_tests/20250718_090842_static_0/static_0.dat new file mode 100644 index 0000000..03cf216 --- /dev/null +++ b/data/data20250718_alignment_tests/20250718_090842_static_0/static_0.dat @@ -0,0 +1,50 @@ + 1 0.000000 0.000000 99.911 159.177 1752822522.804 + 2 0.000000 0.000000 100.435 158.670 1752822522.963 + 3 0.000000 0.000000 100.657 158.194 1752822523.118 + 4 0.000000 0.000000 100.489 157.957 1752822523.276 + 5 0.000000 0.000000 101.236 158.167 1752822523.431 + 6 0.000000 0.000000 101.998 158.805 1752822523.588 + 7 0.000000 0.000000 101.104 157.610 1752822523.744 + 8 0.000000 0.000000 102.831 157.871 1752822523.901 + 9 0.000000 0.000000 101.276 158.870 1752822524.060 + 10 0.000000 0.000000 101.516 157.857 1752822524.216 + 11 0.000000 0.000000 102.231 157.941 1752822524.373 + 12 0.000000 0.000000 101.439 157.859 1752822524.529 + 13 0.000000 0.000000 100.229 157.825 1752822524.687 + 14 0.000000 0.000000 102.200 157.517 1752822524.843 + 15 0.000000 0.000000 101.618 158.607 1752822525.001 + 16 0.000000 0.000000 102.166 158.605 1752822525.159 + 17 0.000000 0.000000 100.466 157.836 1752822525.315 + 18 0.000000 0.000000 102.770 157.952 1752822525.472 + 19 0.000000 0.000000 98.936 158.053 1752822525.628 + 20 0.000000 0.000000 100.290 158.706 1752822525.786 + 21 0.000000 0.000000 100.885 158.059 1752822525.946 + 22 0.000000 0.000000 100.919 158.444 1752822526.103 + 23 0.000000 0.000000 102.151 157.762 1752822526.259 + 24 0.000000 0.000000 101.008 158.049 1752822526.417 + 25 0.000000 0.000000 101.967 158.513 1752822526.574 + 26 0.000000 0.000000 100.785 157.719 1752822526.730 + 27 0.000000 0.000000 101.658 158.574 1752822526.887 + 28 0.000000 0.000000 100.977 157.223 1752822527.044 + 29 0.000000 0.000000 101.239 157.911 1752822527.200 + 30 0.000000 0.000000 100.501 157.986 1752822527.357 + 31 0.000000 0.000000 101.480 157.815 1752822527.514 + 32 0.000000 0.000000 101.281 158.501 1752822527.671 + 33 0.000000 0.000000 99.914 158.413 1752822527.829 + 34 0.000000 0.000000 101.093 158.904 1752822527.985 + 35 0.000000 0.000000 101.614 158.302 1752822528.142 + 36 0.000000 0.000000 101.670 158.248 1752822528.298 + 37 0.000000 0.000000 102.294 158.425 1752822528.455 + 38 0.000000 0.000000 100.704 157.848 1752822528.613 + 39 0.000000 0.000000 102.042 157.958 1752822528.769 + 40 0.000000 0.000000 100.797 157.837 1752822528.926 + 41 0.000000 0.000000 100.027 158.339 1752822529.084 + 42 0.000000 0.000000 100.178 157.748 1752822529.241 + 43 0.000000 0.000000 102.065 158.095 1752822529.397 + 44 0.000000 0.000000 99.348 158.559 1752822529.554 + 45 0.000000 0.000000 101.598 158.713 1752822529.711 + 46 0.000000 0.000000 101.215 157.951 1752822529.867 + 47 0.000000 0.000000 101.002 157.982 1752822530.023 + 48 0.000000 0.000000 99.415 158.754 1752822530.181 + 49 0.000000 0.000000 101.446 158.017 1752822530.337 + 50 0.000000 0.000000 102.079 158.161 1752822530.493 diff --git a/notebooks/Untitled.ipynb b/notebooks/Untitled.ipynb index 118620e..e919d91 100644 --- a/notebooks/Untitled.ipynb +++ b/notebooks/Untitled.ipynb @@ -17,6 +17,7 @@ }, "cell_type": "code", "source": [ + "import cv2\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.optimize import curve_fit\n", @@ -146,6 +147,106 @@ } ], "execution_count": 1 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-07-18T07:15:00.057856Z", + "start_time": "2025-07-18T07:14:59.972232Z" + } + }, + "cell_type": "code", + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "import cv2\n", + "\n", + "# 1. Generate a distorted 2D Gaussian\n", + "def generate_noisy_gaussian(shape=(100, 100), center=(50, 50), sigma=10, noise_level=0.1):\n", + " x = np.linspace(0, shape[1] - 1, shape[1])\n", + " y = np.linspace(0, shape[0] - 1, shape[0])\n", + " X, Y = np.meshgrid(x, y)\n", + "\n", + " # Distorted (elliptical) Gaussian\n", + " a = 1 / (2 * sigma**2)\n", + " b = 1 / (2 * (1.5 * sigma)**2) # different sigma in y\n", + " Z = np.exp(-((X - center[0])**2 * a + (Y - center[1])**2 * b))\n", + "\n", + " # Add noise\n", + " noise = noise_level * np.random.randn(*Z.shape)\n", + " return Z + noise\n", + "\n", + "# 2. Numerical gradient approximation\n", + "def compute_gradient(img, pos, h=1e-2):\n", + " x, y = pos\n", + " x_int, y_int = int(x), int(y)\n", + "\n", + " # Ensure position is within bounds\n", + " if x_int <= 0 or x_int >= img.shape[1] - 1 or y_int <= 0 or y_int >= img.shape[0] - 1:\n", + " return np.array([0.0, 0.0])\n", + "\n", + " # Use central difference\n", + " dx = (img[y_int, x_int + 1] - img[y_int, x_int - 1]) / 2\n", + " dy = (img[y_int + 1, x_int] - img[y_int - 1, x_int]) / 2\n", + " return np.array([dx, dy])\n", + "\n", + "# 3. Gradient ascent\n", + "def gradient_ascent(img, start_pos, lr=0.8, max_iter=1000, tol=1e-4):\n", + " pos = np.array(start_pos, dtype=float)\n", + " path = [tuple(pos)]\n", + "\n", + " for i in range(max_iter):\n", + " grad = compute_gradient(img, pos)\n", + " if np.linalg.norm(grad) < tol:\n", + " break\n", + " pos += lr * grad\n", + "\n", + " # Clip to image boundaries\n", + " pos = np.clip(pos, [0, 0], [img.shape[1] - 1, img.shape[0] - 1])\n", + " path.append(tuple(pos))\n", + "\n", + " return pos, path\n", + "\n", + "# === Run it ===\n", + "np.random.seed(42)\n", + "img = generate_noisy_gaussian()\n", + "img = cv2.GaussianBlur(img, (5, 5), 3)\n", + "# Try starting from a random point\n", + "start = (45, 45)\n", + "max_pos, path = gradient_ascent(img, start)\n", + "\n", + "# === Plotting ===\n", + "plt.imshow(img, cmap='hot')\n", + "path = np.array(path)\n", + "plt.plot(path[:, 0], path[:, 1], 'cyan', linewidth=1.5, label='Path')\n", + "plt.scatter(*max_pos, color='blue', label='Found Max', zorder=10)\n", + "plt.scatter(*np.unravel_index(np.argmax(img), img.shape)[::-1], color='green', marker='x', label='True Max')\n", + "plt.legend()\n", + "plt.title(\"Gradient Ascent on Noisy 2D Gaussian\")\n", + "plt.show()\n" + ], + "id": "a139084dca781bf9", + "outputs": [ + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "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dKhTZrc8e+yxh3PN5uZm5xisYywjPo8nn3wy884772ROO+0053qff/551jrD3+ExyE9/+lPnHGYdX3TRRR2e8TPPPOMcj+3l9ddfd7Zx/9ixY9vv/emnn3aOWbJkibON5Rg/frzzfLHOL774Ymc//o2cf/75mQMOOCCTTqfbr/P3v//daSvLli3L+KWmpsZ5L37+85+3f4fXwXvMBl7XbLM2+Myw7teuXeu7HNh+sOz43LAdYBvD9wffs+XLl29Q7yZmed9//32nPf/5z392zvPss8867eWEE05w9tfX12f23HPPzC9+8QvneeM7je/RqFGjMnV1dZ7PD+sG3+Onnnoq89577zltBc85bty49vrH3+A7id9hH4DP+Qc/+IHz3mAdbyqoqk0IjnTx39Zbb73BPtuhANUmOBJ02W233ZwRjguOPPfee29nJI4zKARHpv/617+cUfuRRx7pjHRwBvKXv/wF9ttvP+eYMWPGkEbLL774Ap588kn41a9+5TgGIGgExvLcc889zoi5V69e7WVG9YirEmtsbISLLrrIGYXhaMtVF+y4445ZVSLuSBvL169fP2cbR5y/+c1vYNasWc7IDsH7wFEfzlbc0TKqYl599VVoamqCWCwGd9xxBxxyyCEd7EM4An/++eedETLOFMvKyhxjs1tmrA/8Dc5EsewuaFvA2ZB7DM7IcFaCszo0dKOKC9VStirIBZ8zjvpxhoazHJchQ4bACSec4IxK8dMt43XXXedcB8H2gbM/tI+hHZADDeU4U0SVG85MbZUbjuhvuukm5zniqNkF6xZVV/gMUS1l85///MepA6wfBGfNOFPAe0cmTpzozOiwveGo3myXAwcOZMvtlu23v/0tNDQ0OPYYv/Tt29exCWYDZ09YVvxngrNW2xsR3zOsM5z5ogYB7SsuOCPC9vjBBx8475Qf8Fi0JeH749YVluOjjz5yrv3555876ka04bjtG+1MaF/Dd6iysrLD+XDGjt9ffvnl7ep3fBZYZ7///e+denDfnfr6eud9ct89fC/QpoazP5wFbQqo4BFiq7hMLx+cQptgg0ch4oKdtwmq4/BfS0uLIyzwHNjh44uFnayrbgiHw47dxAUbItqSUE3nBTZQfDlQOJnCELexI8WXyu2I0DZk2mFcgYAdqV/Q0Pvxxx87L0ddXZ3zHXZiWE58Ed0XE1VepaWl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oN1KniUI3lnzu6B1f9Qzt4ky+xOCZRnUdbllJJJ+hXp2iRwEis54FEVRlIKigkdRFEUpblVbtKJi3WdlJZQJMpD6XYUulb5mVABbLWRfx/bo8LuKl1PfeE2JY5WV7Z9B4oHa2xnmvNRvKXVBOfHbcubZUc85yPyWijCAz668rZ7ws4QoP+WNk2bqxSw/F61X0taoLLuU15fXb6n2hHVR1lZP+BkT3HuUqH/qWYHlPWe2S85LT9KebLgICVQd2+8d5QFHbZcydUp5TVJtglO1Ud5zdj1w18kWrcBtRxyBTCZjP3NFURRF6TJU1aYoiqIUFBU8iqIoSkFRwaMoiqIUFBU8iqIoSkFRwaMoiqIUFBU8iqIoSkFRwaMoiqIUFBU8iqIoSkFRwaMoiqIUFBU8iqIoSvEKnpaWFrj00ktht912g3333Rf++te/buwidQtWrFgB5513Huyxxx4wduxYuP766526QpYsWQKnnHIKjBgxAo444gh4++23odg544wz4OKLL27fnj9/PkyePBmGDx8OEydOhHnz5kExk0gk4KqrroLdd98d9t57b7jlllvAjZyldbWe5cuXw5lnngmjRo2Cgw46CB588MH2fVpPm5DgufHGG50H+NBDD8EVV1wBt99+O8yYMQOKGewQUOg0NzfDo48+Crfeeiu89tprcNtttzn7zjnnHOjbty88/fTTMH78eDj33HNh2bJlUKw8//zz8MYbb7RvNzU1OYIIBzPTp0+HkSNHOp0Jfl+sXHvttfDuu+/C/fffDzfffDM8+eST8MQTT2hdWZx//vkQi8WcusABMb5zL7/8stZTZ5DpJjQ2NmZ22WWXzL///e/27+64447MiSeemClmPv/888yQIUMyq1atav/uueeey+y7776Zd999NzNixAin7lxOPvnkzJ/+9KdMMbJ27drMfvvtl5k4cWLmoosucr576qmnMgcddFAmnU472/h56KGHZp5++ulMsdbRsGHDMu+99177d/fcc0/m4osv1royqKmpcd67BQsWtH937rnnZq666iqtp06g28x4PvnkE2htbXVGDy6jR4+GuXPnQjqdT6687zb9+vWD++67z5nVmDQ0NDh1M2zYMGdUZtbZnDlzoBi54YYbnFnf4MGD27/DOsI6CQQCzjZ+ouqkWOvogw8+gIqKCkdt64Kjd1Tfal2tJxqNQllZmTOjSSaTsGjRIpg1axbsuOOOWk+dQLcRPKtWrYJevXpBJLI+iwR2tmjLqKmpgWKlqqrKseu4oBCeOnUq7LXXXk6d9e/fv8Pxffr0gW+++QaKjZkzZ8L7778PZ599dofvtY46gjbB6upqePbZZ+Hwww+Hgw8+GO644w6nXWldrae0tBSmTJniqCDRjjNu3DjYb7/9HLuO1tMmlAgObRim0EHcbTSGKuv4wx/+4Bg2p02b5hg7veqs2OoLBydoE8SOAkeqftpVsdWRC9ohFi9eDI8//rgzy8FOFOsNR/daVx1ZuHAhHHjggXDqqafCZ599Btdccw2MGTNG62lTEjw4wrAfnLttdybFLHTQ8QIdDIYMGeLUmT0bxDortvpCJ5Sdd965w8yQa1fFVkcuJSUljpoWnQpw5oOgM8pjjz0GgwYN0royZtA4uENHFbz/XXbZxfEuveuuu2DLLbfUetpUBM+AAQNg7dq1jp0HXw4ER2P4MFHdVOzgaAs7BxQ+hx12WHudff755x2OW7169QZqgGLwZMP7du2Dbqfw4osvwlFHHeXsK/Y6Mm2GKIxdoYNss802jusw2n20rtaB3rUoiE1hgvbUu+++2/Fm03raRGw8aLRDgWMa6NAQiiONYLDbFHOjjehRNYLrLY488sj271H3/PHHH0M8Hu9QZ/h9MfHII4/Ac88959gt8B+uucB/+DfWxezZs9vXqeAnGomLrY5c8L5RNfnFF1+0f4eGcxREWlfrQSGCKklzZoP1tMUWW2g9dQLdpkdHHfMxxxwDV155JXz44YfwyiuvOAtIf/zjH0Mxg3rmO++8E04//XTHkwZnge4/HKEOHDgQLrnkEkcHfe+99zp1N2nSJCgmsNPE0an7r7y83PmHf6MBva6uDq677jpndoifqKNHY3Exsu2228IBBxzgtBn0JH3rrbecdnP88cdrXRngwCUcDsPll1/uCOl//etfzmznpJNO0nrqDDLdiKampsyFF17orE3BdSoPPPBAptjBNRa4nsDrH/Lll19mTjjhhMzOO++cOfLIIzPvvPNOptjBNTzuOh5k7ty5mWOOOcZZJzZp0qTMxx9/nClm6urqMr/5zW+c92zMmDGZP//5z+1rUrSu1vPZZ59lTjnllMyoUaMyhxxyiNMfaT11DgH8r1MkmKIoiqJ8l1RtiqIoSnGggkdRFEUpKCp4FEVRlIKigkdRFEUpKCp4FEVRlIKigkdRFEUpKCp4FEVRlIKigkdRFEUpKCp4FEVRlIKigkdRFEUpKCp4FEVRFCgk/w/+WSr4YaPknwAAAABJRU5ErkJggg==" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "execution_count": 14 + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "", + "id": "39fcd9032d757549" } ], "metadata": { diff --git a/notebooks/sample.ipynb b/notebooks/sample.ipynb index fb8c8ce..1b526b5 100644 --- a/notebooks/sample.ipynb +++ b/notebooks/sample.ipynb @@ -89,8 +89,8 @@ "source_hidden": true }, "ExecuteTime": { - "end_time": "2025-07-18T06:52:44.899219Z", - "start_time": "2025-07-18T06:52:44.675052Z" + "end_time": "2025-07-18T07:08:19.394842Z", + "start_time": "2025-07-18T07:08:19.144708Z" } }, "source": [ @@ -313,7 +313,7 @@ "Connect to PLC\n", "is_open()=True\n", "get_local_address()=None\n", - "read_device_info()=('Plc30 App', )\n", + "read_device_info()=('Plc30 App', )\n", "GVL_APP.nAXIS_NUM=3\n", "Constructor for axis\n" ] @@ -326,7 +326,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "32821ca26005425a9c8732deb7dc87ed" + "model_id": "6828982f64e5493793d19e4eefbbbae1" } }, "metadata": {}, @@ -340,7 +340,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "a17b77f1308a40a08fdf90784756fe86" + "model_id": "396ab16c07ce435ab7d0c2da4e9d7f92" } }, "metadata": {}, @@ -354,7 +354,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "ca9b34140a1b49ac976feaf9eef11b92" + "model_id": "36a81552307445258c2468c5fb0bd6d1" } }, "metadata": {}, @@ -368,7 +368,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "8f31b3e0d1254f7fae2a3f0df4e5d375" + "model_id": "6df23067d8534062841a367c50a1dba3" } }, "metadata": {}, @@ -377,12 +377,12 @@ { "data": { "text/plain": [ - "Text(value='0.0003', description='Exposure [s]:')" + "Text(value='0.0004', description='Exposure [s]:')" ], "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "6da3d9bc3be34c88a6b19957d0d58f35" + "model_id": "c45b50ce47d443ba87483511c8c1d8c7" } }, "metadata": {}, @@ -396,7 +396,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "4f986990fc59495dbdb5934387d40120" + "model_id": "72c6cd1366a14323a2c23111d76895e1" } }, "metadata": {}, @@ -410,7 +410,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "d3e8ee7c113940a487f265c1c0b20b08" + "model_id": "bb2bb30d673b443398a79cb749f93dd7" } }, "metadata": {}, @@ -424,7 +424,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "eb679b026bb140d1bd0f3c862cfc9b00" + "model_id": "e27b10214ab34805abd55d7f597e0303" } }, "metadata": {}, @@ -438,7 +438,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "cc949c4a1bad410da8289166146a509e" + "model_id": "c521adfeb1134ede8a43ff85992c80d0" } }, "metadata": {}, @@ -452,7 +452,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "583de4908de9490ca46e8f642ab39691" + "model_id": "76f186ccdfd44632955d378d0cb8d21c" } }, "metadata": {}, @@ -466,7 +466,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "97bbe99cd5a843d485f61bc9ea5ecad7" + "model_id": "f6e7b5a8a82c4219984394c8b34d1a52" } }, "metadata": {}, @@ -480,7 +480,7 @@ "application/vnd.jupyter.widget-view+json": { "version_major": 2, "version_minor": 0, - "model_id": "6277546bd4a94b41a3dd142175b3b13f" + "model_id": "4e8cb912dda4474c9e30d8eaa4a23df4" } }, "metadata": {},