{ "cells": [ { "attachments": {}, "cell_type": "markdown", "id": "a641003a-ec1b-4ea1-8a46-fcde2f2d52aa", "metadata": {}, "source": [ "# Example-02: Workflow (MADX)" ] }, { "cell_type": "code", "execution_count": 1, "id": "0496604d-6bd4-4d4c-a840-ece3c4172509", "metadata": {}, "outputs": [], "source": [ "from pathlib import Path\n", "\n", "from model.command.external import load_lattice\n", "from model.command.external import rift_lattice\n", "from model.command.external import text_lattice\n", "from model.command.external import load_tfs\n", "from model.command.external import convert\n", "from model.command.external import add_rc" ] }, { "cell_type": "code", "execution_count": 2, "id": "7133deed-c534-49c0-8d0f-af1f4c8eae5a", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DR: DRIFT, L=2.0;\n", "BM: SBEND, L=1.0, ANGLE=0.17453292519943295;\n", "QF: QUADRUPOLE, L=1.0, K1=+0.2;\n", "QD: QUADRUPOLE, L=0.5, K1=-0.2;\n", "\n", "M: MONITOR,;\n", "\n", "HEAD: MARKER,; ! TEST: DRIFT,\n", "TAIL: MARKER,; ! TEST: DRIFT,\n", "\n", "FODO: LINE=(HEAD, M, QD, DR, BM, DR, QF, DR, BM, DR, QD, TAIL) ;\n", "\n" ] } ], "source": [ "# Given some initial MADX lattice file (FODO)\n", "\n", "file = Path('initial.madx')\n", "\n", "with file.open('r') as stream:\n", " print(stream.read())\n", "\n", "# Several regular elements are defined\n", "# HEAD and TAIL should appear as the first and the last elements\n", "# All elements should be defined on a single line with numerical parameters\n", "# Lattice should be defined using lines\n", "# Comma after element type is mandatory\n", "# Comments appearing after definitions should also represent an element definition" ] }, { "cell_type": "code", "execution_count": 3, "id": "532260b3-b100-4f18-807b-751bca5d3671", "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "DR {'KIND': 'DRIFT', 'RC': '', 'L': 2.0}\n", "BM {'KIND': 'SBEND', 'RC': '', 'L': 1.0, 'ANGLE': 0.17453292519943295}\n", "QF {'KIND': 'QUADRUPOLE', 'RC': '', 'L': 1.0, 'K1': 0.2}\n", "QD {'KIND': 'QUADRUPOLE', 'RC': '', 'L': 0.5, 'K1': -0.2}\n", "M {'KIND': 'MONITOR', 'RC': ''}\n", "HEAD {'KIND': 'MARKER', 'RC': 'TEST: DRIFT,'}\n", "TAIL {'KIND': 'MARKER', 'RC': 'TEST: DRIFT,'}\n", "FODO {'KIND': 'LINE', 'SEQUENCE': ['HEAD', 'M', 'QD', 'DR', 'BM', 'DR', 'QF', 'DR', 'BM', 'DR', 'QD', 'TAIL']}\n" ] } ], "source": [ "# If element and beamline definitions comply with the above requirements\n", "# The lattice file can be loaded as a python dictionary\n", "\n", "lattice = load_lattice(file)\n", "\n", "for key, value in lattice.items():\n", " print(key, value)\n", "\n", "# For each element and beamline, a key-value pair in created\n", "# Value is itself a dictionary containing all information about the original elements\n", "# Each element parameter is casted from string to int, float or string\n", "# Comment after element definition is saved into RC (it has a special use case, see below)" ] }, { "cell_type": "code", "execution_count": 4, "id": "fd93d303-6a15-4462-ad1a-520c7b706e58", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "M_DR {'KIND': 'MONITOR', 'RC': ['DR', {'KIND': 'DRIFT', 'L': 2.0}]}\n", "H_DR {'KIND': 'DRIFT', 'L': 1.0}\n", "DR {'KIND': 'LINE', 'SEQUENCE': ['H_DR', 'M_DR', 'H_DR']}\n", "V_BM {'KIND': 'MARKER', 'RC': ['BM', {'KIND': 'SBEND', 'L': 1.0, 'ANGLE': 0.17453292519943295}]}\n", "H_BM {'KIND': 'SBEND', 'L': 0.5, 'ANGLE': 0.08726646259971647}\n", "BM {'KIND': 'LINE', 'SEQUENCE': ['H_BM', 'V_BM', 'H_BM']}\n", "V_QF {'KIND': 'MARKER', 'RC': ['QF', {'KIND': 'QUADRUPOLE', 'L': 1.0, 'K1': 0.2}]}\n", "H_QF {'KIND': 'QUADRUPOLE', 'L': 0.5, 'K1': 0.2}\n", "QF {'KIND': 'LINE', 'SEQUENCE': ['H_QF', 'V_QF', 'H_QF']}\n", "QD {'KIND': 'QUADRUPOLE', 'RC': '', 'L': 0.5, 'K1': -0.2}\n", "M {'KIND': 'MONITOR', 'RC': ''}\n", "HEAD {'KIND': 'MARKER', 'RC': 'TEST: DRIFT,'}\n", "TAIL {'KIND': 'MARKER', 'RC': 'TEST: DRIFT,'}\n", "FODO {'KIND': 'LINE', 'SEQUENCE': ['HEAD', 'M', 'QD', 'DR', 'BM', 'DR', 'QF', 'DR', 'BM', 'DR', 'QD', 'TAIL']}\n" ] } ], "source": [ "# Error lattice is defined by a set of linear transformations between selected locations\n", "# Each locations can be a MONITOR (beam observation) or a VIRTUAL (error)\n", "# Two special locatons (HEAD and TAIL) should present in the lattice\n", "# Using the above dictionary representation, new observation locations can be inserted\n", "# Locations are inserted at the middle of selected elements (selected by type or name)\n", "# Selected elements are splitted in half and renamed, old names are binded to beamlines\n", "# Original element definitions are added to created location RC\n", "# Typicaly, monitor locations correspond to MONITOR elements, but new monitor elements can be also inserted\n", "# Virtual locations can be inserted into quadrupole or other elements to represent errors\n", "\n", "lattice = rift_lattice(lattice, \n", " 'MONITOR', \n", " 'MARKER', \n", " ['DRIFT'], \n", " ['SBEND', 'QUADRUPOLE'], \n", " exclude_virtual=['QD'])\n", "\n", "for key, value in lattice.items():\n", " print(key, value)" ] }, { "cell_type": "code", "execution_count": 5, "id": "eac1cbc9-90b3-420e-84ce-c328fdc48b43", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "M_DR: MONITOR,; ! DR: DRIFT, L=2.0,;\n", "H_DR: DRIFT, L=1.0,;\n", "DR: LINE=(H_DR, M_DR, H_DR);\n", "V_BM: MARKER,; ! BM: SBEND, L=1.0, ANGLE=0.17453292519943295,;\n", "H_BM: SBEND, L=0.5, ANGLE=0.08726646259971647,;\n", "BM: LINE=(H_BM, V_BM, H_BM);\n", "V_QF: MARKER,; ! QF: QUADRUPOLE, L=1.0, K1=0.2,;\n", "H_QF: QUADRUPOLE, L=0.5, K1=0.2,;\n", "QF: LINE=(H_QF, V_QF, H_QF);\n", "QD: QUADRUPOLE, L=0.5, K1=-0.2,;\n", "M: MONITOR,;\n", "HEAD: MARKER,; ! TEST: DRIFT,\n", "TAIL: MARKER,; ! TEST: DRIFT,\n", "FODO: LINE=(HEAD, M, QD, DR, BM, DR, QF, DR, BM, DR, QD, TAIL);\n", "\n" ] } ], "source": [ "# Modified lattice can be converted to text\n", "# Comments are added to locations while original comments are preserved\n", "\n", "text = text_lattice('MADX', lattice, rc=True)\n", "\n", "print(text)" ] }, { "cell_type": "code", "execution_count": 6, "id": "0c98bea9-c894-4aed-8d62-97270eb048b2", "metadata": { "scrolled": true }, "outputs": [], "source": [ "# Compute TWISS parameters using MADX\n", "# TWISS command is appended to modified lattice\n", "\n", "task = \"\"\"\n", "BEAM;\n", "USE, PERIOD=FODO;\n", "SET,FORMAT=\"20.20f\",\"-20s\";\n", "TWISS;\n", "WRITE,TABLE=TWISS,FILE=\"final.tfs\";\n", "RETURN;\n", "\"\"\" ;\n", "\n", "with Path('final.madx').open('w') as stream:\n", " stream.write(text)\n", " stream.write(task)\n", "\n", "!madx final.madx > /dev/null" ] }, { "cell_type": "code", "execution_count": 7, "id": "3b46c59b-7001-4e0c-aa22-840f3a7302a8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "M_DR {'KIND': 'MONITOR', 'RC': ['DR', {'KIND': 'DRIFT', 'RC': '', 'L': 2.0}]}\n", "H_DR {'KIND': 'DRIFT', 'RC': ['', {'KIND': '', 'RC': ''}], 'L': 1.0}\n", "DR {'KIND': 'LINE', 'SEQUENCE': ['H_DR', 'M_DR', 'H_DR']}\n", "V_BM {'KIND': 'MARKER', 'RC': ['BM', {'KIND': 'SBEND', 'RC': '', 'L': 1.0, 'ANGLE': 0.17453292519943295}]}\n", "H_BM {'KIND': 'SBEND', 'RC': ['', {'KIND': '', 'RC': ''}], 'L': 0.5, 'ANGLE': 0.08726646259971647}\n", "BM {'KIND': 'LINE', 'SEQUENCE': ['H_BM', 'V_BM', 'H_BM']}\n", "V_QF {'KIND': 'MARKER', 'RC': ['QF', {'KIND': 'QUADRUPOLE', 'RC': '', 'L': 1.0, 'K1': 0.2}]}\n", "H_QF {'KIND': 'QUADRUPOLE', 'RC': ['', {'KIND': '', 'RC': ''}], 'L': 0.5, 'K1': 0.2}\n", "QF {'KIND': 'LINE', 'SEQUENCE': ['H_QF', 'V_QF', 'H_QF']}\n", "QD {'KIND': 'QUADRUPOLE', 'RC': ['', {'KIND': '', 'RC': ''}], 'L': 0.5, 'K1': -0.2}\n", "M {'KIND': 'MONITOR', 'RC': ['', {'KIND': '', 'RC': ''}]}\n", "HEAD {'KIND': 'MARKER', 'RC': ['TEST', {'KIND': 'DRIFT', 'RC': ''}]}\n", "TAIL {'KIND': 'MARKER', 'RC': ['TEST', {'KIND': 'DRIFT', 'RC': ''}]}\n", "FODO {'KIND': 'LINE', 'SEQUENCE': ['HEAD', 'M', 'QD', 'DR', 'BM', 'DR', 'QF', 'DR', 'BM', 'DR', 'QD', 'TAIL']}\n" ] } ], "source": [ "# Load lattice can be also loaded from file\n", "# Original comments will be parsed as elements (look at HEAD and TAIL)\n", "# Empty RC will be nested in this case\n", "\n", "file = Path('final.madx')\n", "\n", "with file.open('w') as stream:\n", " stream.write(text)\n", "\n", "lattice = load_lattice(file, rc=True)\n", "\n", "for key, value in lattice.items():\n", " print(key, value)" ] }, { "cell_type": "code", "execution_count": 8, "id": "dab4b669-0bfe-47ce-873d-51f064d98ec6", "metadata": {}, "outputs": [], "source": [ "# TWISS results can be loaded into python dictionaries\n", "\n", "data = Path('final.tfs')\n", "parameters, columns = load_tfs(data)" ] }, { "cell_type": "code", "execution_count": 9, "id": "2ad82e92-25fe-4f44-bdb1-8709c3cf2570", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'HEAD': {'TYPE': 'VIRTUAL',\n", " 'S': 0.0,\n", " 'BX': 4.287017735718936,\n", " 'AX': -3.338e-16,\n", " 'FX': 0.0,\n", " 'BY': 19.818489282044894,\n", " 'AY': -2.975e-17,\n", " 'FY': 0.0,\n", " 'DQX': 1.5490410441348796,\n", " 'DPX': 5.551e-17,\n", " 'DQY': 0.0,\n", " 'DPY': -0.0,\n", " 'RC': None},\n", " 'M': {'TYPE': 'MONITOR',\n", " 'S': 0.0,\n", " 'BX': 4.287017735718936,\n", " 'AX': -3.338e-16,\n", " 'FX': 0.0,\n", " 'BY': 19.818489282044894,\n", " 'AY': -2.975e-17,\n", " 'FY': 0.0,\n", " 'DQX': 1.5490410441348796,\n", " 'DPX': 5.551e-17,\n", " 'DQY': 0.0,\n", " 'DPY': -0.0,\n", " 'RC': None},\n", " 'M_DR': {'TYPE': 'MONITOR',\n", " 'S': 1.5,\n", " 'BX': 5.980356480296974,\n", " 'AX': -0.8524040348462865,\n", " 'FX': 0.3068185833848285,\n", " 'BY': 15.315159900296642,\n", " 'AY': 1.6491678474974667,\n", " 'FY': 0.08453149247893033,\n", " 'DQX': 1.744126900814982,\n", " 'DPX': 0.1561982029636459,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None},\n", " 'V_BM': {'TYPE': 'VIRTUAL',\n", " 'S': 3.0,\n", " 'BX': 9.120629409698159,\n", " 'AX': -1.1465687400023221,\n", " 'FX': 0.5107301354647854,\n", " 'BY': 10.914137614299745,\n", " 'AY': 1.2848470098337954,\n", " 'FY': 0.20081415045191314,\n", " 'DQX': 1.992896582518225,\n", " 'DPX': 0.21385269164968151,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None},\n", " 'M_DR_1': {'TYPE': 'MONITOR',\n", " 'S': 4.5,\n", " 'BX': 12.70896979457465,\n", " 'AX': -1.3363966727488819,\n", " 'FX': 0.6500917125372264,\n", " 'BY': 7.606077841293864,\n", " 'AY': 0.9205261721701236,\n", " 'FY': 0.3661997931359615,\n", " 'DQX': 2.3837861006470566,\n", " 'DPX': 0.26987963222618605,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None},\n", " 'V_QF': {'TYPE': 'VIRTUAL',\n", " 'S': 6.0,\n", " 'BX': 16.392007194825762,\n", " 'AX': -8.0415e-16,\n", " 'FX': 0.7521811118347426,\n", " 'BY': 5.674619594695141,\n", " 'AY': -2.5871e-16,\n", " 'FY': 0.601131166393595,\n", " 'DQX': 2.7214181783177667,\n", " 'DPX': 5.551e-17,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None},\n", " 'M_DR_2': {'TYPE': 'MONITOR',\n", " 'S': 7.5,\n", " 'BX': 12.708969794574653,\n", " 'AX': 1.336396672748881,\n", " 'FX': 0.8542705111322586,\n", " 'BY': 7.606077841293868,\n", " 'AY': -0.9205261721701244,\n", " 'FY': 0.8360625396512283,\n", " 'DQX': 2.3837861006470566,\n", " 'DPX': -0.26987963222618594,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None},\n", " 'V_BM_1': {'TYPE': 'VIRTUAL',\n", " 'S': 9.0,\n", " 'BX': 9.120629409698164,\n", " 'AX': 1.146568740002322,\n", " 'FX': 0.9936320882046995,\n", " 'BY': 10.914137614299747,\n", " 'AY': -1.2848470098337954,\n", " 'FY': 1.0014481823352765,\n", " 'DQX': 1.9928965825182252,\n", " 'DPX': -0.21385269164968146,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None},\n", " 'M_DR_3': {'TYPE': 'MONITOR',\n", " 'S': 10.5,\n", " 'BX': 5.980356480296976,\n", " 'AX': 0.8524040348462865,\n", " 'FX': 1.1975436402846564,\n", " 'BY': 15.315159900296639,\n", " 'AY': -1.6491678474974665,\n", " 'FY': 1.1177308403082595,\n", " 'DQX': 1.7441269008149822,\n", " 'DPX': -0.1561982029636459,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None},\n", " 'TAIL': {'TYPE': 'VIRTUAL',\n", " 'S': 12.0,\n", " 'BX': 4.287017735718939,\n", " 'AX': 3.6486e-16,\n", " 'FX': 1.5043622236694847,\n", " 'BY': 19.81848928204488,\n", " 'AY': -5.5051e-16,\n", " 'FY': 1.2022623327871897,\n", " 'DQX': 1.54904104413488,\n", " 'DPX': -2.776e-17,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None}}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Optics data can be converted into model table\n", "# Note, all locations have different name\n", "# If an element appear several times in a line, locations are renamed\n", "\n", "table = convert(columns, 'TFS', ['MONITOR'], ['MARKER'], rc=True)\n", "table" ] }, { "cell_type": "code", "execution_count": 10, "id": "1fefa5f3-e614-4e22-91ff-b21e28e4aeeb", "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "{'HEAD': {'TYPE': 'VIRTUAL',\n", " 'S': 0.0,\n", " 'BX': 4.287017735718936,\n", " 'AX': -3.338e-16,\n", " 'FX': 0.0,\n", " 'BY': 19.818489282044894,\n", " 'AY': -2.975e-17,\n", " 'FY': 0.0,\n", " 'DQX': 1.5490410441348796,\n", " 'DPX': 5.551e-17,\n", " 'DQY': 0.0,\n", " 'DPY': -0.0,\n", " 'RC': None},\n", " 'M': {'TYPE': 'MONITOR',\n", " 'S': 0.0,\n", " 'BX': 4.287017735718936,\n", " 'AX': -3.338e-16,\n", " 'FX': 0.0,\n", " 'BY': 19.818489282044894,\n", " 'AY': -2.975e-17,\n", " 'FY': 0.0,\n", " 'DQX': 1.5490410441348796,\n", " 'DPX': 5.551e-17,\n", " 'DQY': 0.0,\n", " 'DPY': -0.0,\n", " 'RC': None},\n", " 'M_DR': {'TYPE': 'MONITOR',\n", " 'S': 1.5,\n", " 'BX': 5.980356480296974,\n", " 'AX': -0.8524040348462865,\n", " 'FX': 0.3068185833848285,\n", " 'BY': 15.315159900296642,\n", " 'AY': 1.6491678474974667,\n", " 'FY': 0.08453149247893033,\n", " 'DQX': 1.744126900814982,\n", " 'DPX': 0.1561982029636459,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': ['DR', {'KIND': 'DRIFT', 'L': 2.0}]},\n", " 'V_BM': {'TYPE': 'VIRTUAL',\n", " 'S': 3.0,\n", " 'BX': 9.120629409698159,\n", " 'AX': -1.1465687400023221,\n", " 'FX': 0.5107301354647854,\n", " 'BY': 10.914137614299745,\n", " 'AY': 1.2848470098337954,\n", " 'FY': 0.20081415045191314,\n", " 'DQX': 1.992896582518225,\n", " 'DPX': 0.21385269164968151,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': ['BM', {'KIND': 'SBEND', 'L': 1.0, 'ANGLE': 0.17453292519943295}]},\n", " 'M_DR_1': {'TYPE': 'MONITOR',\n", " 'S': 4.5,\n", " 'BX': 12.70896979457465,\n", " 'AX': -1.3363966727488819,\n", " 'FX': 0.6500917125372264,\n", " 'BY': 7.606077841293864,\n", " 'AY': 0.9205261721701236,\n", " 'FY': 0.3661997931359615,\n", " 'DQX': 2.3837861006470566,\n", " 'DPX': 0.26987963222618605,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': ['DR', {'KIND': 'DRIFT', 'L': 2.0}]},\n", " 'V_QF': {'TYPE': 'VIRTUAL',\n", " 'S': 6.0,\n", " 'BX': 16.392007194825762,\n", " 'AX': -8.0415e-16,\n", " 'FX': 0.7521811118347426,\n", " 'BY': 5.674619594695141,\n", " 'AY': -2.5871e-16,\n", " 'FY': 0.601131166393595,\n", " 'DQX': 2.7214181783177667,\n", " 'DPX': 5.551e-17,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': ['QF', {'KIND': 'QUADRUPOLE', 'L': 1.0, 'K1': 0.2}]},\n", " 'M_DR_2': {'TYPE': 'MONITOR',\n", " 'S': 7.5,\n", " 'BX': 12.708969794574653,\n", " 'AX': 1.336396672748881,\n", " 'FX': 0.8542705111322586,\n", " 'BY': 7.606077841293868,\n", " 'AY': -0.9205261721701244,\n", " 'FY': 0.8360625396512283,\n", " 'DQX': 2.3837861006470566,\n", " 'DPX': -0.26987963222618594,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': ['DR', {'KIND': 'DRIFT', 'L': 2.0}]},\n", " 'V_BM_1': {'TYPE': 'VIRTUAL',\n", " 'S': 9.0,\n", " 'BX': 9.120629409698164,\n", " 'AX': 1.146568740002322,\n", " 'FX': 0.9936320882046995,\n", " 'BY': 10.914137614299747,\n", " 'AY': -1.2848470098337954,\n", " 'FY': 1.0014481823352765,\n", " 'DQX': 1.9928965825182252,\n", " 'DPX': -0.21385269164968146,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': ['BM', {'KIND': 'SBEND', 'L': 1.0, 'ANGLE': 0.17453292519943295}]},\n", " 'M_DR_3': {'TYPE': 'MONITOR',\n", " 'S': 10.5,\n", " 'BX': 5.980356480296976,\n", " 'AX': 0.8524040348462865,\n", " 'FX': 1.1975436402846564,\n", " 'BY': 15.315159900296639,\n", " 'AY': -1.6491678474974665,\n", " 'FY': 1.1177308403082595,\n", " 'DQX': 1.7441269008149822,\n", " 'DPX': -0.1561982029636459,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': ['DR', {'KIND': 'DRIFT', 'L': 2.0}]},\n", " 'TAIL': {'TYPE': 'VIRTUAL',\n", " 'S': 12.0,\n", " 'BX': 4.287017735718939,\n", " 'AX': 3.6486e-16,\n", " 'FX': 1.5043622236694847,\n", " 'BY': 19.81848928204488,\n", " 'AY': -5.5051e-16,\n", " 'FY': 1.2022623327871897,\n", " 'DQX': 1.54904104413488,\n", " 'DPX': -2.776e-17,\n", " 'DQY': 0.0,\n", " 'DPY': 0.0,\n", " 'RC': None}}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# RC parameter from lattice data can be added to model table\n", "# Configuration table can be saved using util.save\n", "\n", "table = add_rc(table, lattice)\n", "table" ] } ], "metadata": { "colab": { "collapsed_sections": [ "myt0_gMIOq7b", "5d97819c" ], "name": "03_frequency.ipynb", "provenance": [] }, "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.12.1" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 5 }