You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ideas/quadrupole/Quadrupole_electric_field_c...

428 lines
54 KiB

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/latex": [
"$$\\overrightarrow{E} = \\left[\\begin{matrix}- \\frac{x \\left(U + V \\cos{\\left (\\omega t \\right )}\\right)}{r_{0}^{2}}\\\\\\frac{y \\left(U + V \\cos{\\left (\\omega t \\right )}\\right)}{r_{0}^{2}}\\\\0\\end{matrix}\\right]$$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$$\\overrightarrow{F} = \\left[\\begin{matrix}- \\frac{q x \\left(U + V \\cos{\\left (\\omega t \\right )}\\right)}{r_{0}^{2}}\\\\\\frac{q y \\left(U + V \\cos{\\left (\\omega t \\right )}\\right)}{r_{0}^{2}}\\\\0\\end{matrix}\\right]$$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/latex": [
"$$\\overrightarrow{a} = \\left[\\begin{matrix}- \\frac{q x \\left(U + V \\cos{\\left (\\omega t \\right )}\\right)}{m r_{0}^{2}}\\\\\\frac{q y \\left(U + V \\cos{\\left (\\omega t \\right )}\\right)}{m r_{0}^{2}}\\\\0\\end{matrix}\\right]$$"
],
"text/plain": [
"<IPython.core.display.Math object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sympy import *\n",
"# https://docs.sympy.org/latest/tutorials/intro-tutorial/printing.html\n",
"\n",
"# https://stackoverflow.com/questions/40806591/how-do-i-display-a-full-expression-in-sympy\n",
"from IPython.display import display, Math\n",
"\n",
"U, V, omega, t, x, y, r_0, q, m, v_v, v_p = symbols('U V omega t x y r_0 q m v_v v_p')\n",
"init_printing()\n",
"\n",
"v_ex = Matrix([1,0,0]) \n",
"v_ey = Matrix([0,1,0])\n",
"v_ez = Matrix([0,0,1])\n",
"\n",
"# theory prerequisite\n",
"\n",
"# RF + DC offset of the quadrupole\n",
"phi_0 = U + V * cos(omega * t)\n",
"\n",
"# potential inside a quadrupole at a given point in space\n",
"phi = phi_0 * (x**2 - y**2) / (2 * r_0**2)\n",
"\n",
"# In the first step the electric field is derived from the potiential distribution\n",
"# with the formula E = -\\nabla * phi.\n",
"\n",
"# calculating the partial derivateives for the nabla operation(gradient)\n",
"dx = diff(phi, x)\n",
"dy = diff(phi, y)\n",
"\n",
"v_E = -(dx * v_ex + dy* v_ey)\n",
"\n",
"display(Math(latex('\\overrightarrow{E} = ') + latex(v_E)))\n",
"\n",
"# in the seccond step the lorenz force is determined with the formulafor considering B = 0!\n",
"# F = E * q\n",
"\n",
"v_F = v_E * q\n",
"\n",
"display(Math('\\overrightarrow{F} = '+latex(v_F)))\n",
"\n",
"# With the force the acceleration can be determined with respect to the ions mass\n",
"# a = F / m\n",
"\n",
"v_a = v_F / m\n",
"\n",
"display(Math('\\overrightarrow{a} = '+latex(v_a)))\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(755.0120770093375, 10570.169078130726)\n",
"N = 1100000\n",
"ion has left the boundary!\n",
"n = 1210\n",
"simulation time = 9.999999999999773e-05\n",
"number of positiions = 1\n",
"[-2.0391744630349912e-13, 3.56317754718436e-15, -9.979659008986673e-17, 3.0235407792913644e-18, -7.139985036292582e-20, 7.19867582572237e-22, 4.321977872069379e-24, 8.443545107936075e-26, 2.2137865823636512e-27, 5.297458959531464e-29]\n",
"done!\n"
]
}
],
"source": [
"import numpy as np\n",
"import scipy.constants as sc\n",
"import matplotlib.pyplot as plt\n",
"\n",
"class Ion:\n",
" def __init__(self,position, charge, mass, v_z):\n",
" self.position = position\n",
" self.charge = charge\n",
" self.m = mass\n",
" self.v_z = v_z\n",
" self.F = np.array([[0],[0],[0]])\n",
"\n",
"class infiniteLengthQuadrupole:\n",
" def __init__(self,R,r_0):\n",
" # rod radius\n",
" self.R = R\n",
" # rod placement radius\n",
" self.r_0 = r_0\n",
" # rod positions\n",
" self.pPole = np.array([[[ (R + r_0)/np.sqrt(2)],\n",
" [(R + r_0)/np.sqrt(2)],\n",
" [0]],\n",
" [[-(R + r_0)/np.sqrt(2)],\n",
" [(R + r_0)/np.sqrt(2)],\n",
" [0]],\n",
" [[-(R + r_0)/np.sqrt(2)],\n",
" [-(R + r_0)/np.sqrt(2)],\n",
" [0]],\n",
" [[(R + r_0)/np.sqrt(2)],\n",
" [-(R + r_0)/np.sqrt(2)],\n",
" [0]]])\n",
" # rod pseudo charges\n",
" self.rodsPseudoQ = np.zeros(4)\n",
" # K factor for simplification ofcalculating the equations\n",
" self.K = 1 / (4 * np.pi * sc.epsilon_0)\n",
" \n",
" self.forces= []\n",
" \n",
" def check(self):\n",
" print('pole positions')\n",
" print(self.pPole)\n",
" print('pseudo charges')\n",
" print(self.rodsPseudoQ)\n",
" \n",
" def phi_0(self,U, V, f, t):\n",
" return U + V * np.sin(2 * np.pi * f * t)\n",
" \n",
" def coulombForceOnQ1(self,Q1,Q2,r1,r2):\n",
" a = self.K * Q1 * Q2\n",
" r12 = r1 - r2\n",
" mag_r12 = np.linalg.norm(r12)\n",
" # calculate force\n",
" return a * r12 / (mag_r12**3)\n",
" \n",
" def getUV(self, mass_amu, f, a, q):\n",
" U = a * 1.66054e-27 * mass_amu * (2 * np.pi * f)**2 *self.r_0**2 / (8 * sc.e)\n",
" V = q * 1.66054e-27 * mass_amu * (2 * np.pi * f)**2 *self.r_0**2 / (4 * sc.e)\n",
" return U, V\n",
" \n",
" \n",
" def calcNewIonPos_1(self,U,V,f,ion,t_s,t):\n",
" # check if ion has left the r_0 boundary\n",
" if np.linalg.norm(ion.position) >= self.r_0:\n",
" return None\n",
" \n",
" phi_0 = U + V * np.sin(2 * np.pi * f * t)\n",
" a_x = -(float(ion.position[0]) * phi_0) / (self.r_0**2) * ion.charge / ion.m\n",
" a_y = (float(ion.position[1]) * phi_0) / (self.r_0**2) * ion.charge / ion.m\n",
" \n",
" newPosition = 0.5 * t_s**2 * np.array([[a_x],[a_y],[0]])\n",
" newPosition[2] = float(ion.position[2])\n",
" \n",
" # velocity component in z\n",
" newPosition[2] = newPosition[2] + ion.v_z * t_s\n",
" \n",
" # ion position update\n",
" ion.position = newPosition\n",
"\n",
" #print(newPosition)\n",
" \n",
" return newPosition\n",
" \n",
" def calcNewIonPos(self,U,V,f,ion,t_s,t):\n",
" \n",
" # check if ion has left the r_0 boundary\n",
" if np.linalg.norm(ion.position) >= self.r_0:\n",
" return None\n",
" \n",
" signLUT = [1,-1,1,-1]\n",
" index = 0;\n",
" \n",
" # reset force\n",
" F_c = np.array([[0],[0],[0]])\n",
" \n",
" for Q in self.rodsPseudoQ:\n",
"\n",
" \n",
" # calculate the pseudo charge points of the quadrupole\n",
" Q = signLUT[index] * self.phi_0(U,V,f,t)/2 * self.K * self.R\n",
" \n",
" # match pseudo charge with ion in z direction\n",
" self.pPole[index][2] = ion.position[2]\n",
" \n",
" #print('ion position', ion.position)\n",
" #print(self.pPole[index])\n",
" \n",
" # calculate force on ion\n",
" F_q = self.coulombForceOnQ1(ion.charge,\n",
" Q,\n",
" self.pPole[index],\n",
" ion.position)\n",
" #print(F_q)\n",
" \n",
" F_c = F_c + F_q\n",
" self.forces.append(F_c)\n",
" \n",
" # update index\n",
" index = index + 1\n",
" \n",
" ion.F = F_c\n",
" # http://lampx.tugraz.at/~hadley/physikm/problems/rvaF/index.en.php\n",
" newPosition = 0.5 * t_s**2 * 1 / ion.m * ion.F + ion.position\n",
" \n",
" # velocity component in z\n",
" newPosition[2] = newPosition[2] + ion.v_z * t_s\n",
"\n",
" #print(newPosition)\n",
" \n",
" return newPosition\n",
" \n",
"N_periodes = 100000\n",
"N_points_per_period = 11\n",
"f = 1.1e6 \n",
"t_step = 1 / f / N_points_per_period\n",
"t_sim = 0\n",
"N = N_periodes * N_points_per_period\n",
"\n",
"# coffein atom 524.50002164 dalton (8.709527e-25 kg)\n",
"\n",
"\n",
"#ion = Ion(np.array([[1e-10],[1e-10],[0]]), sc.e, 1.661e-27,100)\n",
"ion = Ion(np.array([[1e-10],[1e-10],[0]]), sc.e, 1220 * 1.66054e-27,100)\n",
"\n",
"# quadrupole\n",
"quad = infiniteLengthQuadrupole(0.0101, 0.01)\n",
"\n",
"#quad.check()\n",
"\n",
"positions = []\n",
"\n",
"p_x = []\n",
"p_y = []\n",
"p_z = []\n",
"\n",
"print(quad.getUV(1220,f,0.1,0.7))\n",
"\n",
"\n",
"positions.append(ion.position)\n",
"print('N =',N)\n",
"for n in range(0,N-1,1):\n",
" \n",
" newPos = quad.calcNewIonPos_1(755.0120770093375, 10570.169078130726,f,ion,t_step,t_sim)\n",
" #newPos = quad.calcNewIonPos_1(100,100,f,ion,t_step,t_sim)\n",
" \n",
" if(newPos is None):\n",
" print('ion has left the boundary!')\n",
" break\n",
" \n",
" \n",
" ion.position = newPos\n",
" \n",
" if n % 100 is 0 and 0:\n",
" print(newPos)\n",
" #positions.append(newPos)\n",
" \n",
" if 0:\n",
" positions.append(newPos)\n",
" \n",
" if 1:\n",
" p_x.append(float(newPos[0]))\n",
" p_y.append(float(newPos[1]))\n",
" p_z.append(float(newPos[2]))\n",
" \n",
" \n",
" t_sim += t_step\n",
"\n",
"print('n =',n)\n",
"print('simulation time = ', t_sim)\n",
"print('number of positiions = ', len(positions))\n",
"\n",
"if 1:\n",
" print(p_x[:10])\n",
"\n",
"\n",
"if 0:\n",
" print(positions[:10])\n",
"\n",
"\n",
"\n",
"print('done!')"
]
},
{
"cell_type": "code",
"execution_count": 112,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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sHLlSmRmZkKv12NiYgImkwnZ2dkoLCyUPMY9XNCjzIIFCyI6mwckhldfBS66yOuxQD0cOTk56OnpAcuyIUmhvb0d1157LV566SWsWrUq7HUnEnfccQeGhoZgtVpRX1+P++77XNFM8w040xycTifwPSVaWlo4T4mzzz7br/xpMpnQ1tYm6FdJp25PTEzAaDQiMzMThYWFyMvLiwlJUM/K4uLioL6IYpCSlib4CbY1NQFLlwb8Ob4cfXx8nEs0BlOadnZ24pvf/Cb+/Oc/o6amJqJ1xxt0wz/xxBM4ePAg/vSnP2HXrl0oLCzEb3/7W6EfkYnhdIDdbuc8JT777DOcc845+MpXvoKNGzfi0KFDAID6+vqQDV+0CWhiYgJ6vR7p6emcNDsaoic6vzHUABaxCEgMHR1ACKNcqt9wOp0oKSnhplIL9XD09fXh61//On7/+99jzZo1Ea87Xujt7fXKgbz00ktYuXIlXnjhBQwNDeGFF16A1WrFsWPHsHHjRv6PnrnE0NTUhO9973uw2+1ISkrCU089hfXr10fr8gmD0+nEBx98gL179+K9994DwzB44IEHcOmll0pSS/KdlfnW+gUFBWH1b1Czl8WLF0fNyDYgMYyPA0Ea2qjojIq6+McHvojs0KFDGBoawnvvvYc//OEPaGxsjMq6A8Hj8aChoQHFxcV48803I7rWvn37cM011+CGG27AL37xCwDAE088gbvuugvbt2/n5klQY1oft+ozlxg2b96MW265BV/60pfw1ltv4eGHH8bf//73aF0+4di3bx9+9atf4bbbbsPbb7+NgwcPcp4S559/viS1JCHES5qtUqlQVFQkun+DDpetqqqKqlw4IDGEaLnu6emB3W73IwVfUL0JwzBgWRb/8z//gy9+8YsRrjowHn30URw5cgQmkykiYtDr9di+fTt27dqFt99+G5WVlXj88ccBALt378Y///lPPP7449i/fz8OHjwo1Ntx5hLDxRdfjOuuuw5XXnklXnzxRbzxxht4IUxRzFzE6OgosrOzueODx+PBhx9+iH379uFvf/sbqqursX37dmzatEmyka3FYuHuqrR/I9CMBup2FIvhsuEQQ29vL6xWK6qrq4OSwvj4OK644gr88pe/xBe/+EVMT0/D4/HEbEDu8PAwrrnmGtx999149NFHI44YOjo6UFFRgbGxMdxwww1YvHgxl0948MEHYTKZYLFYcO+99wpNAj9ziaG9vR0XX3wxN9D2o48+CquWPh/BsiwOHTrEHTeqqqqwfft2XHzxxZJNWWw2G6e6ZBiGK4OmpKRwtnCxmiMplRj6+vowMzOD1atXByWFyclJ7NixAw8//DAuvPDCKK02OK644grcddddXFgfKTHwMTw8jO985zsoKSnB//3f/6G5uZlzoAqA05sYNm3ahPHxcb/HH3zwQRw4cADnnXceduzYgb/85S/43//9X7z//vsSlzv/QT0l6PiysrIyzlNCqp8A31rf5XLB4XBg5cqVMWsskkIMobwdKKamprBjxw7cf//92LJlSxRXGxhvvvkm3nrrLTz11FP4+9//HnViAGYjyNtuuw1HjhxBcnIyDh48GOxYd3oTQzBkZWXBaDSCYRgQQpCVlQWTyRSty89LUE+JPXv24K233kJBQQG2bduGL3/5y5JC6JmZGbS0tKCoqAjT09NwuVxe0uxoQSwx0FF6oUjBYDDg8ssvx09+8hNcdtllUVtnKNx111344x//iKSkJNjtdphMJlx++eVRHzj70EMP4cknn8Q//vGPUG3kZy4xrFy5Er/5zW/wb//2bzhw4AB++MMf4rPPPovW5ec9aN/A3r17OTeirVu34stf/rKXp4Qv6MQsvlckVSBOTEzAbrdzVvPhWutTiCGGgYEBzmciGClMT09jx44duP3223H55ZeHvaZIEauIQafT4corr8STTz6JFStWhHr6mUsM//rXv7B792643W6kpKTgqaeewrp166J1+dMKvp4SarUal112GbZt24YFCxZwm5sayNbV1QVMaLrdbuh0OkxMTIQ1TJePUMQwODgIg8EQkhTMZjOuuOIK3HTTTbjyyislrSHaiBUxALOJYJHVqDOXGOKFJ554Ar/+9a+hVCpx6aWX0u61eQtCCAYHB7l2cQD48pe/jMLCQnR2duL2228X3dVIZcoTExMwm82ctX5OTo4okggoibZYMDg4CL1eL2giy4fFYsHOnTtx3XXX4eqrrxa17jMAMjHEEh988AEefPBB7N+/H2q1GpOTkwl3gI4mCCEYGxvDz3/+c7z44otYuXIltmzZgm3btkn2eBCy1i8qKgrevzE8DM3y5V4PuTZvRt+vfoWpqamQjWY2mw07d+7EN77xDVx33XWi13oGYH4Sg9vtxocffoiNGzfO6eGgO3fuxHe/+11s2rQp0UuJGaxWK7Zt24Y//vGPYBiG85QwGo245JJLsG3bNsmeEoQQGAwGTE5OwmAwICMjA0VFRcjNzfWXZmu1SL76ajBTU3DdfjuGzj2Xm0ERjBTsdju+/vWvY/v27bjhhhsSalQzBzHnfhmiiKG7uxs33HADPvnkEzz//PNR9+yPFurr67Ft2za88847SElJwSOPPBJzWW0iwDMR5aDT6fDqq6/i5ZdfxsTEhJenhFSSmJ6e5qTZaWlpKCoqEuzfGB4exuTkpN9gGl84nU5cddVV2Lx5M/793/99XpPCz372M+Tm5uI//uM/AAB33303CgsLsXt3RPaMc+4XIooYzGYzkpOTcd5553EyVZZludJjPA1Ng2kl7r77bpx//vn41a9+hcOHD+PKK6+M6oCQ+QKj0YjXX38dL7/8MgYGBjhPiVDnf1/wh9ZQa31KEpOTk5iYmAhJCi6XC9/61rewceNG3HbbbfP+b9Hf34/LL78cR48eBcuyWLp0KQ4dOhSp9HzO/VJE5xg++eQT/OAHP8DRo0djv6owsWXLFtx55504//zzAQBLlizBJ598ErUmovkIvqdEZ2cn5ymxbt06yYQ+MzODyclJjI6Owu12Y8mSJSgqKgrYLOZ2u/Htb38ba9aswV133TXvSYHioosuwsMPP4yJiQk8/fTT2Lt3b6SXnHO/GNGfjLfffhsNDQ0AZj8gn3zyCW677bY51Qi1fft2fPDBBwBm+/mdTqeQLv2MQkZGBnbt2oU9e/bg448/xsaNG/G73/0O55xzDu6880589NFH8HjEWQ2mp6dDo9FAo9Fg3bp18Hg8aGpqwmeffYahoSE4HA7uuR6PB9///vexatWqmJHC0NAQzj//fKxatQrV1dVc41Kscf311+P3v/89nnvuudM2iRoyYmBZFg6HA1u2bMFdd92FLVu2YPfu3SguLsbixYvx/PPPY926dfjP//zPeK05IJxOJ6677jo0NTVBpVLhkUcewQUXXJDoZc1J8D0ljh49ynlKnHPOOQETzGNjYxgdHUV9fb3X8YFvrW8wGPDRRx9haGgI5eXl+K//+q+YRQpjY2MYGxvD2rVrYTabsW7dOrz66qsxd3tyOp2oqamBy+VCV1dXNLwz5lzEAEJIsC9CCCG9vb2kvr6eeDwe4nA4SGFhIWloaCB//OMfSXt7O7n66qtJR0cHfTpxu92EZVkihL6+PjIyMiL4PRmJgcPhIG+//Ta5/vrrSXV1NbnuuuvI66+/TgwGA7FYLMRisZCenh7yj3/8g0xPT3OPCX319fWRrVu3ksWLF5MNGzaQZ555Jm7vY+vWreTdd9+Ny2vdcMMN5M4774zW5ULtw7h/Bf1me3s7ueGGG8iOHTvItddeSwgh5J133iFr164lfX195MYbbyTr168nCxcuJG63m1gsFr937Ha7icfjIYQQotPpyBNPPEFWrlxJNmzYQF588cWABDIf8MgjjxAARKvVJnopUYPL5SIHDhwg3/ve90h1dTW5+uqrye23305uuOGGkKRgNpvJjTfeSG688Ubi8XiITqcjn332WVzW3dfXR0pLS8n09HTMX8vj8ZC6ujrS2dkZrUsmnAh8v4J+02QykV/84hfknHPOISkpKeT//u//yDPPPEO+8Y1veL2r8fFxQgghjz32GKmvryd33303aWpq8nv3NpuNWCwW4vF4yEcffUS+8pWvkN7eXu77ZrM5jN9pYjA4OEg2b95MysrKTiti4MPtdpP777+flJSUkPr6erJr1y7y4osvEq1WK0gKt9xyC/nOd77D3QjiBbPZTNauXUv27dsX89dqa2sjixcvJrfeems0L5twIvD9CvUEDhMTE+Tw4cPE5XKRq666inz1q18lr7zyCjl+/Dix2+3c844dO0Z++tOfkg0bNpD169eTW2+9lXR3dwv+NhYuXEja29sJIYQcOHCAfPWrXyU1NTXkl7/8JXE4HFJ/uXHFjh07SFNTEykvLz9ticHlcpFrr72WGI1G4vF4yMcff0xuvfVWUltbS3bs2EH++Mc/komJCTIzM0PuvPNOcs011xC32x3XNTqdTrJ582byi1/8Iq6vG2UknAh8v0QTAx8mk4k8++yzZNu2beS+++4LeIdob28n99xzD3nnnXcIIcSLQF588UWyceNGQshsDqOuro588MEH5NChQ2TTpk1kdHQ05G8zUXj11VfJzTffTAghpzUxBILH4yFHjhwhd955J6mvryerVq0i27dvjzspsCxLrr76arJ79+64vm4MkHAi8P0Kixj48P0wsCwr+AGhuYSRkRFy1VVXkZ07d5JXX32VEELIHXfcQb75zW8SQmbvUrfccgt56aWXxLx8zHDhhReS6upqv69XX32VrF+/nhiNRkLImUkMfHg8HvLaa68l5Bh48OBBAoDU1NSQuro6UldXR/bv3x/3dUQBCScC36+IGx98SzUMw3CPUXUkwzBwOBz4y1/+gieffBI7d+7EN7/5Ta7B6eDBg/jv//5v7nrT09OwWq1c1SQRwphA7lLHjx9HX18f6urqAMzKgteuXYtDhw4lfARdIqBQKLB169aEvPa55547e3eTEX2EYI6oYHh4mGzfvp1kZGSQv/71r17f6+npISUlJdy/dTodqampIQMDA9F6+ZjiTI8YZEQFCY8QfL/i0uRQXFyMm266CTt37sR9992H8847DwcOHAAAfPjhh1yjk8PhwIEDB1BUVISysjL5biBDRoIQtx7qCy+8kHMA/utf/8p5Gp577rl477330Nvbi87OTrz99tu49tprASTuGCEF/f39iV6CDBlRR0LMFS6++GLu/8vLy1FSUoJLL70URUVFuPvuu7khI/Hs2pyruOOOO/DGG29ApVJhyZIleO6552JiDS9DBh9zysFpZGQkomnMpyPeffddXHDBBUhKSsKdd94JAFyiVsZpgzkXFs+pW3JxcbGcV/DB5s2buaams88+G8PDwwlekYwzAXOKGADM+ZxCIvHss8/iS1/6UqKXIeMMwJwjhjMRmzZtwurVq/2+XnvtNe45Dz74IJKSkvCNb3wjgSuNHd555x0sX74cVVVVeOihhxK9nDMecyrHIEMYv//97/G73/0OBw4ckDwQdz7A4/Fg2bJleO+991BSUoLGxka8+OKLMfdVmEOYc2GyHDHMcbzzzjt4+OGH8frrr5+WpAAAhw4dQlVVFSorK6FSqbBr1y6vaElG/HHGE8Phw4dRW1sLu90Oi8WC6upqtLa2JnpZHG666SaYzWZcdNFFqK+vx/e+971ELynqGBkZQWlpKffvkpISjIyMJHBFMubukIg4obGxEVu3bsVPfvIT2Gw2XHXVVVi9enWil8Whu7s70UuQcQYiVI7hjADDMCoAhwHYAZxDCBHnjnqagGGYLQAeB6AE8DQhJK7ZP4ZhNgC4lxBy8al/3wUAhJCfx3MdMj7HGX+UOIU8AOkAMgCImkJ6uoBhGCWAXwP4EoBVAL7GMEy8s36HASxlGGbxKZLeBeD1OK9BBg8yMczidwB+CuDPAM40WeF6AN2EkF5CiBPASwC2xXMBhBA3gJsA/BVAO4C/EELa4rkGGd4443MMDMN8E4CLEPLCqbvnRwzDXEAI+Vui1xYnFAMY4v17GMBZ8V4EIeQtAG/F+3VlCOOMJwZCyB8A/OHU/3uQgE0hQ8Zcg3yUkDECoJT375JTj8k4gyETgww58SfDD2f8UeJMByHEzTAMTfwpATwrJ/5kyDoGGTJk+EE+SsiQIcMPMjHIkCHDDzIxyJAhww8yMciQIcMPMjHIkCHDDzIxyJAhww8yMciQIcMPMjHIkCHDD/8f5EkKCaSFNnsAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"if 0:\n",
" n_start = 500\n",
" n_end = 3000\n",
" fig = plt.figure()\n",
" ax = fig.add_subplot(111, projection = '3d')\n",
" ax.scatter(p_x[n_start:n_end],p_y[n_start:n_end],p_z[n_start:n_end],c = 'r')\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" ax.set_zlabel('z')\n",
" plt.show()\n",
"\n",
"if 1:\n",
"\n",
" fig = plt.figure()\n",
" ax = fig.add_subplot(111, projection = '3d')\n",
" ax.scatter(p_x,p_y,p_z,c = 'r')\n",
" ax.set_xlabel('x')\n",
" ax.set_ylabel('y')\n",
" ax.set_zlabel('z')\n",
" plt.show()\n",
" \n",
"if 1:\n",
" plt.plot(p_x, p_y, 'o', color='black');\n"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'list' object has no attribute 'shape'",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-64-1f7302c8ffde>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmpl_toolkits\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmplot3d\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mAxes3D\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;31m#print(positions[1:2](0))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpositions\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mfig\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAttributeError\u001b[0m: 'list' object has no attribute 'shape'"
]
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"#print(positions[1:2](0))\n",
"print(np.array(positions.shape))\n",
"\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111, projection='3d')\n",
"ax.scatter(positions[:][0], positions[:][1], positions[:][2], zdir='z', c= 'red')\n",
"ax.set_xlabel('x')\n",
"ax.set_ylabel('y')\n",
"ax.set_zlabel('z')\n",
"plt.savefig(\"demo.png\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}