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&nbsp;<em>E. coli</em>&nbsp;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&nbsp;<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:&nbsp;<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.&nbsp;
-          </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.&nbsp;
-          </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&rsquo;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&nbsp;<a href="https://biocyc.org/"><u>BioCyc</u></a
-            >,&nbsp;<a href="https://www.ebi.ac.uk/uniprot/index"
-              ><u>UniProt</u></a
-            >&nbsp;(Universal Protein Resource),&nbsp;<a
-              href="https://www.genome.jp/kegg/"
-              ><u>KEGG</u></a
-            >&nbsp;(Kyoto Encyclopedia of Genes and Genomes) and&nbsp;<a
-              href="https://www.brenda-enzymes.org/"
-              ><u>BRENDA</u></a
-            >&nbsp;(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&apos;s optimal
-            growth conditions, such as temperature and oxygen requirements,
-            align with the user&apos;s input. The physiological information is
-            obtained from&nbsp;<a href="https://bacdive.dsmz.de/"
-              ><u>BacDive</u></a
-            >&nbsp;and&nbsp;<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&apos;s Requests Package</strong
-            >
-          </p>
-          <p style="text-align: justify">
-            Python&rsquo;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
-            &apos;Metazoa&apos; and &apos;Embryophyta&apos; 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&apos;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&nbsp;<em>E. coli</em>&nbsp;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&nbsp;<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:&nbsp;<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.&nbsp;
+            </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&nbsp;
-                filter_duplicates&nbsp;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), &nbsp;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&apos;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 &rarr; enzyme &rarr; gene
-            &rarr; 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&rsquo;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&rsquo;s CSV download functionality. We have
-            constructed dynamic URLs to automate the download process of the EC
-            enzyme information.<strong>&nbsp;</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.&nbsp;
-          </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&rsquo;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
-            &lsquo;1&rsquo;.&nbsp;
-          </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&rsquo;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&rsquo;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&nbsp;</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.&nbsp;
+            </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&rsquo;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&nbsp;<a href="https://biocyc.org/"><u>BioCyc</u></a
+              >,&nbsp;<a href="https://www.ebi.ac.uk/uniprot/index"
+                ><u>UniProt</u></a
+              >&nbsp;(Universal Protein Resource),&nbsp;<a
+                href="https://www.genome.jp/kegg/"
+                ><u>KEGG</u></a
+              >&nbsp;(Kyoto Encyclopedia of Genes and Genomes) and&nbsp;<a
+                href="https://www.brenda-enzymes.org/"
+                ><u>BRENDA</u></a
+              >&nbsp;(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&apos;s optimal
+              growth conditions, such as temperature and oxygen requirements,
+              align with the user&apos;s input. The physiological information is
+              obtained from&nbsp;<a href="https://bacdive.dsmz.de/"
+                ><u>BacDive</u></a
+              >&nbsp;and&nbsp;<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&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-                &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;129.0.6668.70
-              </p>
-            </li>
-            <li>
-              <p style="text-align: justify">
-                Safari on macOS (Laptops and Desktops)&nbsp;&nbsp; &nbsp;
-                &nbsp;&nbsp;18.0
-              </p>
-            </li>
-            <li>
-              <p style="text-align: justify">
-                Safari on iOS (iPhone, iPad and iPod)&nbsp;&nbsp; &nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;18.0
-              </p>
-            </li>
-            <li>
-              <p style="text-align: justify">
-                Mozilla Firefox&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;130.0.1
-              </p>
-            </li>
-            <li>
-              <p style="text-align: justify">
-                Opera on Desktop&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;114.0.5282.21
-              </p>
-            </li>
-            <li>
-              <p style="text-align: justify">
-                Opera on Android&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
-                &nbsp;&nbsp;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&rsquo;s device.
-          </p>
-        </div>
-        <div id="section5" class="section">
-          <h1>Results</h1>
-          <p 
-          >
-            We present our software in two forms. One, as a&nbsp;<strong> standalone software</strong>&nbsp;working on the command line interface (CLI), to enable easy
-              modifications and integrations with new code. Two, as part of
-              a&nbsp;<strong> web application </strong> &nbsp;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&nbsp;<a
-              href="http://astrolabeiitm.duckdns.org/"
-              style="text-decoration: none"
-              >http://astrolabeiitm.duckdns.org/</a
-            >&nbsp;to enable quick and easy access via the internet.
-          </p>
-          
-          <p
-            
-          >
-            <strong>Standalone</strong>
-          </p>
-          <p
-            
-          >
-            The standalone software can be found&nbsp;<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.&nbsp;
-          </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&apos;s Requests Package</strong
+              >
+            </p>
+            <p style="text-align: justify">
+              Python&rsquo;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
+              &apos;Metazoa&apos; and &apos;Embryophyta&apos; 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&apos;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&nbsp;
+                  filter_duplicates&nbsp;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), &nbsp;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&apos;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 &rarr; enzyme &rarr; gene
+              &rarr; 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&rsquo;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&rsquo;s CSV download functionality. We have
+              constructed dynamic URLs to automate the download process of the EC
+              enzyme information.<strong>&nbsp;</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.&nbsp;
+            </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&rsquo;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
+              &lsquo;1&rsquo;.&nbsp;
+            </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&rsquo;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&rsquo;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&nbsp;</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&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+                  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;129.0.6668.70
+                </p>
+              </li>
+              <li>
+                <p style="text-align: justify">
+                  Safari on macOS (Laptops and Desktops)&nbsp;&nbsp; &nbsp;
+                  &nbsp;&nbsp;18.0
+                </p>
+              </li>
+              <li>
+                <p style="text-align: justify">
+                  Safari on iOS (iPhone, iPad and iPod)&nbsp;&nbsp; &nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;18.0
+                </p>
+              </li>
+              <li>
+                <p style="text-align: justify">
+                  Mozilla Firefox&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;130.0.1
+                </p>
+              </li>
+              <li>
+                <p style="text-align: justify">
+                  Opera on Desktop&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;114.0.5282.21
+                </p>
+              </li>
+              <li>
+                <p style="text-align: justify">
+                  Opera on Android&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
+                  &nbsp;&nbsp;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&rsquo;s device.
+            </p>
+          </div>
+          <div id="section5" class="section">
+            <h1>Results</h1>
+            <p 
+            >
+              We present our software in two forms. One, as a&nbsp;standalone software&nbsp;working on the command line interface (CLI), to enable easy
+                modifications and integrations with new code. Two, as part of
+                a&nbsp;web application&nbsp;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&nbsp;<a
+                href="http://astrolabeiitm.duckdns.org/"
+                style="text-decoration: none"
+                >http://astrolabeiitm.duckdns.org/</a
+              >&nbsp;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&nbsp;<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.&nbsp;
+            </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&nbsp;<a
-              href="http://astrolabeiitm.duckdns.org/"
-              style="text-decoration: none"
-              >http://astrolabeiitm.duckdns.org/</a
-            >&nbsp;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&nbsp;<a
+                href="http://astrolabeiitm.duckdns.org/"
+                style="text-decoration: none"
+                >http://astrolabeiitm.duckdns.org/</a
+              >&nbsp;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