Skip to content
Snippets Groups Projects
IterativeCycle.vue 8.27 KiB
Newer Older
Devyani Ravi's avatar
Devyani Ravi committed
<template>
Devyani Ravi's avatar
Devyani Ravi committed
  <div class="iterative-cycle">
    <!-- Module Selector Tabs -->
    <div class="module-tabs">
      <div
        v-for="(module, index) in modules"
        :key="index"
        :class="['module-tab', { active: selectedModule === index }]"
        @click="selectModule(index)"
      >
        {{ module.title }}
      </div>
Devyani Ravi's avatar
Devyani Ravi committed
    </div>

Devyani Ravi's avatar
Devyani Ravi committed
    <!-- Cycles Display -->
Devyani Ravi's avatar
Devyani Ravi committed
    <div v-if="selectedModule !== null" class="collapsible-cards">
Devyani Ravi's avatar
Devyani Ravi committed
      <h2>{{ modules[selectedModule].title }}</h2>
Devyani Ravi's avatar
Devyani Ravi committed
      <div
        v-for="(cycle, index) in modules[selectedModule].cycles"
        :key="index"
        class="card"
      >
Devyani Ravi's avatar
Devyani Ravi committed
        <h4 @click="toggleCycle(index)">
Devyani Ravi's avatar
Devyani Ravi committed
          {{ cycle.title }}
Devyani Ravi's avatar
Devyani Ravi committed
          <span v-if="isCycleOpen(index)"></span>
          <span v-else></span>
        </h4>
        <div v-if="isCycleOpen(index)" class="content">
Devyani Ravi's avatar
Devyani Ravi committed
          <h3>Phases:</h3>
          <ul>
            <li v-for="(phase, phaseIndex) in cycle.phases" :key="phaseIndex">
              <strong>{{ phase.title }}:</strong> {{ phase.description }}
            </li>
          </ul>
        </div>
Devyani Ravi's avatar
Devyani Ravi committed
      </div>
    </div>
Devyani Ravi's avatar
Devyani Ravi committed
  </div>
</template>

