<jupyter_start><jupyter_text>Aufgaben- Impotiere Daten des Wellenfrontfehlers für das 0 und 10 Grad Feld- Image Demo Beispiel anschauen- Bilder des Wellenfrontfehlers darstellen und Speichern- Reihenentwicklung als Funktion definieren, Querschnitte darstellen und mit Daten vergleichen  Inhalt 1. [Einleitung](Einleitung) 2. [Öffnen der .txt Dateien](open_files) 3. [Darstellung des Wellenfrontfehlers](image) 4. [Reihenentwicklung](wavefrontexpansion)  1. Einleitung Im Folgenden sollen die aufgenommenen Wellenfrontfehler, die im .txt Format gespeichtert wurden, in dieses jupyter-notebook geladen und anschließend als Abbildung gespeichert werden. Um mit den Daten zu arbeiten, wird die Progammiersprache [python](https://www.python.org/) verwendet. Für die Darstellung benutzen wir die Bibliothek Matplotlib. Numpy ist eine Bibliothek, die Operationen mit multi-dimensionalen arrays, sowie Matrizen erlaubt.- wichtige Bibliotheken für python:     - [Numpy](https://www.numpy.org/)    - [Scipy](https://www.scipy.org/)    - [Matplotlib](https://matplotlib.org/)  2. Öffnen der .txt Dateien  - txt Datein des Wellenfrontfehlers sollten im ascii Format gespeichert sein- zum Laden der Daten in ein numpy array benutzten wir die ```loadtxt``` Funktion aus der numpy Bibliothek- die numpy Bibliothek wird über `import numpy as np` importiert- für Kommandos auf dem Betriebssystem verwenden wir das [os-module](https://docs.python.org/2/library/os.html)<jupyter_code>import numpy as np # import statement
import os # os module
cwd = os.getcwd() ## get the current working directory
zero_deg_array = np.loadtxt(os.path.join(cwd,
                                         'textfiles', 
                                         'wavefront_0_deg_ascii.txt')) # loadtxt funtion, with path to the txt file 

zero_deg_array # wavefront error for the zero degree field<jupyter_output><empty_output><jupyter_text>3.  Darstellung des Wellenfrontfehlers  Der Werte des Wellenfrontfehlers sind nun unter der Variablen `zero_deg_array` aufrufbar. Mithilfe des unten angebenen Beispiels, kann nun ein Bild erzeugt werden. Ersetze dazu die Variable `Z` mit `zero_deg_array` in `ax.imshow`.<jupyter_code>figure_folder = "pictures" # folder path for picture
figure_filename = "example.png" # !change figure file name for your wavefront map!<jupyter_output><empty_output><jupyter_text>Example: [Image Demo](https://matplotlib.org/gallery/images_contours_and_fields/image_demo.html)- Note: Use `%matplotlib inline first<jupyter_code>%matplotlib inline
import numpy as np
import matplotlib.cm as cm
import matplotlib.pyplot as plt

delta = 0.025
x = y = np.linspace(1.0, -1.0, zero_deg_array.shape[0]) # x and y coordinates
X, Y = np.meshgrid(x, y) # 
Z1 = np.exp(-X**2 - Y**2) # Gaussian dummy function 1
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) # Gaussian dummy function 2
Z = (Z1 - Z2) * 2 # final function to show 

fig, ax = plt.subplots()
im = ax.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn,
               origin='lower', extent=[-1, 1, -1, 1])
plt.colorbar(im, label=r'$W(x_p, y_p)$')
plt.xlabel(r'$x_p$')
plt.ylabel(r'$y_p$')
plt.savefig(os.path.join(cwd, figure_folder, figure_filename), 
            format='png') # savefig saves the image in the pictures folder

plt.show()
print("Figure saved in {0:20s}".format(os.path.join(cwd, figure_folder, figure_filename)))<jupyter_output><empty_output><jupyter_text>4. Reihenentwicklung<jupyter_code>def wavefront_on_axis(w000, w020, w040, pupil_sampling=128):
    """
    wavefront expansion for the on axis field
    
    Parameters
    ----------
    w000 : float
        Piston
    w020 : float
        Focus
    w040 : float
        spherical Aberration
    pupil_sampling : int
        grid size of the sampled pupil 
    
    Returns
    -------
    wavefront error for the on axis field, up to 4th order
    """
    x = np.linspace(1, -1, pupil_sampling)
    y = np.linspace(1, -1, pupil_sampling)
    X, Y = np.meshgrid(x, y)
    
    return w000 + w020 * (X**2 + Y**2) + w040 * (X**2 + Y**2)**2
    
    
# w_0 = wavefront_on_axis()
%matplotlib inline
print("cross section at y={0:2.2f}".format(y[ w_0.shape[0]//2]))
#plt.figure()
#plt.plot(x, w_0[:, w_0.shape[0]//2])
#plt.plot(x, zero_deg_array[:, w_0.shape[0]//2], '--', label='Zemax Data')
#plt.xlabel('$x_p$')
#plt.ylabel('$W_0$ in $\lambda$')
#plt.legend(loc=0)
#plt.show()
# cross section at position x, y=..
#sclice = 30
#print("cross section at y={0:2.2f}".format(y[ w_0.shape[0]//2 + sclice]))
#plt.figure()
#plt.plot(x, w_0[:, w_0.shape[0]//2 + sclice])
#plt.plot(x, zero_deg_array[:, w_0.shape[0]//2 + sclice], '--', label='Zemax Data')
#plt.legend(loc=0)
#plt.xlabel('$x_p$')
#plt.ylabel('$W_0$ in $\lambda$')
#plt.show()
def wavefront_pupil_edge(w000, w111, w020, w040, w131, w222, w311, w220, pupil_sampling=128):
    """
    wavefront expansion at the edge of the pupil
    
    Parameters
    ----------
    w000 : float
        Piston
    w111 : float
        Tilt
    w020 : float
        Focus
    w040 : float
        spherical Aberration
    w131 : float
        Coma
    w222 : float
        Astigmatismus
    w311 : float
        Distortion
    w220 : float
        Field Curvature
    pupil_sampling :int
    
    
    Returns
    -------
    wavefront error for the pupil edge, up to 4th order
    
    """
    x = np.linspace(1, -1, pupil_sampling)
    y = np.linspace(1, -1, pupil_sampling)
    X, Y = np.meshgrid(x, y)
    
    return 
    
# w_10 = wavefront_pupil_edge()
ten_deg_array = np.loadtxt(os.path.join(cwd, 'textfiles', 
                                        'wavefront_10_deg_ascii.txt')) # loadtxt funtion, with path to the txt file<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12541659358007368, 'fraction_numerical': 0.03069636905805999, 'mean_word_length': 3.389530408006159, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 6, 'lorem ipsum': 0, 'www.': 3, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 5, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '520413', 'license': 'MIT', 'n_tokens_mistral': 2160, 'n_tokens_neox': 2055, 'n_words': 542, 'path': 'notebooks/WavefrontMap.ipynb', 'repo_name': 'malygos333/jupyter_notebooks', 'size': '5701'}