{ "cells": [ { "cell_type": "markdown", "id": "favorite-helping", "metadata": {}, "source": [ "## Lineage\n", "\n", "This notebook demonstrates how to recreate lineages published in the paper [Live imaging of remyelination in the adult mouse corpus callosum](https://www.pnas.org/content/118/28/e2025795118) and available at [idr0113-bottes-opcclones](https://idr.openmicroscopy.org/search/?query=Name:idr0113).\n", "\n", "The lineage is created from the metadata associated to the specified image.\n", "\n", "To load the data from the Image Data Resource, we use:\n", "* the [Python API](https://docs.openmicroscopy.org/omero/latest/developers/Python.html)\n", "* the [JSON API](https://docs.openmicroscopy.org/omero/latest/developers/json-api.html)" ] }, { "cell_type": "markdown", "id": "parallel-kennedy", "metadata": {}, "source": [ "LPC-induced focal demyelination and in vivo imaging of genetically targeted OPCs and their progeny to describe the cellular dynamics of OPC-mediated remyelination in the CC.\n", "\n", "Longitudinal observation of OPCs and their progeny for up to two months reveals functional inter- and intraclonal heterogeneity and provides insights into the cell division capacity and the migration/differentiation dynamics of OPCs and their daughter cells in vivo.\n", "\n", "The majority of the clones remained quiescent or divided only few times. Some OPCs were highly proliferative. \n", "Large clones showed longer times between consecutive divisions compared to low proliferating clones.\n", "\n", "OPCs show distinct modes of cell division: from symmetric proliferative, to symmetric differentiating and also asymmetric cell division, where the OPC is self-renewed while the other daughter cell differentiates.\n", "\n", "Only 16.46% of OPC-derived cells differentiated into mature, remyelinating oligodendrocytes, with OPCs born at early divisions showing a higher probability to survive and to terminally differentiate.\n", "\n", "Cell death was associated with distinct cell division histories of different clones, with higher probability of death when generated at later divisions.\n", "\n", "Migratory behaviour was restricted to progenitors. Successfully differentiating progenitors moved shorter distances per day compared to dying cells." ] }, { "cell_type": "markdown", "id": "grand-trick", "metadata": {}, "source": [ "## Settings\n", "\n", "### Auxiliar libraries used\n", "* [nb_conda_kernels](https://github.com/Anaconda-Platform/nb_conda_kernels): Enables a Jupyter Notebook or JupyterLab application in one conda environment to access kernels for Python, R, and other languages found in other environments.\n", "* [jupyter_contrib_nbextensions](https://jupyter-contrib-nbextensions.readthedocs.io/en/latest/index.html): Package containing a collection of community-contributed unofficial extensions that add functionality to the Jupyter notebook\n", "* [jupyter-notebookparams](https://pypi.org/project/jupyter-notebookparams/): Takes query parameters from a url to update a parameter cell of a jupyter notebook.\n", "\n", "## Launch\n", "\n", "### binder\n", "\n", "If not already running, you can launch by clicking on the logo [![Binder <](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/IDR/idr0113-bottes-opcclones/main?urlpath=notebooks%2Fnotebooks%2Fidr0113_lineage.ipynb%3FimageId%3D13425213)\n", "\n", "### run locally using repo2docker\n", "\n", "With ``jupyter-repo2docker`` installed, run:\n", "```\n", "git clone https://github.com/IDR/idr0113-bottes-opcclones.git\n", "cd idr0113-bottes-opcclones\n", "repo2docker .\n", "```" ] }, { "cell_type": "markdown", "id": "patent-gateway", "metadata": {}, "source": [ "## Collect the parameter " ] }, { "cell_type": "code", "execution_count": 1, "id": "amazing-belief", "metadata": {}, "outputs": [], "source": [ "# Parameters:\n", "imageId = 13425213" ] }, { "cell_type": "markdown", "id": "worst-anniversary", "metadata": {}, "source": [ "## Load the libraries " ] }, { "cell_type": "code", "execution_count": 2, "id": "micro-gilbert", "metadata": {}, "outputs": [], "source": [ "import graphviz\n", "import math\n", "import requests\n", "import pandas as pd\n", "\n", "from os.path import expanduser\n", "\n", "from idr import connection" ] }, { "cell_type": "markdown", "id": "foreign-archives", "metadata": {}, "source": [ "# Load data " ] }, { "cell_type": "markdown", "id": "located-chest", "metadata": {}, "source": [ "## Connect to IDR" ] }, { "cell_type": "code", "execution_count": 3, "id": "signal-arrow", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Connected to IDR ...\n" ] } ], "source": [ "conn = connection('idr.openmicroscopy.org')" ] }, { "cell_type": "markdown", "id": "approximate-vault", "metadata": {}, "source": [ "## Load the plane information\n", "First load information about the image so we can identify the number of days after induction." ] }, { "cell_type": "code", "execution_count": 4, "id": "african-building", "metadata": {}, "outputs": [], "source": [ "times = {}\n", "\n", "image = conn.getObject(\"Image\", imageId)\n", "pixels_id = image.getPrimaryPixels().getId()\n", "query = \"from PlaneInfo as Info where pixels.id='\" + str(pixels_id) + \"'\"\n", "infos = conn.getQueryService().findAllByQuery(query, None)\n", "for i in infos:\n", " times.update({i.theT.getValue(): int(i.deltaT.getValue())})" ] }, { "cell_type": "markdown", "id": "moving-position", "metadata": {}, "source": [ "## URL used to load data\n", "We now use the JSON API to load the Regions of Interest (ROI) and the table with the lineage information" ] }, { "cell_type": "code", "execution_count": 5, "id": "automotive-sunday", "metadata": {}, "outputs": [], "source": [ "INDEX_PAGE = \"https://idr.openmicroscopy.org/webclient/?experimenter=-1\"\n", "ROI_URL = \"https://idr.openmicroscopy.org/api/v0/m/images/{key}/rois/?limit=500\"\n", "TABLE_URL = \"https://idr.openmicroscopy.org/webgateway/table/Image/{key}/query/?query=*\"" ] }, { "cell_type": "code", "execution_count": 6, "id": "overall-grenada", "metadata": {}, "outputs": [], "source": [ "# create http session\n", "with requests.Session() as session:\n", " request = requests.Request('GET', INDEX_PAGE)\n", " prepped = session.prepare_request(request)\n", " response = session.send(prepped)\n", " if response.status_code != 200:\n", " response.raise_for_status()" ] }, { "cell_type": "markdown", "id": "fifteen-episode", "metadata": {}, "source": [ "## Load the Regions of Interest linked to the image\n", "Each ROI has only one shape so we map the timepoint the shape is to the value in days." ] }, { "cell_type": "code", "execution_count": 7, "id": "transparent-conviction", "metadata": {}, "outputs": [], "source": [ "qs = {'key': imageId}\n", "url = ROI_URL.format(**qs)\n", "json_data = session.get(url).json()\n", "\n", "roi_time_map = {}\n", "# parse the json\n", "for d in json_data['data']:\n", " roi_id = d['@id']\n", " for s in d[\"shapes\"]:\n", " roi_time_map.update({str(roi_id): times.get(int(s['TheT']))}) " ] }, { "cell_type": "markdown", "id": "curious-philosophy", "metadata": {}, "source": [ "## Load the lineage table\n", "Each image with ROIs has a table linked to it capturing the lineage.\n", "We load the table and convert it into a Pandas dataframe." ] }, { "cell_type": "code", "execution_count": 8, "id": "minus-oxford", "metadata": {}, "outputs": [], "source": [ "url = TABLE_URL.format(**qs)\n", "json_data = session.get(url).json()" ] }, { "cell_type": "code", "execution_count": 9, "id": "hundred-latex", "metadata": {}, "outputs": [], "source": [ "df = pd.DataFrame(columns=json_data['data']['columns'])\n", "for r in json_data['data']['rows']:\n", " df.loc[len(df)] = r" ] }, { "cell_type": "code", "execution_count": 10, "id": "studied-season", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
RoiCell TypeCell UncertaintyLineage RoiMother RoiMother UncertaintySister RoiSister UncertaintyCell DeathRoi Name
02359678PMcertaincertaincertain1-1_2_6_na_1_1_na_1
12359679PMcertain2359678certaincertain1-1_2_6_na_1_1_na_1
22359680PMcertain2359679certaincertain1-1_2_6_na_1_1_na_1
32359681PMcertain2359680certaincertain1-1_2_6_na_1_1_na_1
42359682PMcertain2359681certaincertain1-1_2_6_na_1_1_na_1
.................................
3252360003OPCcertain23600022359948certaincertainyes6-6_1_18_5-1_1_1_6-5_1_0
3262360004OPCcertain2359972uncertain2360007uncertain6-7_1_18_5-4_1_0_6-8_0_0
3272360005OPCcertain23600042359972uncertainuncertainyes6-7_1_18_5-4_1_0_6-8_0_0
3282360006OPCcertain2359972uncertain2360005uncertain6-8_1_18_5-4_1_0_6-7_0_0
3292360007OPCcertain23600062359972uncertainuncertainyes6-8_1_18_5-4_1_0_6-7_0_0
\n", "

330 rows × 10 columns

\n", "
" ], "text/plain": [ " Roi Cell Type Cell Uncertainty Lineage Roi Mother Roi \\\n", "0 2359678 PM certain \n", "1 2359679 PM certain 2359678 \n", "2 2359680 PM certain 2359679 \n", "3 2359681 PM certain 2359680 \n", "4 2359682 PM certain 2359681 \n", ".. ... ... ... ... ... \n", "325 2360003 OPC certain 2360002 2359948 \n", "326 2360004 OPC certain 2359972 \n", "327 2360005 OPC certain 2360004 2359972 \n", "328 2360006 OPC certain 2359972 \n", "329 2360007 OPC certain 2360006 2359972 \n", "\n", " Mother Uncertainty Sister Roi Sister Uncertainty Cell Death \\\n", "0 certain certain \n", "1 certain certain \n", "2 certain certain \n", "3 certain certain \n", "4 certain certain \n", ".. ... ... ... ... \n", "325 certain certain yes \n", "326 uncertain 2360007 uncertain \n", "327 uncertain uncertain yes \n", "328 uncertain 2360005 uncertain \n", "329 uncertain uncertain yes \n", "\n", " Roi Name \n", "0 1-1_2_6_na_1_1_na_1 \n", "1 1-1_2_6_na_1_1_na_1 \n", "2 1-1_2_6_na_1_1_na_1 \n", "3 1-1_2_6_na_1_1_na_1 \n", "4 1-1_2_6_na_1_1_na_1 \n", ".. ... \n", "325 6-6_1_18_5-1_1_1_6-5_1_0 \n", "326 6-7_1_18_5-4_1_0_6-8_0_0 \n", "327 6-7_1_18_5-4_1_0_6-8_0_0 \n", "328 6-8_1_18_5-4_1_0_6-7_0_0 \n", "329 6-8_1_18_5-4_1_0_6-7_0_0 \n", "\n", "[330 rows x 10 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "id": "black-japanese", "metadata": {}, "source": [ "### Helper methods to generate the graph " ] }, { "cell_type": "code", "execution_count": 11, "id": "looking-stopping", "metadata": {}, "outputs": [], "source": [ "def is_valid(row):\n", " mother = row[\"Mother Roi\"]\n", " sister = row[\"Sister Roi\"]\n", " if mother == \"\" and sister == \"\":\n", " return False\n", " return True" ] }, { "cell_type": "code", "execution_count": 12, "id": "specialized-impossible", "metadata": {}, "outputs": [], "source": [ "def find_mothers():\n", " ids = []\n", " for index, row in df.iterrows():\n", " mother = row[\"Mother Roi\"]\n", " if mother == \"\":\n", " continue\n", " v = str(mother)\n", " if v not in ids:\n", " ids.append(v)\n", " return ids " ] }, { "cell_type": "markdown", "id": "color-cradle", "metadata": {}, "source": [ "## Create the lineage graph\n", "* Each node corresponds to an ROI.\n", "* Hover over each node of the graph to display information like incubation time for the node.\n", "* Click on the node to launch the image viewer in IDR\n", "* The format set for export is ``pdf`` (default), if you wish to export as png, svg for example, modify the ``format`` parameter below." ] }, { "cell_type": "code", "execution_count": 13, "id": "fewer-honolulu", "metadata": {}, "outputs": [], "source": [ "f = graphviz.Digraph(comment='Lineage', format='pdf')\n", "f.attr(rank='sink')\n", "f.attr('node', shape='circle')" ] }, { "cell_type": "markdown", "id": "restricted-newark", "metadata": {}, "source": [ " Create the nodes of the graph" ] }, { "cell_type": "code", "execution_count": 14, "id": "weekly-exemption", "metadata": {}, "outputs": [], "source": [ "# Set various parametes used in the graph\n", "COLOR_OPC = \"red\"\n", "COLOR_PM = \"orange\"\n", "COLOR_M = \"cyan\"\n", "COLOR_DEAD = \"purple\"\n", "COLOR_UNCERTAIN = \"black\"\n", "COLOR_EDGE = \"black\"\n", "STYLE_CERTAIN = \"solid\"\n", "STYLE_UNCERTAIN = \"dotted\"" ] }, { "cell_type": "code", "execution_count": 15, "id": "literary-analyst", "metadata": {}, "outputs": [], "source": [ "ids = []\n", "# determine the mothers rois\n", "mothers = find_mothers()\n", "for index, row in df.iterrows():\n", " id = str(row[\"Roi\"])\n", " if is_valid(row) is False and id not in mothers:\n", " continue\n", " type = str(row[\"Cell Type\"])\n", " ids.append(id)\n", " dead = \"no\"\n", " dead_value = str(row[\"Cell Death\"])\n", " uncertainty = str(row[\"Cell Uncertainty\"])\n", " value = \"Type: %s\\nCertainty: %s\\nDays After Induction: %s\\nROI ID: %s\" % (type, uncertainty, roi_time_map.get(id), id)\n", " color = COLOR_OPC\n", " width = \"0.1\"\n", " if type == \"PM\":\n", " color = COLOR_PM\n", " elif type == \"M\":\n", " color = COLOR_M\n", " if uncertainty == \"uncertain\":\n", " color = \"%s:%s\" % (COLOR_UNCERTAIN, color)\n", " width = \"0.2\"\n", " f.node(id, \"\", URL='https://idr.openmicroscopy.org/iviewer/?roi=%s' % id, style=\"radial\", color=color, fixedsize='true', width=width, tooltip=value)\n", " # Create a node indicating that the cell is dead\n", " if dead_value != \"\":\n", " nv = \"dead_%s\" % id\n", " f.node(nv, \"\", style='filled', color=COLOR_DEAD, fixedsize='true', width='0.1')" ] }, { "cell_type": "markdown", "id": "blind-debut", "metadata": {}, "source": [ "Create the edges" ] }, { "cell_type": "code", "execution_count": 16, "id": "alien-referral", "metadata": {}, "outputs": [], "source": [ "edges = []\n", "for index, row in df.iterrows():\n", " if is_valid(row) is False:\n", " continue\n", " id = str(row[\"Roi\"])\n", " color = COLOR_EDGE\n", " lineage = row[\"Lineage Roi\"]\n", " if lineage != \"\":\n", " f.edge(str(int(lineage)), id, label='', color=color, arrowhead=\"none\") \n", " value = row[\"Mother Roi\"]\n", " if value != \"\" and lineage == \"\":\n", " certainty = row[\"Mother Uncertainty\"]\n", " style = STYLE_CERTAIN\n", " if certainty != \"certain\":\n", " style = STYLE_UNCERTAIN\n", " f.edge(str(int(value)), id, label='', color=color, style=style, arrowhead=\"none\") \n", " dead_value = str(row[\"Cell Death\"])\n", " if dead_value != \"\":\n", " nv = \"dead_%s\" % id\n", " f.edge(id, nv, label='', color=color, arrowhead=\"none\", tooltip=\"Cell is dead\")" ] }, { "cell_type": "markdown", "id": "administrative-orientation", "metadata": {}, "source": [ "Create the legend" ] }, { "cell_type": "code", "execution_count": 17, "id": "dangerous-emergency", "metadata": {}, "outputs": [], "source": [ "with f.subgraph(name='legend') as c:\n", " c.attr('node', shape='plaintext', fontsize='8')\n", " c.node(\"key1\", label='''<\n", " \n", " \n", "
certain
uncertain
>''')\n", " c.node(\"key2\", label='''<\n", " \n", " \n", "
 
 
>''')\n", " c.edge(\"key1:i1\", \"key2:i1\", label='', color=COLOR_EDGE, style=STYLE_CERTAIN, arrowhead=\"none\")\n", " c.edge(\"key1:i2\", \"key2:i2\", label='', color=COLOR_EDGE, style=STYLE_UNCERTAIN, arrowhead=\"none\")\n", " c.node(\"OPC\")\n", " c.node(\"PM\")\n", " c.node(\"M\")\n", " c.node(\"Cell Death\")\n", " c.node(\"Uncertain Cell Type\")\n", " c.attr('node', shape='circle', fontsize='6')\n", " c.node(\"opc1\", \"\", style='filled', color=COLOR_OPC, fixedsize='true', width='0.1')\n", " c.node(\"pm1\", \"\", style='filled', color=COLOR_PM, fixedsize='true', width='0.1')\n", " c.node(\"m1\", \"\", style='filled', color=COLOR_M, fixedsize='true', width='0.1')\n", " c.node(\"death1\", \"\", style='filled', color=COLOR_DEAD, fixedsize='true', width='0.1')\n", " c.node(\"type1\", \"\", style='filled', color=COLOR_UNCERTAIN, fixedsize='true', width='0.1')\n", " c.edge(\"OPC\", \"opc1\", label='', style=\"invis\")\n", " c.edge(\"PM\", \"pm1\", label='', style=\"invis\")\n", " c.edge(\"M\", \"m1\", label='', style=\"invis\")\n", " c.edge(\"Cell Death\", \"death1\", label='', style=\"invis\")\n", " c.edge(\"Uncertain Cell Type\", \"type1\", label='', style=\"invis\")" ] }, { "cell_type": "markdown", "id": "antique-watch", "metadata": {}, "source": [ "Display the graph" ] }, { "cell_type": "code", "execution_count": 18, "id": "robust-preparation", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359692\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359693\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359692->2359693\n", "\n", "\n", "\n", "\n", "2359701\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359692->2359701\n", "\n", "\n", "\n", "\n", "2359694\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359693->2359694\n", "\n", "\n", "\n", "\n", "2359695\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359694->2359695\n", "\n", "\n", "\n", "\n", "2359696\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359695->2359696\n", "\n", "\n", "\n", "\n", "2359697\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359696->2359697\n", "\n", "\n", "\n", "\n", "2359698\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359697->2359698\n", "\n", "\n", "\n", "\n", "2359699\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359698->2359699\n", "\n", "\n", "\n", "\n", "2359700\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359699->2359700\n", "\n", "\n", "\n", "\n", "dead_2359700\n", "\n", "\n", "\n", "\n", "2359700->dead_2359700\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359702\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359701->2359702\n", "\n", "\n", "\n", "\n", "2359703\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359702->2359703\n", "\n", "\n", "\n", "\n", "2359704\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359703->2359704\n", "\n", "\n", "\n", "\n", "2359705\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359704->2359705\n", "\n", "\n", "\n", "\n", "2359706\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359705->2359706\n", "\n", "\n", "\n", "\n", "2359707\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359706->2359707\n", "\n", "\n", "\n", "\n", "dead_2359707\n", "\n", "\n", "\n", "\n", "2359707->dead_2359707\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359708\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359709\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359708->2359709\n", "\n", "\n", "\n", "\n", "2359712\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359708->2359712\n", "\n", "\n", "\n", "\n", "2359715\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359708->2359715\n", "\n", "\n", "\n", "\n", "2359718\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359708->2359718\n", "\n", "\n", "\n", "\n", "2359721\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359708->2359721\n", "\n", "\n", "\n", "\n", "2359710\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359709->2359710\n", "\n", "\n", "\n", "\n", "2359711\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359710->2359711\n", "\n", "\n", "\n", "\n", "2359713\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359712->2359713\n", "\n", "\n", "\n", "\n", "2359714\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359713->2359714\n", "\n", "\n", "\n", "\n", "2359716\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359715->2359716\n", "\n", "\n", "\n", "\n", "2359717\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359716->2359717\n", "\n", "\n", "\n", "\n", "2359719\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359718->2359719\n", "\n", "\n", "\n", "\n", "2359720\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359719->2359720\n", "\n", "\n", "\n", "\n", "2359722\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359721->2359722\n", "\n", "\n", "\n", "\n", "2359724\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359721->2359724\n", "\n", "\n", "\n", "\n", "2359723\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359722->2359723\n", "\n", "\n", "\n", "\n", "2359725\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359724->2359725\n", "\n", "\n", "\n", "\n", "2359764\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359765\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359764->2359765\n", "\n", "\n", "\n", "\n", "2359769\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359764->2359769\n", "\n", "\n", "\n", "\n", "2359777\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359764->2359777\n", "\n", "\n", "\n", "\n", "2359766\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359765->2359766\n", "\n", "\n", "\n", "\n", "2359767\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359766->2359767\n", "\n", "\n", "\n", "\n", "2359768\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359767->2359768\n", "\n", "\n", "\n", "\n", "dead_2359768\n", "\n", "\n", "\n", "\n", "2359768->dead_2359768\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359770\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359769->2359770\n", "\n", "\n", "\n", "\n", "2359771\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359770->2359771\n", "\n", "\n", "\n", "\n", "2359772\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359771->2359772\n", "\n", "\n", "\n", "\n", "2359773\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359772->2359773\n", "\n", "\n", "\n", "\n", "2359774\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359773->2359774\n", "\n", "\n", "\n", "\n", "2359775\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359774->2359775\n", "\n", "\n", "\n", "\n", "2359776\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359775->2359776\n", "\n", "\n", "\n", "\n", "2359793\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359776->2359793\n", "\n", "\n", "\n", "\n", "2359795\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359776->2359795\n", "\n", "\n", "\n", "\n", "2359778\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359777->2359778\n", "\n", "\n", "\n", "\n", "2359779\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359778->2359779\n", "\n", "\n", "\n", "\n", "2359781\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359778->2359781\n", "\n", "\n", "\n", "\n", "2359780\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359779->2359780\n", "\n", "\n", "\n", "\n", "2359783\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359780->2359783\n", "\n", "\n", "\n", "\n", "2359789\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359780->2359789\n", "\n", "\n", "\n", "\n", "2359782\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359781->2359782\n", "\n", "\n", "\n", "\n", "dead_2359782\n", "\n", "\n", "\n", "\n", "2359782->dead_2359782\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359784\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359783->2359784\n", "\n", "\n", "\n", "\n", "2359785\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359784->2359785\n", "\n", "\n", "\n", "\n", "2359786\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359785->2359786\n", "\n", "\n", "\n", "\n", "2359787\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359786->2359787\n", "\n", "\n", "\n", "\n", "2359788\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359787->2359788\n", "\n", "\n", "\n", "\n", "2359790\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359789->2359790\n", "\n", "\n", "\n", "\n", "2359791\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359790->2359791\n", "\n", "\n", "\n", "\n", "2359792\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359791->2359792\n", "\n", "\n", "\n", "\n", "dead_2359792\n", "\n", "\n", "\n", "\n", "2359792->dead_2359792\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359794\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359793->2359794\n", "\n", "\n", "\n", "\n", "dead_2359794\n", "\n", "\n", "\n", "\n", "2359794->dead_2359794\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359796\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359795->2359796\n", "\n", "\n", "\n", "\n", "2359797\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359798\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359797->2359798\n", "\n", "\n", "\n", "\n", "2359801\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359797->2359801\n", "\n", "\n", "\n", "\n", "2359799\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359798->2359799\n", "\n", "\n", "\n", "\n", "2359800\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359799->2359800\n", "\n", "\n", "\n", "\n", "2359802\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359801->2359802\n", "\n", "\n", "\n", "\n", "2359803\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359802->2359803\n", "\n", "\n", "\n", "\n", "2359831\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359832\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359831->2359832\n", "\n", "\n", "\n", "\n", "2359845\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359831->2359845\n", "\n", "\n", "\n", "\n", "2359833\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359832->2359833\n", "\n", "\n", "\n", "\n", "2359834\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359833->2359834\n", "\n", "\n", "\n", "\n", "2359835\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359834->2359835\n", "\n", "\n", "\n", "\n", "2359836\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359835->2359836\n", "\n", "\n", "\n", "\n", "2359837\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359836->2359837\n", "\n", "\n", "\n", "\n", "2359838\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359837->2359838\n", "\n", "\n", "\n", "\n", "2359839\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359838->2359839\n", "\n", "\n", "\n", "\n", "2359840\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359839->2359840\n", "\n", "\n", "\n", "\n", "2359841\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359840->2359841\n", "\n", "\n", "\n", "\n", "2359842\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359841->2359842\n", "\n", "\n", "\n", "\n", "2359843\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359842->2359843\n", "\n", "\n", "\n", "\n", "2359844\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359843->2359844\n", "\n", "\n", "\n", "\n", "dead_2359844\n", "\n", "\n", "\n", "\n", "2359844->dead_2359844\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359846\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359845->2359846\n", "\n", "\n", "\n", "\n", "2359847\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359846->2359847\n", "\n", "\n", "\n", "\n", "2359848\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359847->2359848\n", "\n", "\n", "\n", "\n", "2359849\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359848->2359849\n", "\n", "\n", "\n", "\n", "2359850\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359849->2359850\n", "\n", "\n", "\n", "\n", "2359851\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359850->2359851\n", "\n", "\n", "\n", "\n", "2359852\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359851->2359852\n", "\n", "\n", "\n", "\n", "2359853\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359852->2359853\n", "\n", "\n", "\n", "\n", "2359854\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359853->2359854\n", "\n", "\n", "\n", "\n", "2359855\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359854->2359855\n", "\n", "\n", "\n", "\n", "2359856\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359855->2359856\n", "\n", "\n", "\n", "\n", "2359857\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359856->2359857\n", "\n", "\n", "\n", "\n", "2359858\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359859\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359858->2359859\n", "\n", "\n", "\n", "\n", "2359862\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359858->2359862\n", "\n", "\n", "\n", "\n", "2359860\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359859->2359860\n", "\n", "\n", "\n", "\n", "2359861\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359860->2359861\n", "\n", "\n", "\n", "\n", "2359871\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359861->2359871\n", "\n", "\n", "\n", "\n", "2359877\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359861->2359877\n", "\n", "\n", "\n", "\n", "2359863\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359862->2359863\n", "\n", "\n", "\n", "\n", "2359864\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359863->2359864\n", "\n", "\n", "\n", "\n", "2359868\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359863->2359868\n", "\n", "\n", "\n", "\n", "2359865\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359864->2359865\n", "\n", "\n", "\n", "\n", "2359866\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359865->2359866\n", "\n", "\n", "\n", "\n", "2359867\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359866->2359867\n", "\n", "\n", "\n", "\n", "dead_2359867\n", "\n", "\n", "\n", "\n", "2359867->dead_2359867\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359869\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359868->2359869\n", "\n", "\n", "\n", "\n", "2359870\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359869->2359870\n", "\n", "\n", "\n", "\n", "2359880\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359870->2359880\n", "\n", "\n", "\n", "\n", "2359883\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359870->2359883\n", "\n", "\n", "\n", "\n", "2359872\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359871->2359872\n", "\n", "\n", "\n", "\n", "2359873\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359872->2359873\n", "\n", "\n", "\n", "\n", "2359874\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359873->2359874\n", "\n", "\n", "\n", "\n", "2359875\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359874->2359875\n", "\n", "\n", "\n", "\n", "2359876\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359875->2359876\n", "\n", "\n", "\n", "\n", "dead_2359876\n", "\n", "\n", "\n", "\n", "2359876->dead_2359876\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359878\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359877->2359878\n", "\n", "\n", "\n", "\n", "2359879\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359878->2359879\n", "\n", "\n", "\n", "\n", "dead_2359879\n", "\n", "\n", "\n", "\n", "2359879->dead_2359879\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359881\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359880->2359881\n", "\n", "\n", "\n", "\n", "2359882\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359881->2359882\n", "\n", "\n", "\n", "\n", "dead_2359882\n", "\n", "\n", "\n", "\n", "2359882->dead_2359882\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359884\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359883->2359884\n", "\n", "\n", "\n", "\n", "dead_2359884\n", "\n", "\n", "\n", "\n", "2359884->dead_2359884\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359885\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359886\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359885->2359886\n", "\n", "\n", "\n", "\n", "2359888\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359885->2359888\n", "\n", "\n", "\n", "\n", "2359887\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359886->2359887\n", "\n", "\n", "\n", "\n", "2359890\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359887->2359890\n", "\n", "\n", "\n", "\n", "2359892\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359887->2359892\n", "\n", "\n", "\n", "\n", "2359889\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359888->2359889\n", "\n", "\n", "\n", "\n", "2359895\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359889->2359895\n", "\n", "\n", "\n", "\n", "2359901\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359889->2359901\n", "\n", "\n", "\n", "\n", "2359891\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359890->2359891\n", "\n", "\n", "\n", "\n", "2359903\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359891->2359903\n", "\n", "\n", "\n", "\n", "2359911\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359891->2359911\n", "\n", "\n", "\n", "\n", "2359893\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359892->2359893\n", "\n", "\n", "\n", "\n", "2359894\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359893->2359894\n", "\n", "\n", "\n", "\n", "2359924\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359894->2359924\n", "\n", "\n", "\n", "\n", "2359932\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359894->2359932\n", "\n", "\n", "\n", "\n", "2359896\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359895->2359896\n", "\n", "\n", "\n", "\n", "2359897\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359896->2359897\n", "\n", "\n", "\n", "\n", "2359898\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359897->2359898\n", "\n", "\n", "\n", "\n", "2359899\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359898->2359899\n", "\n", "\n", "\n", "\n", "2359900\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359899->2359900\n", "\n", "\n", "\n", "\n", "2359949\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359900->2359949\n", "\n", "\n", "\n", "\n", "2359958\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359900->2359958\n", "\n", "\n", "\n", "\n", "2359902\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359901->2359902\n", "\n", "\n", "\n", "\n", "2359915\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359902->2359915\n", "\n", "\n", "\n", "\n", "2359919\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359902->2359919\n", "\n", "\n", "\n", "\n", "2359904\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359903->2359904\n", "\n", "\n", "\n", "\n", "2359905\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359904->2359905\n", "\n", "\n", "\n", "\n", "2359906\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359905->2359906\n", "\n", "\n", "\n", "\n", "2359907\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359906->2359907\n", "\n", "\n", "\n", "\n", "2359908\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359907->2359908\n", "\n", "\n", "\n", "\n", "2359909\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359908->2359909\n", "\n", "\n", "\n", "\n", "2359910\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359909->2359910\n", "\n", "\n", "\n", "\n", "2359973\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359910->2359973\n", "\n", "\n", "\n", "\n", "2359978\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359910->2359978\n", "\n", "\n", "\n", "\n", "2359912\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359911->2359912\n", "\n", "\n", "\n", "\n", "2359913\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359912->2359913\n", "\n", "\n", "\n", "\n", "2359914\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359913->2359914\n", "\n", "\n", "\n", "\n", "2359937\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359914->2359937\n", "\n", "\n", "\n", "\n", "2359942\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359914->2359942\n", "\n", "\n", "\n", "\n", "2359916\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359915->2359916\n", "\n", "\n", "\n", "\n", "2359917\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359916->2359917\n", "\n", "\n", "\n", "\n", "2359918\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359917->2359918\n", "\n", "\n", "\n", "\n", "dead_2359918\n", "\n", "\n", "\n", "\n", "2359918->dead_2359918\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359920\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359919->2359920\n", "\n", "\n", "\n", "\n", "2359921\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359920->2359921\n", "\n", "\n", "\n", "\n", "2359922\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359921->2359922\n", "\n", "\n", "\n", "\n", "2359923\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359922->2359923\n", "\n", "\n", "\n", "\n", "dead_2359923\n", "\n", "\n", "\n", "\n", "2359923->dead_2359923\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359925\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359924->2359925\n", "\n", "\n", "\n", "\n", "2359926\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359925->2359926\n", "\n", "\n", "\n", "\n", "2359927\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359926->2359927\n", "\n", "\n", "\n", "\n", "2359928\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359927->2359928\n", "\n", "\n", "\n", "\n", "2359929\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359928->2359929\n", "\n", "\n", "\n", "\n", "2359930\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359929->2359930\n", "\n", "\n", "\n", "\n", "2359931\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359930->2359931\n", "\n", "\n", "\n", "\n", "2359981\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359931->2359981\n", "\n", "\n", "\n", "\n", "2359984\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359931->2359984\n", "\n", "\n", "\n", "\n", "2359933\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359932->2359933\n", "\n", "\n", "\n", "\n", "2359934\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359933->2359934\n", "\n", "\n", "\n", "\n", "2359935\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359934->2359935\n", "\n", "\n", "\n", "\n", "2359936\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359935->2359936\n", "\n", "\n", "\n", "\n", "2359965\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359936->2359965\n", "\n", "\n", "\n", "\n", "2359968\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359936->2359968\n", "\n", "\n", "\n", "\n", "2359938\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359937->2359938\n", "\n", "\n", "\n", "\n", "2359939\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359938->2359939\n", "\n", "\n", "\n", "\n", "2359940\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359939->2359940\n", "\n", "\n", "\n", "\n", "2359941\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359940->2359941\n", "\n", "\n", "\n", "\n", "dead_2359941\n", "\n", "\n", "\n", "\n", "2359941->dead_2359941\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359943\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359942->2359943\n", "\n", "\n", "\n", "\n", "2359944\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359943->2359944\n", "\n", "\n", "\n", "\n", "2359945\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359944->2359945\n", "\n", "\n", "\n", "\n", "2359946\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359945->2359946\n", "\n", "\n", "\n", "\n", "2359947\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359946->2359947\n", "\n", "\n", "\n", "\n", "2359948\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359947->2359948\n", "\n", "\n", "\n", "\n", "2360000\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359948->2360000\n", "\n", "\n", "\n", "\n", "2360002\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359948->2360002\n", "\n", "\n", "\n", "\n", "2359950\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359949->2359950\n", "\n", "\n", "\n", "\n", "2359951\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359950->2359951\n", "\n", "\n", "\n", "\n", "2359952\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359951->2359952\n", "\n", "\n", "\n", "\n", "2359953\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359952->2359953\n", "\n", "\n", "\n", "\n", "2359954\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359953->2359954\n", "\n", "\n", "\n", "\n", "2359955\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359954->2359955\n", "\n", "\n", "\n", "\n", "2359956\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359955->2359956\n", "\n", "\n", "\n", "\n", "2359957\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359956->2359957\n", "\n", "\n", "\n", "\n", "2359959\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359958->2359959\n", "\n", "\n", "\n", "\n", "2359960\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359959->2359960\n", "\n", "\n", "\n", "\n", "2359961\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359960->2359961\n", "\n", "\n", "\n", "\n", "2359962\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359961->2359962\n", "\n", "\n", "\n", "\n", "2359963\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359962->2359963\n", "\n", "\n", "\n", "\n", "2359964\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359963->2359964\n", "\n", "\n", "\n", "\n", "dead_2359964\n", "\n", "\n", "\n", "\n", "2359964->dead_2359964\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359966\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359965->2359966\n", "\n", "\n", "\n", "\n", "2359967\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359966->2359967\n", "\n", "\n", "\n", "\n", "2359988\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359967->2359988\n", "\n", "\n", "\n", "\n", "2359992\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359967->2359992\n", "\n", "\n", "\n", "\n", "2359969\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359968->2359969\n", "\n", "\n", "\n", "\n", "2359970\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359969->2359970\n", "\n", "\n", "\n", "\n", "2359971\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359970->2359971\n", "\n", "\n", "\n", "\n", "2359972\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359971->2359972\n", "\n", "\n", "\n", "\n", "2360004\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359972->2360004\n", "\n", "\n", "\n", "\n", "2360006\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359972->2360006\n", "\n", "\n", "\n", "\n", "2359974\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359973->2359974\n", "\n", "\n", "\n", "\n", "2359975\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359974->2359975\n", "\n", "\n", "\n", "\n", "2359976\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359975->2359976\n", "\n", "\n", "\n", "\n", "2359977\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359976->2359977\n", "\n", "\n", "\n", "\n", "2359979\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359978->2359979\n", "\n", "\n", "\n", "\n", "2359980\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359979->2359980\n", "\n", "\n", "\n", "\n", "2359996\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359980->2359996\n", "\n", "\n", "\n", "\n", "2359998\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359980->2359998\n", "\n", "\n", "\n", "\n", "2359982\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359981->2359982\n", "\n", "\n", "\n", "\n", "2359983\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359982->2359983\n", "\n", "\n", "\n", "\n", "dead_2359983\n", "\n", "\n", "\n", "\n", "2359983->dead_2359983\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359985\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359984->2359985\n", "\n", "\n", "\n", "\n", "2359986\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359985->2359986\n", "\n", "\n", "\n", "\n", "2359987\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359986->2359987\n", "\n", "\n", "\n", "\n", "2359989\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359988->2359989\n", "\n", "\n", "\n", "\n", "2359990\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359989->2359990\n", "\n", "\n", "\n", "\n", "2359991\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359990->2359991\n", "\n", "\n", "\n", "\n", "dead_2359991\n", "\n", "\n", "\n", "\n", "2359991->dead_2359991\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359993\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359992->2359993\n", "\n", "\n", "\n", "\n", "2359994\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359993->2359994\n", "\n", "\n", "\n", "\n", "2359995\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359994->2359995\n", "\n", "\n", "\n", "\n", "dead_2359995\n", "\n", "\n", "\n", "\n", "2359995->dead_2359995\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359997\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359996->2359997\n", "\n", "\n", "\n", "\n", "2359999\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2359998->2359999\n", "\n", "\n", "\n", "\n", "dead_2359999\n", "\n", "\n", "\n", "\n", "2359999->dead_2359999\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360001\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360000->2360001\n", "\n", "\n", "\n", "\n", "dead_2360001\n", "\n", "\n", "\n", "\n", "2360001->dead_2360001\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360003\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360002->2360003\n", "\n", "\n", "\n", "\n", "dead_2360003\n", "\n", "\n", "\n", "\n", "2360003->dead_2360003\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360005\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360004->2360005\n", "\n", "\n", "\n", "\n", "dead_2360005\n", "\n", "\n", "\n", "\n", "2360005->dead_2360005\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360007\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "2360006->2360007\n", "\n", "\n", "\n", "\n", "dead_2360007\n", "\n", "\n", "\n", "\n", "2360007->dead_2360007\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "key1\n", "certain\n", "uncertain\n", "\n", "\n", "\n", "key2\n", " \n", " \n", "\n", "\n", "\n", "key1:i1->key2:i1\n", "\n", "\n", "\n", "\n", "key1:i2->key2:i2\n", "\n", "\n", "\n", "\n", "OPC\n", "OPC\n", "\n", "\n", "\n", "opc1\n", "\n", "\n", "\n", "\n", "\n", "PM\n", "PM\n", "\n", "\n", "\n", "pm1\n", "\n", "\n", "\n", "\n", "\n", "M\n", "M\n", "\n", "\n", "\n", "m1\n", "\n", "\n", "\n", "\n", "\n", "Cell Death\n", "Cell Death\n", "\n", "\n", "\n", "death1\n", "\n", "\n", "\n", "\n", "\n", "Uncertain Cell Type\n", "Uncertain Cell Type\n", "\n", "\n", "\n", "type1\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "f" ] }, { "cell_type": "markdown", "id": "dependent-appraisal", "metadata": {}, "source": [ "## Save the lineage\n", "* To save the lineage as PDF (default), run the cell below.\n", "* To save in another format, edit the cell creating the graph i.e.\n", "``f = graphviz.Digraph(comment='Lineage', format='pdf')``\n", "* Replace the ``format`` attribute by ``png`` or ``svg`` for example, and re-run the cells generating the graph.\n", "\n", "The lineage is saved in the ``home`` directory, to download it \n", "* Go to the ``home`` directory\n", "* Select the checkbox next to the file.\n", "* Click ``Download`` in the menu bar that shows up when " ] }, { "cell_type": "code", "execution_count": 19, "id": "outstanding-correlation", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'/home/jmarie/lineage_13425213.pdf'" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "home = expanduser(\"~\")\n", "f.view(home+\"/lineage_%s\" % imageId)" ] }, { "cell_type": "markdown", "id": "billion-breeding", "metadata": {}, "source": [ "### License (BSD 2-Clause) " ] }, { "cell_type": "markdown", "id": "foster-alcohol", "metadata": {}, "source": [ "Copyright (C) 2021 University of Dundee. All Rights Reserved.\n", "\n", "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n", "\n", "Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ] } ], "metadata": { "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.7.10" } }, "nbformat": 4, "nbformat_minor": 5 }