<script>
export default {
  data() {
    return {
Devyani Ravi's avatar
Devyani Ravi committed
      selectedModule: 0, // Default module selected
      openCycles: [], // Track which cycles are open
Devyani Ravi's avatar
Devyani Ravi committed
      modules: [
Devyani Ravi's avatar
Devyani Ravi committed
        {
Devyani Ravi's avatar
Devyani Ravi committed
          title: 'Module 1: Gibson Assemblies',
Devyani Ravi's avatar
Devyani Ravi committed
          cycles: [
            {
Devyani Ravi's avatar
Devyani Ravi committed
              title: 'Cycle 1: Assembly',
              phases: [
                { title: 'Design', description: 'Designing DNA fragments for assembly.' },
                { title: 'Build', description: 'Performing the Gibson assembly procedure.' },
Devyani Ravi's avatar
Devyani Ravi committed
                { title: 'Test', description: 'Validating the characterization results.' },
                { title: 'Learn', description: 'Refining methods based on outcomes.' },
Devyani Ravi's avatar
Devyani Ravi committed
              ]
            },
            {
              title: 'Cycle 2: Optimization',
              phases: [
                { title: 'Design', description: 'Adjusting fragment lengths for better efficiency.' },
                { title: 'Build', description: 'Re-running the assembly with optimized parameters.' },
Devyani Ravi's avatar
Devyani Ravi committed
                { title: 'Test', description: 'Validating the characterization results.' },
                { title: 'Learn', description: 'Refining methods based on outcomes.' },
Devyani Ravi's avatar
Devyani Ravi committed
              ]
            },
            {
              title: 'Cycle 3: Verification',
Devyani Ravi's avatar
Devyani Ravi committed
              phases: [
Devyani Ravi's avatar
Devyani Ravi committed
                { title: 'Design', description: 'Designing verification tests for assemblies.' },
                { title: 'Build', description: 'Executing verification assays.' },
Devyani Ravi's avatar
Devyani Ravi committed
                { title: 'Test', description: 'Validating the characterization results.' },
                { title: 'Learn', description: 'Refining methods based on outcomes.' },
              ]
            },
            {
              title: 'Cycle 4: IDK',
              phases: [
                { title: 'Design', description: 'Designing DNA fragments for assembly.' },
                { title: 'Build', description: 'Performing the Gibson assembly procedure.' },
                { title: 'Test', description: 'Validating the characterization results.' },
Devyani Ravi's avatar
Devyani Ravi committed
                { title: 'Learn', description: 'Refining methods based on outcomes.' },
Devyani Ravi's avatar
Devyani Ravi committed
              ]
            },
Devyani Ravi's avatar
Devyani Ravi committed
          title: 'Module 2: Characterisation',
Devyani Ravi's avatar
Devyani Ravi committed
          cycles: [
            {
Devyani Ravi's avatar
Devyani Ravi committed
              title: 'Cycle 1: Characterization',
Devyani Ravi's avatar
Devyani Ravi committed
              phases: [
Devyani Ravi's avatar
Devyani Ravi committed
                { title: 'Design', description: 'Planning experiments to characterize assemblies.' },
                { title: 'Build', description: 'Executing characterization assays.' },
Devyani Ravi's avatar
Devyani Ravi committed
              ]
Devyani Ravi's avatar
Devyani Ravi committed
            },
Devyani Ravi's avatar
Devyani Ravi committed
          ]
        },
Devyani Ravi's avatar
Devyani Ravi committed
        {
          title: 'Module 3: Integrative Vector',
          cycles: [
            {
              title: 'Cycle 1: Construction',
              phases: [
                { title: 'Design', description: 'Designing the integrative vector.' },
              ]
            },
          ]
        },
        {
          title: 'Module 4: Bioinformatics',
          description: 'As part of our future engineering efforts, we intend to optimise the growth of the engineered *Vibrio natriegens* by utilising the GenomeSPOT (Genome-based Salinity, pH, Oxygen Tolerance, and Temperature for Bacteria and Archaea) Python package (Barnum et al., 2024). This powerful computational tool, introduced to us through our collaboration with Cultivarium, predicts optimal growth conditions based on bacterial and archeal genome sequences with no need for functional annotations (Barnum et al., 2024).',
Devyani Ravi's avatar
Devyani Ravi committed
          cycles: [
            {
              title: 'Cycle 1: Data Analysis',
              phases: [
Devyani Ravi's avatar
Devyani Ravi committed
                { title: 'Design', description: <p>Our objective is to utilise GenomeSPOT to compare the computationally predicted optimal growth conditions with experimentally determined conditions for both the native and genetically modified strain of <em>Vibrio natriegens</em> after integration of the construct into the genome. First, it is necessary to obtain complete genome sequences for both of the strains. These will serve as input data for the GenomeSPOT package and will be processed to generate predictions for key factors affecting bacterial growth, such as temperature, salinity, pH, and oxygen levels. This computational model is based on well-studied correlations between amino acid frequencies and growth factors (e.g., tryptophan frequency and positive correlation with oxygen tolerance associated with it) (Barnum et al., 2024).</p>
Devyani Ravi's avatar
Devyani Ravi committed
          <p>After simulating the optimal conditions, we will conduct laboratory experiments to test both strains under various conditions and determine if the experimental results match the predictions. The growth of both bacterial strains will be monitored under conditions provided by GenomeSPOT by measuring optical density (OD600) at regular intervals. In addition, the strains will be subjected to various alternative conditions to determine those that result in most optimal growth rates. Any discrepancies between the experimental and computationally predicted results will be carefully examined. This analysis will allow us to understand if the modified <em>Vibrio natriegens</em> has distinct requirements for optimal growth compared to the native strain. Furthermore, it will allow for an assessment of the accuracy of GenomeSPOT in predicting optimal growth conditions for engineered microbial strains.</p> },
Devyani Ravi's avatar
Devyani Ravi committed
  },
Devyani Ravi's avatar
Devyani Ravi committed
  methods: {
    toggleCycle(index) {
      if (this.openCycles.includes(index)) {
        this.openCycles = this.openCycles.filter(i => i !== index);
      } else {
        this.openCycles.push(index);
      }
    },
    isCycleOpen(index) {
      return this.openCycles.includes(index);
    },
    selectModule(index) {
      this.selectedModule = index;
Devyani Ravi's avatar
Devyani Ravi committed
      this.openCycles = []; // Close all cycles when switching modules
Devyani Ravi's avatar
Devyani Ravi committed
    }
Devyani Ravi's avatar
Devyani Ravi committed
  }
};
</script>
Devyani Ravi's avatar
Devyani Ravi committed

<style scoped>
Devyani Ravi's avatar
Devyani Ravi committed
/* Layout styles */
.iterative-cycle {
  font-family: 'Arial', sans-serif;
  max-width: 800px;
  margin: 20px auto;
  padding: 20px;
  border: 1px solid #ddd;
  border-radius: 8px;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}

/* Module Selector Tabs */
.module-tabs {
  display: flex;
  justify-content: center;
  margin-bottom: 20px;
}

.module-tab {
  padding: 10px 20px;
  margin: 0 10px;
  font-size: 16px;
  background-color: #f0f0f0;
  border-radius: 5px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
  cursor: pointer;
  transition: background-color 0.3s ease, box-shadow 0.3s ease;
}

.module-tab:hover {
  background-color: #dfe6e9;
}

.module-tab.active {
  background-color: #73aba2;
  color: white;
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
}

/* Collapsible Cards */
Devyani Ravi's avatar
Devyani Ravi committed
.collapsible-cards {
  display: flex;
  flex-direction: column;
  gap: 20px;
  margin: 20px 0;
}

.card {
  background-color: #e3f2fd;
  border: 1px solid #ccc;
  border-radius: 10px;
  padding: 20px;
Devyani Ravi's avatar
Devyani Ravi committed
  box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
  cursor: pointer;
}

.card h4 {
  color: #396d7e;
  margin-bottom: 10px;
  display: flex;
  justify-content: space-between;
}

.card .content {
  margin-top: 10px;
  font-size: 1.1em;
  color: #333;
}

Devyani Ravi's avatar
Devyani Ravi committed
/* Typography */
h2 {
  color: #2c3e50;
  text-align: center;
Devyani Ravi's avatar
Devyani Ravi committed
h3 {
  color: #3498db;
  margin-bottom: 10px;
Devyani Ravi's avatar
Devyani Ravi committed
ul {
  margin-left: 20px;
Devyani Ravi's avatar
Devyani Ravi committed
li {
  color: #555;
Devyani Ravi's avatar
Devyani Ravi committed
}
Devyani Ravi's avatar
Devyani Ravi committed
</style>
Devyani Ravi's avatar
Devyani Ravi committed