Create a sequence

In this example, we will show how to create a simple sequence using the module sequence and how to display it using the vis module.

Fist, we import the necessary module:

 %matplotlib inline
 import matplotlib.pyplot as plt
 import georges_core
 from georges_core.units import ureg as _ureg
 from georges_core.sequences import Element
 from georges_core.sequences import PlacementSequence
 from georges_core.vis import MatplotlibArtist, PlotlyArtist

Then, we define the elements of our line:

 aper1 = 5 *_ureg.cm
 aper2 = 3.5 * _ureg.cm
 d1 = Element.Drift(NAME="D1",
                        L=0.3* _ureg.m,
                        APERTYPE="RECTANGULAR",
                        APERTURE=[aper1, aper2])

 qf = Element.Quadrupole(NAME="Q1",
                                 L=0.3*_ureg.m,
                                 K1=2*_ureg.m**-2,
                                 APERTYPE="RECTANGULAR",
                                 APERTURE=[aper1, aper2])

 d2 = Element.Drift(NAME="D2",
                            L=0.3*_ureg.m,
                            APERTYPE="CIRCULAR",
                            APERTURE=[aper1, aper1])

 b1 = Element.SBend(NAME="B1",
                            L=1*_ureg.m,
                            ANGLE=30*_ureg.degrees,
                            K1=0*_ureg.m**-2,
                            APERTYPE="CIRCULAR",
                            APERTURE=[aper1, aper1])

 d3 = Element.Drift(NAME="D3",
                            L=0.3*_ureg.m,
                            APERTYPE="CIRCULAR",
                            APERTURE=[aper1, aper1])

 qd = Element.Quadrupole(NAME="Q2",
                                 L=0.3*_ureg.m,
                                 K1=-2*_ureg.m**-2,
                                 APERTYPE="RECTANGULAR",
                                 APERTURE=[aper1, aper2])

 d4 = Element.Drift(NAME="D4",
                            L=0.3*_ureg.m,
                            APERTYPE="CIRCULAR",
                            APERTURE=[aper1, aper1])

 b2 = Element.SBend(NAME="B2",
                            L=1*_ureg.m,
                            ANGLE=-30*_ureg.degrees,
                            K1=0*_ureg.m**-2,
                            APERTYPE="RECTANGULAR",
                            APERTURE=[aper1, aper2])

 d5 = Element.Drift(NAME="D5",
                            L=0.3*_ureg.m,
                            APERTYPE="CIRCULAR",
                            APERTURE=[aper1, aper1])

Finally, we place the elements in a sequence.

sequence = PlacementSequence(name="Sequence")

sequence.place(d1,at_entry=0*_ureg.m)
sequence.place_after_last(qf)
sequence.place_after_last(d2)
sequence.place_after_last(b1)
sequence.place_after_last(d3)
sequence.place_after_last(qd)
sequence.place_after_last(d4)
sequence.place_after_last(b2)
sequence.place_after_last(d5);

Of course, we can visualize the sequence with matplotlib or plotly.

fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, sharex=True, figsize=(15,8))

artist = MatplotlibArtist(ax1)
artist.plot_beamline(sequence.df, plane='X')
artist.plot_cartouche(sequence.df)

artist = MatplotlibArtist(ax2)
artist.plot_beamline(sequence.df, plane='Y')
artist.plot_cartouche(sequence.df)
../_images/sequence_3_0.png
artist = PlotlyArtist()
artist.plot_cartouche(sequence.df)
artist.render()