From 7bd325919f094a7a4fc3bfe61056e6d509be1838 Mon Sep 17 00:00:00 2001 From: Aadityanshu Abhinav <aaadityanshu@gmail.com> Date: Wed, 2 Oct 2024 13:59:56 +0000 Subject: [PATCH] Update file software.html --- wiki/pages/software.html | 1934 +++++++++++++++++++------------------- 1 file changed, 967 insertions(+), 967 deletions(-) diff --git a/wiki/pages/software.html b/wiki/pages/software.html index ca2e0e5..f45374b 100644 --- a/wiki/pages/software.html +++ b/wiki/pages/software.html @@ -1,1002 +1,1002 @@ {% extends "layout.html" %} {% block title %}Software{% endblock %} {% block -lead %}Software in iGEM should make synthetic biology based on standard parts -easier, faster, better or more accessible to our community.{% endblock %} {% -block page_content %} - -<div id="root"> - <link - href="{{ url_for('static', filename = 'Gotham_Thin.otf') }}" - rel="stylesheet" - /> - <link - href="{{ url_for('static', filename = 'GlacialIndifference-Regular.otf') }}" - rel="stylesheet" - /> - <script type="text/x-mathjax-config"> - MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); - </script> - <script - type="text/javascript" - src="https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/tex-mml-chtml.min.js" - ></script> - <style> - * { - margin: 0; - padding: 0; - box-sizing: border-box; - } - - html { - scroll-behavior: smooth; - } - - .page { - font-family: "glacial_indifference"; - /* font-weight: bold; */ - - color: white; - } - - @font-face { - font-family: "Gotham-Thin"; - src: url("{{ url_for('static', filename = 'Gotham_Thin.otf') }}"); - font-weight: normal; - font-style: normal; - font-display: swap; - } - - @font-face { - font-family: glacial_indifference; - font-style: normal; - font-weight: 400; - src: local("Glacial Indifference"), - url("{{ url_for('static', filename = 'GlacialIndifference-Regular.otf') }}"); - } - @font-face { - font-family: glacial_indifference; - font-style: normal; - font-weight: bold; - src: local("Glacial Indifference"), - url("{{ url_for('static', filename = 'GlacialIndifference-Bold.otf') }}"); - } - - .page { - max-width: 1000px; - margin: 0 auto; - } - - /* Mars Image */ - .mars-image { - width: 150px; - height: 150px; - display: block; - margin: 0 auto; - } - - /* Page Title */ - .title h1 { - font-size: 3em; - font-weight: bold; - text-align: center; - margin-top: 0px; - font-family: "gotham thin"; - } - - /* Layout for TOC and Content */ - .layout { - display: flex; - justify-content: space-between; - align-items: flex-start; - margin-top: -15%; - } - - /* Table of Contents (Left side) */ - .toc { - flex-basis: 20%; - text-align: left; - padding-right: 20px; - border-right: 2px solid white; - position: sticky; - top: 20vw; - margin-top: 15%; - } - - /* Active TOC link */ - .toc ul li a.active { - color: #ffdd00; - /* Highlight color */ - font-size: 1em; - /* Larger size to highlight */ - } - - .toc h2 { - font-size: 1.5em; - margin-bottom: 10px; - } - - .toc ul { - list-style-type: none; - padding: 0; - } - - .toc ul li { - margin: 10px 0; - } - - .toc ul li a { - color: #f0d278; - text-decoration: none; - font-weight: bold; - } - - .toc ul li a:hover { - text-decoration: none; - } - - /* Content Sections (Right side) */ - .content { - flex-basis: 75%; - padding-left: 20px; - width: 80%; - display: flex; - flex-direction: column; - justify-content: space-evenly; - } - .section h1 { - color: #f0d278; - font-weight: bold; - margin: 8rem 0 2rem 0; - text-align: center; - font-size: 70px; - } - - .section h2 { - color: #f0d278; - font-weight: bold; - margin: -1rem 0 2rem 0; - text-align: center; - font-size: 30px; - } - - .section p { - font-size: 0.9em; - text-align: justify; - line-height: 1.6; - } - - .section ul { - font-size: 0.9em; - } - - .mars_div { - margin-top: 2rem; - } - - .textukas { - font-size: 450%; - } - - @media screen and (max-width: 1024px) { - .mars_div { - margin-top: 3rem; + lead %}Software in iGEM should make synthetic biology based on standard parts + easier, faster, better or more accessible to our community.{% endblock %} {% + block page_content %} + + <div id="root"> + <link + href="{{ url_for('static', filename = 'Gotham_Thin.otf') }}" + rel="stylesheet" + /> + <link + href="{{ url_for('static', filename = 'GlacialIndifference-Regular.otf') }}" + rel="stylesheet" + /> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); + </script> + <script + type="text/javascript" + src="{{ url_for('static', filename = 'latex.js') }}" + ></script> + <style> + * { + margin: 0; + padding: 0; + box-sizing: border-box; + } + + html { + scroll-behavior: smooth; } - } - - @media screen and (max-width: 768px) { + .page { - padding: 2rem 0 0 0; + font-family: "glacial_indifference"; + /* font-weight: bold; */ + + color: white; } - + + @font-face { + font-family: "Gotham-Thin"; + src: url("{{ url_for('static', filename = 'Gotham_Thin.otf') }}"); + font-weight: normal; + font-style: normal; + font-display: swap; + } + + @font-face { + font-family: glacial_indifference; + font-style: normal; + font-weight: 400; + src: local("Glacial Indifference"), + url("{{ url_for('static', filename = 'GlacialIndifference-Regular.otf') }}"); + } + @font-face { + font-family: glacial_indifference; + font-style: normal; + font-weight: bold; + src: local("Glacial Indifference"), + url("{{ url_for('static', filename = 'GlacialIndifference-Bold.otf') }}"); + } + + .page { + max-width: 1000px; + margin: 0 auto; + } + + /* Mars Image */ + .mars-image { + width: 150px; + height: 150px; + display: block; + margin: 0 auto; + } + + /* Page Title */ + .title h1 { + font-size: 3em; + font-weight: bold; + text-align: center; + margin-top: 0px; + font-family: "gotham thin"; + } + + /* Layout for TOC and Content */ .layout { - flex-direction: column; - align-items: center; + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-top: -15%; } - - /* Table of contents on top in mobile */ + + /* Table of Contents (Left side) */ .toc { - flex-basis: 100%; - text-align: center; + flex-basis: 20%; + text-align: left; + padding-right: 20px; + border-right: 2px solid white; + position: sticky; + top: 20vw; + margin-top: 15%; + } + + /* Active TOC link */ + .toc ul li a.active { + color: #ffdd00; + /* Highlight color */ + font-size: 1em; + /* Larger size to highlight */ + } + + .toc h2 { + font-size: 1.5em; + margin-bottom: 10px; + } + + .toc ul { + list-style-type: none; padding: 0; - border-right: none; - position: static; - text-align: center; } - - /* Add a horizontal line separator between TOC and content */ - .toc::after { - content: ""; - display: block; - width: 100%; - height: 1px; - background-color: white; - margin: 20px 0; + + .toc ul li { + margin: 10px 0; + } + + .toc ul li a { + color: #f0d278; + text-decoration: none; + font-weight: bold; } - + + .toc ul li a:hover { + text-decoration: none; + } + + /* Content Sections (Right side) */ .content { - flex-basis: 100%; - padding: 0; + flex-basis: 75%; + padding-left: 20px; + width: 80%; + display: flex; + flex-direction: column; + justify-content: space-evenly; } - .section h1 { - margin-top: 2rem; - font-size: 45px; + color: #f0d278; + font-weight: bold; + margin: 8rem 0 2rem 0; + text-align: center; + font-size: 70px; + } + + .section h2 { + color: #f0d278; + font-weight: bold; + margin: -1rem 0 2rem 0; + text-align: center; + font-size: 30px; + } + + .section p { + font-size: 0.9em; + text-align: justify; + line-height: 1.6; } - + + .section ul { + font-size: 0.9em; + } + .mars_div { - margin-top: 5rem; + margin-top: 2rem; } - + .textukas { - font-size: 250%; + font-size: 450%; } - - .toc { - display: none; + + @media screen and (max-width: 1024px) { + .mars_div { + margin-top: 3rem; + } } - } - </style> - <div class="mars_div" style="position: relative; overflow: hidden"> - <img - src="https://static.igem.wiki/teams/5155/mars.webp" - style="padding: 10%; padding-top: 12%; padding-left: 0; padding-right: 0" - /> - <div - class="textukas" - style=" - position: absolute; - top: 52%; - left: 50%; - transform: translate(-50%, -50%); - font-weight: 1000; - color: rgb(224, 224, 210); - z-index: 11; - text-align: center; - font-family: gotham-thin; - text-shadow: rgba(255, 255, 255, 0.7) 0px 0px 15px; - " - > - SOFTWARE - </div> - </div> - <div class="page"> - <!-- Mars image and page title --> - - <div class="layout"> - <!-- Table of contents (on the left) --> - <div class="toc"> - <!-- <h2>Table of Contents</h2> --> - <ul> - <li><a href="#section2">Inspiration</a></li> - <li><a href="#section3">Pipeline</a></li> - <li><a href="#section4">Web Tool</a></li> - <li><a href="#section5">Results</a></li> - </ul> + + @media screen and (max-width: 768px) { + .page { + padding: 2rem 0 0 0; + } + + .layout { + flex-direction: column; + align-items: center; + } + + /* Table of contents on top in mobile */ + .toc { + flex-basis: 100%; + text-align: center; + padding: 0; + border-right: none; + position: static; + text-align: center; + } + + /* Add a horizontal line separator between TOC and content */ + .toc::after { + content: ""; + display: block; + width: 100%; + height: 1px; + background-color: white; + margin: 20px 0; + } + + .content { + flex-basis: 100%; + padding: 0; + } + + .section h1 { + margin-top: 2rem; + font-size: 45px; + } + + .mars_div { + margin-top: 5rem; + } + + .textukas { + font-size: 250%; + } + + .toc { + display: none; + } + } + </style> + <div class="mars_div" style="position: relative; overflow: hidden"> + <img + src="https://static.igem.wiki/teams/5155/mars.webp" + style="padding: 10%; padding-top: 12%; padding-left: 0; padding-right: 0" + /> + <div + class="textukas" + style=" + position: absolute; + top: 52%; + left: 50%; + transform: translate(-50%, -50%); + font-weight: 1000; + color: rgb(224, 224, 210); + z-index: 11; + text-align: center; + font-family: gotham-thin; + text-shadow: rgba(255, 255, 255, 0.7) 0px 0px 15px; + " + > + SOFTWARE </div> - - <!-- Content Sections (on the right) --> - <div class="content"> - <div id="section1" class="section"> - <p><br /></p> - <p><br /></p> - <p style="text-align: justify"> - Chassis selection is a critical early decision in any synthetic - biology project, particularly when working in environments beyond - Earth. As we push the boundaries of In Situ Resource Utilization - (ISRU), the need to choose organisms that can efficiently harness - local minerals and resources becomes paramount. Traditional - laboratory organisms like <em>E. coli</em> dominate - research due to their well-understood biology. However, their - suitability for non-terrestrial environments often requires - extensive genetic engineering to meet the demands of space-based - resource constraints. - </p> - <p style="text-align: justify"> - To address this challenge, our team - developed <strong>Astrolabe</strong>, a software tool designed - to assist researchers in selecting the most appropriate chassis - organism based on specific environmental resources and physiological - conditions. By leveraging available resources and minimizing the - engineering required, Astrolabe provides a ranked list of suitable - organisms, offering a streamlined path to achieving desired - biological outputs with maximum efficiency. - </p> - <p style="text-align: justify"> - Named after the ancient instrument that guided explorers across the - seas, Astrolabe is set to guide the next generation of explorers in - space. Just as the medieval astrolabe was a tool for navigation and - discovery, our modern-day Astrolabe will aid scientists and - engineers in navigating the complex landscape of biological resource - utilization in space. - </p> - <img - src="https://static.igem.wiki/teams/5155/description-7.webp" - width="100%" - /> - <p style="text-align: justify"> - Find the software hosted here: <a - href="http://astrolabeiitm.duckdns.org/" - ><u>http://astrolabeiitm.duckdns.org/</u></a - > - </p> - </div> - - <div id="section2" class="section"> - <h1>Inspiration</h1> - - <p style="text-align: justify"> - During the early stages of ideation for our project, one of the most - significant challenges we encountered was selecting suitable host - organisms, particularly those capable of solubilizing silicates and - utilizing them in extraterrestrial environments. - </p> - <p style="text-align: justify"> - This task was far from trivial, as identifying organisms with the - ability to interact with and metabolize silicate-based minerals - required an exhaustive review of both microbiology literature and - resource availability data. After conducting an extensive literature - review, we eventually identified a handful of organisms that could - meet our specific use case. However, the process was both - time-consuming and difficult, underscoring a broader issue within - the field. - </p> - <p style="text-align: justify"> - In our search for a more efficient way to select organisms that - could maximize resource utilization, we assumed that a software tool - already existed to recommend chassis organisms based on given - environmental resources. To our surprise, no such tool was - available. This gap in existing SynBio tools sparked the idea to - create a solution ourselves. - </p> - <p style="text-align: justify"> - We embarked on developing Astrolabe, a software designed to ease - this burden by providing a ranked list of organisms tailored to - specific environmental conditions and resource constraints, - streamlining chassis selection and significantly reducing the time - required for manual literature reviews and organism screening. - </p> + </div> + <div class="page"> + <!-- Mars image and page title --> + + <div class="layout"> + <!-- Table of contents (on the left) --> + <div class="toc"> + <!-- <h2>Table of Contents</h2> --> + <ul> + <li><a href="#section2">Inspiration</a></li> + <li><a href="#section3">Pipeline</a></li> + <li><a href="#section4">Web Tool</a></li> + </ul> </div> - - <div id="section3" class="section"> - <h1>Pipeline</h1> - - <h2 - style=" - text-align: justify; - padding-left: 40%; - font-family: glacial_indifference; - " - > - <strong>Overview</strong> - </h2> - <p style="text-align: justify"> - Our software pipeline facilitates analyzing and identifying synbio - hosts based on available resources and growth conditions as user - inputs. The aim is to gather relevant resources from the user, - perform pre-processing, search for metabolic data, find resource - utilization pathways, and ultimately provide a ranked list of - potential chassis that comprise these pathways. - </p> - <p style="text-align: justify"> - <strong>User Input and Preprocessing</strong>: The process starts - with the user entering the common name of a molecule and selecting - its corresponding ChEBI ID from a list. We’ve chosen the ChEBI - standard for input as it provides a cataloging of a wide array of - chemical formats and offers easy code integration via its API. The - chosen ID can then be added to the Resources list. Also, the user - can input query-related information, such as required physiological - conditions (e.g., temperature, pH) - </p> - <p style="text-align: justify"> - <strong>Metabolite Search and Matching</strong>: Executing a search - for specific reactions of these resource compounds and searching for - metabolic pathways comprising these reactions in several databases, - such as <a href="https://biocyc.org/"><u>BioCyc</u></a - >, <a href="https://www.ebi.ac.uk/uniprot/index" - ><u>UniProt</u></a - > (Universal Protein Resource), <a - href="https://www.genome.jp/kegg/" - ><u>KEGG</u></a - > (Kyoto Encyclopedia of Genes and Genomes) and <a - href="https://www.brenda-enzymes.org/" - ><u>BRENDA</u></a - > (Braunschweig Enzyme Database). These metabolic pathways are - then matched to potential hosts - </p> - <p style="text-align: justify"> - <strong>Scoring Function</strong>: The identified chassis are - evaluated and ranked based on two key criteria: resourcefulness and - survivability. Resourcefulness measures the utility of the organism - as a chassis, determined by the number of pathways identified within - it. Survivability assesses how well the organism's optimal - growth conditions, such as temperature and oxygen requirements, - align with the user's input. The physiological information is - obtained from <a href="https://bacdive.dsmz.de/" - ><u>BacDive</u></a - > and <a href="https://mediadive.dsmz.de/" - ><u>MediaDive</u></a - >. The closer the match, the higher the ranking for survivability. - </p> - <p style="text-align: justify"> - <strong>Output</strong>: Using the scoring function, a ranked list - of organisms that can be engineered for In Situ Resource Utilization - (ISRU) is generated. The top organisms are selected based on their - resource utilization pathways and adaptability to various - conditions. The associated pathways and potential use cases are - presented. - </p> - - <img - src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXflcW-Ppzyj9WYquWsIQS3YUY_j0kqPTONWogMMKZYggD1Odf-EmU2anObKNioP1_hMMdG030-Iu_U8XuSnxpURkrVrnu7DQU1m_ufG6alDj78nEniHA2Ha7J2q1WeBlBU_TfTSEBy60BwWXD_uQp-1VHDo?key=SLRk3Rd_eX-zGU4puFyaTg" - width="100%" - /> - <h2 style="padding-top: 10%; font-family: glacial_indifference"> - BioCyc - </h2> - <p style="text-align: justify"> - <strong>Overview of BioCyc</strong> - </p> - <p style="text-align: justify"> - BioCyc is a collection of Pathway/Genome Databases (PGDBs) for model - eukaryotes and for thousands of microbes, plus software tools for - exploring them. It contains curated data from 146,000 publications. - The reason BioCyc was picked as one of the databases was due to the - unique pathways and metabolites in its catalog, including some - inorganics and pathways involved in critical biogeochemical cycles, - absent in other databases. - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong - >Accessing BioCyc Using Python's Requests Package</strong - > - </p> - <p style="text-align: justify"> - Python’s Requests package allows users to query web pages and - collect the information on the page. First, we created a requests - session, which allowed us to log in to BioCyc. This was necessary - because BioCyc requires the user to log in before being able to - access the database. After doing this, we queried various payloads - corresponding to each step of the workflow. - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong - >Mapping ChEBI IDs to Pathways and Organism Filtering</strong - > - </p> - <p style="text-align: justify"> - User-provided ChEBI IDs are converted to BioCyc IDs for - compatibility with metabolic databases. The software then retrieves - biochemical reactions involving the specified compounds, identifies - associated metabolic pathways, and collects organisms documented to - contain these pathways. To ensure relevance for synthetic biology - applications, multicellular organisms under the taxonomic groups - 'Metazoa' and 'Embryophyta' are filtered out, - leaving only unicellular candidates. The remaining organisms are - then passed through a scoring function, which ranks them based on - their suitability as chassis organisms, optimizing for resource - utilization efficiency and genetic tractability. - </p> - - <img - src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXd2VLFMNmKNJlEbUuPfk7gWTUsnzQiIDOmjMturxHSdAEII5QBdFdYng32d_Rp6khmf0KNkDBfSaG1Q7WEXQcX6EnoApoK7UD1RxhbMyvPf65lFi8fs_s-usfGZBCqbpRBFAKK_KFmfDiQKQMpTYigdACY?key=SLRk3Rd_eX-zGU4puFyaTg" - width="100%" - /> - <h2 style="padding-top: 10%; font-family: glacial_indifference"> - UniProt - </h2> - <p style="text-align: justify"> - <strong>Overview of UniProt</strong> - </p> - <p style="text-align: justify"> - UniProt is a comprehensive protein sequence and functional - information database. It provides detailed annotations for proteins, - including their functions, structures, and interactions. UniProt is - a crucial resource for researchers in fields such as genomics, - proteomics, and bioinformatics. It hosts a wealth of curated data - from various sources, allowing users to explore relationships - between proteins, their corresponding organisms, and biochemical - pathways. The database is especially beneficial for studies - involving synthetic biology and metabolic engineering due to its - extensive protein functional information. - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong - >Accessing UniProt Using Python's Requests Package</strong + + <!-- Content Sections (on the right) --> + <div class="content"> + <div id="section1" class="section"> + <p><br /></p> + <p><br /></p> + <p style="text-align: justify"> + Chassis selection is a critical early decision in any synthetic + biology project, particularly when working in environments beyond + Earth. As we push the boundaries of In Situ Resource Utilization + (ISRU), the need to choose organisms that can efficiently harness + local minerals and resources becomes paramount. Traditional + laboratory organisms like <em>E. coli</em> dominate + research due to their well-understood biology. However, their + suitability for non-terrestrial environments often requires + extensive genetic engineering to meet the demands of space-based + resource constraints. + </p> + <p style="text-align: justify"> + To address this challenge, our team + developed <strong>Astrolabe</strong>, a software tool designed + to assist researchers in selecting the most appropriate chassis + organism based on specific environmental resources and physiological + conditions. By leveraging available resources and minimizing the + engineering required, Astrolabe provides a ranked list of suitable + organisms, offering a streamlined path to achieving desired + biological outputs with maximum efficiency. + </p> + <p style="text-align: justify"> + Named after the ancient instrument that guided explorers across the + seas, Astrolabe is set to guide the next generation of explorers in + space. Just as the medieval astrolabe was a tool for navigation and + discovery, our modern-day Astrolabe will aid scientists and + engineers in navigating the complex landscape of biological resource + utilization in space. + </p> + <img + src="https://static.igem.wiki/teams/5155/description-7.webp" + width="100%" + /> + <p style="text-align: justify"> + Find the software hosted here: <a + href="http://astrolabeiitm.duckdns.org/" + ><u>http://astrolabeiitm.duckdns.org/</u></a + > + </p> + </div> + + <div id="section2" class="section"> + <h1>Inspiration</h1> + + <p style="text-align: justify"> + During the early stages of ideation for our project, one of the most + significant challenges we encountered was selecting suitable host + organisms, particularly those capable of solubilizing silicates and + utilizing them in extraterrestrial environments. + </p> + <p style="text-align: justify"> + This task was far from trivial, as identifying organisms with the + ability to interact with and metabolize silicate-based minerals + required an exhaustive review of both microbiology literature and + resource availability data. After conducting an extensive literature + review, we eventually identified a handful of organisms that could + meet our specific use case. However, the process was both + time-consuming and difficult, underscoring a broader issue within + the field. + </p> + <p style="text-align: justify"> + In our search for a more efficient way to select organisms that + could maximize resource utilization, we assumed that a software tool + already existed to recommend chassis organisms based on given + environmental resources. To our surprise, no such tool was + available. This gap in existing SynBio tools sparked the idea to + create a solution ourselves. + </p> + <p style="text-align: justify"> + We embarked on developing Astrolabe, a software designed to ease + this burden by providing a ranked list of organisms tailored to + specific environmental conditions and resource constraints, + streamlining chassis selection and significantly reducing the time + required for manual literature reviews and organism screening. + </p> + </div> + + <div id="section3" class="section"> + <h1>Pipeline</h1> + + <h2 + style=" + text-align: justify; + padding-left: 40%; + font-family: glacial_indifference; + " > - </p> - <p style="text-align: justify"> - The Python Requests package enables users to easily query the - UniProt REST API to retrieve protein-related information. The - querying process begins by constructing a request URL that - incorporates specific filters such as taxonomy and ChEBI - identifiers. This step ensures that only relevant protein data is - fetched from UniProt. The code provided utilizes a session with the - UniProt API to access necessary protein data based on the given - ChEBI IDs. - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong>Mapping ChEBI IDs to UniProt Data</strong> - </p> - <p style="text-align: justify"> - The process of querying UniProt involves the following steps: - </p> - <ol style="padding-left: 10%"> - <li> - <p style="text-align: justify"> - <strong>ChEBI ID Input</strong>: Users input ChEBI IDs as - strings, which are then processed to extract the relevant part - for querying. - </p> - </li> - <li> - <p style="text-align: justify"> - <strong>UniProt Query Construction</strong>: A query URL is - constructed that targets specific organisms (e.g., bacteria) and - filters for proteins that have been reviewed and are associated - with the specified ChEBI ID as a cofactor. - </p> - </li> - <li> - <p style="text-align: justify"> - <strong>Data Retrieval</strong>: The constructed URL is used to - send a GET request to the UniProt API. The resource list in - ChEBI ID format is passed via the request to get the organism - with the corresponding number of pathways containing the - resource of interest in it. If the request is successful, the - response data is returned in JSON format. - </p> - </li> - </ol> - <p><br /></p> - <p style="text-align: justify"> - <strong>Filtering Organism Data</strong> - </p> - <p style="text-align: justify"> - Once the data is retrieved, it undergoes processing to filter out - duplicates and irrelevant organisms: - </p> - <ol style="padding-left: 10%; font-size: 1em"> - <li> - <p style="text-align: justify"> - <strong>Duplicate Filtering</strong>: The - filter_duplicates function counts occurrences of each - organism based on its scientific name, ensuring that each unique - organism is represented only once in the results. - </p> - </li> - <li> - <p style="text-align: justify"> - <strong>Relevance Filtering</strong>: The code further filters - results based on the annotation score (indicating the likely - accuracy of the data), retaining only those entries with a - score greater than or equal to 3, and excluding any organisms - classified as viruses. - </p> - </li> - </ol> - <p><br /></p> - <p style="text-align: justify"> - <strong>Summary of Results</strong> - </p> - - <p style="text-align: justify"> - The final output is a counter of unique organisms that meet the - specified criteria, along with their respective counts. The results - provide insights into the distribution of proteins associated with - the input ChEBI IDs, enabling researchers to identify the most - relevant organisms for further study. - </p> - <h2 style="padding-top: 10%; font-family: glacial_indifference"> - KEGG and BRENDA - </h2> - <p style="text-align: justify"> - <strong>Introduction</strong> - </p> - <p style="text-align: justify"> - KEGG (Kyoto Encyclopedia of Genes and Genomes) is a collection of - databases dealing with genomes, biological pathways, and chemical - substances. BRENDA (BRaunschweig ENzyme DAtabase) is the - world's most comprehensive online database for functional, - biochemical and molecular biological data on enzymes, metabolites - and metabolic pathways. In the current architecture of the software, - KEGG serves as the backbone for retrieving organismal data while - BRENDA supplements enzyme data for deeper insights into metabolic - pathways. KEGG and BRENDA are queried to retrieve enzymes and genes - that act on the compound. Then, KEGG is queried to collect enzyme - and gene information to identify organisms. - </p> - - <p style="text-align: justify"> - KEGG structures its database as a collection of interconnected - sub-databases (KEGG Compounds, KEGG Enzymes, KEGG Genes, KEGG - Organisms, and KEGG BRITE). Navigating through these sub-databases - was unintuitive due to the lack of cohesive documentation explaining - how the sub-databases cross-reference each other. After some - iterations, we settled on a compound → enzyme → gene - → organism approach, which proved more efficient. Following - this, we have implemented a filtering step to include only those - taxa that are relevant to synthetic biology, including Ascomycetes, - Basidiomycetes, Diatoms, Euglenozoa, Green algae, Red algae, along - with bacteria. - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong>Accessing and Sorting Data</strong> - </p> - <p style="text-align: justify"> - The KEGG subroutine required optimisations to overcome 2 major - bottlenecks, namely query limits and the complexity of mapping - enzymes to genes and genes to organisms: - </p> - <ul style="padding-left: 10%; font-size: 1em"> - <li> - <p style="text-align: justify"> - <strong>Batching Queries</strong>: By sending requests in - batches instead of individually, we reduced redundant queries - and lowered overall processing time. - </p> - </li> - <li> - <p style="text-align: justify"> - <strong>Multiprocessing</strong>: Multiprocessing is a computer - paradigm in which two or more processors in a computer are - simultaneously executing different portions of the same program. - This technique allows for better utilization of available - hardware and improves speed. We implemented Python’s - multiprocessing library to run multiple independent queries in - parallel. This was particularly effective since each query was - isolated and could be processed independently. This optimization - alone shaved around 30 seconds off the initial 4 minutes. - </p> - </li> - <li> - <p style="text-align: justify"> - <strong>Local Searching</strong>: We discovered that KEGG uses a - prefix in gene codes corresponding to organism codes. By - downloading a local list of organism codes from KEGG, We were - able to bypass querying the server for each gene, dramatically - reducing the time spent on gene-to-organism mapping by - eliminating network delays. - </p> - </li> - </ul> - <p style="text-align: justify"> - As not all compounds were documented in KEGG, we decided to - complement the KEGG results by running the same compound queries - through BRENDA, to see if additional enzymes could be identified. - BRENDA uses the SOAP API architecture. SOAP is fundamentally - different from the REST architecture used in KEGG, requiring an - intermediary service provider to process requests, which added - complexity. Due to improperly configured API endpoints and function - prototypes, we were unable to sort the API calls in time. Thus, we - resorted to using BRENDA’s CSV download functionality. We have - constructed dynamic URLs to automate the download process of the EC - enzyme information.<strong> </strong>Integration of BRENDA let - us generate more comprehensive enzyme lists. - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong>Graphical Overview</strong> - </p> - - <img - src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXfcyHpNBCaM5vwiZrQkUR7cRnWPaB7Gpc_so9kPBPbtgk7y6WV6221WYqhHy38e6ZQlpijyLoHLIiIAeg1lIOXirkdlqlpdNgklAL_9m72WI0BQJzd9g1OjBnaGw4su4Ow7R-s4n15rDoAzhmlJhWop0mor?key=SLRk3Rd_eX-zGU4puFyaTg" - width="100%" - /> - <h2 style="padding-top: 10%; font-family: glacial_indifference"> - Scoring Function - </h2> - <h4 style="text-align: justify"> - <strong>Parameters</strong> - </h4> - <p style="text-align: justify"> - The scoring function takes the output from the different databases - executing Metabolic Search, integrates and sorts the output to give - the user the benefit of the different information sources. - </p> - <p style="text-align: justify"> - The scoring function plays a crucial role in ensuring the user gets - maximum utility from our software. We have identified the following - factors to characterize and quantify the suitability of a potential - chassis organism for the expressed use case. - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong>Resourcefulness Score</strong> - </p> - <p style="text-align: justify"> - This parameter quantifies the competence of the organism at - utilizing the most number of metabolites of interest. The score is - the sum total number of pathways/reactions/enzymes in an organism - that contain the resources(s) of interest from all the 4 databases - divided by the maximum number of pathways identified in a single - organism across the databases amongst all the organisms. This - normalizes the score and makes it simpler to scale using the - weights. This information is supplied from the Uniprot, BioCyc, KEGG - and BRENDA databases. - </p> - <p style="text-align: justify"> - $$ \text{Resourcefulness score} = \frac{\sum_{database}^{n=4} - \text{no. of pathways/reactions/enzymes}}{\text{maximum no. of - pathways}}$$ - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong>Survivability Score</strong> - </p> - <p style="text-align: justify"> - This parameter quantifies the suitability of the organism to grow in - the environment desired by the user. Although microorganisms on - Earth cannot bear extraterrestrial conditions, considerations like - this can help increase the feasibility of the proposed project by, - for example, reducing energy expenditure in maintaining the required - temperatures in a bioreactor. We have considered the overlap in - Temperature and pH ranges between the user input and the - organism’s preferred ranges (normalized by dividing with - respective input ranges), supplied from the BacDive and MediaDive - databases. - </p> - <p style="text-align: justify"> - $$ \text{Temperature score} =\frac{\text{length(input temperature - range} \cap \text{organism temperature range)}}{\text{length(input - temperature range)}}$$ - </p> - <p style="text-align: justify"> - $$ \text{pH score} = \frac{\text{length(input pH range} \cap - \text{organism pH range)}}{\text{length(input pH range)}}$$ - </p> - <p style="text-align: justify"> - $$ \text{Survivability score} = \text{Temperature score} + \text{pH - score}$$ - </p> - <p><br /></p> - <p style="text-align: justify"> - <strong>Combined Formula</strong> - </p> - <p style="text-align: justify"> - The Final score used to return an ordered list of organisms is a - linear combination of the Resourcefulness and Survivability scores. - Currently, the weights for both the scores have been set equal to - ‘1’. - </p> - <p style="text-align: justify"> - $$ \text{Final score} = \text{w1} \cdot \text{Resourcefulness score} - + \text{w2} \cdot \text{Survivability score}$$ $$ \text{where w1, - w2} = 1 $$ - </p> - <p style="text-align: justify"> - This can further be customized and fine-tuned as per the end - user’s requirements, as this provides a trade-off between the - constraints supplied by the user. - </p> - <p><br /></p> - <h4 style="text-align: justify"> - <strong>BacDive and MediaDive</strong> - </h4> - <p style="text-align: justify"> - BacDive is a database that provides information about bacterial and - archaeal diversity. BacDive’s well documented REST API still - posed issues of inconsistent data formats that required extensive - error handling to process the data. We get temperature data for an - organism from BacDive from which the temperature ranges are - calculated. - </p> - <p style="text-align: justify"> - MediaDive is a culture media database that was often referenced in - BacDive entries. We have utilized this database to infer pH - physiological data for a given organism from which the pH ranges are - calculated. - </p> - <p><br /></p> - <h4 style="text-align: justify"> - <strong>Graphical Overview </strong> - </h4> - <p style="text-align: justify"> + <strong>Overview</strong> + </h2> + <p style="text-align: justify"> + Our software pipeline facilitates analyzing and identifying synbio + hosts based on available resources and growth conditions as user + inputs. The aim is to gather relevant resources from the user, + perform pre-processing, search for metabolic data, find resource + utilization pathways, and ultimately provide a ranked list of + potential chassis that comprise these pathways. + </p> + <p style="text-align: justify"> + <strong>User Input and Preprocessing</strong>: The process starts + with the user entering the common name of a molecule and selecting + its corresponding ChEBI ID from a list. We’ve chosen the ChEBI + standard for input as it provides a cataloging of a wide array of + chemical formats and offers easy code integration via its API. The + chosen ID can then be added to the Resources list. Also, the user + can input query-related information, such as required physiological + conditions (e.g., temperature, pH) + </p> + <p style="text-align: justify"> + <strong>Metabolite Search and Matching</strong>: Executing a search + for specific reactions of these resource compounds and searching for + metabolic pathways comprising these reactions in several databases, + such as <a href="https://biocyc.org/"><u>BioCyc</u></a + >, <a href="https://www.ebi.ac.uk/uniprot/index" + ><u>UniProt</u></a + > (Universal Protein Resource), <a + href="https://www.genome.jp/kegg/" + ><u>KEGG</u></a + > (Kyoto Encyclopedia of Genes and Genomes) and <a + href="https://www.brenda-enzymes.org/" + ><u>BRENDA</u></a + > (Braunschweig Enzyme Database). These metabolic pathways are + then matched to potential hosts + </p> + <p style="text-align: justify"> + <strong>Scoring Function</strong>: The identified chassis are + evaluated and ranked based on two key criteria: resourcefulness and + survivability. Resourcefulness measures the utility of the organism + as a chassis, determined by the number of pathways identified within + it. Survivability assesses how well the organism's optimal + growth conditions, such as temperature and oxygen requirements, + align with the user's input. The physiological information is + obtained from <a href="https://bacdive.dsmz.de/" + ><u>BacDive</u></a + > and <a href="https://mediadive.dsmz.de/" + ><u>MediaDive</u></a + >. The closer the match, the higher the ranking for survivability. + </p> + <p style="text-align: justify"> + <strong>Output</strong>: Using the scoring function, a ranked list + of organisms that can be engineered for In Situ Resource Utilization + (ISRU) is generated. The top organisms are selected based on their + resource utilization pathways and adaptability to various + conditions. The associated pathways and potential use cases are + presented. + </p> + <img - src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXcA8sILSwFJzQsfJH019JP1xfJrrngZsdcSJHC7kF-Fsh5TnJb87K4zKH6dqKu_HcVRVra8nGK99-6wSG7eQqkYjvzG1nMKXam5BVauO5xwyKapywH7BSSROp3F1GFSwFghhUNAgqUjiQwD8qzOXTkoW_G2?key=SLRk3Rd_eX-zGU4puFyaTg" + src="https://static.igem.wiki/teams/5155/software/10.webp" width="100%" /> - </p> - </div> - <div id="section4" class="section"> - <h1>Web Tool</h1> - <p style="text-align: justify"> - We have created a web tool that provides a simple and accessible way - for users to run our software without needing to download or - understand complex code. Releasing code is useful for developers, - but for non-experts who are not used to setting up code and handling - issues, it can be a challenge. By hosting the tool on a Django - server with a user-friendly interface, we make it easy for anyone to - use without technical setup. This ensures a wider audience can - benefit from the tool, focusing on their research rather than - technical details, and allows easy access from any device, improving - usability and utility. - </p> - <p style="text-align: justify"> - We can confirm that this website-hosted form of our software is - compatible with the following non-exhaustive list of browsers: - </p> - <p><br /></p> - <ul style="padding-left: 20%; font-size: 1em"> - <li> - <p style="text-align: justify"> - Google Chrome - - 129.0.6668.70 - </p> - </li> - <li> - <p style="text-align: justify"> - Safari on macOS (Laptops and Desktops) - 18.0 - </p> - </li> - <li> - <p style="text-align: justify"> - Safari on iOS (iPhone, iPad and iPod) - 18.0 - </p> - </li> - <li> - <p style="text-align: justify"> - Mozilla Firefox - - - - 130.0.1 - </p> - </li> - <li> - <p style="text-align: justify"> - Opera on Desktop - - - 114.0.5282.21 - </p> - </li> - <li> - <p style="text-align: justify"> - Opera on Android - - - 76.2.4027.73374 - </p> - </li> - </ul> - <p><br /></p> - <p style="text-align: justify"> - For other or non-supported browsers, please refer to our command line interface (CLI) version - which can be run locally on the user’s device. - </p> - </div> - <div id="section5" class="section"> - <h1>Results</h1> - <p - > - We present our software in two forms. One, as a <strong> standalone software</strong> working on the command line interface (CLI), to enable easy - modifications and integrations with new code. Two, as part of - a <strong> web application </strong> created using the Django framework that can be hosted - locally to enable user-friendly access to the code, especially - useful for an intended target audience without software or - programming expertise. We have deployed this code at <a - href="http://astrolabeiitm.duckdns.org/" - style="text-decoration: none" - >http://astrolabeiitm.duckdns.org/</a - > to enable quick and easy access via the internet. - </p> - - <p - - > - <strong>Standalone</strong> - </p> - <p - - > - The standalone software can be found <a - href="https://gitlab.igem.org/2024/software-tools/iit-madras" - style="text-decoration: none" - >here</a - >. This can be used by running main.py after installing the - necessary dependencies listed in requirements.txt. - </p> - <p> - The input interface for the standalone appears like this on the - command line: - </p> - <img - src="https://static.igem.wiki/teams/5155/software/1.png" - width="100%" - /> - </p> - <p + <h2 style="padding-top: 10%; font-family: glacial_indifference"> + BioCyc + </h2> + <p style="text-align: justify"> + <strong>Overview of BioCyc</strong> + </p> + <p style="text-align: justify"> + BioCyc is a collection of Pathway/Genome Databases (PGDBs) for model + eukaryotes and for thousands of microbes, plus software tools for + exploring them. It contains curated data from 146,000 publications. + The reason BioCyc was picked as one of the databases was due to the + unique pathways and metabolites in its catalog, including some + inorganics and pathways involved in critical biogeochemical cycles, + absent in other databases. + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong + >Accessing BioCyc Using Python's Requests Package</strong + > + </p> + <p style="text-align: justify"> + Python’s Requests package allows users to query web pages and + collect the information on the page. First, we created a requests + session, which allowed us to log in to BioCyc. This was necessary + because BioCyc requires the user to log in before being able to + access the database. After doing this, we queried various payloads + corresponding to each step of the workflow. + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong + >Mapping ChEBI IDs to Pathways and Organism Filtering</strong + > + </p> + <p style="text-align: justify"> + User-provided ChEBI IDs are converted to BioCyc IDs for + compatibility with metabolic databases. The software then retrieves + biochemical reactions involving the specified compounds, identifies + associated metabolic pathways, and collects organisms documented to + contain these pathways. To ensure relevance for synthetic biology + applications, multicellular organisms under the taxonomic groups + 'Metazoa' and 'Embryophyta' are filtered out, + leaving only unicellular candidates. The remaining organisms are + then passed through a scoring function, which ranks them based on + their suitability as chassis organisms, optimizing for resource + utilization efficiency and genetic tractability. + </p> + + <img + src="https://static.igem.wiki/teams/5155/software/7.webp" + width="100%" + /> + <h2 style="padding-top: 10%; font-family: glacial_indifference"> + UniProt + </h2> + <p style="text-align: justify"> + <strong>Overview of UniProt</strong> + </p> + <p style="text-align: justify"> + UniProt is a comprehensive protein sequence and functional + information database. It provides detailed annotations for proteins, + including their functions, structures, and interactions. UniProt is + a crucial resource for researchers in fields such as genomics, + proteomics, and bioinformatics. It hosts a wealth of curated data + from various sources, allowing users to explore relationships + between proteins, their corresponding organisms, and biochemical + pathways. The database is especially beneficial for studies + involving synthetic biology and metabolic engineering due to its + extensive protein functional information. + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong + >Accessing UniProt Using Python's Requests Package</strong + > + </p> + <p style="text-align: justify"> + The Python Requests package enables users to easily query the + UniProt REST API to retrieve protein-related information. The + querying process begins by constructing a request URL that + incorporates specific filters such as taxonomy and ChEBI + identifiers. This step ensures that only relevant protein data is + fetched from UniProt. The code provided utilizes a session with the + UniProt API to access necessary protein data based on the given + ChEBI IDs. + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong>Mapping ChEBI IDs to UniProt Data</strong> + </p> + <p style="text-align: justify"> + The process of querying UniProt involves the following steps: + </p> + <ol style="padding-left: 10%"> + <li> + <p style="text-align: justify"> + <strong>ChEBI ID Input</strong>: Users input ChEBI IDs as + strings, which are then processed to extract the relevant part + for querying. + </p> + </li> + <li> + <p style="text-align: justify"> + <strong>UniProt Query Construction</strong>: A query URL is + constructed that targets specific organisms (e.g., bacteria) and + filters for proteins that have been reviewed and are associated + with the specified ChEBI ID as a cofactor. + </p> + </li> + <li> + <p style="text-align: justify"> + <strong>Data Retrieval</strong>: The constructed URL is used to + send a GET request to the UniProt API. The resource list in + ChEBI ID format is passed via the request to get the organism + with the corresponding number of pathways containing the + resource of interest in it. If the request is successful, the + response data is returned in JSON format. + </p> + </li> + </ol> + <p><br /></p> + <p style="text-align: justify"> + <strong>Filtering Organism Data</strong> + </p> + <p style="text-align: justify"> + Once the data is retrieved, it undergoes processing to filter out + duplicates and irrelevant organisms: + </p> + <ol style="padding-left: 10%; font-size: 1em"> + <li> + <p style="text-align: justify"> + <strong>Duplicate Filtering</strong>: The + filter_duplicates function counts occurrences of each + organism based on its scientific name, ensuring that each unique + organism is represented only once in the results. + </p> + </li> + <li> + <p style="text-align: justify"> + <strong>Relevance Filtering</strong>: The code further filters + results based on the annotation score (indicating the likely + accuracy of the data), retaining only those entries with a + score greater than or equal to 3, and excluding any organisms + classified as viruses. + </p> + </li> + </ol> + <p><br /></p> + <p style="text-align: justify"> + <strong>Summary of Results</strong> + </p> + + <p style="text-align: justify"> + The final output is a counter of unique organisms that meet the + specified criteria, along with their respective counts. The results + provide insights into the distribution of proteins associated with + the input ChEBI IDs, enabling researchers to identify the most + relevant organisms for further study. + </p> + <h2 style="padding-top: 10%; font-family: glacial_indifference"> + KEGG and BRENDA + </h2> + <p style="text-align: justify"> + <strong>Introduction</strong> + </p> + <p style="text-align: justify"> + KEGG (Kyoto Encyclopedia of Genes and Genomes) is a collection of + databases dealing with genomes, biological pathways, and chemical + substances. BRENDA (BRaunschweig ENzyme DAtabase) is the + world's most comprehensive online database for functional, + biochemical and molecular biological data on enzymes, metabolites + and metabolic pathways. In the current architecture of the software, + KEGG serves as the backbone for retrieving organismal data while + BRENDA supplements enzyme data for deeper insights into metabolic + pathways. KEGG and BRENDA are queried to retrieve enzymes and genes + that act on the compound. Then, KEGG is queried to collect enzyme + and gene information to identify organisms. + </p> + + <p style="text-align: justify"> + KEGG structures its database as a collection of interconnected + sub-databases (KEGG Compounds, KEGG Enzymes, KEGG Genes, KEGG + Organisms, and KEGG BRITE). Navigating through these sub-databases + was unintuitive due to the lack of cohesive documentation explaining + how the sub-databases cross-reference each other. After some + iterations, we settled on a compound → enzyme → gene + → organism approach, which proved more efficient. Following + this, we have implemented a filtering step to include only those + taxa that are relevant to synthetic biology, including Ascomycetes, + Basidiomycetes, Diatoms, Euglenozoa, Green algae, Red algae, along + with bacteria. + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong>Accessing and Sorting Data</strong> + </p> + <p style="text-align: justify"> + The KEGG subroutine required optimisations to overcome 2 major + bottlenecks, namely query limits and the complexity of mapping + enzymes to genes and genes to organisms: + </p> + <ul style="padding-left: 10%; font-size: 1em"> + <li> + <p style="text-align: justify"> + <strong>Batching Queries</strong>: By sending requests in + batches instead of individually, we reduced redundant queries + and lowered overall processing time. + </p> + </li> + <li> + <p style="text-align: justify"> + <strong>Multiprocessing</strong>: Multiprocessing is a computer + paradigm in which two or more processors in a computer are + simultaneously executing different portions of the same program. + This technique allows for better utilization of available + hardware and improves speed. We implemented Python’s + multiprocessing library to run multiple independent queries in + parallel. This was particularly effective since each query was + isolated and could be processed independently. This optimization + alone shaved around 30 seconds off the initial 4 minutes. + </p> + </li> + <li> + <p style="text-align: justify"> + <strong>Local Searching</strong>: We discovered that KEGG uses a + prefix in gene codes corresponding to organism codes. By + downloading a local list of organism codes from KEGG, We were + able to bypass querying the server for each gene, dramatically + reducing the time spent on gene-to-organism mapping by + eliminating network delays. + </p> + </li> + </ul> + <p style="text-align: justify"> + As not all compounds were documented in KEGG, we decided to + complement the KEGG results by running the same compound queries + through BRENDA, to see if additional enzymes could be identified. + BRENDA uses the SOAP API architecture. SOAP is fundamentally + different from the REST architecture used in KEGG, requiring an + intermediary service provider to process requests, which added + complexity. Due to improperly configured API endpoints and function + prototypes, we were unable to sort the API calls in time. Thus, we + resorted to using BRENDA’s CSV download functionality. We have + constructed dynamic URLs to automate the download process of the EC + enzyme information.<strong> </strong>Integration of BRENDA let + us generate more comprehensive enzyme lists. + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong>Graphical Overview</strong> + </p> + + <img + src="https://static.igem.wiki/teams/5155/software/8.webp" + width="100%" + /> + <h2 style="padding-top: 10%; font-family: glacial_indifference"> + Scoring Function + </h2> + <h4 style="text-align: justify"> + <strong>Parameters</strong> + </h4> + <p style="text-align: justify"> + The scoring function takes the output from the different databases + executing Metabolic Search, integrates and sorts the output to give + the user the benefit of the different information sources. + </p> + <p style="text-align: justify"> + The scoring function plays a crucial role in ensuring the user gets + maximum utility from our software. We have identified the following + factors to characterize and quantify the suitability of a potential + chassis organism for the expressed use case. + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong>Resourcefulness Score</strong> + </p> + <p style="text-align: justify"> + This parameter quantifies the competence of the organism at + utilizing the most number of metabolites of interest. The score is + the sum total number of pathways/reactions/enzymes in an organism + that contain the resources(s) of interest from all the 4 databases + divided by the maximum number of pathways identified in a single + organism across the databases amongst all the organisms. This + normalizes the score and makes it simpler to scale using the + weights. This information is supplied from the Uniprot, BioCyc, KEGG + and BRENDA databases. + </p> + <p style="text-align: justify"> + $$ \text{Resourcefulness score} = \frac{\sum_{database}^{n=4} + \text{no. of pathways/reactions/enzymes}}{\text{maximum no. of + pathways}}$$ + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong>Survivability Score</strong> + </p> + <p style="text-align: justify"> + This parameter quantifies the suitability of the organism to grow in + the environment desired by the user. Although microorganisms on + Earth cannot bear extraterrestrial conditions, considerations like + this can help increase the feasibility of the proposed project by, + for example, reducing energy expenditure in maintaining the required + temperatures in a bioreactor. We have considered the overlap in + Temperature and pH ranges between the user input and the + organism’s preferred ranges (normalized by dividing with + respective input ranges), supplied from the BacDive and MediaDive + databases. + </p> + <p style="text-align: justify"> + $$ \text{Temperature score} =\frac{\text{length(input temperature + range} \cap \text{organism temperature range)}}{\text{length(input + temperature range)}}$$ + </p> + <p style="text-align: justify"> + $$ \text{pH score} = \frac{\text{length(input pH range} \cap + \text{organism pH range)}}{\text{length(input pH range)}}$$ + </p> + <p style="text-align: justify"> + $$ \text{Survivability score} = \text{Temperature score} + \text{pH + score}$$ + </p> + <p><br /></p> + <p style="text-align: justify"> + <strong>Combined Formula</strong> + </p> + <p style="text-align: justify"> + The Final score used to return an ordered list of organisms is a + linear combination of the Resourcefulness and Survivability scores. + Currently, the weights for both the scores have been set equal to + ‘1’. + </p> + <p style="text-align: justify"> + $$ \text{Final score} = \text{w1} \cdot \text{Resourcefulness score} + + \text{w2} \cdot \text{Survivability score}$$ $$ \text{where w1, + w2} = 1 $$ + </p> + <p style="text-align: justify"> + This can further be customized and fine-tuned as per the end + user’s requirements, as this provides a trade-off between the + constraints supplied by the user. + </p> + <p><br /></p> + <h4 style="text-align: justify"> + <strong>BacDive and MediaDive</strong> + </h4> + <p style="text-align: justify"> + BacDive is a database that provides information about bacterial and + archaeal diversity. BacDive’s well documented REST API still + posed issues of inconsistent data formats that required extensive + error handling to process the data. We get temperature data for an + organism from BacDive from which the temperature ranges are + calculated. + </p> + <p style="text-align: justify"> + MediaDive is a culture media database that was often referenced in + BacDive entries. We have utilized this database to infer pH + physiological data for a given organism from which the pH ranges are + calculated. + </p> + <p><br /></p> + <h4 style="text-align: justify"> + <strong>Graphical Overview </strong> + </h4> + <p style="text-align: justify"> + <img + src="https://static.igem.wiki/teams/5155/software/9.webp" + width="100%" + /> + </p> + </div> + <div id="section4" class="section"> + <h1>Web Tool</h1> + <p style="text-align: justify"> + We have created a web tool that provides a simple and accessible way + for users to run our software without needing to download or + understand complex code. Releasing code is useful for developers, + but for non-experts who are not used to setting up code and handling + issues, it can be a challenge. By hosting the tool on a Django + server with a user-friendly interface, we make it easy for anyone to + use without technical setup. This ensures a wider audience can + benefit from the tool, focusing on their research rather than + technical details, and allows easy access from any device, improving + usability and utility. + </p> + <p style="text-align: justify"> + We can confirm that this website-hosted form of our software is + compatible with the following non-exhaustive list of browsers: + </p> + <p><br /></p> + <ul style="padding-left: 20%; font-size: 1em"> + <li> + <p style="text-align: justify"> + Google Chrome + + 129.0.6668.70 + </p> + </li> + <li> + <p style="text-align: justify"> + Safari on macOS (Laptops and Desktops) + 18.0 + </p> + </li> + <li> + <p style="text-align: justify"> + Safari on iOS (iPhone, iPad and iPod) + 18.0 + </p> + </li> + <li> + <p style="text-align: justify"> + Mozilla Firefox + + + + 130.0.1 + </p> + </li> + <li> + <p style="text-align: justify"> + Opera on Desktop + + + 114.0.5282.21 + </p> + </li> + <li> + <p style="text-align: justify"> + Opera on Android + + + 76.2.4027.73374 + </p> + </li> + </ul> + <p><br /></p> + <p style="text-align: justify"> + For other or non-supported browsers, please refer to our CLI version + which can be run locally on the user’s device. + </p> + </div> + <div id="section5" class="section"> + <h1>Results</h1> + <p + > + We present our software in two forms. One, as a standalone software working on the command line interface (CLI), to enable easy + modifications and integrations with new code. Two, as part of + a web application created using the Django framework that can be hosted + locally to enable user-friendly access to the code, especially + useful for an intended target audience without software or + programming expertise. We have deployed this code at <a + href="http://astrolabeiitm.duckdns.org/" + style="text-decoration: none" + >http://astrolabeiitm.duckdns.org/</a + > to enable quick and easy access via the internet. + </p> - > - The output is a Python dictionary whose keys are the organism - names and values are tuples. Each tuple consists of 4 scores in - this order: Final_score, Resourcefulness_score, Temperature_score, - pH_score. The organisms are arranged in descending order of their - Final_score value. - </p> - + <p + + > + Standalone + </p> + <p + + > + The standalone software can be found <a + href="https://gitlab.igem.org/2024/software-tools/iit-madras" + style="text-decoration: none" + >here</a + >. This can be used by running main.py after installing the + necessary dependencies listed in requirements.txt. + </p> + <p> + The input interface for the standalone appears like this on the + command line: + </p> <img - src="https://static.igem.wiki/teams/5155/software/2.png" - width="100%" - /> - </p> - - <p + src="https://static.igem.wiki/teams/5155/software/1.png" + width="100%" + /> + </p> + <p + + > + The output is a Python dictionary whose keys are the organism + names and values are tuples. Each tuple consists of 4 scores in + this order: Final_score, Resourcefulness_score, Temperature_score, + pH_score. The organisms are arranged in descending order of their + Final_score value. + </p> - > - Online Web Application - </p> - <p> - We have deployed our software at <a - href="http://astrolabeiitm.duckdns.org/" - style="text-decoration: none" - >http://astrolabeiitm.duckdns.org/</a - > to enable quick and easy access via the internet. - </p> - <p + <img + src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdnCC9anxU6eIkGa0qUgOmkpwNyd28Z8RxWAb0HZLPP70SvLdy2AsClSPZOzz5OtIEnE6clikSd8jGFLPA0RKIhqH6Mn5krrSDprOC5Bgrn6ni_NazgvSqaw_51PJCHz52UKEzyIuKwh9cJURg_p3qriKw?key=SLRk3Rd_eX-zGU4puFyaTg" + width="100%" + /> + </p> - > - Local Host Web Application - </p> - <p + <p + + > + Online Web Application + </p> + <p> + We have deployed our software at <a + href="http://astrolabeiitm.duckdns.org/" + style="text-decoration: none" + >http://astrolabeiitm.duckdns.org/</a + > to enable quick and easy access via the internet. + </p> + <p + + > + Local Host Web Application + </p> + <p + + > + To use the Django web application locally, follow these + steps: + </p> - > - To use the Django web application locally, follow these - steps: - </p> - - <object class="pdf" data="https://static.igem.wiki/teams/5155/software/astrolabe-instructions.pdf" width="100%" height="500px"></object> - </p> + <object class="pdf" data="https://static.igem.wiki/teams/5155/software/astrolabe-instructions.pdf" width="100%" height="500px"></object> + </p> + </div> </div> </div> </div> - </div> - - <script> - document.addEventListener("DOMContentLoaded", function () { - // Grab all the sections and links in the TOC - const sections = document.querySelectorAll(".section"); - const tocLinks = document.querySelectorAll(".toc ul li a"); - - // Intersection Observer options - const observerOptions = { - root: null, // viewport - rootMargin: "0px", - threshold: 0.0, // 10% of the section must be visible - }; - - const observer = new IntersectionObserver((entries) => { - entries.forEach((entry) => { - const id = entry.target.id; - - // If section is in view (intersecting) - if (entry.isIntersecting) { - // Remove 'active' class from all links - tocLinks.forEach((link) => { - link.classList.remove("active"); - }); - - // Add 'active' class to the corresponding TOC link - const activeLink = document.querySelector( - `.toc ul li a[href="#${id}"]` - ); - activeLink.classList.add("active"); - } + + <script> + document.addEventListener("DOMContentLoaded", function () { + // Grab all the sections and links in the TOC + const sections = document.querySelectorAll(".section"); + const tocLinks = document.querySelectorAll(".toc ul li a"); + + // Intersection Observer options + const observerOptions = { + root: null, // viewport + rootMargin: "0px", + threshold: 0.0, // 10% of the section must be visible + }; + + const observer = new IntersectionObserver((entries) => { + entries.forEach((entry) => { + const id = entry.target.id; + + // If section is in view (intersecting) + if (entry.isIntersecting) { + // Remove 'active' class from all links + tocLinks.forEach((link) => { + link.classList.remove("active"); + }); + + // Add 'active' class to the corresponding TOC link + const activeLink = document.querySelector( + `.toc ul li a[href="#${id}"]` + ); + activeLink.classList.add("active"); + } + }); + }, observerOptions); + + // Observe all sections + sections.forEach((section) => { + observer.observe(section); }); - }, observerOptions); - - // Observe all sections - sections.forEach((section) => { - observer.observe(section); }); - }); - </script> -</div> -{% endblock %} + </script> + </div> + {% endblock %} + \ No newline at end of file -- GitLab