diff --git a/Messmethoden_U6/ctd-pycnv-starter.ipynb b/Messmethoden_U6/ctd-pycnv-starter.ipynb
new file mode 100644
index 0000000000000000000000000000000000000000..f351b9a74e3bfa362e07e32297b92161173e33bc
--- /dev/null
+++ b/Messmethoden_U6/ctd-pycnv-starter.ipynb
@@ -0,0 +1,205 @@
+{
+ "cells": [
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Importing the required module for plotting data\n",
+ "import gsw # See https://teos-10.github.io/GSW-Python/\n",
+ "import pycnv # See https://pypi.org/project/pycnv/\n",
+ "import pylab as pl\n",
+ "\n",
+ "# Defining the file path where the CNV file is located\n",
+ "# Choose either Seepraktikum 2023 data: https://bit.ly/3ut6NtV\n",
+ "file_path = 'Seepraktikum_2023/SBE19plus_01907321_2023_05_12_Cast36_loop_window.cnv'\n",
+ "# Or MSM121 data: https://bit.ly/3Ri19E2\n",
+ "file_path = 'msm121_profiles/MSM121_015_1db.cnv'\n",
+ "# Or MSM121 to-yo profiles: https://bit.ly/3GlQh1D\n",
+ "# file_path = 'MSM121_060/MSM121_060_001_05db.cnv'\n",
+ "\n",
+ "# Load the data from the given file_path (may need to update to match your file location)\n",
+ "cnv = pycnv.pycnv(file_path)\n",
+ "\n",
+ "# Print some info to the screen\n",
+ "print('Test if we are in the Baltic Sea (usage of different equation of state): ' + str(cnv.baltic))\n",
+ "print('Position of cast is: Longitude:', cnv.lon,'Latitude:',cnv.lat)\n",
+ "print('Time of cast was:', cnv.date)\n",
+ "print('Number of sensor entries (len(cnv.data.keys())):',len(cnv.data.keys()))\n",
+ "print('Names of sensor entries (cnv.data.keys()):',cnv.data.keys())\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Get data of entry\n",
+ "key0 = list(cnv.data.keys())[0]\n",
+ "data0 = cnv.data[key0]\n",
+ "\n",
+ "# Get derived data:\n",
+ "keyd0 = list(cnv.cdata.keys())[0]\n",
+ "datad0 = cnv.cdata[keyd0]\n",
+ "# Get unit of derived data\n",
+ "datad0_unit = cnv.cunits[keyd0]\n",
+ "\n",
+ "# Standard names are mapped to\n",
+ "# cnv.p,cnv.CT,cnv.T,cnv.SP,cnv.oxy\n",
+ "# units are _unit, e.g. cnv.p_unit\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Plot standard parameters\n",
+ "pl.figure(1)\n",
+ "pl.clf()\n",
+ "pl.subplot(1,2,1)\n",
+ "pl.plot(cnv.SA,cnv.p) # Note that pycnv has done the TEOS-10 conversion to SA for you using gsw\n",
+ "pl.xlabel('Absolute salinity [' + cnv.SA_unit + ']')\n",
+ "pl.ylabel('Pressure [' + cnv.p_unit + ']')\n",
+ "pl.gca().invert_yaxis() # Question: What happens if you comment out this line?\n",
+ "\n",
+ "\n",
+ "# Step 1a: Add grid lines\n",
+ "\n",
+ "# Step 1b: Limit the top of the plot to the surface (p=0)\n",
+ "\n",
+ "# Step 1c: Add a second plot for temperature, to the right of the salinity plot\n",
+ "\n",
+ "# Step 1d: Add a title to your figure, perhaps the station number, latitude and longitude\n",
+ "\n",
+ "# Step 1e: Print the figure to a *png file "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Plotting profile data on the same axes\n",
+ "pl.subplot(1,2,2)\n",
+ "pl.plot(cnv.oxy,cnv.p)\n",
+ "pl.plot(cnv.cdata['oxy0'],cnv.p)\n",
+ "pl.plot(cnv.cdata['oxy1'],cnv.p)\n",
+ "pl.xlabel('Oxygen [' + cnv.oxy_unit + ']')\n",
+ "pl.ylabel('Pressure [' + cnv.p_unit + ']')\n",
+ "pl.gca().invert_yaxis()\n",
+ "\n",
+ "# Step 2a-e: Clean up the figure as above\n",
+ "\n",
+ "# Step 2f (optional): Compute the apparent oxygen utilisation \n",
+ "# See: https://en.wikipedia.org/wiki/Apparent_oxygen_utilisation\n",
+ "# you will need to calculate oxygen solubility (see the gsw documentation for O2_sol)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Make a T-S diagram\n",
+ "pl.figure(1)\n",
+ "pl.clf()\n",
+ "pl.subplot(1,2,1)\n",
+ "pl.plot(cnv.SA,cnv.CT)\n",
+ "pl.xlabel('Absolute salinity [' + cnv.SA_unit + ']')\n",
+ "pl.ylabel('Conservative temperature [' + cnv.CT_unit + ']')\n",
+ "\n",
+ "# Step 3a: Add contours of potential density\n",
+ "# - Hint, you will need to create a vector of temperature and salinity spanning at \n",
+ "# least the ranges in the profile\n",
+ "# - You will then need to use these gridded vectors to calculate potential density using the gsw toolbox\n",
+ "\n",
+ "\n",
+ "# Step 3b: Add contour labels for the density\n",
+ "\n",
+ "# Step 3c: Add a title\n",
+ "\n",
+ "# Step 3d: Print the figure as a *png"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Challenge 4: Load multiple cnv files into python.\n",
+ "\n",
+ "# Step 4a: Plot a map of the stations\n",
+ "\n",
+ "# Step 4b (optional): Add bathymetry \n",
+ "# - see e.g. GEBCO https://www.gebco.net/data_and_products/gridded_bathymetry_data/\n",
+ "# - or ETOPO1. Note these files are big when full resolution and global.\n",
+ "# You will probably want to slice/prepare the data in a separate python notebook/file\n",
+ "\n",
+ "# Step 4c: Load multiple stations into python\n",
+ "# - Option one: Keep them all as separate variables (cnv1, cnv2, cnv3, etc)\n",
+ "# - Option two: Combine them into a multidimensaionl np.ndarray\n",
+ "# In order to combine them, they will need to be interpolated onto the same \n",
+ "# pressure grid (suggested 1 dbar grid). \n",
+ "\n",
+ "# Step 4d: Plot multiple temperature profiles on a single set of axes (see Step 1)\n",
+ "\n",
+ "# Step 4e: Repeat for salinity\n",
+ "\n",
+ "# Step 4f: Repeat for T-S diagrams (see Step 3)\n",
+ "\n",
+ "# Noting the data type that cnv is using may help:\n",
+ "type(cnv.SA)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# Challenge 5: Only works with option two in challenge 4.\n",
+ "\n",
+ "# Step 5a: Choose stations that are in a line (plot a map)\n",
+ "\n",
+ "# Step 5b: Calculate buoyancy frequency N^2 = db/dz. See gsw.Nsquared\n",
+ "# - Plot this. Note where it is large / small.\n",
+ "\n",
+ "# Step 5b: Calculate distance between CTD profiles\n",
+ "\n",
+ "# Step 5c: Calculate buoyancy b = -g\\rho/\\rho_0. \n",
+ "# - See e.g. Clement et al. 2023: https://doi.org/10.1175/JPO-D-22-0178.1\n",
+ "\n",
+ "# Step 5d: Calculate the density gradient db/dx where x is the distance between stations\n",
+ "\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3 (ipykernel)",
+ "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.9.5"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}