{ "cells": [ { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", "import numpy as np\n", "from cpymad.madx import Madx\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Tutorial 4\n", "\n", "## First part" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Periodic solution" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " ++++++++++++++++++++++++++++++++++++++++++++\n", " + MAD-X 5.06.01 (64 bit, Linux) +\n", " + Support: mad@cern.ch, http://cern.ch/mad +\n", " + Release date: 2020.09.01 +\n", " + Execution date: 2021.01.19 10:51:33 +\n", " ++++++++++++++++++++++++++++++++++++++++++++\n", "enter Twiss module\n", "++++++ warning: Twiss failed: MAD-X continues\n" ] } ], "source": [ "myMad = Madx()\n", "myString='''\n", "quadrupoleLenght=0.1;\n", "cellLength=10;\n", "\n", "myK1=.1;// m^-2\n", "myK2=.1;// m^-2\n", "myK3=.1;// m^-2\n", "myK4=.1;// m^-2\n", "\n", "Q: quadrupole, L=quadrupoleLenght;\n", "\n", "myCell:sequence, refer=center, L=cellLength;\n", "myStart: marker, at=0;\n", "q1: Q,K1:=myK1, at=2;\n", "q2: Q,K1:=myK2, at=4;\n", "q3: Q,K1:=myK3, at=6;\n", "q4: Q,K1:=myK4, at=8;\n", "myEnd: marker, at=10;\n", "endsequence;\n", "\n", "beam, particle=proton, energy=2;\n", "\n", "use, sequence=myCell;\n", "twiss;\n", "'''\n", "myMad.input(myString);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Conclusions**: the periodic solution does not exist." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### IC solution" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "enter Twiss module\n", "\n", "++++++ table: summ\n", "\n", " length orbit5 alfa gammatr \n", " 10 -0 0 0 \n", "\n", " q1 dq1 betxmax dxmax \n", " 0.236117848 0 85.59952509 0 \n", "\n", " dxrms xcomax xcorms q2 \n", " 0 0 0 0.2150800354 \n", "\n", " dq2 betymax dymax dyrms \n", " 0 61.41336649 0 0 \n", "\n", " ycomax ycorms deltap synch_1 \n", " 0 0 0 0 \n", "\n", " synch_2 synch_3 synch_4 synch_5 \n", " 0 0 0 0 \n", "\n", " synch_6 synch_8 nflips \n", " 0 0 0 \n" ] } ], "source": [ "myString='''\n", "twiss,betx=1, bety=2, file=\"./firstpart/ICSolution.txt\";\n", "'''\n", "myMad.input(myString);" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namekeywordsbetxalfxmuxbetyalfymuyx...sig54sig55sig56sig61sig62sig63sig64sig65sig66n1
#smycell$start:1marker0.001.0000000.0000000.0000002.0000000.0000000.0000000.0...0.00.00.00.00.00.00.00.00.00.0
mystartmystart:1marker0.001.0000000.0000000.0000002.0000000.0000000.0000000.0...0.00.00.00.00.00.00.00.00.00.0
drift_0[0]drift_0:0drift1.954.802500-1.9500000.1745843.901250-0.9750000.1229850.0...0.00.00.00.00.00.00.00.00.00.0
q1q1:1quadrupole2.055.197436-1.9980420.1777704.105284-1.0660230.1269630.0...0.00.00.00.00.00.00.00.00.00.0
drift_1[0]drift_1:0drift3.9516.257422-3.8230040.21090510.034826-2.0547890.1747940.0...0.00.00.00.00.00.00.00.00.00.0
q2q2:1quadrupole4.0517.014863-3.7488810.21186210.461302-2.2113900.1763480.0...0.00.00.00.00.00.00.00.00.00.0
drift_2[0]drift_2:0drift5.9534.454604-5.4299300.22436420.897199-3.2811870.1968560.0...0.00.00.00.00.00.00.00.00.00.0
q3q3:1quadrupole6.0535.514267-5.1631740.22481921.580410-3.5532060.1976060.0...0.00.00.00.00.00.00.00.00.00.0
drift_3[0]drift_3:0drift7.9557.945783-6.6428870.23148737.361845-4.7528130.2082630.0...0.00.00.00.00.00.00.00.00.00.0
q4q4:1quadrupole8.0559.223333-6.1283610.23175838.356732-5.1993680.2086840.0...0.00.00.00.00.00.00.00.00.00.0
drift_4[0]drift_4:0drift10.0085.599525-7.3978910.23611861.413366-6.6245470.2150800.0...0.00.00.00.00.00.00.00.00.00.0
myendmyend:1marker10.0085.599525-7.3978910.23611861.413366-6.6245470.2150800.0...0.00.00.00.00.00.00.00.00.00.0
#emycell$end:1marker10.0085.599525-7.3978910.23611861.413366-6.6245470.2150800.0...0.00.00.00.00.00.00.00.00.00.0
\n", "

13 rows × 256 columns

\n", "
" ], "text/plain": [ " name keyword s betx alfx mux \\\n", "#s mycell$start:1 marker 0.00 1.000000 0.000000 0.000000 \n", "mystart mystart:1 marker 0.00 1.000000 0.000000 0.000000 \n", "drift_0[0] drift_0:0 drift 1.95 4.802500 -1.950000 0.174584 \n", "q1 q1:1 quadrupole 2.05 5.197436 -1.998042 0.177770 \n", "drift_1[0] drift_1:0 drift 3.95 16.257422 -3.823004 0.210905 \n", "q2 q2:1 quadrupole 4.05 17.014863 -3.748881 0.211862 \n", "drift_2[0] drift_2:0 drift 5.95 34.454604 -5.429930 0.224364 \n", "q3 q3:1 quadrupole 6.05 35.514267 -5.163174 0.224819 \n", "drift_3[0] drift_3:0 drift 7.95 57.945783 -6.642887 0.231487 \n", "q4 q4:1 quadrupole 8.05 59.223333 -6.128361 0.231758 \n", "drift_4[0] drift_4:0 drift 10.00 85.599525 -7.397891 0.236118 \n", "myend myend:1 marker 10.00 85.599525 -7.397891 0.236118 \n", "#e mycell$end:1 marker 10.00 85.599525 -7.397891 0.236118 \n", "\n", " bety alfy muy x ... sig54 sig55 sig56 \\\n", "#s 2.000000 0.000000 0.000000 0.0 ... 0.0 0.0 0.0 \n", "mystart 2.000000 0.000000 0.000000 0.0 ... 0.0 0.0 0.0 \n", "drift_0[0] 3.901250 -0.975000 0.122985 0.0 ... 0.0 0.0 0.0 \n", "q1 4.105284 -1.066023 0.126963 0.0 ... 0.0 0.0 0.0 \n", "drift_1[0] 10.034826 -2.054789 0.174794 0.0 ... 0.0 0.0 0.0 \n", "q2 10.461302 -2.211390 0.176348 0.0 ... 0.0 0.0 0.0 \n", "drift_2[0] 20.897199 -3.281187 0.196856 0.0 ... 0.0 0.0 0.0 \n", "q3 21.580410 -3.553206 0.197606 0.0 ... 0.0 0.0 0.0 \n", "drift_3[0] 37.361845 -4.752813 0.208263 0.0 ... 0.0 0.0 0.0 \n", "q4 38.356732 -5.199368 0.208684 0.0 ... 0.0 0.0 0.0 \n", "drift_4[0] 61.413366 -6.624547 0.215080 0.0 ... 0.0 0.0 0.0 \n", "myend 61.413366 -6.624547 0.215080 0.0 ... 0.0 0.0 0.0 \n", "#e 61.413366 -6.624547 0.215080 0.0 ... 0.0 0.0 0.0 \n", "\n", " sig61 sig62 sig63 sig64 sig65 sig66 n1 \n", "#s 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "mystart 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_0[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_1[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_2[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_3[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_4[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "myend 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "#e 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "\n", "[13 rows x 256 columns]" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "myDFTable1=myMad.table['twiss'].dframe()\n", "myDFTable1" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "q1 0.1\n", "q2 0.1\n", "q3 0.1\n", "q4 0.1\n", "dtype: float64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are the gradients\n", "aux=myDFTable1[myDFTable1['keyword']=='quadrupole']\n", "aux['k1l']/aux['l']" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, '[m]')" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "aux=myDFTable1\n", "plt.plot(aux['s'],aux['betx'],'o-r', label='$\\\\beta_x$')\n", "plt.plot(aux['s'],aux['bety'],'s-b', label='$\\\\beta_y$')\n", "plt.legend(loc='best')\n", "plt.grid()\n", "plt.xlabel('s [m]')\n", "plt.ylabel('[m]')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Second part\n", "### First Matching " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "START MATCHING\n", "\n", "number of sequences: 1\n", "sequence name: mycell\n", "entry name: betx\n", "number of entries: 1\n", "entry value: 1.000000\n", "entry name: bety\n", "number of entries: 1\n", "entry value: 2.000000\n", "number of variables: 4\n", "user given constraints: 1\n", "total constraints: 4\n", "\n", "START JACOBIAN:\n", "\n", "\n", "MATCH SUMMARY\n", "\n", "Node_Name Constraint Type Target Value Final Value Penalty\n", "--------------------------------------------------------------------------------------------------\n", "\n", "\n", "Final Penalty Function = 1.50843678e-26\n", "\n", "\n", "\n", "\n", "\n", "Variable Final Value Initial Value Lower Limit Upper Limit \n", "--------------------------------------------------------------------------------\n", "myk1 -6.76969e-01 1.00000e-01 -1.00000e+20 1.00000e+20\n", "myk2 6.54514e+00 1.00000e-01 -1.00000e+20 1.00000e+20\n", "myk3 -6.80251e+00 1.00000e-01 -1.00000e+20 1.00000e+20\n", "myk4 8.24398e+00 1.00000e-01 -1.00000e+20 1.00000e+20\n", "\n", "END MATCH SUMMARY\n", "\n", "VARIABLE \"TAR\" SET TO 1.50843678e-26\n", "enter Twiss module\n", "\n", "++++++ table: summ\n", "\n", " length orbit5 alfa gammatr \n", " 10 -0 0 0 \n", "\n", " q1 dq1 betxmax dxmax \n", " 0.6953248778 0 19.04169528 0 \n", "\n", " dxrms xcomax xcorms q2 \n", " 0 0 0 0.3893811242 \n", "\n", " dq2 betymax dymax dyrms \n", " 0 59.12568565 0 0 \n", "\n", " ycomax ycorms deltap synch_1 \n", " 0 0 0 0 \n", "\n", " synch_2 synch_3 synch_4 synch_5 \n", " 0 0 0 0 \n", "\n", " synch_6 synch_8 nflips \n", " 0 0 0 \n", "Plot - default table plotted: twiss\n" ] } ], "source": [ "myString='''\n", "savebeta, label=betaEnd, place=#e;\n", "\n", "MATCH, SEQUENCE=myCell, betx=1, bety=2;\n", "constraint, betx=2, range=#e;\n", "constraint, alfx=0, range=#e;\n", "constraint, bety=1, range=#e;\n", "constraint, alfy=0, range=#e;\n", "VARY, NAME= myK1, STEP=0.00001;\n", "VARY, NAME= myK2, STEP=0.00001;\n", "VARY, NAME= myK3, STEP=0.00001;\n", "VARY, NAME= myK4, STEP=0.00001;\n", "JACOBIAN, CALLS=50, TOLERANCE=1e-20;//method adopted\n", "ENDMATCH;\n", "\n", "twiss,betx=1, bety=2, file=\"./firstpart/AfterMatching1.txt\";\n", "'''\n", "myMad.input(myString);" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namekeywordsbetxalfxmuxbetyalfymuyx...sig54sig55sig56sig61sig62sig63sig64sig65sig66n1
#smycell$start:1marker0.001.0000000.000000e+000.0000002.0000000.000000e+000.0000000.0...0.00.00.00.00.00.00.00.00.00.0
mystartmystart:1marker0.001.0000000.000000e+000.0000002.0000000.000000e+000.0000000.0...0.00.00.00.00.00.00.00.00.00.0
drift_0[0]drift_0:0drift1.954.802500-1.950000e+000.1745843.901250-9.750000e-010.1229850.0...0.00.00.00.00.00.00.00.00.00.0
q1q1:1quadrupole2.055.236870-2.403497e+000.1777624.074009-7.486915e-010.1269740.0...0.00.00.00.00.00.00.00.00.00.0
drift_1[0]drift_1:0drift3.9519.041695-4.862201e+000.2082298.301838-1.476482e+000.1799430.0...0.00.00.00.00.00.00.00.00.00.0
q2q2:1quadrupole4.0518.7655657.562999e+000.2090629.169430-7.387900e+000.1817870.0...0.00.00.00.00.00.00.00.00.00.0
drift_2[0]drift_2:0drift5.951.2221131.670396e+000.27399359.125686-1.890487e+010.1947880.0...0.00.00.00.00.00.00.00.00.00.0
q3q3:1quadrupole6.050.9894367.088986e-010.28865258.8651092.145128e+010.1950550.0...0.00.00.00.00.00.00.00.00.00.0
drift_3[0]drift_3:0drift7.953.777696-2.176404e+000.5682505.6314856.566417e+000.2116940.0...0.00.00.00.00.00.00.00.00.00.0
q4q4:1quadrupole8.053.9012509.750000e-010.5723394.8025001.950000e+000.2147970.0...0.00.00.00.00.00.00.00.00.00.0
drift_4[0]drift_4:0drift10.002.000000-2.731981e-150.6953251.000000-9.848100e-150.3893810.0...0.00.00.00.00.00.00.00.00.00.0
myendmyend:1marker10.002.000000-2.731981e-150.6953251.000000-9.848100e-150.3893810.0...0.00.00.00.00.00.00.00.00.00.0
#emycell$end:1marker10.002.000000-2.731981e-150.6953251.000000-9.848100e-150.3893810.0...0.00.00.00.00.00.00.00.00.00.0
\n", "

13 rows × 256 columns

\n", "
" ], "text/plain": [ " name keyword s betx alfx \\\n", "#s mycell$start:1 marker 0.00 1.000000 0.000000e+00 \n", "mystart mystart:1 marker 0.00 1.000000 0.000000e+00 \n", "drift_0[0] drift_0:0 drift 1.95 4.802500 -1.950000e+00 \n", "q1 q1:1 quadrupole 2.05 5.236870 -2.403497e+00 \n", "drift_1[0] drift_1:0 drift 3.95 19.041695 -4.862201e+00 \n", "q2 q2:1 quadrupole 4.05 18.765565 7.562999e+00 \n", "drift_2[0] drift_2:0 drift 5.95 1.222113 1.670396e+00 \n", "q3 q3:1 quadrupole 6.05 0.989436 7.088986e-01 \n", "drift_3[0] drift_3:0 drift 7.95 3.777696 -2.176404e+00 \n", "q4 q4:1 quadrupole 8.05 3.901250 9.750000e-01 \n", "drift_4[0] drift_4:0 drift 10.00 2.000000 -2.731981e-15 \n", "myend myend:1 marker 10.00 2.000000 -2.731981e-15 \n", "#e mycell$end:1 marker 10.00 2.000000 -2.731981e-15 \n", "\n", " mux bety alfy muy x ... sig54 \\\n", "#s 0.000000 2.000000 0.000000e+00 0.000000 0.0 ... 0.0 \n", "mystart 0.000000 2.000000 0.000000e+00 0.000000 0.0 ... 0.0 \n", "drift_0[0] 0.174584 3.901250 -9.750000e-01 0.122985 0.0 ... 0.0 \n", "q1 0.177762 4.074009 -7.486915e-01 0.126974 0.0 ... 0.0 \n", "drift_1[0] 0.208229 8.301838 -1.476482e+00 0.179943 0.0 ... 0.0 \n", "q2 0.209062 9.169430 -7.387900e+00 0.181787 0.0 ... 0.0 \n", "drift_2[0] 0.273993 59.125686 -1.890487e+01 0.194788 0.0 ... 0.0 \n", "q3 0.288652 58.865109 2.145128e+01 0.195055 0.0 ... 0.0 \n", "drift_3[0] 0.568250 5.631485 6.566417e+00 0.211694 0.0 ... 0.0 \n", "q4 0.572339 4.802500 1.950000e+00 0.214797 0.0 ... 0.0 \n", "drift_4[0] 0.695325 1.000000 -9.848100e-15 0.389381 0.0 ... 0.0 \n", "myend 0.695325 1.000000 -9.848100e-15 0.389381 0.0 ... 0.0 \n", "#e 0.695325 1.000000 -9.848100e-15 0.389381 0.0 ... 0.0 \n", "\n", " sig55 sig56 sig61 sig62 sig63 sig64 sig65 sig66 n1 \n", "#s 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "mystart 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_0[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_1[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_2[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_3[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_4[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "myend 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "#e 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "\n", "[13 rows x 256 columns]" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "myDFTable2=myMad.table['twiss'].dframe()\n", "myDFTable2" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "q1 -0.676969\n", "q2 6.545144\n", "q3 -6.802510\n", "q4 8.243978\n", "dtype: float64" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are the gradients\n", "aux=myDFTable2[myDFTable2['keyword']=='quadrupole']\n", "aux['k1l']/aux['l']" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, '[m]')" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "aux=myDFTable2\n", "plt.plot(aux['s'],aux['betx'],'o-r', label='$\\\\beta_x$')\n", "plt.plot(aux['s'],aux['bety'],'s-b', label='$\\\\beta_y$')\n", "plt.legend(loc='best')\n", "plt.grid()\n", "plt.xlabel('s [m]')\n", "plt.ylabel('[m]')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Second matching " ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "START MATCHING\n", "\n", "number of sequences: 1\n", "sequence name: mycell\n", "entry name: betx\n", "number of entries: 1\n", "entry value: 1.000000\n", "entry name: bety\n", "number of entries: 1\n", "entry value: 2.000000\n", "number of variables: 4\n", "user given constraints: 1\n", "total constraints: 4\n", "\n", "START JACOBIAN:\n", "\n", "\n", "MATCH SUMMARY\n", "\n", "Node_Name Constraint Type Target Value Final Value Penalty\n", "--------------------------------------------------------------------------------------------------\n", "\n", "\n", "Final Penalty Function = 3.14732687e-22\n", "\n", "\n", "\n", "\n", "\n", "Variable Final Value Initial Value Lower Limit Upper Limit \n", "--------------------------------------------------------------------------------\n", "myk1 -1.25766e+01 -6.76969e-01 -1.00000e+20 1.00000e+20\n", "myk2 8.64066e+00 6.54514e+00 -1.00000e+20 1.00000e+20\n", "myk3 -5.88784e+00 -6.80251e+00 -1.00000e+20 1.00000e+20\n", "myk4 4.42574e+00 8.24398e+00 -1.00000e+20 1.00000e+20\n", "\n", "END MATCH SUMMARY\n", "\n", "VARIABLE \"TAR\" SET TO 3.14732687e-22\n", "enter Twiss module\n", "\n", "++++++ table: summ\n", "\n", " length orbit5 alfa gammatr \n", " 10 -0 0 0 \n", "\n", " q1 dq1 betxmax dxmax \n", " 0.6816867601 0 92.46076045 0 \n", "\n", " dxrms xcomax xcorms q2 \n", " 0 0 0 0.5753584766 \n", "\n", " dq2 betymax dymax dyrms \n", " 0 97.37021671 0 0 \n", "\n", " ycomax ycorms deltap synch_1 \n", " 0 0 0 0 \n", "\n", " synch_2 synch_3 synch_4 synch_5 \n", " 0 0 0 0 \n", "\n", " synch_6 synch_8 nflips \n", " 0 0 0 \n" ] } ], "source": [ "myString='''\n", "MATCH, SEQUENCE=myCell, betx=1, bety=2;\n", "constraint, betx=betaEnd->betx, range=#e;\n", "constraint, alfx=betaEnd->alfx, range=#e;\n", "constraint, bety=betaEnd->bety, range=#e;\n", "constraint, alfy=betaEnd->alfy, range=#e;\n", "VARY, NAME= myK1, STEP=0.00001;\n", "VARY, NAME= myK2, STEP=0.00001;\n", "VARY, NAME= myK3, STEP=0.00001;\n", "VARY, NAME= myK4, STEP=0.00001;\n", "JACOBIAN, CALLS=50, TOLERANCE=1e-20;//method adopted\n", "ENDMATCH;\n", "twiss,betx=1, bety=2;\n", "'''\n", "myMad.input(myString);\n", "\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namekeywordsbetxalfxmuxbetyalfymuyx...sig54sig55sig56sig61sig62sig63sig64sig65sig66n1
#smycell$start:1marker0.001.0000000.0000000.0000002.0000000.0000000.0000000.0...0.00.00.00.00.00.00.00.00.00.0
mystartmystart:1marker0.001.0000000.0000000.0000002.0000000.0000000.0000000.0...0.00.00.00.00.00.00.00.00.00.0
drift_0[0]drift_0:0drift1.954.802500-1.9500000.1745843.901250-0.9750000.1229850.0...0.00.00.00.00.00.00.00.00.00.0
q1q1:1quadrupole2.055.866198-9.1292130.1776463.6146833.7195180.1271360.0...0.00.00.00.00.00.00.00.00.00.0
drift_1[0]drift_1:0drift3.9592.460760-36.4468720.1906454.296110-4.0781640.5470640.0...0.00.00.00.00.00.00.00.00.00.0
q2q2:1quadrupole4.0591.71537243.6848210.1908155.583809-9.1675960.5503610.0...0.00.00.00.00.00.00.00.00.00.0
drift_2[0]drift_2:0drift5.950.8673304.1299380.22498295.403170-38.1057520.5634770.0...0.00.00.00.00.00.00.00.00.00.0
q3q3:1quadrupole6.050.2729151.9304130.25825897.37021718.8228660.5636410.0...0.00.00.00.00.00.00.00.00.00.0
drift_3[0]drift_3:0drift7.9555.457292-30.9748220.67705239.01608011.8898370.5685480.0...0.00.00.00.00.00.00.00.00.00.0
q4q4:1quadrupole8.0559.223333-6.1283610.67732738.356732-5.1993680.5689620.0...0.00.00.00.00.00.00.00.00.00.0
drift_4[0]drift_4:0drift10.0085.599525-7.3978910.68168761.413366-6.6245470.5753580.0...0.00.00.00.00.00.00.00.00.00.0
myendmyend:1marker10.0085.599525-7.3978910.68168761.413366-6.6245470.5753580.0...0.00.00.00.00.00.00.00.00.00.0
#emycell$end:1marker10.0085.599525-7.3978910.68168761.413366-6.6245470.5753580.0...0.00.00.00.00.00.00.00.00.00.0
\n", "

13 rows × 256 columns

\n", "
" ], "text/plain": [ " name keyword s betx alfx mux \\\n", "#s mycell$start:1 marker 0.00 1.000000 0.000000 0.000000 \n", "mystart mystart:1 marker 0.00 1.000000 0.000000 0.000000 \n", "drift_0[0] drift_0:0 drift 1.95 4.802500 -1.950000 0.174584 \n", "q1 q1:1 quadrupole 2.05 5.866198 -9.129213 0.177646 \n", "drift_1[0] drift_1:0 drift 3.95 92.460760 -36.446872 0.190645 \n", "q2 q2:1 quadrupole 4.05 91.715372 43.684821 0.190815 \n", "drift_2[0] drift_2:0 drift 5.95 0.867330 4.129938 0.224982 \n", "q3 q3:1 quadrupole 6.05 0.272915 1.930413 0.258258 \n", "drift_3[0] drift_3:0 drift 7.95 55.457292 -30.974822 0.677052 \n", "q4 q4:1 quadrupole 8.05 59.223333 -6.128361 0.677327 \n", "drift_4[0] drift_4:0 drift 10.00 85.599525 -7.397891 0.681687 \n", "myend myend:1 marker 10.00 85.599525 -7.397891 0.681687 \n", "#e mycell$end:1 marker 10.00 85.599525 -7.397891 0.681687 \n", "\n", " bety alfy muy x ... sig54 sig55 sig56 \\\n", "#s 2.000000 0.000000 0.000000 0.0 ... 0.0 0.0 0.0 \n", "mystart 2.000000 0.000000 0.000000 0.0 ... 0.0 0.0 0.0 \n", "drift_0[0] 3.901250 -0.975000 0.122985 0.0 ... 0.0 0.0 0.0 \n", "q1 3.614683 3.719518 0.127136 0.0 ... 0.0 0.0 0.0 \n", "drift_1[0] 4.296110 -4.078164 0.547064 0.0 ... 0.0 0.0 0.0 \n", "q2 5.583809 -9.167596 0.550361 0.0 ... 0.0 0.0 0.0 \n", "drift_2[0] 95.403170 -38.105752 0.563477 0.0 ... 0.0 0.0 0.0 \n", "q3 97.370217 18.822866 0.563641 0.0 ... 0.0 0.0 0.0 \n", "drift_3[0] 39.016080 11.889837 0.568548 0.0 ... 0.0 0.0 0.0 \n", "q4 38.356732 -5.199368 0.568962 0.0 ... 0.0 0.0 0.0 \n", "drift_4[0] 61.413366 -6.624547 0.575358 0.0 ... 0.0 0.0 0.0 \n", "myend 61.413366 -6.624547 0.575358 0.0 ... 0.0 0.0 0.0 \n", "#e 61.413366 -6.624547 0.575358 0.0 ... 0.0 0.0 0.0 \n", "\n", " sig61 sig62 sig63 sig64 sig65 sig66 n1 \n", "#s 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "mystart 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_0[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_1[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q2 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_2[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q3 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_3[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "q4 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "drift_4[0] 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "myend 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "#e 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n", "\n", "[13 rows x 256 columns]" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "myDFTable3=myMad.table['twiss'].dframe()\n", "myDFTable3" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "q1 -12.576606\n", "q2 8.640655\n", "q3 -5.887835\n", "q4 4.425736\n", "dtype: float64" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are the gradients\n", "aux=myDFTable3[myDFTable3['keyword']=='quadrupole']\n", "aux['k1l']/aux['l']" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, '[m]')" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "aux=myDFTable3\n", "plt.plot(aux['s'],aux['betx'],'b', label='$\\\\beta_x$ second matching')\n", "plt.plot(aux['s'],aux['bety'],'r', label='$\\\\beta_y$ second matching')\n", "\n", "aux=myDFTable1\n", "plt.plot(aux['s'],aux['betx'],':b', label='$\\\\beta_x$ w/ initial configuration')\n", "plt.plot(aux['s'],aux['bety'],':r', label='$\\\\beta_x$ w/ initial configuration')\n", "plt.legend(loc='best')\n", "plt.grid()\n", "plt.xlabel('s [m]')\n", "plt.ylabel('[m]')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Conclusions**: it is very important to observe that the the second matching DOES not find the initial solution (all gradients equal to 0.1 $m^{-2}$). *The solution is NOT unique since the problem is not linear*. In addition the solution that we found via the matching is very sub-optimal: it requires stronger and larger quadrupoles..." ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "q1 -12.576606\n", "q2 8.640655\n", "q3 -5.887835\n", "q4 4.425736\n", "dtype: float64" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are the gradients found with the matching\n", "aux=myDFTable3[myDFTable3['keyword']=='quadrupole']\n", "aux['k1l']/aux['l']" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "q1 0.1\n", "q2 0.1\n", "q3 0.1\n", "q4 0.1\n", "dtype: float64" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# These are the gradients that can solve our problem\n", "aux=myDFTable1[myDFTable1['keyword']=='quadrupole']\n", "aux['k1l']/aux['l']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### About gradients" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "q1 10.061285\n", "q2 6.912524\n", "q3 4.710268\n", "q4 3.540589\n", "dtype: float64" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aux=myDFTable3[myDFTable3['keyword']=='quadrupole']\n", "aux=aux['k1l']/aux['l']\n", "aux=aux*10 #this is in A\n", "aux*=2 #this is in T/m\n", "aux*=.04 #this is in T\n", "np.abs(aux) #these magnets are extremely difficult to be built (superconductive)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "q1 0.08\n", "q2 0.08\n", "q3 0.08\n", "q4 0.08\n", "dtype: float64" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aux=myDFTable1[myDFTable1['keyword']=='quadrupole']\n", "aux=aux['k1l']/aux['l']\n", "aux=aux*10 #this is in A\n", "aux*=2 #this is in T/m\n", "aux*=.04 #this is in T\n", "np.abs(aux) #these magnets are easier to be built" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }