Difference between revisions of "Team:UNOTT/Software"

 
(30 intermediate revisions by the same user not shown)
Line 106: Line 106:
 
   padding-right: 20px;
 
   padding-right: 20px;
 
   padding-bottom: 700px;
 
   padding-bottom: 700px;
   margin-right: 100px;
+
   margin-right: 28.5px;
   padding-top: 250px;
+
   padding-top: 20px;
  
  
Line 165: Line 165:
 
     color: #ffffff;
 
     color: #ffffff;
 
}
 
}
 
+
a {
 +
    color: #ffffff;
 +
}
 
html {
 
html {
 
height: 100%;
 
height: 100%;
Line 220: Line 222:
 
<div class="image">
 
<div class="image">
 
<div class="crop">
 
<div class="crop">
     <img src="https://static.igem.org/mediawiki/2017/7/72/UNotts2017ellie.jpg"; style="width:100%;height:auto;">
+
     <img src="https://static.igem.org/mediawiki/2017/8/8a/T--UNOTT--StockCode.jpeg"; style="width:100%;height:auto;">
 
</div>
 
</div>
  
Line 228: Line 230:
 
   <div class="expandable-boxes">
 
   <div class="expandable-boxes">
 
     <div class="expandable-box">
 
     <div class="expandable-box">
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Overview </h4><center>
+
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Overview </h4>
</center>
+
<h5 style="color: #C0C0C0; font-weight: bold; font-size: 20px;"> About our software and why iGEM Nottingham chose to produce it</h5>
 +
 
  
 
       <div id="clear2" style="display: none;">
 
       <div id="clear2" style="display: none;">
Line 250: Line 253:
 
     <div class="expandable-box">
 
     <div class="expandable-box">
 
<h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Image Comparison Software</h4>
 
<h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Image Comparison Software</h4>
<center></center>
+
<h5 style="color: #C0C0C0; font-weight: bold; font-size: 20px;"> Comparing images of spectra from two different colonies to check for similiarity </h5>
 
   <div id="clear3" style="display: none;">
 
   <div id="clear3" style="display: none;">
     <a href="https://github.com/BurgundyIsAPublicEnemy/iGEMNotts2017/blob/master/fl_compare.exe">Download the software here</a>  
+
     <p> <a href="https://github.com/BurgundyIsAPublicEnemy/iGEMNotts2017/blob/master/fl_compare.exe">Download the software here</a> </p>
 
<br> </br>
 
<br> </br>
 
<p> A major issue the team faced was the comparison between the fluorescence with the mother colony and the Key.Coli mechanism. One option considered was to use image comparison to check how similar the spectra were </p>
 
<p> A major issue the team faced was the comparison between the fluorescence with the mother colony and the Key.Coli mechanism. One option considered was to use image comparison to check how similar the spectra were </p>
Line 258: Line 261:
 
<p> Using data from wet lab, a graph can be produced. This graph could be compared using an image similarity algorithm to check the difference between a data set from a certain time point to another data set from another time point.This was very important to the project as it allowed us to compare the fluorescence spectra of one random construction at different time periods.  </p>
 
<p> Using data from wet lab, a graph can be produced. This graph could be compared using an image similarity algorithm to check the difference between a data set from a certain time point to another data set from another time point.This was very important to the project as it allowed us to compare the fluorescence spectra of one random construction at different time periods.  </p>
  
<p>The image (a bitmap) is scanned pixel by pixel and written into a temporary file where it is checked for similarity with another image using the Damerau - Levenshtein Distance algorithm which was coded in C#. This can be represented as such <sup> 1 </sup>: </p>
+
<p>The image (a bitmap) is scanned pixel by pixel and written into a temporary file where it is checked for similarity with another image using the Damerau - Levenshtein Distance <sup> 1 </sup> algorithm which was coded in C#.
 
+
<p style="text-align: center;" > Figure 1 </p>
+
<img src="https://static.igem.org/mediawiki/2017/0/0e/T--UNOTT--DLD.svg" align="middle" width="600" height="100" >
+
  
 
<br> </br>
 
<br> </br>
Line 267: Line 267:
 
<br> </br>
 
<br> </br>
 
<center>  
 
<center>  
<p style="text-align: center;"> Figure 2 - Software when first opened </p>
+
<p style="text-align: center;"> Software when first opened </p>
 
</center>  
 
</center>  
 
<br> </br>
 
<br> </br>
Line 273: Line 273:
 
<br> </br>
 
<br> </br>
  
<p style="text-align: center;" > Figure 3 - When files are selected and "Compare" is clicked </p>
+
<p style="text-align: center;" > When files are selected and "Compare" is clicked </p>
<img src="https://static.igem.org/mediawiki/2017/2/21/T--UNOTT--LucyGraph1.png" class="border" align="middle" width="400" height="400" >
+
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/2/21/T--UNOTT--LucyGraph1.png" class="border" align="middle" width="400" height="400" > </p>
 
<br> </br>
 
<br> </br>
  
<p> Figure 4 - The files are too dissimilar! Access isn't allowed. </p>
+
<p style="text-align: center;" >  The files are too dissimilar! Access isn't allowed. </p>
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/f/f0/T--UNOTT--LucyGraph2.png" class="border" align="middle" width="400" height="400" > </p>
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/f/f0/T--UNOTT--LucyGraph2.png" class="border" align="middle" width="400" height="400" > </p>
 
<br> </br>
 
<br> </br>
  
<p> Figure 5 -  Changing the threshold might accommodate this difference </p>
+
<p style="text-align: center;" > Changing the threshold might accommodate this difference </p>
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/2/2b/T--UNOTT--LucyGraph3.png" class="border"  width="400" height="400" > </p>
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/2/2b/T--UNOTT--LucyGraph3.png" class="border"  width="400" height="400" > </p>
 
<br> </br>
 
<br> </br>
 +
<p> One major issue with using Image Comparison is that the images were required to be exactly the same size for it to work and be bitmaps, which is an uncommon image type. Another issue is that if the images were very large, the time would take longer. This would be an improvement over that method as there wouldn't be any images involved </p>
 +
<br> </br>
  
 
<sup> 1 </sup> <a href="https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance">Image taken from Wikipedia</a>
 
<sup> 1 </sup> <a href="https://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance">Image taken from Wikipedia</a>
Line 294: Line 296:
 
     <div class="expandable-box">
 
     <div class="expandable-box">
  
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Raw Data Differentiating Software </h4><center></center>
+
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Key.Coli Verification </h4><h5 style="color: #C0C0C0; font-weight: bold; font-size: 20px;"> Comparing the raw data of two different colonies straight from the fluorescence reader</h5>
 
   <div id="clear4" style="display: none;">
 
   <div id="clear4" style="display: none;">
     <p> Another method of comparing fluorescence spectra is by taking raw data and comparing them cell by cell. This was a far more user friendly method than using Image Comparison we found the data held the same format in terms of spacing when outputted by the fluorescence reader. </p>  
+
     <p> Another method of comparing fluorescence spectra is by taking raw data and comparing them cell by cell. During the development of the software, the team found that the data held the same format in terms of spacing when outputted by the fluorescence reader. This made it far easier to write a data comparison algorithm.</p>  
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
<p> One major issue with using Image Comparison is that the images were required to be exactly the same size for it to work and be bitmaps, which is an uncommon image type. Another issue is that if the images were very large, the time would take longer. This would be an improvement over that method as there wouldn't be any images involved </p>
 
 
<p> By using Java and working with the libraries which support the spreadsheet format, the team was able to directly compare sets of data by calling for values from each cell and calculating the difference. This was then checked with a threshold value; if it is above the threshold value, it fails the check and the user is locked out.</p>
 
<p> By using Java and working with the libraries which support the spreadsheet format, the team was able to directly compare sets of data by calling for values from each cell and calculating the difference. This was then checked with a threshold value; if it is above the threshold value, it fails the check and the user is locked out.</p>
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
 +
<p> A threshold value is how much variation the colony can have from the mother colony before it isn't valid. An issue with this as time goes on, the threshold value will have to change to catch a larger variation because the longer the colony is away from the mother colony, the more different it becomes. In order to calculate a threshold value at any given time, a Polynomial Fit of Order 3 is calculated using the data from the mother colony. To calculate the Polynomial Fit, Figure 6 was translated into Java code. </p>
 +
 +
<p style="text-align: center;" > Figure 6 </p>
 +
$$ \color{white}{ y_{i} = \beta_{0} + \beta_{1}x_{i}+ \beta_{1}x^2_{i} + ... + + \beta_{m}x^m_{i} + \varepsilon_{i} (i = 1,2,...,n) }  $$
 +
 +
<p style="text-align: center;" > Which can be expanded as in Matrix Notation: </p>
 +
 +
$$ \color{white}{ \begin{bmatrix}
 +
\\ y_1
 +
\\ y_2
 +
\\ y_3
 +
\\ \vdots
 +
\\ y_n
 +
 +
\end{bmatrix}
 +
=
 +
\begin{bmatrix}
 +
1 & x_1 & x^2_1 & ... &  x^m_1\\
 +
1 & x_2 & x^2_2 & ... &  x^m_2\\
 +
1 & x_3  & x^2_3 & ... &  x^m_3 \\
 +
\vdots & \vdots & \vdots & \ddots & \vdots \\
 +
1 & x_n & x^2_n & ... &  x^m_3
 +
\end{bmatrix}
 +
 +
\begin{bmatrix}
 +
\\ \beta_1
 +
\\ \beta_2
 +
\\ \beta_3
 +
\\ \vdots
 +
\\ \beta_n
 +
\end{bmatrix}
 +
+
 +
\begin{bmatrix}
 +
\\ \varepsilon _1
 +
\\ \varepsilon_2
 +
\\ \varepsilon_3
 +
\\ \vdots
 +
\\ \varepsilon_n
 +
\end{bmatrix}
 +
}
 +
$$
 +
<p style="text-align: center;" > Which can be simplified to </p>
 +
 +
$$ \color{white}{ \vec{y} = X \vec{\beta} + \vec{ \varepsilon }  }$$
 +
 +
<p style="text-align: center;" > Where... </p>
 +
$$ \color{white}{ \varepsilon \text{ is the y-intercept} } $$
 +
$$ \color{white}{ X  \text{  represents a design matrix which holds a set of objects} } $$
 +
$$ \color{white}{ y \text{ holds the value of the dependent variable} } $$
 +
$$ \color{white}{ \beta  \text{ denotes the slope of the line } } $$
 +
 +
<p> This was implemented through the use of For Loops to cycle through an array of data points. This was done only with the mother colony to create a threshold for each data point. This was done by using the Polynomial Fit to output an equation for the fit which used a variable X as it's input. X was simply substituted for the data point value that was used to create the fit to create a threshold value. This threshold value could be adjusted by adding or subtracting from it. The Key.Coli intensity was compared to this threshold value using Selection statements; if the key colony's data point wasn't within the upper limit or lower limit, they were locked out. The team decided it would be appropriate to use Polynomial Fitting as it was found to follow the points the closest when graphed in Excel.  </p>
 +
 +
<p style="text-align: center;" >  The system won't let the user in as the colonies are too different </p>
 +
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/3/38/T--UNOTT--rd1.png" class="border" width="600" height="400" > </p>
 +
  
<sup> Figure 6 </sup>
+
<p style="text-align: center;" > The system lets the user in as the colonies are nearly identical and falls within threshold </p>  
<br></br>
+
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/b/bc/T--UNOTT--rd2.png" class="border" width="600" height="400" > </p>  
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/1/10/T--UNOTT--poly_fit.svg" width="600" height="100" > </p>
+
  
<p> In order to create a formula for calculating threshold values at any given point using data from the mother colony, the team decided it would be appropriate to use Polynomial Fitting as it was found to follow the points the closest when graphed. Using the function from Figure 6 and translating it into Java, this was achieved. Furthermore, threshold could be adjusted by adding or subtracting from the equation produced </p>
 
  
 
<br> </br>
 
<br> </br>
<a href="https://github.com/BurgundyIsAPublicEnemy/iGEMNotts2017/tree/master/rd_compare">Download our source code</a>
+
<p> <a href="https://github.com/BurgundyIsAPublicEnemy/iGEMNotts2017/tree/master/rd_compare">Download our source code</a> </p>
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
  
Line 317: Line 372:
 
     <div class="expandable-box">
 
     <div class="expandable-box">
 
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Fluorescence Spectra Simulation</h4>
 
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Fluorescence Spectra Simulation</h4>
 +
<h5 style="color: #C0C0C0; font-weight: bold; font-size: 20px;"> Simulating fluorescence spectra from given protein concentrations </h5>
 
       <center></center>
 
       <center></center>
 
           <div id="clear5" style="display: none;">
 
           <div id="clear5" style="display: none;">
      <p> The software was written as an answer to the team wanting to be see how the spectra would look like after a certain amount of time as well as what the fluorescence would be at a certain time point. This is very useful as it allows the team to know what to expect during the constructions as well as be able to test multiple conditions in a short time </p>  
+
<p> The software was written as an answer to the team wanting to be see how the spectra would look like after a certain amount of time as well as what the fluorescence would be at a certain time point. This is very useful as it allows the team to know what to expect during the constructions as well as be able to test multiple conditions in a short time </p>  
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
  
<a href="https://2017.igem.org/Team:UNOTT/Modelling">To find out more about how we developed this software using models, click here</a>  
+
<p> <a href="https://2017.igem.org/Team:UNOTT/Modelling">To find out more about how we developed this software using models, click here </a> </p>
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
  
 
<p> The simulation was written in C and compiled to Linux binaries so it will only work on Linux systems. However, the source code is available so users can recompile it to their OS of choice (compiling code is inside.) In order to use it, navigate to the folder where you are keeping the program files on Terminal and type: ./loader which will activate the program. You then have to type in how much of each protein you are expecting for example, 0.1 micro-grams of sfGFP and then the wavelength of the laser you are using.</p>  
 
<p> The simulation was written in C and compiled to Linux binaries so it will only work on Linux systems. However, the source code is available so users can recompile it to their OS of choice (compiling code is inside.) In order to use it, navigate to the folder where you are keeping the program files on Terminal and type: ./loader which will activate the program. You then have to type in how much of each protein you are expecting for example, 0.1 micro-grams of sfGFP and then the wavelength of the laser you are using.</p>  
 +
<br> </br>
 +
<p style="text-align: center;" > Figure 6 </p>
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/6/6e/T--UNOTT--Lucy1.png" class="border" width="600" height="400" > </p>  
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/6/6e/T--UNOTT--Lucy1.png" class="border" width="600" height="400" > </p>  
Line 332: Line 390:
 
<p> The simulation supports command line interface for these inputs. When parameters are set, the program will calculate the expected fluorescence over time. This will be outputted as shown on below. </p>
 
<p> The simulation supports command line interface for these inputs. When parameters are set, the program will calculate the expected fluorescence over time. This will be outputted as shown on below. </p>
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
<img src="https://static.igem.org/mediawiki/2017/a/a9/T--UNOTT--Lucy2.png" class="border" width="400" height="400" >
+
<p style="text-align: center;" > Lucifer Fluorescence Simulator running </p>
 +
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/a/a9/T--UNOTT--Lucy2.png" class="border" width="400" height="400" > </p>  
 
<p> &nbsp; </p>
 
<p> &nbsp; </p>
<p> The spectra shown should represent the spectra that would be expected to be produced at those concentrations and wavelengths. </p>
+
<p> The spectra shown should represent the spectra that would be expected to be produced at those concentrations and wavelengths. When comparing to real data, there were differences and the model had to be refined to accommodate this. This process is extensively discussed in the Modelling section <sup> 1 </sup>. </p>
<p> &nbsp; </p>
+
<br> </br>
 
+
<p> <sup> 1 </sup> See Relationship between Max Fluorescence and Protein Concentration </p>  
 
</a>
 
</a>
 
</div>
 
</div>
 
</div>
 
</div>
 
  
 
     <div class="expandable-box">
 
     <div class="expandable-box">
 
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Random Number Generation</h4><center></center>
 
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Random Number Generation</h4><center></center>
 +
<h5 style="color: #C0C0C0; font-weight: bold; font-size: 20px;"> Generating random numbers from our randomly constructed colonies </h5>
 
       <div id="clear6" style="display: none;">
 
       <div id="clear6" style="display: none;">
<p> When speaking to our industry contacts about Key.Coli, they were very interested in seeing Key.Coli's capabilities as a Random Number Generation tool. After gaining results from the random constructions, the team set to finding out if the values could be used to generate a string of random numbers. The results are as shown. </p>
+
<p> When speaking to our industry contacts about Key.Coli, they were very interested in seeing Key.Coli's capabilities as a Random Number Generation tool. After gaining results from the random constructions, the team set to finding out if the values could be used to generate a string of random numbers. The importance of Key.Coli's core value of informational security is the ability to produce a persistent but randomly generated state. </p>
 
+
<br> </br>
 +
<p> There were two ways to generate a string of random numbers from the colonies: either try to generate a string of numbers from a three colonies (one acting as a Minimum and another as a Maximum for range) or treat each colony as a random number by itself </p>
 +
<br> </br>
 +
<p> On investigating the first method, out of 3 colonies, one was assigned the role of being the Minimum, having the lowest fluorescence intensity, and another a Maximum, having the highest. Using the equation: INT((MED[...] - MIN[...]) / MAX[...]) * 255), the team could generate a string of random numbers by inputting the fluorescence values over time. The INT(..) command sets the number to an Integer value, so no decimal points would appear. The MIN colony returns the colony with the lowest intensity, MAX returns the highest, and MED returns the median. The result was multiplied by 255 to produce a number out of 255, which is the largest value of a byte. The results are shown on Figure 8 </p>
 +
<p style="text-align: center;" > Figure 8 </p>
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/0/01/T--UNOTT--RandomPoints.png" class="border" width="600" height="400" > </p>  
 
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/0/01/T--UNOTT--RandomPoints.png" class="border" width="600" height="400" > </p>  
 
+
<br> </br>
 
<p> For comparison, the other values are taken from other pseudo-random and random number generators <sup> 1 </sup> </p>  
 
<p> For comparison, the other values are taken from other pseudo-random and random number generators <sup> 1 </sup> </p>  
<p> However, when checking for a normal distribution, it was found the set of numbers were biased to the the top and bottom of the set ranges, which suggests that a single colony can not be used to generate a set of numbers but rather, one colony can be used for one number (in our case, it was 18, 128 and 125.) This is because the colonies were constructed in a random fashion using Brownian Motion <sup> 2 </sup> </p>
+
<p> Looking at the graph, it shows that Key.Coli generated numbers tend to a lower range of numbers. This was confirmed when checking for a normal distribution; it was found the set of numbers were biased to the the top and bottom of the set ranges, which suggests that three colonies scaled over time cannot be used to generate a set of numbers. </p>
 +
 
 +
<br> </br>
 +
<p> In the other method, the team found that one colony can be used for one number (in our case, it was 18, 128 and 125.) Theoretically, these are random as the colonies were constructed in a random fashion using Brownian Motion <sup> 2 </sup>. However, due to time and resource constraints, it would be impossible to create 200,000 colonies required for testing currently but this maybe achievable through automation. </p>
  
 
<p> This is still very useful: it means it can be used as a random seed value for a random number generator. Furthermore, one way to get a set of numbers from one colony is to break it up. The team did this and found each colony, despite being genetically similar, had varying levels of fluorescence from each other. </p>  
 
<p> This is still very useful: it means it can be used as a random seed value for a random number generator. Furthermore, one way to get a set of numbers from one colony is to break it up. The team did this and found each colony, despite being genetically similar, had varying levels of fluorescence from each other. </p>  
  
<p> However, this hasn't been tested yet as an enormous number of colonies (200,000) would be needed to evaluate the Normal Distribution. However, future projects can feel free to use Key.Coli to generate true random numbers. </p>
+
<p> However, future projects can feel free to use Key.Coli to generate true random numbers. In the future, the team  would like to investigate the random nature of the key.coli system more thoroughly. </p>
 
<br> </br>
 
<br> </br>
 
<p> <sup> 1 </sup> RAND was generated using =INT(NORM.INV(RAND(),XX,XX)) on Excel, Atmospheric Noise was taken from Random.org and Fortuna is used in some Unix based OS to generate security keys </p>
 
<p> <sup> 1 </sup> RAND was generated using =INT(NORM.INV(RAND(),XX,XX)) on Excel, Atmospheric Noise was taken from Random.org and Fortuna is used in some Unix based OS to generate security keys </p>
Line 365: Line 431:
 
<div class="expandable-box">
 
<div class="expandable-box">
 
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Linux Key.Coli Security Layer </h4><center></center>
 
       <h4 style="color: #ffffff; font-weight: bold; font-size: 30px;">Linux Key.Coli Security Layer </h4><center></center>
 +
<h5 style="color: #C0C0C0; font-weight: bold; font-size: 20px;"> Porting our comparison software to low end hardware to safeguard a system </h5>
 
       <div id="clear7" style="display: none;">
 
       <div id="clear7" style="display: none;">
        <p> As a final wrap up for the project, all the software and modelling was put together to create an additional security layer on top of Linux for the Raspberry Pi. <p>
+
<p> As a final wrap up for the project, all the software and modeling was put together to create an additional security layer on top of Linux for the Raspberry Pi. A Raspberry Pi is a super low budget low-end computer which is favoured by enthusiasts and computer hobbyists which is designed to be programmed easily for, as the hardware comes unlocked. The reason we chose this was because it would give us the least issues when it came to editing the security protocols of Linux.  <p>
 +
<br> </br>
 +
<p style="text-align: center;" > Raspberry Pi </p>
 +
<p style="text-align: center;" > <img src="https://static.igem.org/mediawiki/2017/4/4a/T--UNOTT--rpi.jpeg" class="border" width="400" height="400" > </p>
 +
 
 +
<br> </br>
  
 
<p> This was done to show people how Key.Coli could be used to secure your computer from strangers who don't have the Key.Coli but might know your password as well as giving us a physical demonstration of Key.Coli to show at the Jamboree.</p>
 
<p> This was done to show people how Key.Coli could be used to secure your computer from strangers who don't have the Key.Coli but might know your password as well as giving us a physical demonstration of Key.Coli to show at the Jamboree.</p>
 +
<br> </br>
 +
<p> The system was designed as a program that would load when Linux booted up. The system works by locking out the user by shutting down all possible inputs other than an input from the reader. In order to "unlock" your computer, the user would need to connect the Raspberry Pi to two different fluorescent readers: one for the mother colony, and one for the Key.Coli mechanism.
 +
The data sets from both colonies are compared <sup> 1 </sup> and if it matches the threshold, the computer unfreezes.</p>
 +
<br> </br>
 +
<p style="text-align: center;" >  The usage is shown on a video here: </p>
 +
<p style="text-align: center;" > <video width="400" height="450" controls>
 +
  <source src="https://static.igem.org/mediawiki/2017/b/b6/T--UNOTT--keycoliusage.mp4" type="video/mp4">
 +
Your browser does not support the video tag.
 +
</video> </p>
  
<p> The system was designed as a program that would load when Linux booted up. The system works by locking out the user from files where they can only access the a temporary file where the spectra from the colonies would go.
+
<p> In the video, the Key.Coli software can be seen running. This secures the computer; as the user tries to move their mouse, it won't operate as all inputs have been blocked. A prompt on screen tells the user to plug in a fluorescence reader. Since we are not in lab, the user instead used a USB stick with the fluorescence data to represent the fluorescence reader. Later on, this will be patched so it can only take inputs from a reader. Once inputted, the data from the reader is compared with another data-set from the mother colony and the user is let through. In the video, you can see that as the user is able to move their mouse again. </p>  
This is compared <sup> 1 </sup> and if it matches the threshold, the computer unfreezes.</p>
+
<br> </br> 
 
+
<p> Using the Raw Data Comparison software developed and modifying it to support the file system on the Pi, this successfully happened. In order to "unlock" your computer, the user would need to connect the Raspberry Pi to two different fluorescent readers: one for the mother colony, and one for the Key.Coli mechanism. Both readings would be stored in a temporary file space and compared for similarity. </p>  
+
  
 +
<p> Using the Key.Coli Verification software developed and modifying it to support the file system on the Pi, this successfully happened. </p>
 +
<br> </br>
 
<p> However, due to health and safety regulations, for the Jamboree, we read data from conditions in lab and stored them on USB sticks, acting as the Key.Coli and mother colony. This is similar to how the actual system would work, except it has USB drives instead of fluorescence readers </p>
 
<p> However, due to health and safety regulations, for the Jamboree, we read data from conditions in lab and stored them on USB sticks, acting as the Key.Coli and mother colony. This is similar to how the actual system would work, except it has USB drives instead of fluorescence readers </p>
  

Latest revision as of 03:58, 2 November 2017





SOFTWARE

Overview

About our software and why iGEM Nottingham chose to produce it

Image Comparison Software

Comparing images of spectra from two different colonies to check for similiarity

Key.Coli Verification

Comparing the raw data of two different colonies straight from the fluorescence reader

Fluorescence Spectra Simulation

Simulating fluorescence spectra from given protein concentrations

Random Number Generation

Generating random numbers from our randomly constructed colonies

Linux Key.Coli Security Layer

Porting our comparison software to low end hardware to safeguard a system