{ "cells": [ { "metadata": {}, "cell_type": "markdown", "source": [ "# Santec TSL-570 Tunable Semiconductor Laser\n", "\n", "This notebook demonstrates the QCoDeS driver for the Santec TSL-570 tunable laser.\n", "\n", "**Key points**\n", "- Uses SCPI command mode via the driver\n", "- Wavelength/frequency are in SI units (`m`, `Hz`)\n", "- Power setpoint is in `mW`\n", "- Uses a VISA resource address (for example TCPIP socket)\n", "\n", "Update the resource string before running." ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 1. Import and Connect" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "import time\n", "\n", "from qcodes_contrib_drivers.drivers.Santec.Santec_TSL import SantecTSL\n", "\n", "# Example VISA resource for LAN socket\n", "resource = \"TCPIP0::192.168.50.29::5000::SOCKET\"\n", "laser = SantecTSL(\"laser\", resource)\n", "print(f\"Connected to: {laser.get_idn()}\")" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 2. System Information" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "print(\"=== System Information ===\")\n", "print(f\"Firmware version: {laser.system_version()}\")\n", "print(f\"Product code: {laser.system_code()}\")\n", "print(f\"Command set: {laser.command_set()}\")\n", "print(f\"Interlock status: {laser.system_lock()}\")\n", "print(f\"System alert: {laser.system_alert()}\")\n", "print(f\"Error queue: {laser.system_error()}\")" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 3. Basic Wavelength and Power Control" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "print(\"=== Current Settings ===\")\n", "print(f\"Wavelength: {laser.wavelength() * 1e9:.4f} nm ({laser.wavelength():.10e} m)\")\n", "print(f\"Frequency: {laser.frequency() / 1e12:.6f} THz ({laser.frequency():.10e} Hz)\")\n", "print(f\"Power: {laser.power():.4f} mW\")\n", "print(f\"Output: {laser.output()}\")\n", "print(f\"Shutter: {laser.shutter()}\")\n", "\n", "target_wavelength_nm = 1550.0\n", "laser.wavelength(target_wavelength_nm * 1e-9)\n", "print(f\"\\nWavelength set to: {laser.wavelength() * 1e9:.4f} nm\")\n", "\n", "target_frequency_thz = 193.5\n", "laser.frequency(target_frequency_thz * 1e12)\n", "print(f\"Frequency set to: {laser.frequency() / 1e12:.4f} THz\")\n", "print(f\"Corresponding wavelength: {laser.wavelength() * 1e9:.4f} nm\")\n", "\n", "laser.power_unit(\"mW\")\n", "laser.power(1.0)\n", "print(f\"Power set to: {laser.power():.4f} mW\")" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 4. Fine Wavelength Control" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "laser.wavelength_fine(25.0)\n", "print(f\"Fine tuning offset: {laser.wavelength_fine()}\")\n", "\n", "laser.wavelength_offset(0.01e-9)\n", "print(f\"Wavelength offset: {laser.wavelength_offset() * 1e9:.3f} nm\")\n", "\n", "laser.disable_fine_tuning()\n", "print(\"Fine-tuning disabled\")" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 5. Wavelength and Frequency Sweep Configuration" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "start_nm = 1530.0\n", "stop_nm = 1570.0\n", "laser.sweep_start_wavelength(start_nm * 1e-9)\n", "laser.sweep_stop_wavelength(stop_nm * 1e-9)\n", "\n", "start_thz = 187.3\n", "stop_thz = 196.1\n", "laser.sweep_start_frequency(start_thz * 1e12)\n", "laser.sweep_stop_frequency(stop_thz * 1e12)\n", "\n", "laser.sweep_mode(1)\n", "laser.sweep_speed(10)\n", "laser.sweep_step_wavelength(0.1e-9)\n", "laser.sweep_dwell(0.1)\n", "laser.sweep_cycles(1)\n", "laser.sweep_delay(0.5)\n", "\n", "print(\"=== Sweep Parameters ===\")\n", "print(f\"Wavelength start: {laser.sweep_start_wavelength() * 1e9:.2f} nm\")\n", "print(f\"Wavelength stop: {laser.sweep_stop_wavelength() * 1e9:.2f} nm\")\n", "print(f\"Frequency start: {laser.sweep_start_frequency() / 1e12:.2f} THz\")\n", "print(f\"Frequency stop: {laser.sweep_stop_frequency() / 1e12:.2f} THz\")\n", "print(f\"Mode: {laser.sweep_mode()} (0=step 1-way, 1=cont 1-way, 2=step 2-way, 3=cont 2-way)\")\n", "print(f\"Speed: {laser.sweep_speed()} nm/s\")\n", "print(f\"Step (wavelength): {laser.sweep_step_wavelength() * 1e9:.3f} nm\")\n", "print(f\"Step (frequency): {laser.sweep_step_frequency() / 1e9:.3f} GHz\")\n", "print(f\"Dwell: {laser.sweep_dwell()} s\")\n", "print(f\"Cycles: {laser.sweep_cycles()}\")\n", "print(f\"Delay: {laser.sweep_delay()} s\")" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 6. Trigger Configuration" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "laser.trigger_input_external(True)\n", "laser.trigger_input_polarity(\"RISE\") # RISE or FALL\n", "laser.trigger_input_standby(False)\n", "\n", "laser.trigger_output_timing(\"STEP\") # NONE, STOP, START, STEP\n", "laser.trigger_output_polarity(\"RISE\") # RISE or FALL\n", "laser.trigger_output_step(1e-12)\n", "laser.trigger_output_setting(\"WAVELENGTH\") # WAVELENGTH or TIME\n", "\n", "print(\"=== Trigger Input ===\")\n", "print(f\"External: {laser.trigger_input_external()}\")\n", "print(f\"Polarity: {laser.trigger_input_polarity()}\")\n", "print(f\"Standby: {laser.trigger_input_standby()}\")\n", "\n", "print(\"\\n=== Trigger Output ===\")\n", "print(f\"Timing: {laser.trigger_output_timing()}\")\n", "print(f\"Polarity: {laser.trigger_output_polarity()}\")\n", "print(f\"Step: {laser.trigger_output_step() * 1e12:.3f} pm\")\n", "print(f\"Mode: {laser.trigger_output_setting()}\")" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 7. Execute and Monitor Sweep" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "print(f\"Sweep state before start: {laser.sweep_state()}\")\n", "laser.sweep_single()\n", "\n", "print(\"=== Monitoring Sweep ===\")\n", "for idx in range(10):\n", " state = laser.sweep_state()\n", " wl_nm = laser.wavelength() * 1e9\n", " count = laser.sweep_count()\n", " print(f\"[{idx + 1}] State: {state:16s} lambda = {wl_nm:8.3f} nm Count: {count}\")\n", " if state == \"STOPPED\":\n", " break\n", " time.sleep(0.2)\n", "\n", "laser.sweep_stop()\n", "print(f\"Final state: {laser.sweep_state()}\")" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 8. Snapshot and Logged Data" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "# Avoid update=True because sweep_range_minimum_wavelength / sweep_range_maximum_wavelength can time out on some firmware\n", "snapshot = laser.snapshot(update=False)\n", "\n", "print(\"=== Snapshot (selected parameters) ===\")\n", "params = snapshot[\"parameters\"]\n", "for name in [\"wavelength\", \"frequency\", \"power\", \"output\", \"sweep_mode\", \"sweep_state\"]:\n", " if name in params:\n", " print(f\"{name:20s}: {params[name].get('value', 'N/A')}\")\n", "\n", "print(\"\\nLogged points:\", laser.readout_points())\n", "# Data readouts return numpy arrays\n", "# wavelength_log = laser.readout_data()\n", "# power_log = laser.readout_power_data()" ] }, { "metadata": {}, "cell_type": "markdown", "source": "## 9. Cleanup and Shutdown" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "print(\"Shutting down laser output...\")\n", "laser.sweep_stop()\n", "laser.shutter(False)\n", "laser.output(False)\n", "print(f\"Sweep: {laser.sweep_state()}\")\n", "print(f\"Output: {laser.output()}\")\n", "print(f\"Shutter: {laser.shutter()}\")\n", "\n", "laser.close()\n", "print(\"Connection closed.\")\n" ] } ], "metadata": { "nbsphinx": { "execute": "never" }, "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.10.0" } }, "nbformat": 4, "nbformat_minor": 4 }