Team:Amsterdam/maarten/

From 2012.igem.org

(Difference between revisions)
Line 5: Line 5:
<html>
<html>
<head>
<head>
-
<script type='text/javascript'>
+
<script type='text/javascript'></script>
<script src="ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<script src="ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
(function() {
(function() {

Revision as of 19:03, 3 September 2012

(function() { var ua = navigator.userAgent, iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i), typeOfCanvas = typeof HTMLCanvasElement, nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'), textSupport = nativeCanvasSupport && (typeof document.createElement('canvas').getContext('2d').fillText == 'function'); //I'm setting this based on the fact that ExCanvas provides text support for IE //and that as of today iPhone/iPad current text support is lame labelType = (!nativeCanvasSupport || (textSupport && !iStuff))? 'Native' : 'HTML'; nativeTextSupport = labelType == 'Native'; useGradients = nativeCanvasSupport; animate = !(iStuff || !nativeCanvasSupport); })(); var Log = { elem: false, write: function(text){ if (!this.elem) this.elem = document.getElementById('log'); this.elem.innerHTML = text; this.elem.style.left = (500 - this.elem.offsetWidth / 2) + 'px'; } }; function visualization(number){ $('#infovis').empty() json = JSON.parse(unescape($(':input[name=json'+number+']').val())) //init data //init Sunburst var sb = new $jit.Sunburst({ //id container for the visualization injectInto: 'infovis', //Distance between levels levelDistance: 90, //Change node and edge styles such as //color, width and dimensions. Node: { overridable: true, type: useGradients? 'gradient-multipie' : 'multipie' }, //Select canvas labels //'HTML', 'SVG' and 'Native' are possible options Label: { type: labelType }, //Change styles when hovering and clicking nodes NodeStyles: { enable: true, type: 'Native', stylesClick: { 'color': '#000000' }, }, //Add tooltips Tips: { enable: true, onShow: function(tip, node) { var html = "
" + node.data.description + "
"; var data = node.data; if("length" in data) { html += "Length of feature: " + data.length + "bp"; } if("type" in data){ html += "Type of feature: " + data.type; } tip.innerHTML = html; } }, //implement event handlers Events: { enable: true, onClick: function(node) { if(!node) return; //Build detailed information about the file/folder //and place it in the right column. var html = "

" + node.name + "

", data = node.data; if("dna" in data) { html += "

Sequence:
" + data.dna + "
"; } $jit.id('inner-details').innerHTML = html; //hide tip sb.tips.hide(); //rotate //sb.rotate(node, animate? 'animate' : 'replot', { //duration: 1000, //transition: $jit.Trans.Quart.easeInOut //}); } }, // Only used when Label type is 'HTML' or 'SVG' // Add text to the labels. // This method is only triggered on label creation onCreateLabel: function(domElement, node){ var labels = sb.config.Label.type, aw = node.getData('length'); if (labels === 'HTML' && (node._depth < 2 || aw > 2000)) { domElement.innerHTML = node.name; } else if (labels === 'SVG' && (node._depth < 2 || aw > 2000)) { domElement.firstChild.appendChild(document.createTextNode(node.name)); } }, // Only used when Label type is 'HTML' or 'SVG' // Change node styles when labels are placed // or moved. onPlaceLabel: function(domElement, node){ var labels = sb.config.Label.type; if (labels === 'SVG') { var fch = domElement.firstChild; var style = fch.style; style.display = ''; style.cursor = 'pointer'; style.fontSize = "0.8em"; fch.setAttribute('fill', "#fff"); } else if (labels === 'HTML') { var style = domElement.style; style.display = ''; style.cursor = 'pointer'; style.fontSize = "0.8em"; style.color = "#ddd"; var left = parseInt(style.left); var w = domElement.offsetWidth; style.left = (left - w / 2) + 'px'; } } }); //load JSON data. sb.loadJSON(json); //compute positions and plot. sb.refresh(); //end } function addForbiddenSequences(){ forbiddenSequences.addSite('Forbidden-EcoRI','GAATTC') forbiddenSequences.addSite('Forbidden-XbaI','GAATTC') forbiddenSequences.addSite('Forbidden-SpeI','ACTAGT') forbiddenSequences.addSite('Forbidden-PstI','CTGCAG') forbiddenSequences.addSite('Forbidden-NotI','GCGGCCGC') } var forbiddenSequences = { forbiddenSequencesArray : {}, addSite : function(name,sequence){ forbiddenSequences.forbiddenSequencesArray[name] = sequence }, } function checkOccurrence(target,sequence){ if (sequence.length > target.length){ if (sequence.indexOf(target) == -1){ return false } else{ return true } } else{ if (target.indexOf(sequence) == -1){ return false } else{ return true } } } function randomDNA(length){ chars = 'atgc' inForbiddenSite = true while (inForbiddenSite === true){ sequence = '' inForbiddenSite = false for (k=0; k') rawData.reverse().pop() rawData.reverse() for (zf in rawData){ zfFormatted = rawData[zf].split('\n') zfDescription = zfFormatted[0] zfTarget = zfDescription.split('|')[5] zfSequence = '' for (i=1;i' output += 'DEFINITION
' output += 'ACCESSION
' output += 'VERSION
' output += 'SOURCE
' output += '  ORGANISM
' output += 'COMMENT
' output += 'FEATURES' output += generateWhiteSpace(13) output += 'Location/Qualifiers
' return output } function genbankRestriction(targetSites){ restrictionPlasmidOutput = staticGenbank('restriction_plasmid') restrictionOrigin = memoryPlasmid.features[1].sequence for (key in targetSites){ restrictionOrigin += randomDNA(10) restrictionPlasmidOutput += generateWhiteSpace(5) restrictionPlasmidOutput += 'misc_feature' restrictionPlasmidOutput += generateWhiteSpace(5) restrictionPlasmidOutput += restrictionOrigin.length+1+'...' restrictionOrigin += targetSites[key].zincFinger restrictionPlasmidOutput += restrictionOrigin.length+'
' restrictionOrigin += randomDNA(10) restrictionPlasmidOutput += generateWhiteSpace(5) restrictionPlasmidOutput += 'misc_feature' restrictionPlasmidOutput += generateWhiteSpace(5) restrictionPlasmidOutput += restrictionOrigin.length+1+'...' restrictionOrigin += targetSites[key].methyltransferase restrictionPlasmidOutput += restrictionOrigin.length+'
' restrictionOrigin += targetSites[key].methyltransferase } restrictionOrigin = restrictionOrigin.toLowerCase() restrictionOrigin = restrictionOrigin.replace(/[atgc]{10}/g,'$& ').replace(/amp;/g,'').split(' ') pos = 1 newString = '' restrictionPlasmidOutput += 'ORIGIN
' for (i=0;i' newString = '' } else if ((i+1)%6==1){ if (i!=0){ pos+=60 } } } if (restrictionOrigin.length%6 != 0){ newString = '' whiteSpace = '' for (j=0;j<9-pos.toString().length;j++){ whiteSpace+= ' ' } newString+=whiteSpace+pos for (i=0;i<(restrictionOrigin.length%6);i++){ newString+=' '+restrictionOrigin[restrictionOrigin.length-restrictionOrigin.length%6+i] } restrictionPlasmidOutput+=newString+'
' } restrictionSiteWindow = window.open() restrictionSiteWindow.document.write(restrictionPlasmidOutput) restrictionSiteWindow.focus() } function genbankMemory(){ memoryPlasmidOutput = staticGenbank('memory_plasmid') for (item in memoryPlasmid.memoryObjects){ for (key in memoryPlasmid.memoryObjects[item]){ memoryPlasmidOutput += generateWhiteSpace(5) memoryPlasmidOutput += 'misc_feature' memoryPlasmidOutput += generateWhiteSpace(5) memoryPlasmidOutput += memoryPlasmid.memoryObjects[item][key].start+'...'+memoryPlasmid.memoryObjects[item][key].end+'
' memoryPlasmidOutput += generateWhiteSpace(10) memoryPlasmidOutput += '/label='+memoryPlasmid.memoryObjects[item][key].description+'
' } } origin = memoryPlasmid.dna origin = origin.replace(/[atgc]{10}/g,'$& ').replace(/amp;/g,'').split(' ') pos = 1 newString = '' memoryPlasmidOutput += 'ORIGIN
' for (i=0;i' newString = '' } else if ((i+1)%6==1){ if (i!=0){ pos+=60 } } } if (origin.length%6 != 0){ newString = '' whiteSpace = '' for (j=0;j<9-pos.toString().length;j++){ whiteSpace+= ' ' } newString+=whiteSpace+pos for (i=0;i<(origin.length%6);i++){ newString+=' '+origin[origin.length-origin.length%6+i] } memoryPlasmidOutput+=newString+'
' } myWindow=window.open() myWindow.document.write(memoryPlasmidOutput) myWindow.focus() } function formatPlasmidInput(backbone){ backbone = backbone.split('\n') originBoolean = false backboneName = '' sequence = '' if (backbone[0].toLowerCase().indexOf('locus') != -1){ for (i=0;i'){ for (i=0;i','') } } } memoryPlasmid.addFeature(1,sequence.length,'Backbone',sequence,backboneName,'') return sequence } function feature(start,end,type,sequence,description,featureObject){ this.start = start; this.end = end; this.type = type; this.sequence = sequence; this.description = description; this.featureObject = featureObject } var restrictionPlasmid = { backboneName : '', dna : '', features : {}, setBackboneName : function(backboneName){ restrictionlasmid.backboneName = backboneName }, setDNA : function(dna){ restrictionPlasmid.dna = dna }, addFeature : function(start,end,type,sequence,description){ restrictionPlasmid.features[start] = new feature(start,end,type,sequence,description) }, addRecognitionAreaObject : function(zfTarget,mtaseTarget){ recognitionPlasmid.zfTarget = zfTarget recognitionPlasmid.mtaseTarget = mtaseTarget } } var memoryPlasmid = { backboneName : '', dna : '', features : {}, memoryObjects : {}, setBackboneName : function(backboneName){ memoryPlasmid.backboneName = backboneName }, setDNA : function(dna){ memoryPlasmid.dna = dna }, addMemoryObject : function(sensor,rbs,zincFinger,linker,mycTag,methyltransferase,terminator){ memoryObject = new Object() memoryObject.sensor = sensor memoryObject.rbs = rbs memoryObject.zincFinger = zincFinger memoryObject.linker = linker memoryObject.mycTag = mycTag memoryObject.methyltransferase = methyltransferase memoryObject.terminator = terminator memoryPlasmid.memoryObjects[sensor.start] = memoryObject }, addFeature : function(start,end,type,sequence,description){ memoryPlasmid.features[start] = new feature(start,end,type,sequence,description) } } function sensorObject(name,sequence){ this.name = name this.sequence = sequence } function formatSensors(sensors){ sensorArray = new Array() if (sensors.indexOf('LOCUS') != -1){ sensors = sensors.split('LOCUS') sensors.reverse().pop() for (i=0;i'){ sensors = sensors.split('//') sensors.pop() sensorName = '' for (i=0;i'){ sensorName = sensor[j].replace('>','') } } sensorArray[i] = new sensorObject(sensorName,sequence) } } return sensorArray } function formatPartsregistryPromoters(){ promoters = new Array() $("input:checkbox[name=promoter]:checked").each(function(){ promoter = $(this).val().split(':') promoters.push(new sensorObject(promoter[0],promoter[2])) }) return promoters } function configuratePlasmid(sensorArray,number){ memoryPlasmid.features = {} memoryPlasmid.memoryObjects = {} backbone = document.plasmidForm.plasmid.value.toLowerCase() methyltransferases = getMethyltransferases() zincFingers = getZincFingers() linkers = getLinkers() mycTags = getMycTags() rbs = getRBS() terminators = getTerminators() plasmidSequence = formatPlasmidInput(backbone) memoryPlasmid.setDNA(plasmidSequence) for (i=0;i'); } function setup(){ document.write('test') $('#visualizationButtons').empty() $('#infovis').empty() $('#readout').empty() addForbiddenSequences() sensors = document.plasmidForm.sensors.value.toLowerCase() sensorArray = formatSensors(sensors) promoters = formatPartsregistryPromoters() sensorArray = promoters.concat(sensorArray) tempArray = new Array() j = 0 number = 0 targetSites = new Array() for (sensor in sensorArray){ tempArray[j] = sensorArray[sensor] j++ if (j%5 === 0 && j !== 0){ configuratePlasmid(tempArray,number) number++ tempArray = new Array() j = 0 for (item in memoryPlasmid.memoryObjects){ site = new Object() site.zincFingerDescription = memoryPlasmid.memoryObjects[item].zincFinger.featureObject.description site.zincFinger = memoryPlasmid.memoryObjects[item].zincFinger.featureObject.target site.zincFingerLength = site.zincFinger.length site.methyltransferaseDescription = memoryPlasmid.memoryObjects[item].methyltransferase.featureObject.description site.methyltransferase = memoryPlasmid.memoryObjects[item].methyltransferase.featureObject.target site.methyltransferaseLength = site.methyltransferase.length site.sensor = memoryPlasmid.memoryObjects[item].sensor.description targetSites.push(site) } } } if (j%5 !== 0){ configuratePlasmid(tempArray,number) for (item in memoryPlasmid.memoryObjects){ site = new Object() site.zincFingerDescription = memoryPlasmid.memoryObjects[item].zincFinger.featureObject.description site.zincFinger = memoryPlasmid.memoryObjects[item].zincFinger.featureObject.target site.zincFingerLength = site.zincFinger.length site.methyltransferaseDescription = memoryPlasmid.memoryObjects[item].methyltransferase.featureObject.description site.methyltransferase = memoryPlasmid.memoryObjects[item].methyltransferase.featureObject.target site.methyltransferaseLength = site.methyltransferase.length site.sensor = memoryPlasmid.memoryObjects[item].sensor.description targetSites.push(site) } } //genbankRestriction(targetSites) json = createJSONRestriction(targetSites) $('#visualizationButtons').append(''); $('#readout').append(''); } function getReadout(){ inputArray = new Array() json = JSON.parse(unescape($(':input[name=json-1]').val())) inputs = $(':input[name=readout]').val() inputArray = inputs.split(',') totalLength = json.children[0].data.length uncutArray = new Array() i = 0 for (child in json.children){ totalLength+=json.children[child].data.length if (json.children[child].data.description.indexOf('Methyltransferase') != -1){ uncutArray[i] = [json.children[child].id,totalLength] i++ } } bandsArray = new Array () j = 0 for (item in uncutArray){ i = 0 tempBandArray = new Array() tempBandArray[i] = [uncutArray[item][1],uncutArray[item][0]] i++ for (bandArray in bandsArray){ for (band in bandsArray[bandArray]){ tempBandArray[i] = [uncutArray[item][1] - bandsArray[bandArray][band][0],uncutArray[item][0]] i++ } } bandsArray[j] = tempBandArray j++ } matchingBands = new Array() i = 0 for (input in inputArray){ difference = 100000000000 bandSize = inputArray[input] for (bandArray in bandsArray){ for (band in bandsArray[bandArray]){ if (bandSize > bandsArray[bandArray][band][0]){ tempDifference = bandSize - bandsArray[bandArray][band][0] } else{ tempDifference = bandsArray[bandArray][band][0] - bandSize } if (tempDifference < difference){ matchingBand = bandsArray[bandArray][band][1] difference = tempDifference } } } matchingBands[i] = matchingBand i++ } i = 0 sensedSignals = new Array() for (matchingBand in matchingBands){ for (child in json.children){ if (json.children[child].id == matchingBands[matchingBand]){ sensedSignals[i] = json.children[child].data.sensor i++ } } } for (signal in sensedSignals){ $('#readout').append('
'+sensedSignals[signal]) } } function createJSONRestriction(targetSites){ json = { "children": [], "data": { "$type": "none", }, "id": "Source", "name": "Restriction Plasmid" }; json.children[0] = {} json.children[0].data = {} json.children[0].data.description = memoryPlasmid.features[1].description json.children[0].data.$color = '#B2ABF4' json.children[0].data.length = memoryPlasmid.features[1].end - memoryPlasmid.features[1].start json.children[0].data.$angularWidth = 1000 json.children[0].data.type = memoryPlasmid.features[1].type json.children[0].data.dna = memoryPlasmid.dna json.children[0].children = [] json.children[0].name = memoryPlasmid.features[1].description json.children[0].id = memoryPlasmid.features[1].description totalLength = memoryPlasmid.dna.length i = 1 for (item in targetSites){ site = targetSites[item] json.children[i] = {} json.children[i].data = {} json.children[i].children = [] json.children[i].data.description = '120bp random DNA' json.children[i].data.$color = '#FFFF00' json.children[i].data.length = 120 json.children[i].data.$angularWidth = 1000 json.children[i].data.dna = randomDNA(120+i*10) json.children[i].name = '120bp DNA' json.children[i].id = i i++ json.children[i] = {} json.children[i].data = {} json.children[i].children = [] json.children[i].data.description = site.zincFingerDescription json.children[i].data.$color = '#FF0000' json.children[i].data.length = site.zincFingerLength json.children[i].data.$angularWidth = 1000 json.children[i].data.dna = site.zincFinger json.children[i].name = site.zincFingerDescription.split('|')[0]+'|'+site.zincFingerDescription.split('|')[1] json.children[i].id = i i++ json.children[i] = {} json.children[i].data = {} json.children[i].children = [] json.children[i].data.description = '120bp random DNA' json.children[i].data.$color = '#FFFF00' json.children[i].data.length = 120 json.children[i].data.$angularWidth = 1000 json.children[i].data.dna = randomDNA(120) json.children[i].name = '120bp DNA' json.children[i].id = i i++ json.children[i] = {} json.children[i].data = {} json.children[i].children = [] json.children[i].data.description = 'Methyltransferase: '+site.methyltransferaseDescription json.children[i].data.$color = '#0000CD' json.children[i].data.length = site.methyltransferaseLength json.children[i].data.$angularWidth = 1000 json.children[i].data.dna = site.methyltransferase json.children[i].data.sensor = site.sensor json.children[i].name = site.methyltransferaseDescription.split('|')[0] json.children[i].id = i i++ json.children[i] = {} json.children[i].data = {} json.children[i].children = [] json.children[i].data.description = '120bp random DNA' json.children[i].data.$color = '#FFFF00' json.children[i].data.length = 120 json.children[i].data.$angularWidth = 1000 json.children[i].data.dna = randomDNA(120) json.children[i].name = '120bp DNA' json.children[i].id = i i++ json.children[i] = {} json.children[i].data = {} json.children[i].children = [] json.children[i].data.description = site.zincFingerDescription json.children[i].data.$color = '#FF0000' json.children[i].data.length = site.zincFingerLength json.children[i].data.$angularWidth = 1000 json.children[i].data.dna = site.zincFinger json.children[i].name = site.zincFingerDescription.split('|')[0]+'|'+site.zincFingerDescription.split('|')[1] json.children[i].id = i i++ } return json } function createJSONMemory(number){ var json = {} json = { "children": [], "data": { "$type": "none", }, "id": "Source", "name": "Memory Plasmid" }; json.children[0] = {} json.children[0].data = {} json.children[0].data.description = memoryPlasmid.features[1].description json.children[0].data.$color = '#B2ABF4' json.children[0].data.length = memoryPlasmid.features[1].end - memoryPlasmid.features[1].start json.children[0].data.$angularWidth = 1000 json.children[0].data.type = memoryPlasmid.features[1].type json.children[0].data.dna = memoryPlasmid.dna json.children[0].children = [] json.children[0].name = memoryPlasmid.features[1].description json.children[0].id = memoryPlasmid.features[1].description i = 1 for (memoryObject in memoryPlasmid.memoryObjects){ for (item in memoryPlasmid.memoryObjects[memoryObject]){ json.children[i] = {} json.children[i].children = [] json.children[i].data = {} json.children[i].data.description = memoryPlasmid.memoryObjects[memoryObject][item].description type = memoryPlasmid.memoryObjects[memoryObject][item].type if (type == 'Sensor'){ color = '#00FFFF' } else if (type == 'RBS'){ color = '#FFFF00' } else if (type == 'Zinc Finger'){ color = '#800080' } else if (type == 'Linker'){ color = '#00FF00' } else if (type == 'Myc Tag'){ color = '#FF00FF' } else if (type == 'Methyltransferase'){ color = '#FFA500' } else if (type == 'Terminator'){ color = '#FF0000' } else{ color = '#B2ABF4' } json.children[i].data.$color = color json.children[i].data.length = memoryPlasmid.memoryObjects[memoryObject][item].end - memoryPlasmid.memoryObjects[memoryObject][item].start json.children[i].data.$angularWidth = 1000 json.children[i].data.type = type json.children[i].data.dna = memoryPlasmid.memoryObjects[memoryObject][item].sequence json.children[i].id = i if (memoryPlasmid.memoryObjects[memoryObject][item].description.length > 14){ json.children[i].name = memoryPlasmid.memoryObjects[memoryObject][item].description.substring(0,14) } else{ json.children[i].name = memoryPlasmid.memoryObjects[memoryObject][item].description } i++ } } return json //end }

Enter your plasmid in fasta or genbank format


Enter your sensors in fasta or genbank format


Parts registry sensors: Madras


Parts registry sensors: Phage


Parts registry sensors: Metal sensitive

Parts registry sensors: Cell signalling