{
"cells": [
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"from cpymad.madx import Madx\n",
"import pandas as pd\n",
"from matplotlib import pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Tutorial 3\n",
"\n",
"\n",
"## First part"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" ++++++++++++++++++++++++++++++++++++++++++++\n",
" + MAD-X 5.05.01 (64 bit, Linux) +\n",
" + Support: mad@cern.ch, http://cern.ch/mad +\n",
" + Release date: 2019.06.07 +\n",
" + Execution date: 2022.03.01 07:54:30 +\n",
" ++++++++++++++++++++++++++++++++++++++++++++\n",
"enter Twiss module\n",
" \n",
"iteration: 1 error: 0.000000E+00 deltap: 0.000000E+00\n",
"orbit: 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00\n",
"\n",
"++++++ table: summ\n",
"\n",
" length orbit5 alfa gammatr \n",
" 100 -0 0.0006051853679 40.64955451 \n",
"\n",
" q1 dq1 betxmax dxmax \n",
" 0.236500685 -0.2917600666 160.5475138 2.444933737 \n",
"\n",
" dxrms xcomax xcorms q2 \n",
" 1.953527658 0 0 0.2363728498 \n",
"\n",
" dq2 betymax dymax dyrms \n",
" -0.2918567527 160.6036546 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",
" nflips \n",
" 0 \n"
]
}
],
"source": [
"myMad = Madx()\n",
"myString='''\n",
"quadrupoleLength=5;\n",
"dipoleLength=15;\n",
"cellLength=100;\n",
"nBend=736;\n",
"\n",
"\n",
"myK=2.8/cellLength/quadrupoleLength;// m^-2\n",
"\n",
"myAngle=2*pi/nBend;\n",
"QF: quadrupole, L=quadrupoleLength, K1=myK;\n",
"QD: quadrupole, L=quadrupoleLength, K1=-myK;\n",
"BM: sbend, L=dipoleLength, angle:=myAngle; \n",
"\n",
"myCell:sequence, refer=entry, L=cellLength;\n",
"q1: QF, at=0;\n",
"B1: BM, at =5+quadrupoleLength/2, from=q1;\n",
"B2: BM, at =5+dipoleLength/2, from=B1;\n",
"q2: QD, at=cellLength/2;\n",
"B3: BM, at =5+quadrupoleLength/2, from=q2;\n",
"B4: BM, at =5+dipoleLength/2, from=B3;\n",
"endsequence;\n",
"\n",
"beam, particle=proton, energy=7000;\n",
"\n",
"use, sequence=myCell;\n",
"twiss, table=first_twiss;\n",
"!plot, haxis=s, vaxis=betx,bety,dx,colour=100, title=\"First plot\";\n",
"'''\n",
"myMad.input(myString);"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" name | \n",
" keyword | \n",
" s | \n",
" x | \n",
" y | \n",
" px | \n",
" py | \n",
" betx | \n",
" alfx | \n",
" mux | \n",
" bety | \n",
" alfy | \n",
" muy | \n",
" dx | \n",
" dy | \n",
" dpx | \n",
" dpy | \n",
"
\n",
" \n",
" \n",
" \n",
" #s | \n",
" mycell$start:1 | \n",
" marker | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" -2.259046 | \n",
" 0.000000 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.000000 | \n",
" 2.444934 | \n",
" 0.0 | \n",
" 0.034634 | \n",
" -0.0 | \n",
"
\n",
" \n",
" q1 | \n",
" q1:1 | \n",
" quadrupole | \n",
" 5.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" 2.259046 | \n",
" 0.004843 | \n",
" 34.217492 | \n",
" -0.548735 | \n",
" 0.023892 | \n",
" 2.444934 | \n",
" 0.0 | \n",
" -0.034634 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_0[0] | \n",
" drift_0:0 | \n",
" drift | \n",
" 10.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 138.907441 | \n",
" 2.068969 | \n",
" 0.010172 | \n",
" 40.655458 | \n",
" -0.738858 | \n",
" 0.045293 | \n",
" 2.271763 | \n",
" 0.0 | \n",
" -0.034634 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b1 | \n",
" b1:1 | \n",
" sbend | \n",
" 25.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 85.384548 | \n",
" 1.499138 | \n",
" 0.032163 | \n",
" 71.376768 | \n",
" -1.309229 | \n",
" 0.090204 | \n",
" 1.816202 | \n",
" 0.0 | \n",
" -0.026107 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_1[0] | \n",
" drift_1:0 | \n",
" drift | \n",
" 30.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 71.343992 | \n",
" 1.308974 | \n",
" 0.042366 | \n",
" 85.419675 | \n",
" -1.499352 | \n",
" 0.100402 | \n",
" 1.685667 | \n",
" 0.0 | \n",
" -0.026107 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b2 | \n",
" b2:1 | \n",
" sbend | \n",
" 45.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 40.628665 | \n",
" 0.738665 | \n",
" 0.087302 | \n",
" 138.955807 | \n",
" -2.069723 | \n",
" 0.122384 | \n",
" 1.358032 | \n",
" 0.0 | \n",
" -0.017577 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_2[0] | \n",
" drift_2:0 | \n",
" drift | \n",
" 50.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 34.193082 | \n",
" 0.548451 | \n",
" 0.108717 | \n",
" 160.603655 | \n",
" -2.259847 | \n",
" 0.127712 | \n",
" 1.270145 | \n",
" 0.0 | \n",
" -0.017577 | \n",
" 0.0 | \n",
"
\n",
" \n",
" q2 | \n",
" q2:1 | \n",
" quadrupole | \n",
" 55.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 34.193082 | \n",
" -0.548451 | \n",
" 0.132626 | \n",
" 160.603655 | \n",
" 2.259847 | \n",
" 0.132553 | \n",
" 1.270145 | \n",
" 0.0 | \n",
" 0.017577 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_3[0] | \n",
" drift_3:0 | \n",
" drift | \n",
" 60.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 40.628665 | \n",
" -0.738665 | \n",
" 0.154041 | \n",
" 138.955807 | \n",
" 2.069723 | \n",
" 0.137881 | \n",
" 1.358032 | \n",
" 0.0 | \n",
" 0.017577 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b3 | \n",
" b3:1 | \n",
" sbend | \n",
" 75.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 71.343992 | \n",
" -1.308974 | \n",
" 0.198978 | \n",
" 85.419675 | \n",
" 1.499352 | \n",
" 0.159863 | \n",
" 1.685667 | \n",
" 0.0 | \n",
" 0.026107 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_4[0] | \n",
" drift_4:0 | \n",
" drift | \n",
" 80.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 85.384548 | \n",
" -1.499138 | \n",
" 0.209180 | \n",
" 71.376768 | \n",
" 1.309229 | \n",
" 0.170062 | \n",
" 1.816202 | \n",
" 0.0 | \n",
" 0.026107 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b4 | \n",
" b4:1 | \n",
" sbend | \n",
" 95.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 138.907441 | \n",
" -2.068969 | \n",
" 0.231171 | \n",
" 40.655458 | \n",
" 0.738858 | \n",
" 0.214973 | \n",
" 2.271763 | \n",
" 0.0 | \n",
" 0.034634 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_5[0] | \n",
" drift_5:0 | \n",
" drift | \n",
" 100.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" -2.259046 | \n",
" 0.236501 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.236373 | \n",
" 2.444934 | \n",
" 0.0 | \n",
" 0.034634 | \n",
" 0.0 | \n",
"
\n",
" \n",
" #e | \n",
" mycell$end:1 | \n",
" marker | \n",
" 100.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" -2.259046 | \n",
" 0.236501 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.236373 | \n",
" 2.444934 | \n",
" 0.0 | \n",
" 0.034634 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name keyword s x y px py betx \\\n",
"#s mycell$start:1 marker 0.0 0.0 0.0 0.0 0.0 160.547514 \n",
"q1 q1:1 quadrupole 5.0 0.0 0.0 0.0 0.0 160.547514 \n",
"drift_0[0] drift_0:0 drift 10.0 0.0 0.0 0.0 0.0 138.907441 \n",
"b1 b1:1 sbend 25.0 0.0 0.0 0.0 0.0 85.384548 \n",
"drift_1[0] drift_1:0 drift 30.0 0.0 0.0 0.0 0.0 71.343992 \n",
"b2 b2:1 sbend 45.0 0.0 0.0 0.0 0.0 40.628665 \n",
"drift_2[0] drift_2:0 drift 50.0 0.0 0.0 0.0 0.0 34.193082 \n",
"q2 q2:1 quadrupole 55.0 0.0 0.0 0.0 0.0 34.193082 \n",
"drift_3[0] drift_3:0 drift 60.0 0.0 0.0 0.0 0.0 40.628665 \n",
"b3 b3:1 sbend 75.0 0.0 0.0 0.0 0.0 71.343992 \n",
"drift_4[0] drift_4:0 drift 80.0 0.0 0.0 0.0 0.0 85.384548 \n",
"b4 b4:1 sbend 95.0 0.0 0.0 0.0 0.0 138.907441 \n",
"drift_5[0] drift_5:0 drift 100.0 0.0 0.0 0.0 0.0 160.547514 \n",
"#e mycell$end:1 marker 100.0 0.0 0.0 0.0 0.0 160.547514 \n",
"\n",
" alfx mux bety alfy muy dx dy \\\n",
"#s -2.259046 0.000000 34.217492 0.548735 0.000000 2.444934 0.0 \n",
"q1 2.259046 0.004843 34.217492 -0.548735 0.023892 2.444934 0.0 \n",
"drift_0[0] 2.068969 0.010172 40.655458 -0.738858 0.045293 2.271763 0.0 \n",
"b1 1.499138 0.032163 71.376768 -1.309229 0.090204 1.816202 0.0 \n",
"drift_1[0] 1.308974 0.042366 85.419675 -1.499352 0.100402 1.685667 0.0 \n",
"b2 0.738665 0.087302 138.955807 -2.069723 0.122384 1.358032 0.0 \n",
"drift_2[0] 0.548451 0.108717 160.603655 -2.259847 0.127712 1.270145 0.0 \n",
"q2 -0.548451 0.132626 160.603655 2.259847 0.132553 1.270145 0.0 \n",
"drift_3[0] -0.738665 0.154041 138.955807 2.069723 0.137881 1.358032 0.0 \n",
"b3 -1.308974 0.198978 85.419675 1.499352 0.159863 1.685667 0.0 \n",
"drift_4[0] -1.499138 0.209180 71.376768 1.309229 0.170062 1.816202 0.0 \n",
"b4 -2.068969 0.231171 40.655458 0.738858 0.214973 2.271763 0.0 \n",
"drift_5[0] -2.259046 0.236501 34.217492 0.548735 0.236373 2.444934 0.0 \n",
"#e -2.259046 0.236501 34.217492 0.548735 0.236373 2.444934 0.0 \n",
"\n",
" dpx dpy \n",
"#s 0.034634 -0.0 \n",
"q1 -0.034634 0.0 \n",
"drift_0[0] -0.034634 0.0 \n",
"b1 -0.026107 0.0 \n",
"drift_1[0] -0.026107 0.0 \n",
"b2 -0.017577 0.0 \n",
"drift_2[0] -0.017577 0.0 \n",
"q2 0.017577 0.0 \n",
"drift_3[0] 0.017577 0.0 \n",
"b3 0.026107 0.0 \n",
"drift_4[0] 0.026107 0.0 \n",
"b4 0.034634 0.0 \n",
"drift_5[0] 0.034634 0.0 \n",
"#e 0.034634 0.0 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"first_df=myMad.table['first_twiss'].dframe()\n",
"first_summary=myMad.table['summ'].dframe()\n",
"first_df[['name', 'keyword', 's', \n",
" 'x','y','px','py',\n",
" 'betx', 'alfx', 'mux', \n",
" 'bety', 'alfy', 'muy',\n",
" 'dx','dy','dpx','dpy',\n",
" ]]\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"++++++ info: myangle redefined\n",
"enter Twiss module\n",
" \n",
"iteration: 1 error: 0.000000E+00 deltap: 0.000000E+00\n",
"orbit: 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00\n",
"\n",
"++++++ table: summ\n",
"\n",
" length orbit5 alfa gammatr \n",
" 100 -0 0 0 \n",
"\n",
" q1 dq1 betxmax dxmax \n",
" 0.2363728498 -0.2921003657 160.6036546 0 \n",
"\n",
" dxrms xcomax xcorms q2 \n",
" 0 0 0 0.2363728498 \n",
"\n",
" dq2 betymax dymax dyrms \n",
" -0.2921003657 160.6036546 -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",
" nflips \n",
" 0 \n"
]
}
],
"source": [
"myString='''\n",
"myAngle=2*pi*0;\n",
"twiss, table=second_twiss;\n",
"!plot, haxis=s, vaxis=betx,bety,dx,colour=100, title=\"Second plot\";\n",
"'''\n",
"myMad.input(myString);"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" name | \n",
" keyword | \n",
" s | \n",
" x | \n",
" y | \n",
" px | \n",
" py | \n",
" betx | \n",
" alfx | \n",
" mux | \n",
" bety | \n",
" alfy | \n",
" muy | \n",
" dx | \n",
" dy | \n",
" dpx | \n",
" dpy | \n",
"
\n",
" \n",
" \n",
" \n",
" #s | \n",
" mycell$start:1 | \n",
" marker | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.603655 | \n",
" -2.259847 | \n",
" 0.000000 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.000000 | \n",
" 0.0 | \n",
" -0.0 | \n",
" -0.0 | \n",
" -0.0 | \n",
"
\n",
" \n",
" q1 | \n",
" q1:1 | \n",
" quadrupole | \n",
" 5.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.603655 | \n",
" 2.259847 | \n",
" 0.004841 | \n",
" 34.217492 | \n",
" -0.548735 | \n",
" 0.023892 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_0[0] | \n",
" drift_0:0 | \n",
" drift | \n",
" 10.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 138.955807 | \n",
" 2.069723 | \n",
" 0.010169 | \n",
" 40.655458 | \n",
" -0.738858 | \n",
" 0.045293 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b1 | \n",
" b1:1 | \n",
" sbend | \n",
" 25.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 85.419675 | \n",
" 1.499352 | \n",
" 0.032151 | \n",
" 71.376768 | \n",
" -1.309229 | \n",
" 0.090204 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_1[0] | \n",
" drift_1:0 | \n",
" drift | \n",
" 30.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 71.376768 | \n",
" 1.309229 | \n",
" 0.042350 | \n",
" 85.419675 | \n",
" -1.499352 | \n",
" 0.100402 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b2 | \n",
" b2:1 | \n",
" sbend | \n",
" 45.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 40.655458 | \n",
" 0.738858 | \n",
" 0.087260 | \n",
" 138.955807 | \n",
" -2.069723 | \n",
" 0.122384 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_2[0] | \n",
" drift_2:0 | \n",
" drift | \n",
" 50.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.108661 | \n",
" 160.603655 | \n",
" -2.259847 | \n",
" 0.127712 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" q2 | \n",
" q2:1 | \n",
" quadrupole | \n",
" 55.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 34.217492 | \n",
" -0.548735 | \n",
" 0.132553 | \n",
" 160.603655 | \n",
" 2.259847 | \n",
" 0.132553 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_3[0] | \n",
" drift_3:0 | \n",
" drift | \n",
" 60.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 40.655458 | \n",
" -0.738858 | \n",
" 0.153953 | \n",
" 138.955807 | \n",
" 2.069723 | \n",
" 0.137881 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b3 | \n",
" b3:1 | \n",
" sbend | \n",
" 75.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 71.376768 | \n",
" -1.309229 | \n",
" 0.198864 | \n",
" 85.419675 | \n",
" 1.499352 | \n",
" 0.159863 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_4[0] | \n",
" drift_4:0 | \n",
" drift | \n",
" 80.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 85.419675 | \n",
" -1.499352 | \n",
" 0.209063 | \n",
" 71.376768 | \n",
" 1.309229 | \n",
" 0.170062 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b4 | \n",
" b4:1 | \n",
" sbend | \n",
" 95.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 138.955807 | \n",
" -2.069723 | \n",
" 0.231045 | \n",
" 40.655458 | \n",
" 0.738858 | \n",
" 0.214973 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_5[0] | \n",
" drift_5:0 | \n",
" drift | \n",
" 100.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.603655 | \n",
" -2.259847 | \n",
" 0.236373 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.236373 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
" #e | \n",
" mycell$end:1 | \n",
" marker | \n",
" 100.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.603655 | \n",
" -2.259847 | \n",
" 0.236373 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.236373 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name keyword s x y px py betx \\\n",
"#s mycell$start:1 marker 0.0 0.0 0.0 0.0 0.0 160.603655 \n",
"q1 q1:1 quadrupole 5.0 0.0 0.0 0.0 0.0 160.603655 \n",
"drift_0[0] drift_0:0 drift 10.0 0.0 0.0 0.0 0.0 138.955807 \n",
"b1 b1:1 sbend 25.0 0.0 0.0 0.0 0.0 85.419675 \n",
"drift_1[0] drift_1:0 drift 30.0 0.0 0.0 0.0 0.0 71.376768 \n",
"b2 b2:1 sbend 45.0 0.0 0.0 0.0 0.0 40.655458 \n",
"drift_2[0] drift_2:0 drift 50.0 0.0 0.0 0.0 0.0 34.217492 \n",
"q2 q2:1 quadrupole 55.0 0.0 0.0 0.0 0.0 34.217492 \n",
"drift_3[0] drift_3:0 drift 60.0 0.0 0.0 0.0 0.0 40.655458 \n",
"b3 b3:1 sbend 75.0 0.0 0.0 0.0 0.0 71.376768 \n",
"drift_4[0] drift_4:0 drift 80.0 0.0 0.0 0.0 0.0 85.419675 \n",
"b4 b4:1 sbend 95.0 0.0 0.0 0.0 0.0 138.955807 \n",
"drift_5[0] drift_5:0 drift 100.0 0.0 0.0 0.0 0.0 160.603655 \n",
"#e mycell$end:1 marker 100.0 0.0 0.0 0.0 0.0 160.603655 \n",
"\n",
" alfx mux bety alfy muy dx dy dpx \\\n",
"#s -2.259847 0.000000 34.217492 0.548735 0.000000 0.0 -0.0 -0.0 \n",
"q1 2.259847 0.004841 34.217492 -0.548735 0.023892 0.0 0.0 0.0 \n",
"drift_0[0] 2.069723 0.010169 40.655458 -0.738858 0.045293 0.0 0.0 0.0 \n",
"b1 1.499352 0.032151 71.376768 -1.309229 0.090204 0.0 0.0 0.0 \n",
"drift_1[0] 1.309229 0.042350 85.419675 -1.499352 0.100402 0.0 0.0 0.0 \n",
"b2 0.738858 0.087260 138.955807 -2.069723 0.122384 0.0 0.0 0.0 \n",
"drift_2[0] 0.548735 0.108661 160.603655 -2.259847 0.127712 0.0 0.0 0.0 \n",
"q2 -0.548735 0.132553 160.603655 2.259847 0.132553 0.0 0.0 0.0 \n",
"drift_3[0] -0.738858 0.153953 138.955807 2.069723 0.137881 0.0 0.0 0.0 \n",
"b3 -1.309229 0.198864 85.419675 1.499352 0.159863 0.0 0.0 0.0 \n",
"drift_4[0] -1.499352 0.209063 71.376768 1.309229 0.170062 0.0 0.0 0.0 \n",
"b4 -2.069723 0.231045 40.655458 0.738858 0.214973 0.0 0.0 0.0 \n",
"drift_5[0] -2.259847 0.236373 34.217492 0.548735 0.236373 0.0 0.0 0.0 \n",
"#e -2.259847 0.236373 34.217492 0.548735 0.236373 0.0 0.0 0.0 \n",
"\n",
" dpy \n",
"#s -0.0 \n",
"q1 0.0 \n",
"drift_0[0] 0.0 \n",
"b1 0.0 \n",
"drift_1[0] 0.0 \n",
"b2 0.0 \n",
"drift_2[0] 0.0 \n",
"q2 0.0 \n",
"drift_3[0] 0.0 \n",
"b3 0.0 \n",
"drift_4[0] 0.0 \n",
"b4 0.0 \n",
"drift_5[0] 0.0 \n",
"#e 0.0 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"second_df=myMad.table['second_twiss'].dframe()\n",
"second_summary=myMad.table['summ'].dframe()\n",
"\n",
"second_df[['name', 'keyword', 's', \n",
" 'x','y','px','py',\n",
" 'betx', 'alfx', 'mux', \n",
" 'bety', 'alfy', 'muy',\n",
" 'dx','dy','dpx','dpy',\n",
" ]]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" With dipoles | \n",
" Without dipoles | \n",
"
\n",
" \n",
" \n",
" \n",
" betx | \n",
" 160.548 | \n",
" 160.604 | \n",
"
\n",
" \n",
" alfx | \n",
" 2.25905 | \n",
" 2.25985 | \n",
"
\n",
" \n",
" mux | \n",
" 0.236501 | \n",
" 0.236373 | \n",
"
\n",
" \n",
" bety | \n",
" 160.604 | \n",
" 160.604 | \n",
"
\n",
" \n",
" alfy | \n",
" 2.25985 | \n",
" 2.25985 | \n",
"
\n",
" \n",
" muy | \n",
" 0.236373 | \n",
" 0.236373 | \n",
"
\n",
" \n",
" dx | \n",
" 2.44493 | \n",
" 0 | \n",
"
\n",
" \n",
" dy | \n",
" 0 | \n",
" -0 | \n",
"
\n",
" \n",
" dpx | \n",
" 0.0346341 | \n",
" -0 | \n",
"
\n",
" \n",
" dpy | \n",
" -0 | \n",
" -0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" With dipoles Without dipoles\n",
"betx 160.548 160.604\n",
"alfx 2.25905 2.25985\n",
"mux 0.236501 0.236373\n",
"bety 160.604 160.604\n",
"alfy 2.25985 2.25985\n",
"muy 0.236373 0.236373\n",
"dx 2.44493 0\n",
"dy 0 -0\n",
"dpx 0.0346341 -0\n",
"dpy -0 -0"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aux=pd.DataFrame({'With dipoles':first_df.max(),'Without dipoles':second_df.max()})\n",
"aux.loc[['betx', 'alfx', 'mux', \n",
" 'bety', 'alfy', 'muy',\n",
" 'dx','dy','dpx','dpy',\n",
" ]]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"184.0"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# There are\n",
"Ncells=736/4 \n",
"Ncells\n",
"#FODO cells"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"43.516126037479175"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"43.49260436271754"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"#The machine tunes are therefore\n",
"display(Ncells*first_df['mux'].max())\n",
"display(Ncells*first_df['muy'].max())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Second part"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" ++++++++++++++++++++++++++++++++++++++++++++\n",
" + MAD-X 5.05.01 (64 bit, Linux) +\n",
" + Support: mad@cern.ch, http://cern.ch/mad +\n",
" + Release date: 2019.06.07 +\n",
" + Execution date: 2022.03.01 07:54:33 +\n",
" ++++++++++++++++++++++++++++++++++++++++++++\n",
"enter Twiss module\n",
" \n",
"iteration: 1 error: 0.000000E+00 deltap: 0.000000E+00\n",
"orbit: 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00\n",
"\n",
"++++++ table: summ\n",
"\n",
" length orbit5 alfa gammatr \n",
" 100 -0 0.0006051853679 40.64955451 \n",
"\n",
" q1 dq1 betxmax dxmax \n",
" 0.236500685 -0.8434855722 160.5475138 7.068363936 \n",
"\n",
" dxrms xcomax xcorms q2 \n",
" 5.647696801 0 0 0.2363728498 \n",
"\n",
" dq2 betymax dymax dyrms \n",
" -0.8437650942 160.6036546 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",
" nflips \n",
" 0 \n"
]
}
],
"source": [
"myMad = Madx()\n",
"myString='''\n",
"quadrupoleLength=5;\n",
"dipoleLength=15;\n",
"cellLength=100;\n",
"nBend=736;\n",
"\n",
"\n",
"myK=2.8/cellLength/quadrupoleLength;// m^-2\n",
"\n",
"myAngle=2*pi/nBend;\n",
"QF: quadrupole, L=quadrupoleLength, K1=myK;\n",
"QD: quadrupole, L=quadrupoleLength, K1=-myK;\n",
"BM: sbend, L=dipoleLength, angle:=myAngle; \n",
"\n",
"myCell:sequence, refer=entry, L=cellLength;\n",
"q1: QF, at=0;\n",
"B1: BM, at =5+quadrupoleLength/2, from=q1;\n",
"B2: BM, at =5+dipoleLength/2, from=B1;\n",
"q2: QD, at=cellLength/2;\n",
"B3: BM, at =5+quadrupoleLength/2, from=q2;\n",
"B4: BM, at =5+dipoleLength/2, from=B3;\n",
"endsequence;\n",
"\n",
"beam, particle=proton, energy=1;!here I am bit extreme to see an effect on chromaticity\n",
"\n",
"use, sequence=myCell;\n",
"twiss;\n",
"'''\n",
"myMad.input(myString);"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" name | \n",
" keyword | \n",
" s | \n",
" x | \n",
" y | \n",
" px | \n",
" py | \n",
" betx | \n",
" alfx | \n",
" mux | \n",
" bety | \n",
" alfy | \n",
" muy | \n",
" dx | \n",
" dy | \n",
" dpx | \n",
" dpy | \n",
"
\n",
" \n",
" \n",
" \n",
" #s | \n",
" mycell$start:1 | \n",
" marker | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" -2.259046 | \n",
" 0.000000 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.000000 | \n",
" 7.068364 | \n",
" 0.0 | \n",
" 0.100128 | \n",
" -0.0 | \n",
"
\n",
" \n",
" q1 | \n",
" q1:1 | \n",
" quadrupole | \n",
" 5.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" 2.259046 | \n",
" 0.004843 | \n",
" 34.217492 | \n",
" -0.548735 | \n",
" 0.023892 | \n",
" 7.068364 | \n",
" 0.0 | \n",
" -0.100128 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_0[0] | \n",
" drift_0:0 | \n",
" drift | \n",
" 10.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 138.907441 | \n",
" 2.068969 | \n",
" 0.010172 | \n",
" 40.655458 | \n",
" -0.738858 | \n",
" 0.045293 | \n",
" 6.567724 | \n",
" 0.0 | \n",
" -0.100128 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b1 | \n",
" b1:1 | \n",
" sbend | \n",
" 25.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 85.384548 | \n",
" 1.499138 | \n",
" 0.032163 | \n",
" 71.376768 | \n",
" -1.309229 | \n",
" 0.090204 | \n",
" 5.250686 | \n",
" 0.0 | \n",
" -0.075476 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_1[0] | \n",
" drift_1:0 | \n",
" drift | \n",
" 30.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 71.343992 | \n",
" 1.308974 | \n",
" 0.042366 | \n",
" 85.419675 | \n",
" -1.499352 | \n",
" 0.100402 | \n",
" 4.873305 | \n",
" 0.0 | \n",
" -0.075476 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b2 | \n",
" b2:1 | \n",
" sbend | \n",
" 45.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 40.628665 | \n",
" 0.738665 | \n",
" 0.087302 | \n",
" 138.955807 | \n",
" -2.069723 | \n",
" 0.122384 | \n",
" 3.926103 | \n",
" 0.0 | \n",
" -0.050817 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_2[0] | \n",
" drift_2:0 | \n",
" drift | \n",
" 50.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 34.193082 | \n",
" 0.548451 | \n",
" 0.108717 | \n",
" 160.603655 | \n",
" -2.259847 | \n",
" 0.127712 | \n",
" 3.672019 | \n",
" 0.0 | \n",
" -0.050817 | \n",
" 0.0 | \n",
"
\n",
" \n",
" q2 | \n",
" q2:1 | \n",
" quadrupole | \n",
" 55.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 34.193082 | \n",
" -0.548451 | \n",
" 0.132626 | \n",
" 160.603655 | \n",
" 2.259847 | \n",
" 0.132553 | \n",
" 3.672019 | \n",
" 0.0 | \n",
" 0.050817 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_3[0] | \n",
" drift_3:0 | \n",
" drift | \n",
" 60.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 40.628665 | \n",
" -0.738665 | \n",
" 0.154041 | \n",
" 138.955807 | \n",
" 2.069723 | \n",
" 0.137881 | \n",
" 3.926103 | \n",
" 0.0 | \n",
" 0.050817 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b3 | \n",
" b3:1 | \n",
" sbend | \n",
" 75.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 71.343992 | \n",
" -1.308974 | \n",
" 0.198978 | \n",
" 85.419675 | \n",
" 1.499352 | \n",
" 0.159863 | \n",
" 4.873305 | \n",
" 0.0 | \n",
" 0.075476 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_4[0] | \n",
" drift_4:0 | \n",
" drift | \n",
" 80.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 85.384548 | \n",
" -1.499138 | \n",
" 0.209180 | \n",
" 71.376768 | \n",
" 1.309229 | \n",
" 0.170062 | \n",
" 5.250686 | \n",
" 0.0 | \n",
" 0.075476 | \n",
" 0.0 | \n",
"
\n",
" \n",
" b4 | \n",
" b4:1 | \n",
" sbend | \n",
" 95.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 138.907441 | \n",
" -2.068969 | \n",
" 0.231171 | \n",
" 40.655458 | \n",
" 0.738858 | \n",
" 0.214973 | \n",
" 6.567724 | \n",
" 0.0 | \n",
" 0.100128 | \n",
" 0.0 | \n",
"
\n",
" \n",
" drift_5[0] | \n",
" drift_5:0 | \n",
" drift | \n",
" 100.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" -2.259046 | \n",
" 0.236501 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.236373 | \n",
" 7.068364 | \n",
" 0.0 | \n",
" 0.100128 | \n",
" 0.0 | \n",
"
\n",
" \n",
" #e | \n",
" mycell$end:1 | \n",
" marker | \n",
" 100.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 160.547514 | \n",
" -2.259046 | \n",
" 0.236501 | \n",
" 34.217492 | \n",
" 0.548735 | \n",
" 0.236373 | \n",
" 7.068364 | \n",
" 0.0 | \n",
" 0.100128 | \n",
" 0.0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" name keyword s x y px py betx \\\n",
"#s mycell$start:1 marker 0.0 0.0 0.0 0.0 0.0 160.547514 \n",
"q1 q1:1 quadrupole 5.0 0.0 0.0 0.0 0.0 160.547514 \n",
"drift_0[0] drift_0:0 drift 10.0 0.0 0.0 0.0 0.0 138.907441 \n",
"b1 b1:1 sbend 25.0 0.0 0.0 0.0 0.0 85.384548 \n",
"drift_1[0] drift_1:0 drift 30.0 0.0 0.0 0.0 0.0 71.343992 \n",
"b2 b2:1 sbend 45.0 0.0 0.0 0.0 0.0 40.628665 \n",
"drift_2[0] drift_2:0 drift 50.0 0.0 0.0 0.0 0.0 34.193082 \n",
"q2 q2:1 quadrupole 55.0 0.0 0.0 0.0 0.0 34.193082 \n",
"drift_3[0] drift_3:0 drift 60.0 0.0 0.0 0.0 0.0 40.628665 \n",
"b3 b3:1 sbend 75.0 0.0 0.0 0.0 0.0 71.343992 \n",
"drift_4[0] drift_4:0 drift 80.0 0.0 0.0 0.0 0.0 85.384548 \n",
"b4 b4:1 sbend 95.0 0.0 0.0 0.0 0.0 138.907441 \n",
"drift_5[0] drift_5:0 drift 100.0 0.0 0.0 0.0 0.0 160.547514 \n",
"#e mycell$end:1 marker 100.0 0.0 0.0 0.0 0.0 160.547514 \n",
"\n",
" alfx mux bety alfy muy dx dy \\\n",
"#s -2.259046 0.000000 34.217492 0.548735 0.000000 7.068364 0.0 \n",
"q1 2.259046 0.004843 34.217492 -0.548735 0.023892 7.068364 0.0 \n",
"drift_0[0] 2.068969 0.010172 40.655458 -0.738858 0.045293 6.567724 0.0 \n",
"b1 1.499138 0.032163 71.376768 -1.309229 0.090204 5.250686 0.0 \n",
"drift_1[0] 1.308974 0.042366 85.419675 -1.499352 0.100402 4.873305 0.0 \n",
"b2 0.738665 0.087302 138.955807 -2.069723 0.122384 3.926103 0.0 \n",
"drift_2[0] 0.548451 0.108717 160.603655 -2.259847 0.127712 3.672019 0.0 \n",
"q2 -0.548451 0.132626 160.603655 2.259847 0.132553 3.672019 0.0 \n",
"drift_3[0] -0.738665 0.154041 138.955807 2.069723 0.137881 3.926103 0.0 \n",
"b3 -1.308974 0.198978 85.419675 1.499352 0.159863 4.873305 0.0 \n",
"drift_4[0] -1.499138 0.209180 71.376768 1.309229 0.170062 5.250686 0.0 \n",
"b4 -2.068969 0.231171 40.655458 0.738858 0.214973 6.567724 0.0 \n",
"drift_5[0] -2.259046 0.236501 34.217492 0.548735 0.236373 7.068364 0.0 \n",
"#e -2.259046 0.236501 34.217492 0.548735 0.236373 7.068364 0.0 \n",
"\n",
" dpx dpy \n",
"#s 0.100128 -0.0 \n",
"q1 -0.100128 0.0 \n",
"drift_0[0] -0.100128 0.0 \n",
"b1 -0.075476 0.0 \n",
"drift_1[0] -0.075476 0.0 \n",
"b2 -0.050817 0.0 \n",
"drift_2[0] -0.050817 0.0 \n",
"q2 0.050817 0.0 \n",
"drift_3[0] 0.050817 0.0 \n",
"b3 0.075476 0.0 \n",
"drift_4[0] 0.075476 0.0 \n",
"b4 0.100128 0.0 \n",
"drift_5[0] 0.100128 0.0 \n",
"#e 0.100128 0.0 "
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"third_df=myMad.table['twiss'].dframe()\n",
"third_summary=myMad.table['summ'].dframe()\n",
"third_df[['name', 'keyword', 's', \n",
" 'x','y','px','py',\n",
" 'betx', 'alfx', 'mux', \n",
" 'bety', 'alfy', 'muy',\n",
" 'dx','dy','dpx','dpy',\n",
" ]]"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"43.516126037479175"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"43.49260436271754"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Machine tunes at 7000 GeV\n",
"display(Ncells*first_df['mux'].max())\n",
"display(Ncells*first_df['muy'].max())"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"43.51612603747918"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"43.49260436271754"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Machine tunes at 1 GeV\n",
"display(Ncells*third_df['mux'].max())\n",
"display(Ncells*third_df['muy'].max())"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" With dipoles 7 TeV | \n",
" Without dipoles 7 TeV | \n",
" With dipoles 1 TeV | \n",
"
\n",
" \n",
" \n",
" \n",
" betx | \n",
" 160.548 | \n",
" 160.604 | \n",
" 160.548 | \n",
"
\n",
" \n",
" alfx | \n",
" 2.25905 | \n",
" 2.25985 | \n",
" 2.25905 | \n",
"
\n",
" \n",
" mux | \n",
" 0.236501 | \n",
" 0.236373 | \n",
" 0.236501 | \n",
"
\n",
" \n",
" bety | \n",
" 160.604 | \n",
" 160.604 | \n",
" 160.604 | \n",
"
\n",
" \n",
" alfy | \n",
" 2.25985 | \n",
" 2.25985 | \n",
" 2.25985 | \n",
"
\n",
" \n",
" muy | \n",
" 0.236373 | \n",
" 0.236373 | \n",
" 0.236373 | \n",
"
\n",
" \n",
" dx | \n",
" 2.44493 | \n",
" 0 | \n",
" 7.06836 | \n",
"
\n",
" \n",
" dy | \n",
" 0 | \n",
" -0 | \n",
" 0 | \n",
"
\n",
" \n",
" dpx | \n",
" 0.0346341 | \n",
" -0 | \n",
" 0.100128 | \n",
"
\n",
" \n",
" dpy | \n",
" -0 | \n",
" -0 | \n",
" -0 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" With dipoles 7 TeV Without dipoles 7 TeV With dipoles 1 TeV\n",
"betx 160.548 160.604 160.548\n",
"alfx 2.25905 2.25985 2.25905\n",
"mux 0.236501 0.236373 0.236501\n",
"bety 160.604 160.604 160.604\n",
"alfy 2.25985 2.25985 2.25985\n",
"muy 0.236373 0.236373 0.236373\n",
"dx 2.44493 0 7.06836\n",
"dy 0 -0 0\n",
"dpx 0.0346341 -0 0.100128\n",
"dpy -0 -0 -0"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"aux=pd.DataFrame({'With dipoles 7 TeV':first_df.max(),'Without dipoles 7 TeV':second_df.max(),'With dipoles 1 TeV':third_df.max()})\n",
"aux.loc[['betx', 'alfx', 'mux', \n",
" 'bety', 'alfy', 'muy',\n",
" 'dx','dy','dpx','dpy',\n",
" ]]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Conclusion**: since the K1 is normalized to the beam rigidity, the beam rigidity has not impact on the beta fuctions and on the phase advance (watch out the definition of the DQ1 and all the momentum derivative quantities in MADX...)."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"2.444933737334302"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Machine dispersion at 7000 GeV\n",
"dx_7000=first_df['dx'].max()\n",
"display(dx_7000)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7.068363935508398"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Machine dispersion at 1 GeV\n",
"dx_1=third_df['dx'].max()\n",
"display(dx_1)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"7.068363935508398"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"2.444933737334302"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/plain": [
"2.4449337373338333"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Dispersion in MADX has to be divided by the relativistic beta:\n",
"import numpy as np\n",
"beta_1=np.sqrt(1-(1/myMad.globals['pmass'])**(-2))\n",
"beta_7000=np.sqrt(1-(7000/myMad.globals['pmass'])**(-2))\n",
"\n",
"#dx_7000*beta_7000=dx_1*beta_1\n",
"dx_7000_bis=dx_1*beta_1/beta_7000\n",
"display(dx_1, dx_7000, dx_7000_bis)\n",
"# Dispersion does not change with beam energy\n",
"# whatch out the importance of beta for the Dispersion!"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dq1 -0.291760\n",
"dq2 -0.291857\n",
"Name: #e, dtype: float64"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Machine chromaticity at 7000 GeV\n",
"display(first_summary.iloc[0][['dq1','dq2']])"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dq1 -0.843486\n",
"dq2 -0.843765\n",
"Name: #e, dtype: float64"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Machine chromaticity at 1 GeV\n",
"display(third_summary.iloc[0][['dq1','dq2']])"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dq1 -0.291760\n",
"dq2 -0.291857\n",
"Name: #e, dtype: float64"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# whatch out the importance of beta for the chromaticity!\n",
"display(third_summary.iloc[0][['dq1','dq2']]*beta_1/beta_7000)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Tunes and phase\n",
"Concerning the phase advance per cell to reach the (60.2, 67.2) tunes we have"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"New phase advance per cell x,y = 0.32717391304347826 0.3652173913043478\n",
"Old phase advance per cell x,y = q1 0.236501\n",
"q2 0.236373\n",
"Name: #e, dtype: float64\n"
]
}
],
"source": [
"import numpy as np\n",
"np.array([60.2, 67.2])/Ncells\n",
"Qx=60.2\n",
"Qy=67.2\n",
"phase_advance_cell_x=Qx/Ncells\n",
"phase_advance_cell_y=Qy/Ncells\n",
"print(\"New phase advance per cell x,y = \", phase_advance_cell_x, phase_advance_cell_y)\n",
"print(\"Old phase advance per cell x,y = \", first_summary.iloc[0][['q1','q2']])"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" ++++++++++++++++++++++++++++++++++++++++++++\n",
" + MAD-X 5.05.01 (64 bit, Linux) +\n",
" + Support: mad@cern.ch, http://cern.ch/mad +\n",
" + Release date: 2019.06.07 +\n",
" + Execution date: 2022.03.01 08:02:54 +\n",
" ++++++++++++++++++++++++++++++++++++++++++++\n",
"enter Twiss module\n",
" \n",
"iteration: 1 error: 0.000000E+00 deltap: 0.000000E+00\n",
"orbit: 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00\n",
"\n",
"++++++ table: summ\n",
"\n",
" length orbit5 alfa gammatr \n",
" 100 -0 0.0006051853679 40.64955451 \n",
"\n",
" q1 dq1 betxmax dxmax \n",
" 0.236500685 -0.2917600666 160.5475138 2.444933737 \n",
"\n",
" dxrms xcomax xcorms q2 \n",
" 1.953527658 0 0 0.2363728498 \n",
"\n",
" dq2 betymax dymax dyrms \n",
" -0.2918567527 160.6036546 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",
" nflips \n",
" 0 \n",
"START MATCHING\n",
"\n",
"number of sequences: 1\n",
"sequence name: mycell\n",
"number of variables: 2\n",
"user given constraints: 1\n",
"total constraints: 2\n",
"\n",
"START LMDIF:\n",
"\n",
"Initial Penalty Function = 0.24822550E+01\n",
"\n",
"\n",
"call: 4 Penalty function = 0.28221717E+00\n",
"call: 7 Penalty function = 0.62348604E-02\n",
"call: 10 Penalty function = 0.32250475E-05\n",
"call: 13 Penalty function = 0.32381179E-12\n",
" ++++++++++ LMDIF ended: converged successfully\n",
"call: 13 Penalty function = 0.32381179E-12\n",
"\n",
"MATCH SUMMARY\n",
"\n",
"Node_Name Constraint Type Target Value Final Value Penalty\n",
"--------------------------------------------------------------------------------------------------\n",
"Global constraint: q1 4 3.27173913E-01 3.27173921E-01 5.97984368E-15\n",
"Global constraint: q2 4 3.65217391E-01 3.65217448E-01 3.17831942E-13\n",
"\n",
"\n",
"Final Penalty Function = 3.23811786e-13\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"Variable Final Value Initial Value Lower Limit Upper Limit \n",
"--------------------------------------------------------------------------------\n",
"mykf 7.12477e-03 5.60000e-03 -1.00000e+20 1.00000e+20\n",
"mykd -7.52902e-03 -5.60000e-03 -1.00000e+20 1.00000e+20\n",
"\n",
"END MATCH SUMMARY\n",
"\n",
"VARIABLE \"TAR\" SET TO 3.23811786e-13\n",
"enter Twiss module\n",
" \n",
"iteration: 1 error: 0.000000E+00 deltap: 0.000000E+00\n",
"orbit: 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00\n",
"\n",
"++++++ table: summ\n",
"\n",
" length orbit5 alfa gammatr \n",
" 100 -0 0.0003712209006 51.90196375 \n",
"\n",
" q1 dq1 betxmax dxmax \n",
" 0.3271739208 -0.545243701 203.62491 1.652916159 \n",
"\n",
" dxrms xcomax xcorms q2 \n",
" 1.256555378 0 0 0.3652174477 \n",
"\n",
" dq2 betymax dymax dyrms \n",
" -0.6836315904 232.796532 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",
" nflips \n",
" 0 \n",
"table( summ q1 )*(nbend/4) = 60.20000142 ;\n",
"table( summ q2 )*(nbend/4) = 67.20001037 ;\n"
]
}
],
"source": [
"myMad = Madx()\n",
"myString='''\n",
"quadrupoleLength=5;\n",
"dipoleLength=15;\n",
"cellLength=100;\n",
"nBend=736;\n",
"phaseWantedX=60.2/(nBend/4);\n",
"phaseWantedY=67.2/(nBend/4);\n",
"\n",
"\n",
"myKF=2.8/cellLength/quadrupoleLength;// m^-2\n",
"myKD=-myKF;\n",
"\n",
"\n",
"QF: quadrupole, L=quadrupoleLength, K1:=myKF;\n",
"QD: quadrupole, L=quadrupoleLength, K1:=myKD;\n",
"BM: sbend, L=dipoleLength, angle=2*pi/nBend; \n",
"\n",
"myCell:sequence, refer=entry, L=cellLength;\n",
" q1: QF, at=0;\n",
" B1: BM, at =5+quadrupoleLength/2, from=q1;\n",
" B2: BM, at =5+dipoleLength/2, from=B1;\n",
" q2: QD, at=cellLength/2;\n",
" B3: BM, at =5+quadrupoleLength/2, from=q2;\n",
" B4: BM, at =5+dipoleLength/2, from=B3;\n",
"endsequence;\n",
"\n",
"beam, particle=proton, energy=7000;\n",
"\n",
"use, sequence=myCell;\n",
"twiss, file=\"BeforeMatching.txt\";\n",
"!plot, haxis=s, vaxis=betx,bety,dx,colour=100, title=\"BeforeMatching\";\n",
"\n",
"\n",
"MATCH, SEQUENCE=myCell;\n",
"GLOBAL, Q1=phaseWantedX;//H-tune\n",
"GLOBAL, Q2=phaseWantedY;//V-tune\n",
"VARY, NAME= myKF, STEP=0.00001;\n",
"VARY, NAME= myKD, STEP=0.00001;\n",
"LMDIF, CALLS=50, TOLERANCE=1e-6;//method adopted\n",
"ENDMATCH;\n",
"\n",
"twiss, file=\"AfterMatching.txt\";\n",
"!plot, haxis=s, vaxis=betx,bety,dx,colour=100, title=\"AfterMatching\";\n",
"\n",
"value, table(summ,Q1)*(nBend/4);\n",
"value, table(summ,Q2)*(nBend/4);\n",
"\n",
"'''\n",
"myMad.input(myString);"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"KFLL = 3.562385 which corresponds to a betax in the plot below > 200 m\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"KLL=np.linspace(.4,3.9,1000)\n",
"mu=2*np.arcsin(KLL/4)\n",
"plt.plot(KLL,(1+np.sin(mu/2))/np.sin(mu),label='$\\\\beta_{max}$', lw=3)\n",
"plt.plot(KLL,(1-np.sin(mu/2))/np.sin(mu),label='$\\\\beta_{min}$', lw=3)\n",
"plt.legend(loc='best')\n",
"plt.grid(True)\n",
"plt.grid()\n",
"plt.grid()\n",
"plt.ylabel('beta[$L_{cell}$]');\n",
"plt.xlabel('K1 $L_{cell}$ $L_{quad}$');\n",
"\n",
"# The new kf = 7.12477e-03, kd = -7.52902e-03\n",
"kf = 7.12477e-03\n",
"kd= -7.52902e-03\n",
"quadrupoleLength=5;\n",
"cellLength=100;\n",
"\n",
"KfLL=kf*cellLength*quadrupoleLength\n",
"print(\"KFLL = \", KfLL, \" which corresponds to a betax in the plot below betax > 200 m\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we increase the normalized strenght of the quadrupoles, the tune, and therefore the phase advance per cell, increases (see plot below), however, the beta function has two behaviours (see plot above): up to a value of KLcellLquad = 2.5, as the phase advance increases, the beta function decreases aas intuitivelly can be seen from equation below:\n",
"\\begin{equation}\n",
"\\mu=\\int\\frac{1}{\\beta(s)}ds\n",
"\\end{equation}\n",
"But fr"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The maximum tune for such a lattice (thin lens approximation) is "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"Ncells*.5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where we use the maximum phase advance per cell of:\n",
"phase_advance in MADX is in units of 2$\\pi$\n",
"\\begin{equation}\n",
"\\Psi_{cell} (units: 2\\pi)= 0.5 \\cdot 2\\pi=\\pi\n",
"\\end{equation}\n",
"0.5 (asymptotic value, that is 180 deg) in thin lens approximation."
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAELCAYAAADdriHjAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXwV9b3/8deHsEpYZAsQdgggIFswgq0WVAqiLbbue20t2qrVLq63u+3Pbre1t1Vxo4jaRmu1KtJitaAgIIsssggGQkLYdwhZT/L5/ZF4b5IGSELOzEnO+/l4nAeZzJw5b0eSN7N9x9wdERGRTzUJO4CIiMQWFYOIiFSiYhARkUpUDCIiUomKQUREKlExiIhIJU3DDnCqOnXq5H369KnTe48dO0br1q3rN1A9iNVcELvZlKt2lKt2GmOuFStW7HP3ztXOdPcG/UpNTfW6mjdvXp3fG02xmss9drMpV+0oV+00xlzAcj/O71UdShIRkUpUDCIiUomKQUREKlExiIhIJYEVg5nNMLM9Zrb2OPPNzP7HzDLMbI2ZjQ4qm4iI/J8g9xhmApNPMP8iIKX8NQ14PIBMIiJSRWDF4O7vAQdOsMhUYFb5lVRLgPZm1i2YdCIi8qlYOseQDGyrMJ1T/j0REaninIff4fXNRVFZt3mAD+oxsz7AbHcfVs28N4GH3X1h+fQ7wL3uvqKaZadRdriJpKSk1PT09Drlyc3NJTExsU7vjaZYzQWxm025ake5aifWcpW689W5eUzp5Vw5pG65JkyYsMLdx1Q783h3vkXjBfQB1h5n3hPANRWmNwLdTrZO3fkcrFjNply1o1y1E2u5DucXee/7Zvv9f3qrzuuggdz5/DpwY/nVSWOBw+6+M+xQIiKxJrcgAkDLKI12F9ggemb2F2A80MnMcoAfAc0A3H06MAeYAmQAecDNQWUTEWlIcgvLiqFVU4vK+gMrBne/5iTzHbg9oDgiIg3W0fI9hlYJ0Vl/LB1KEhGRGjicX3Y1Uqtm0dljUDGIiDQwOQfzAejUUsUgIiJA9v48WjRtQrsWKgYREQE27j5K/86JmKkYREQE2LDzKEO6t43a+lUMIiINyJ6jBezLLeSMbioGEREBVmYfAuDM5HZR+wwVg4hIA7Jky35aNG3CiJ4qBhERARZv3s+YPqfTommU7m5DxSAi0mDszy3k411HObtvx6h+jopBRKSBeHvDbgDOH9wlqp+jYhARaSD+uXYXPU5vxdAoXqoKKgYRkQbhSEEx72fsZ/LQrlG7se1TKgYRkQbgX+t2U1RSyuRhXaP+WSoGEZEGIH1ZNn07tSa19+lR/ywVg4hIjMvYk8uyrQe56qyeUT+MBCoGEZGY9+KybJo2MS4b3SOQz1MxiIjEsLyiCH9dkcPEIUl0btMikM9UMYiIxLAXl23jUF4xt5zbL7DPVDGIiMSo4pJSnl6QSVqfDoGcdP6UikFEJEa9tmoH2w/lc+vngttbABWDiEhMKoqU8sjbmxiW3JYJg6I7BEZVKgYRkRiUviybnIP53DNpME2aRP8S1YpUDCIiMSavKMIf/p1BWt8OnJfSKfDPVzGIiMSYx+ZtZu/RQu6bPCiQG9qqUjGIiMSQrfuO8eR7W/jSqGRSe3cIJYOKQUQkhjw0ez3NEowHLhocWgYVg4hIjHhr3S7e+XgPd12YQpe2LUPLoWIQEYkBh/OK+f7f1zK4axu+ck7fULM0DfXTRUQEgIfeXM/+Y0XM+MpZNG8a7r/ZtccgIhKyeRv38PKKHG77XD+GJbcLO06wxWBmk81so5llmNn91cxvZ2ZvmNlqM1tnZjcHmU9EJGgHjhVx/9/WkNIlkW9dkBJ2HCDAYjCzBOBR4CJgCHCNmQ2pstjtwHp3HwGMB/7bzJoHlVFEJEjuzr0vr+bgsWIeuXokLZomhB0JCHaPIQ3IcPct7l4EpANTqyzjQBsru6MjETgARALMKCISmGcXbeXtDXt4YMpghnYP/xDSp8zdg/kgs8uBye5+S/n0DcDZ7n5HhWXaAK8Dg4E2wFXu/mY165oGTANISkpKTU9Pr1Om3NxcEhMT6/TeaIrVXBC72ZSrdpSrdqKRK+tICQ8tLmBopwTuHt2iTnc4n0quCRMmrHD3MdXOdPdAXsAVwNMVpm8A/lBlmcuB3wEGDAAygbYnWm9qaqrX1bx58+r83miK1VzusZtNuWpHuWqnvnMdyC30z/7yHU/7+b98f25hnddzKrmA5X6c36tBHkrKAXpWmO4B7KiyzM3AK+W5MygrhvBu/xMRqWeRklK+lb6S3YcLmX59Kh1ax95p1CCLYRmQYmZ9y08oX03ZYaOKsoELAMwsCRgEbAkwo4hIVP167kYWfLKPhy4dyqhewT2VrTYCu8HN3SNmdgcwF0gAZrj7OjO7rXz+dOAhYKaZfUTZ4aT73H1fUBlFRKLptVXbeeK9LVw/thdXndUr7DjHFeidz+4+B5hT5XvTK3y9A/h8kJlERIKwIusg9768hrP6nM4PLxkadpwT0p3PIiJRlrnvGLc8u4xu7Voy/frU0Ie8OJnYTici0sDtzy3kK39aipkx8+Y0Oia2CDvSSakYRESiJL+ohK89u5xdhwt4+qYx9OnUOuxINaLRVUVEoqAoUsrtf/6Q1TmHePy6VEbH6BVI1dEeg4hIPSspdb790ir+/fEefnbpMCYP6xp2pFpRMYiI1KPSUuf+v63hzTU7+a8pZ3Dd2b3DjlRrKgYRkXri7vx09nr+uiKHuy9M4evn9Qs7Up2oGERE6oG78/A/Pmbmoq18/dy+3BUjz1aoC518FhE5Re7OT95Yz8xFW7lpXG8enHJGnUZLjRUqBhGRU1Ba6vzgtbW88EE2t3y2L/91ccMuBVAxiIjUWUmp88Ara3hpeQ7fGN+feycNavClACoGEZE6iZSUcs/La3h15XbuuiCFuy9MaRSlACoGEZFayy8q4Y4/f8g7H+/hnkmDuH3CgLAj1SsVg4hILRzKK+KrM5exctshfnbpMK4f2/DuUzgZFYOISA3tOJTPjTOWkr0/j8euHc1FZ3YLO1JUqBhERGrgk91HuXHGUnILIjz71TTG9e8YdqSo0Q1uIiInsWF/CZdPX0yk1Hnx1nGNuhRAxSAickIvLsvmN8sL6NKmBa984xyGdG8bdqSo06EkEZFqlJY6v/znxzzx3haGdUzgz988h7Ytm4UdKxAqBhGRKvKKItydvoq31u/m+rG9mNB2X9yUAuhQkohIJTsP53PlE4t5e8NufnjJEB6aOoyEJo3jxrWa0h6DiEi5pZkH+OYLK8gvKuHpm8Zw/uCksCOFQsUgInHP3Zm1OIuHZq+nZ4fT+MvXx5KS1CbsWKFRMYhIXCsoLuHBVz/ilQ+3c+EZXfjtVSPj6nxCdVQMIhK3th/K59bnlrN2+xHuvjCFb52fQpM4O59QHRWDiMSl9zbt5e4XV1EcKeWpG8cwcUh8nk+ojopBROJKpKSUR97+hEfnZzCwSxseu340/Tsnhh0rpqgYRCRu7D5SwJ1/WcnSzANcNaYnP/7iUFo1Twg7VsxRMYhIXHhv016+/eIq8opK+O8rRnBZao+wI8UsFYOINGqRklJ+/84n/HFeBildEnnxutEM6BK/l6LWRKB3PpvZZDPbaGYZZnb/cZYZb2arzGydmb0bZD4RaVxyDuZx7VMf8Id/Z3BFag9eu/2zKoUaCGyPwcwSgEeBiUAOsMzMXnf39RWWaQ88Bkx292wz6xJUPhFpXF5btZ3vv7oWB3575Qi+PFqHjmoqyENJaUCGu28BMLN0YCqwvsIy1wKvuHs2gLvvCTCfiDQCRwqK+cHf1/Laqh2k9j6dR64aSc8Op4Udq0EJshiSgW0VpnOAs6ssMxBoZmbzgTbA7919VjDxRKShW5p5gG+/uIpdRwr4zsSBfHN8f5omaKzQ2jJ3D+aDzK4AJrn7LeXTNwBp7n5nhWX+CIwBLgBaAYuBi919U5V1TQOmASQlJaWmp6fXKVNubi6JibF3/XKs5oLYzaZctdPYckVKndc2FzN7czGdTzOmDW/BgPb1dxlqY9teABMmTFjh7mOqnenugbyAccDcCtMPAA9UWeZ+4McVpp8BrjjRelNTU72u5s2bV+f3RlOs5nKP3WzKVTuNKdfGXUf8kv9Z4L3vm+3fe2mVHy0ojolcQTiVXMByP87v1SAPJS0DUsysL7AduJqycwoVvQb80cyaAs0pO9T0uwAzikgDESkp5akFmfzuX5tIbNmUx68bzUVndgs7VqMQWDG4e8TM7gDmAgnADHdfZ2a3lc+f7u4bzOyfwBqgFHja3dcGlVFEGoaMPbl876+rWbXtEBcN68pDlw6jU2KLsGM1GoHe4Obuc4A5Vb43vcr0r4FfB5lLRBqGklJnxsJMfv3WRk5rnsAfrhnFJcO7YaYRUeuT7nwWkQZhy95c7nl5DSuyDjJxSBI//9IwurRpGXasRknFICIxLVJSyjMLM/nd25to0TSBR64aydSR3bWXEEUqBhGJWWu3H+a+v61h3Y4jTBySxM8uHUZSW+0lRJuKQURiTn5RCb97exPPLMykQ+vmPH7daCYP66q9hICctBjMrEMN1lPq7ofqIY+IxLmFn+zjwVc/IvtAHtek9eT+i86gXav4fgZz0Gqyx7Cj/HWiqk4AetVLIhGJSwePFfHUmkLe/+cH9O3UmvRpYxnbr2PYseJSTYphg7uPOtECZraynvKISJxxd15btYOHZq/nUF6E2yf0587zU2jZTE9WC0tNimEcgJklunvuiZYREamNjD1H+cHf17F4y35G9GzP3SMTuGHS4LBjxb2TDjvo7gXlX640syHlw1UAYGYDqywjInJSeUURfvGPj7no9wtYt+MwP7t0GK984xx6ttFIqLGgNlcldaDsQTuDzWwfsAEYDQyIRjARaXzcnbfW7+anb6xn+6F8Lk/twf0XDdZwFjGmNsWQ7e4TAMysB3AGkB+VVCLS6GTvz+NHr69l3sa9DEpqw19vG8dZfWpy0aMErTbF0M7MzgHWuXsOZQ/aERE5oYLiEp54dwuPzc+gaRPj+xefwU3n9KGZHqATs2pTDInA94ChZtaCskNJa939nqgkE5EGzd15Z8Mefvbmerbuz+Pi4d34wcVD6NpOdy7HutoUwzh33wxgZi2BIcDQqKQSkQYtY89RfvLGehZ8so/+nVvz3NfSODelc9ixpIZqXAyflkL51wXAh+UvEREADucV88g7m5i1OIvTmifww0uGcMO43jps1MDUZEiMD9199KkuIyKNV0mpk74sm/9+axMH84q4Jq0X3504kI662qhBqskewxlmtuYE8w1oV095RKSB+WDLfn78xno27DxCWt8O/OgLQxjaXb8SGrKaFENNbkMsOdUgItKw5BzM4+F/fMyba3aS3L4Vj147milnagTUxuCkxeDuWUEEEZGG4WhBMY/P38wzCzMxg29fOJBp5/WjVXONbdRY6HkMIlIjxSWlpC/N5pG3P2H/sSK+NCqZ700aRHL7VmFHk3qmYhCRE3J33t6wh4f/sYEte49xdt8OzLx4CGf20HmExqrGxWBmHwFrKrw+Am5y959HKZuIhGxNziF+/uYGPsg8QL/OrXn6xjFccEYXnUdo5Gqzx/A5YHj562rgL8B6QMUg0sjkHMzjN3M38vdVO+jQujkPTR3K1Wm9dD9CnKjNDW4HgPnlL8wsBfh+VFKJSCiOFBTz2LzNzHg/EwO+Ob4/t43vT9uWerRmPKnNoaQUd//k02l3/8TMhkcnlogEqaC4hOeXZPHovAwO5hXz5VHJfFcnluNWbQ4lPWlm/YHtlJ1jaAmsNbPT3D0vKulEJKoiJaW8snI7j/xrEzsOF3BuSifunTRYJ5bjXG0OJX36LIZewEhgRPmfq82sxN31PD6RBsLd+efaXfzmrY1k7MllRI92/PqKEXxmQKewo0kMqPXlqu6eDWQDr3/6PTNLrM9QIhI9izfv56ElBWw5vIJ+nVvz+HWjmTxMdyzL/6mX+xjcPbc+1iMi0bN2+2F+NXcj723ay+ktjF9ediaXje5BU11pJFXoBjeRRm7rvmP85q2NzF6zk3atmvHglMH0Kc7m82f1CjuaxCgVg0gjteNQPn+cl8FLy7bRLKEJd0wYwNfP60e7Vs2YP39b2PEkhgVaDGY2Gfg9kAA87e6/OM5yZwFLgKvc/eUAI4o0eHuOFPDovAz+snQbjnNNWi/uvGAAXdrokZpSM4EVg5klAI8CE4EcYJmZve7u66tZ7pfA3KCyiTQG+3ILmT5/M88tySJS6lyR2oM7zh9Aj9NPCzuaNDBB7jGkARnuvgXAzNKBqZQNq1HRncDfgLMCzCbSYB08VsSTC7bw7KKtFBSXcOmoZO66IIXeHVuHHU0aKHP3YD7I7HJgsrvfUj59A3C2u99RYZlk4M/A+cAzwOzqDiWZ2TRgGkBSUlJqenp6nTLl5uaSmBh7V9rGai6I3WzxmOtYsfPW1mLmbi2msATSuiYwdUBzuiee/CqjeNxep6Ix5powYcIKdx9T3bwg9xiqu0i6ais9Atzn7iUnuqba3Z8EngQYM2aMjx8/vk6B5s+fT13fG02xmgtiN1s85cotjDDz/UyefH8LRwoiTB7alW9PHMigrm1CzVUflKt2opUryGLIAXpWmO4B7KiyzBggvbwUOgFTzCzi7n8PJqJI7MovKmHW4q1Mf3czB/OKufCMLtx94UCGJWv4CqlfQRbDMiDFzPpSNt7S1cC1FRdw976ffm1mMyk7lKRSkLiWVxTh+SVZPPneFvblFnHewM58Z+JARvZsH3Y0aaQCKwZ3j5jZHZRdbZQAzHD3dWZ2W/n86UFlEWkIcgsjzFq8lacXZHLgWBHnpnTirgtSGNOnQ9jRpJEL9D4Gd58DzKnyvWoLwd2/EkQmkVhzpKCYZ9/fyjPvZ3Ior5jxgzpz5/kppPY+PexoEid057NIjDicV8yfFmUyY2EmRwoiXDC4C9+6IIUROmQkAVMxiITs4LEiZryfycz3t3K0MMLnhyTxrQtSdFJZQqNiEAnJ/txCnl6YyaxFWzlWVMKUM7tyx4QUhnRvG3Y0iXMqBpGA7T1ayFMLtvDc4iwKIiVcMrw7d0wYUKv7EESiScUgEpDth/J56r0tpC/LpihSytSRydw+oT8DuqgQJLaoGESibPPeXKbP38yrK7cDcOmoZL45vj/9OsfeEAsioGIQiZq12w/zx5UFrJj7Li2aNuH6sb35+nn9SG7fKuxoIiekYhCpZ0szD/DovAze3bSXVk3hm+P7c/Nn+tIpsUXY0URqRMUgUg/cnfkb9/LovAyWZx2kY+vm3Dt5EH2KtzFl4uCw44nUiopB5BSUlDpzPtrJY/M3s2HnEbq3a8lPvjiUK8f0pFXzBObPzwk7okitqRhE6qAoUsqrK3OY/u4WMvcdo1/n1vz68uFMHZlM86Ynfx6CSCxTMYjUwrHCCOnLtvH0gi3sPFzAsOS2PH7daD4/tCsJTY7/DBGRhkTFIFID+3ILeXbRVmYtzuJwfjFpfTvwi8uGc15KJ070UCmRhkjFIHICmfuO8dSCLby8IofiklI+PySJaef110in0qipGESqsTL7IE++t4V/rttFs4QmXDa6B18/t69uSpO4oGIQKVda6szftIfp725haeYB2rZsyjfH9+emc/rQpU3LsOOJBEbFIHGvKFLK66t38OR7m9m0O5fu7Vryg0uGcNVZPUlsoR8RiT/6Wy9x62hBMelLt/HMwkx2HSlgcNc2/O6qEVwyvDvNEnTJqcQvFYPEnT1HCvjToq08vySLowURzunfkV9eriuMRD6lYpC4kbEnl6fe28KrK7cTKS3lojO7cet5/RjeQ4/OFKlIxSCNmruzePN+nlqwhXkb99KyWROuTuvJLZ/tR6+Op4UdTyQmqRikUSqKlPLG6h08vTCTDTuP0CmxOd+ZOJDrzu5FR41yKnJCKgZpVA7lFfHCB9k8u2gre44WMjApkV9dNpwvjuxOy2YJYccTaRBUDNIo7DpWyg/+vpaXV+SQX1zCuSmd+M0VIzhXJ5RFak3FIA2Wu7M08wBPL8zk7fX5NEvYxqWjuvO1z/ZjUFc9R1mkrlQM0uAUl5Qy56OdPLMwkzU5hzn9tGZ8oX8zvn/1ebpDWaQeqBikwTicX0z60mxmLtrKzsMF9Ovcmp9/aRhfHtWDDxYtUCmI1BMVg8S8bQfyeGZhJi8t30ZeUQnj+nXkZ5cOY8KgLjTRMxBE6p2KQWKSu7Mi6yDPLMxk7rpdNDHjiyO689XP9mVYcruw44k0aioGiSlFkVJmr9nBn97fykfbD9O2ZVNu/Vx/bhrXh67tdKhIJAiBFoOZTQZ+DyQAT7v7L6rMvw64r3wyF/iGu68OMqOEY19uIS8syeb5D7LYe7SQ/p1b89Clw7hsdDKnNde/X0SCFNhPnJklAI8CE4EcYJmZve7u6ysslgl8zt0PmtlFwJPA2UFllOCt3X6YP72/lTdW76CopJTPDezMzZf34byUzjp/IBKSIP8plgZkuPsWADNLB6YC/1sM7r6owvJLgB4B5pOAlJQ6/1q/ixnvb2Vp5gFaNUvgqrN6ctM5fRjQRU9IEwlbkMWQDGyrMJ3DifcGvgb8I6qJJFCH84t5adk2nl28lZyD+SS3b8V/TTmDK8/qSbtWzcKOJyLlzN2D+SCzK4BJ7n5L+fQNQJq731nNshOAx4DPuvv+auZPA6YBJCUlpaanp9cpU25uLomJsfcv1FjNBXXLtjO3lH9lF/P+9giFJTDo9CZM7N2MUV0SSKinw0Wxus2Uq3aUq3ZOJdeECRNWuPuYame6eyAvYBwwt8L0A8AD1Sw3HNgMDKzJelNTU72u5s2bV+f3RlOs5nKvebbS0lKfv3GP3zTjA+9932xPeXCOf+fFVf5RzqFQcwVNuWpHuWrnVHIBy/04v1eDPJS0DEgxs77AduBq4NqKC5hZL+AV4AZ33xRgNqkneUURXvlwO396P5PNe4/RKbEF375wINee3YvObTTctUhDEFgxuHvEzO4A5lJ2ueoMd19nZreVz58O/BDoCDxWPiJmxI+3qyMxZfuhfGYt2spflmZzpCDCmcnt+O2VI7h4eDdaNNVw1yINSaAXiLv7HGBOle9Nr/D1LcAtQWaSunN3lm09yMxFmcxdtxt3Z/Kwrnz1M31J7X26hrsWaaB055DUWn5RCa+t2s6zi7PYsPMIbVs25ZZz+3LjuD4kt28VdjwROUUqBqmxbQfySP+4iLvefYfD+cUM7tqGX3z5TKaOTKZVcx0uEmksVAxyQu7Owox9PLsoi3c+3o0Bk4d15aZxfUjr20GHi0QaIRWDVCu3MMLfVuQwa/FWNu89RsfWzbl9/AD6+Xa+PDk17HgiEkUqBqlk895cnlucxcsrcsgtjDCiR+Wri+bP3xl2RBGJMhWDUFLqzN+4h5mLtrLgk300SzAuGd6dm87pw8ie7cOOJyIBUzHEscN5xby0fBvPLcki+0AeSW1b8N2JA7k6TTejicQzFUMc2rDzCLMWb+XVldspKC4lrU8H7ps8mM8PTaJZQpOw44lIyFQMcSJSUspb63czc1HZUNctmzXh0pHJ3DiuD0O6tw07nojEEBVDI7cvt5D0pdm88EE2Ow8X0OP0Vjxw0WCuOqsn7U9rHnY8EYlBKoZGavW2Qzy7aCuz1+ykqKSUc1M68dOpwzh/cJd6G+paRBonFUMjUlBcwpyPdjJrcRarth2idfMErk7ryY3j9GQ0Eak5FUMjsO1AHi98kM1Ly7dx4FgR/Tq15sdfGMJlqT1o01JPRhOR2lExNFClpc67n+zl+cVZ/HvjHgyYOCSJG8f14Zz+HTVUhYjUmYqhgTl4rIi/rtjG80uyyT6QR6fEFtwxYQDXpPWiu0Y2FZF6oGJoIFZvO8RzS7J4Y/UOCiNl9x7cM2kQk4Z2pXlT3XsgIvVHxRDDCopLeGP1Dp5fksXqnMOc1jyBy1N7cMO43gzuqnsPRCQ6VAwxaE9eKf9vzgZeWr6NQ3nFDOiSyE+nDuVLo5J1MllEok7FECM+HcjuuSVZvLsxnyZNMpk0NIkbxvZhbD8990BEgqNiCNn+3EJeWp7DCx9kkXMwny5tWjB1QDMeuPI8ktq2DDueiMQhFUMI3J2V2w7x/OKs/70zeVy/jjw45QwmDkni/QXvqRREJDQqhgDlF5Xw+urtzFqcxbodR0hs0ZRr0npy/djepCS1CTueiAigYghE5r5jPL8ki78u38aRggiDktrws0uHcemoZBJb6H+BiMQW/VaKkpJS550Nu3luSRYLPtlH0ybG5GFduXFcH87qc7pOJotIzFIx1LO9Rwt5afk2/vxBNtsP5dOtXUu+O3EgV6X1pEsbnTcQkdinYqgH7s6KrIM8tySLOR/tpLjE+cyAjvzgkiFceEYXmuqpaCLSgKgYTsGxwgivrdrBc0uy2LDzCG1aNuX6sb257uzeGuZaRBosFUMdZOzJ5fklWfxtRQ5HCyOc0a0tD3/5TKaO7M5pzbVJRaRh02+xGoqUlPL2ht3MWpzFos37aZ7QhClnduWGcb0Z3Usnk0Wk8VAxnMSeIwWkLys7mbzrSAHJ7Vtxz6RBXHVWTzoltgg7nohIvVMxVMPdWZp5gOeWZPHPtbuIlDrnDezMQ5fqmcki0vgFWgxmNhn4PZAAPO3uv6gy38rnTwHygK+4+4dB5cstjPDqyu08vziLjbuP0rZlU75yTh+uG9ubvp1aBxVDRCRUgRWDmSUAjwITgRxgmZm97u7rKyx2EZBS/jobeLz8z6jatPsozy/J4pUPt5NbGGFYclt+ddlwvjCiO62aJ0T740VEYkqQewxpQIa7bwEws3RgKlCxGKYCs9zdgSVm1t7Murn7zvoOU1xSytJdEaY/uZglWw7QvGkTLhnejRvG9mZkz/Y6mSwicSvIYkgGtlWYzuE/9waqWyYZqPdieOXDHB5bVUiP05tw/0WDuXJMTzq0bl7fHyMi0uBY2T/OA/ggsyuASe5+S/n0DUCau99ZYZk3gYfdfWH59DvAve6+osq6pgHTAJKSklLT09Nrnacg4qzacYy0nq1pElzMs2UAAAcnSURBVGN7B7m5uSQmxuYNcrGaTblqR7lqpzHmmjBhwgp3H1PtTHcP5AWMA+ZWmH4AeKDKMk8A11SY3gh0O9F6U1NTva7mzZtX5/dGU6zmco/dbMpVO8pVO40xF7Dcj/N7NchBfJYBKWbW18yaA1cDr1dZ5nXgRiszFjjsUTi/ICIixxfYOQZ3j5jZHcBcyi5XneHu68zstvL504E5lF2qmkHZ5ao3B5VPRETKBHofg7vPoeyXf8XvTa/wtQO3B5lJREQq03jQIiJSiYpBREQqUTGIiEglKgYREakksBvcosXM9gJZdXx7J2BfPcapL7GaC2I3m3LVjnLVTmPM1dvdO1c3o8EXw6kws+V+vDv/QhSruSB2sylX7ShX7cRbLh1KEhGRSlQMIiJSSbwXw5NhBziOWM0FsZtNuWpHuWonrnLF9TkGERH5T/G+xyAiIlWoGEREpJK4KAYzm2xmG80sw8zur2a+mdn/lM9fY2ajYyTXeDM7bGaryl8/DCjXDDPbY2ZrjzM/rO11slyBby8z62lm88xsg5mtM7O7qlkm8O1Vw1xhbK+WZrbUzFaX5/pJNcuEsb1qkiuUn8fyz04ws5VmNruaefW/vY73oIbG8qJsiO/NQD+gObAaGFJlmSnAPwADxgIfxEiu8cDsELbZecBoYO1x5ge+vWqYK/DtBXQDRpd/3QbYFCN/v2qSK4ztZUBi+dfNgA+AsTGwvWqSK5Sfx/LP/g7w5+o+PxrbKx72GNKADHff4u5FQDowtcoyU4FZXmYJ0N7MusVArlC4+3vAgRMsEsb2qkmuwLn7Tnf/sPzro8AGyp5TXlHg26uGuQJXvg1yyyeblb+qXgETxvaqSa5QmFkP4GLg6eMsUu/bKx6KIRnYVmE6h//8AanJMmHkAhhXvnv7DzMbGuVMNRXG9qqp0LaXmfUBRlH2r82KQt1eJ8gFIWyv8sMiq4A9wL/cPSa2Vw1yQTh/vx4B7gVKjzO/3rdXPBSDVfO9qv8SqMky9a0mn/khZeOZjAD+APw9yplqKoztVROhbS8zSwT+Btzt7keqzq7mLYFsr5PkCmV7uXuJu48EegBpZjasyiKhbK8a5Ap8e5nZJcAed19xosWq+d4pba94KIYcoGeF6R7AjjosE3gudz/y6e6tlz39rpmZdYpyrpoIY3udVFjby8yaUfbL9wV3f6WaRULZXifLFfbfL3c/BMwHJleZFerfr+PlCml7fQb4opltpexw8/lm9nyVZep9e8VDMSwDUsysr5k1B64GXq+yzOvAjeVn98cCh919Z9i5zKyrmVn512mU/f/aH+VcNRHG9jqpMLZX+ec9A2xw998eZ7HAt1dNcoW0vTqbWfvyr1sBFwIfV1ksjO110lxhbC93f8Dde7h7H8p+R/zb3a+vsli9b69An/kcBnePmNkdwFzKrgSa4e7rzOy28vnTKXsO9RQgA8gDbo6RXJcD3zCzCJAPXO3llyFEk5n9hbIrMDqZWQ7wI8pOxoW2vWqYK4zt9RngBuCj8uPTAA8CvSrkCmN71SRXGNurG/CsmSVQ9ov1JXefHfbPYw1zhfLzWJ1oby8NiSEiIpXEw6EkERGpBRWDiIhUomIQEZFKVAwiIlKJikFERCpRMYiISCUqBokLZpZb4espZvaJmfWykwzlXeE9t5rZo/Wcqd7XKVIfVAwSV8zsAsrGuZns7tnATP5zSIbqDAc+quc40VinyClTMUjcMLNzgaeAi919M9RqKO8zqf9f4tFYp8gpa/RDYoiUawG8Box396pj89TEMOCEh5tiZJ0ip0x7DBIvioFFwNdq+0Yz6wkcdffDtXzfzIp/1sc6T/J5k8zshvpan8Qv7TFIvCgFrgTeNrMH3f3/1eK9/3EuwMyaAr+ibNz7LOBx4CfAaZQ9qvV7wDEzOw04VsN1Ngd+C+QCnwO+CHQFJrn7b8zssfL13gN0AA4BPy9/zxHgbOD2Wvx3iVRLxSBxw93zyh98ssDMdrv7MzV8a3XnAr4BvObu7wKY2e1AK8p+Wfej7NnUH1b4sybrnAbMdPflZvaGu+81s4soex44lJXO6ZSNKHuIsuf7fgN41t2XmdlCYGMN/5tEjkvFIHHF3Q+Y2WTgPTPbR9kY9+OpMJR3NYVxJjDZzK4pn95J2Vj9j1dYZhRwu7sXApjZt4F3gAvK/6yqunVuBJ4ys7bA7grLzS3/ngMPAXcBnSl7OMso4AkzawPsC2sYaGlcNOy2SB2Y2VTKDvUcAB6m7PkH11L27N1/UzZ2/63AE8Ct7l5Sg3VeQ9lD3w8AOe7+KzP7GjAYiFC2lxAB2gIdKSuSfcAkysbhz3X3e+vxP1PilIpBJMaY2bXALnf/d9hZJD6pGEREpBJdrioiIpWoGEREpBIVg4iIVKJiEBGRSlQMIiJSiYpBREQqUTGIiEglKgYREalExSAiIpX8f75gSlaBlHYDAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# If we use the plot:\n",
"KLL=np.linspace(0,4,1000)\n",
"mu=2*np.arcsin(KLL/4)\n",
"plt.plot(KLL,mu/np.pi)\n",
"plt.grid()\n",
"plt.ylabel('$\\mu$ [$\\pi$]');\n",
"plt.xlabel('K1 $L_{cell}$ $L_{quad}$');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The phase advance is in units of $\\pi$, so the phase advance is 1 (in this plot)"
]
},
{
"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": 4
}