Team:Heidelberg/Modeling/miBSdesigner

From 2010.igem.org

(Difference between revisions)
Line 17: Line 17:
div.reswrap2 {width: 550px; padding:25px; border-width:5px; margin:auto; border-style:solid; border-color:#11526f; height: 140px; text-align:left; background-color:#ffaf58; display:none;}
div.reswrap2 {width: 550px; padding:25px; border-width:5px; margin:auto; border-style:solid; border-color:#11526f; height: 140px; text-align:left; background-color:#ffaf58; display:none;}
</style>
</style>
-
<script type="text/javascript">
+
<script type="text/javascript" src="final_code_miBS_HD2010.txt"> </script>
-
if (top.location != self.location)
+
-
top.location = self.location;
+
-
    // global functions
+
-
    var seedval = 0;
+
-
    var compval = 0;
+
-
 
+
-
    // function main option (just enable or disable)             
+
-
 
+
-
    function chMd() {
+
-
        for (var i = 0; i < document.forms[0].AU.length; i++) {
+
-
        document.forms[0].AU[i].checked = false;
+
-
        }
+
-
        document.forms[0].AU[2].disabled = true;
+
-
        document.forms[0].AU[3].disabled = true;
+
-
        document.forms[0].AU[4].disabled = true;
+
-
        document.forms[0].AU[5].disabled = true;
+
-
 
+
-
        for (var i = 0; i < document.forms[0].elements.length; i++) {
+
-
        if (document.forms[0].elements[i].value == "perfect" && document.forms[0].elements[i].checked == true) {
+
-
        document.forms[0].seed.disabled = true;
+
-
        document.forms[0].comp.disabled = true;
+
-
        }       
+
-
        else if (document.forms[0].elements[i].value == "bulge" && document.forms[0].elements[i].checked == true) {
+
-
        document.forms[0].seed.disabled = true;
+
-
        document.forms[0].comp.disabled = true;
+
-
                document.forms[0].AU[2].disabled = false;
+
-
                document.forms[0].AU[4].disabled = false;
+
-
                document.forms[0].AU[5].disabled = false;
+
-
        }
+
-
        else if (document.forms[0].elements[i].value == "personal" && document.forms[0].elements[i].checked == true) {
+
-
        document.forms[0].seed.disabled = false;
+
-
        document.forms[0].comp.disabled = false;
+
-
          for (var j = 0; j < document.forms[0].AU.length; j++) {
+
-
document.forms[0].AU[j].disabled = false;
+
-
        }
+
-
        } 
+
-
        }
+
-
    }
+
-
 
+
-
    // function seed design (enable or disable and assign seedval)
+
-
 
+
-
    function chMd1() {
+
-
        for (var i = 0; i < document.forms[0].AU.length; i++) {
+
-
    document.forms[0].AU[i].checked = false;
+
-
    }
+
-
    document.forms[0].AU[2].disabled = false;
+
-
        document.forms[0].AU[3].disabled = false;
+
-
        document.forms[0].AU[4].disabled = false;
+
-
        document.forms[0].AU[5].disabled = false;
+
-
        document.forms[0].mis.disabled = true;
+
-
        var seed1 = document.seqIn.seed.selectedIndex;
+
-
        seedval = document.seqIn.seed.options[seed1].value;
+
-
 
+
-
        if (seedval == "7merA1") {
+
-
        document.forms[0].AU[2].disabled = true;
+
-
        }
+
-
        else if (seedval == "7merm8") {
+
-
        document.forms[0].AU[3].disabled = true;
+
-
        }
+
-
        else if (seedval == "8mer") {
+
-
            document.forms[0].AU[2].disabled = true;
+
-
            document.forms[0].AU[3].disabled = true;
+
-
            }
+
-
        else if (seedval == "custom") {
+
-
            document.forms[0].mis.disabled = false;
+
-
            }
+
-
    }
+
-
 
+
-
    // function supplementary design (enable or disable and compval assignment)
+
-
 
+
-
    function chMd2() {
+
-
        document.forms[0].match.disabled = true;
+
-
        var comp1 = document.seqIn.comp.selectedIndex;
+
-
        compval = document.seqIn.comp.options[comp1].value;
+
-
        if (compval == "custom") {
+
-
                document.forms[0].match.disabled = false;
+
-
            }
+
-
        }
+
-
 
+
-
    function chMd3() {
+
-
        var elements3 = document.getElementsByName("stickyends");
+
-
        for (var i = 0; i <= elements3.length; i++) {
+
-
            if (elements3[i].value == "custom") {
+
-
                document.forms[0].end5.disabled = false;
+
-
                document.forms[0].end3.disabled = false;
+
-
            }
+
-
            else {
+
-
                document.forms[0].end5.value = "";
+
-
                document.forms[0].end3.value = "";
+
-
                document.forms[0].end5.disabled = true;
+
-
                document.forms[0].end3.disabled = true;
+
-
            }
+
-
        }
+
-
    }
+
-
 
+
-
    // function to convert U into T and remove strange characters
+
-
 
+
-
    function cleaning(str) {
+
-
str = str.replace (/[().,?! _\s,]/g, "");
+
-
str = str.replace (/[0-9]/g, "");
+
-
str = str.toUpperCase();
+
-
        var mi_array = new Array();
+
-
        mi_array = str.split('');
+
-
        var result = new Array();
+
-
        var n = 0;
+
-
        for (n == 0; n < str.length; n++) {
+
-
            if (mi_array[n] == "U") {
+
-
                mi_array[n] = "T";
+
-
            }
+
-
            result.push(mi_array[n]);
+
-
        }
+
-
        result = result.join("");
+
-
        return (result);
+
-
    }
+
-
 
+
-
    // function to create complementary
+
-
 
+
-
    function comp(str) {
+
-
        var mi_array = new Array();
+
-
        mi_array = str.split('');
+
-
        var complementary = new Array();
+
-
        var n = 0;
+
-
        for (n == 0; n < str.length; n++) {
+
-
            if (mi_array[n] == "A") {
+
-
                mi_array[n] = "T";
+
-
            }
+
-
            else if (mi_array[n] == "T") {
+
-
                mi_array[n] = "A";
+
-
            }
+
-
            else if (mi_array[n] == "C") {
+
-
                mi_array[n] = "G";
+
-
            }
+
-
            else if (mi_array[n] == "G") {
+
-
                mi_array[n] = "C";
+
-
            }
+
-
            complementary.push(mi_array[n]);
+
-
        }
+
-
        complementary = complementary.join("");
+
-
        return (complementary);
+
-
    }
+
-
 
+
-
    // function to create reverse complementary
+
-
 
+
-
    function revcomp(str) {
+
-
        revcomplementary = str.split('').reverse().join('');
+
-
        revcomplementary = comp(revcomplementary);
+
-
        return (revcomplementary);
+
-
    }
+
-
 
+
-
    // function to create mismatches
+
-
 
+
-
    function mismatcher(str) {
+
-
        var mi_array = new Array();
+
-
        mi_array = str.split('');
+
-
        var random = new Array();
+
-
        var n = 0;
+
-
        for (n == 0; n < str.length; n++) {
+
-
            if (mi_array[n] == "A") {
+
-
                mi_array[n] = "G";
+
-
            }
+
-
            else if (mi_array[n] == "T") {
+
-
                mi_array[n] = "C";
+
-
            }
+
-
            else if (mi_array[n] == "C") {
+
-
                mi_array[n] = "T";
+
-
            }
+
-
            else if (mi_array[n] == "G") {
+
-
                mi_array[n] = "A";
+
-
            }
+
-
 
+
-
            random.push(mi_array[n]);
+
-
        }
+
-
        random = random.join("");
+
-
        return (random);
+
-
    }
+
-
 
+
-
// function to show results
+
-
+
-
function showDiv(res1,res2,res3,res4) {
+
-
document.getElementById('resultdiv').style.display='block';
+
-
document.getElementById('NamA').innerHTML = res1;
+
-
document.getElementById('seqA').innerHTML = res2;
+
-
document.getElementById('NamB').innerHTML = res3;
+
-
document.getElementById('seqB').innerHTML = res4;
+
-
}
+
-
 
+
-
    // MAIN FUNCTION. When button Go! is pressed
+
-
 
+
-
    function SBS() {
+
-
 
+
-
        // local variables assignments
+
-
        var nombre = document.getElementById('name').value;
+
-
        var mir = document.getElementById('mir').value;
+
-
        var spacer = document.getElementById('spacer').value;
+
-
        var mis = document.getElementById('mis').value;
+
-
        var mat = document.getElementById('match').value;
+
-
        var end1 = document.seqIn.stickyends.selectedIndex;
+
-
        var endings = document.seqIn.stickyends.options[end1].value;
+
-
        var end5 = document.getElementById('end5').value;
+
-
        var end3 = document.getElementById('end3').value;
+
-
        var length = mir.length;
+
-
        var newseed = 0;
+
-
        var newcomp = 0;
+
-
        var resfin = 0;
+
-
        var rcresult = 0;
+
-
        var charac = 0;
+
-
               
+
-
        // Retrotranscription and cleaning of RNA sequences
+
-
        mir = cleaning(mir);
+
-
        spacer = cleaning(spacer);
+
-
        end5 = cleaning(end5);
+
-
        end3 = cleaning(end3);
+
-
        document.getElementById('mir').value = mir;
+
-
        document.getElementById('spacer').value = spacer;
+
-
        document.getElementById('end5').value = end5;
+
-
        document.getElementById('end3').value = end3;
+
-
 
+
-
    mir = mir.split('').reverse().join('');
+
-
        var seedstring = mir.substring(14, 22);
+
-
        var compstring = mir.substring(0, 14);
+
-
 
+
-
        // Alert error messages
+
-
        if (mir.match(/[^ACTG]/g)) {
+
-
            alert('The format of the miRNA is not acceptable');
+
-
            return;
+
-
        }
+
-
        if (!(length == 22)) {
+
-
            alert('The miRNA sequence is not 22 nt long');
+
-
            return;
+
-
        }
+
-
        if (spacer.match(/[^ACTGN]/g)) {
+
-
            alert('The format of the spacer is not acceptable')
+
-
            return;
+
-
        }
+
-
        if (end5.match(/[^ACTG]/g)) {
+
-
            alert("The format of the extreme custom sequence in 5' is not acceptable. Please input a DNA or RNA sequence");
+
-
            return;
+
-
        }
+
-
        if (end3.match(/[^ACTG]/g)) {
+
-
            alert("The format of the extreme custom sequence in 3' is not acceptable. Please input a DNA or RNA sequence");
+
-
            return;
+
-
        }
+
-
 
+
-
        // perfect binding site constructor
+
-
        if (document.seqIn.quality[0].checked == true) {
+
-
            resfin = comp(mir);
+
-
            charac = "perf";
+
-
        }
+
-
 
+
-
        // nucleotide 9-12 randomizer
+
-
        else if (document.seqIn.quality[1].checked == true) {
+
-
            var seed1 = mir.charAt(21);
+
-
            seed1 = mismatcher(seed1);
+
-
            var seed = mir.substring(14, 21);
+
-
            seed = comp(seed);
+
-
            newseed = (seed + seed1);
+
-
            var rest1 = mir.substring(10, 14);
+
-
            rest1 = mismatcher(rest1);
+
-
            var rest = mir.substring(0, 10);
+
-
            rest = comp(rest);
+
-
            newcomp = (rest + rest1);
+
-
            resfin = newcomp.concat(newseed);
+
-
            charac = "bulge 9-12";
+
-
        }
+
-
       
+
-
        // customized BS
+
-
        else if (document.seqIn.quality[2].checked == true) {
+
-
            if (seedval == 0 || compval == 0) {
+
-
            alert('Please select one seed type and one supplementary region');}
+
-
 
+
-
            // design 6mer seed
+
-
            if (seedval == "6mer") {
+
-
                var seed1 = mir.charAt(21);
+
-
                seed1 = mismatcher(seed1);
+
-
                var seed8 = mir.charAt(14);
+
-
                seed8 = mismatcher(seed8);
+
-
                var seed = mir.substring(15, 21);
+
-
                seed = comp(seed);
+
-
                newseed = (seed8 + seed + seed1);
+
-
            }
+
-
 
+
-
            // design 7merA1 seed
+
-
            else if (seedval == "7merA1") {
+
-
                var seed8 = mir.charAt(14);
+
-
                seed8 = mismatcher(seed8);
+
-
                var seed = mir.substring(15, 22);
+
-
                seed = comp(seed);
+
-
                newseed = (seed8 + seed);
+
-
            }
+
-
 
+
-
            // design 7merm8 seed
+
-
            else if (seedval == "7merm8") {
+
-
                var seed1 = mir.charAt(21);
+
-
                seed1 = mismatcher(seed1);
+
-
                var seed = mir.substring(14, 21);
+
-
                seed = comp(seed);
+
-
                newseed = (seed + seed1);
+
-
            }
+
-
 
+
-
            // design 8mer seed
+
-
            else if (seedval == "8mer") {
+
-
                newseed = comp(seedstring);
+
-
            }
+
-
 
+
-
            // design custom seed
+
-
            else if (seedval == "custom") {
+
-
                if (mis.length > 1 || mis.match(/\D/g)) {
+
-
                    alert('The format of the input mismatches is not acceptable. Input only one number between 2 and 7');
+
-
                    return;
+
-
                }
+
-
                var result = new Array();
+
-
                var cuseed = seedstring.split('');
+
-
                cuseed = cuseed.reverse();
+
-
                var mis_array = new Array();
+
-
                mis_array = mis.split(', ');
+
-
                for (var nj = 0; nj < mis_array.length; nj++) {
+
-
                    mis_array[nj] = mis_array[nj] - 1;
+
-
                }
+
-
                for (var i = 0; i < cuseed.length; i++) {
+
-
                    var flag = 0;
+
-
                    for (var j = 0; j < mis_array.length; j++) {
+
-
                        if (i == mis_array[j]) {
+
-
                            result[i] = mismatcher(cuseed[i]);
+
-
                            flag = 1;
+
-
                        }
+
-
                    }
+
-
                    if (!(flag == 1)) {
+
-
                        result[i] = comp(cuseed[i]);
+
-
                    }
+
-
                }
+
-
                newseed = result.reverse();
+
-
                newseed = newseed.join('');
+
-
if (mis.length > 0) {
+
-
}
+
-
            }
+
-
 
+
-
            // design 3 comp
+
-
            if (compval == 3) {
+
-
                var rest1 = mir.substring(9, 14);
+
-
                rest1 = mismatcher(rest1);
+
-
                var rest3 = mir.substring(0, 6);
+
-
                rest3 = mismatcher(rest3);
+
-
                var rest = mir.substring(6, 9);
+
-
                rest = comp(rest);
+
-
                newcomp = (rest3 + rest + rest1);
+
-
            }
+
-
 
+
-
            // design 4 comp
+
-
            else if (compval == 4) {
+
-
                var rest1 = mir.substring(10, 14);
+
-
                rest1 = mismatcher(rest1);
+
-
                var rest3 = mir.substring(0, 6);
+
-
                rest3 = mismatcher(rest3);
+
-
                var rest = mir.substring(6, 10);
+
-
                rest = comp(rest);
+
-
                newcomp = (rest3 + rest + rest1);
+
-
            }
+
-
 
+
-
            // design 5 comp
+
-
            else if (compval == 5) {
+
-
                var rest1 = mir.substring(10, 14);
+
-
                rest1 = mismatcher(rest1);
+
-
                var rest3 = mir.substring(0, 5);
+
-
                rest3 = mismatcher(rest3);
+
-
                var rest = mir.substring(5, 10);
+
-
                rest = comp(rest);
+
-
                newcomp = (rest3 + rest + rest1);
+
-
            }
+
-
 
+
-
            // design 6 comp
+
-
            else if (compval == 6) {
+
-
                var rest1 = mir.substring(10, 14);
+
-
                rest1 = mismatcher(rest1);
+
-
                var rest3 = mir.substring(0, 4);
+
-
                rest3 = mismatcher(rest3);
+
-
                var rest = mir.substring(4, 10);
+
-
                rest = comp(rest);
+
-
                newcomp = (rest3 + rest + rest1);
+
-
            }
+
-
 
+
-
            // design 7 comp
+
-
            else if (compval == 7) {
+
-
                var rest1 = mir.substring(10, 14);
+
-
                rest1 = mismatcher(rest1);
+
-
                var rest3 = mir.substring(0, 3);
+
-
                rest3 = mismatcher(rest3);
+
-
                var rest = mir.substring(3, 10);
+
-
                rest = comp(rest);
+
-
                newcomp = (rest3 + rest + rest1);
+
-
            }
+
-
 
+
-
            // design 8 comp
+
-
            else if (compval == 8) {
+
-
                var rest1 = mir.substring(10, 14);
+
-
                rest1 = mismatcher(rest1);
+
-
                var rest3 = mir.substring(0, 2);
+
-
                rest3 = mismatcher(rest3);
+
-
                var rest = mir.substring(2, 10);
+
-
                rest = comp(rest);
+
-
                newcomp = (rest3 + rest + rest1);
+
-
            }
+
-
 
+
-
            // design Total comp
+
-
            else if (compval == "total") {
+
-
                var rest1 = mir.substring(10, 14);
+
-
                rest1 = mismatcher(rest1);
+
-
                var rest = mir.substring(0, 10);
+
-
                rest = comp(rest);
+
-
                newcomp = (rest + rest1);
+
-
            }
+
-
 
+
-
            // design custom comp
+
-
            else if (compval == "custom") {
+
-
 
+
-
                var result = new Array();
+
-
                var cucomp = compstring.split('');
+
-
                cucomp = cucomp.reverse();
+
-
                var match_array = new Array();
+
-
                match_array = mat.split(', ');
+
-
                for (var nj = 0; nj < match_array.length; nj++) {
+
-
                    match_array[nj] = match_array[nj] - 9;
+
-
                }
+
-
                for (var i = 0; i < cucomp.length; i++) {
+
-
                    var flag = 0;
+
-
                    for (var j = 0; j < match_array.length; j++) {
+
-
                        if (i == match_array[j]) {
+
-
                            result[i] = comp(cucomp[i]);
+
-
                            flag = 1;
+
-
                        }
+
-
                    }
+
-
                    if (!(flag == 1)) {
+
-
                        result[i] = mismatcher(cucomp[i]);
+
-
                    }
+
-
                }
+
-
                newcomp = result.reverse();
+
-
                newcomp = newcomp.join('');
+
-
                match_array = match_array.join('');
+
-
                if (match_array.length > compstring.length || match_array.match(/\D/g)) {
+
-
                    alert('The format of the input matches is not acceptable. Input only numbers separated by commas');
+
-
                    return;
+
-
                }
+
-
            }
+
-
 
+
-
            // put together seed and compensatory regions
+
-
            charac = "seed" + seedval + " compens" + compval;
+
-
            resfin = newcomp.concat(newseed);       
+
-
        }
+
-
 
+
-
        //Addition of extra AUs
+
-
       
+
-
        // A/U in position 1
+
-
        if (document.seqIn.AU[2].checked) {
+
-
            var result = new Array();
+
-
            for (var i = 0; i < resfin.length; i++) {
+
-
                if (!(i == 21)) {
+
-
                    result[i] = resfin[i];
+
-
                }
+
-
                else {
+
-
                    if (mir[21] == "T") {
+
-
                        result[21] = "T";
+
-
                    }
+
-
                    else {
+
-
                        result[21] = "A";
+
-
                    }
+
-
                }
+
-
            }
+
-
            resfin = result.join('');
+
-
        }
+
-
 
+
-
        // A/U in position 8
+
-
        if (document.seqIn.AU[3].checked) {
+
-
            var result = new Array();
+
-
            for (var i = 0; i < resfin.length; i++) {
+
-
                if (!(i == 14)) {
+
-
                    result[i] = resfin[i];
+
-
                }
+
-
                else {
+
-
                    if (mir[14] == "T") {
+
-
                        result[14] = "T";
+
-
                    }
+
-
                    else {
+
-
                        result[14] = "A";
+
-
                    }
+
-
                }
+
-
            }
+
-
            resfin = result.join('');
+
-
        }
+
-
 
+
-
        // A/U in position 9
+
-
        if (document.seqIn.AU[4].checked) {
+
-
            var result = new Array();
+
-
            for (var i = 0; i < resfin.length; i++) {
+
-
                if (!(i == 13)) {
+
-
                    result[i] = resfin[i];
+
-
                }
+
-
                else {
+
-
                    if (mir[13] == "T") {
+
-
                        result[13] = "T";
+
-
                    }
+
-
                    else {
+
-
                        result[13] = "A";
+
-
                    }
+
-
                }
+
-
            }
+
-
            resfin = result.join('');
+
-
        }
+
-
 
+
-
        // A/U in position 10
+
-
        if (document.seqIn.AU[5].checked) {
+
-
            var result = new Array();
+
-
            for (var i = 0; i < resfin.length; i++) {
+
-
                if (!(i == 12)) {
+
-
                    result[i] = resfin[i];
+
-
                }
+
-
                else {
+
-
                    if (mir[12] == "T") {
+
-
                        result[12] = "T";
+
-
                    }
+
-
                    else {
+
-
                        result[12] = "A";
+
-
                    }
+
-
                }
+
-
            }
+
-
            resfin = result.join('');
+
-
        }
+
-
 
+
-
        // position -1 and 0
+
-
        var AU1 = "";
+
-
        if (document.seqIn.AU[0].checked && document.seqIn.AU[1].checked) {
+
-
            AU1 = "AA";
+
-
        }
+
-
        else if (!document.seqIn.AU[0].checked && document.seqIn.AU[1].checked) {
+
-
            AU1 = "A";
+
-
        }
+
-
        else if (document.seqIn.AU[0].checked && !document.seqIn.AU[1].checked) {
+
-
            AU1 = "CA";
+
-
}
+
-
     
+
-
        // addition of sticky ends
+
-
        var leading5 = "";
+
-
        var complem3 = "";
+
-
        var leading3 = "";
+
-
        var complem5 = "";
+
-
 
+
-
        if (endings == "BBB") {
+
-
            leading5 = "AATTCGCGGCCGCACTAGT";
+
-
            complem3 = "ACTAGTGCGGCCGCG";
+
-
            leading3 = "GCTAGCGCGGCCGCTGCA";
+
-
            complem5 = "GCGGCCGCGCTAGC";
+
-
        }
+
-
        if (endings == "XX") {
+
-
            leading5 = "CCGGG";
+
-
            complem3 = "C";
+
-
            leading3 = "C";
+
-
            complem5 = "TCGAG";       
+
-
        }
+
-
        else if (endings == "custom") {
+
-
            leading5 = end5;
+
-
            leading3 = end3;
+
-
            complem3 = revcomp(leading5);
+
-
            complem5 = revcomp(leading3);
+
-
        }
+
-
 
+
-
        // creation of reverse complementary strand               
+
-
        resfin = spacer.concat(resfin);
+
-
        resfin = resfin.concat(AU1);
+
-
        rcresult = revcomp(resfin);
+
-
        leading5 = leading5.toLowerCase();
+
-
        complem5 = complem5.toLowerCase();
+
-
        leading3 = leading3.toLowerCase();
+
-
        complem3 = complem3.toLowerCase();
+
-
var output1 = ("> " + nombre + ", " + charac);
+
-
var output2 = (leading5 + resfin + leading3);
+
-
var output3 = ("> " + nombre + ", " + charac + " comp strand");
+
-
var output4 = (complem5 + rcresult + complem3);
+
-
+
-
// output sequences
+
-
showDiv(output1,output2,output3,output4);
+
-
 
+
-
        //End
+
-
    }
+
-
</script>
+
</head>
</head>
     <body>
     <body>
Line 690: Line 108:
<OPTION SELECTED value="none">None
<OPTION SELECTED value="none">None
<OPTION value="BBB">Biobricks Standard RFC-12
<OPTION value="BBB">Biobricks Standard RFC-12
 +
<OPTION value="XX">Xma1 / Xho1
<OPTION value="custom">Custom sequence
<OPTION value="custom">Custom sequence
</SELECT></div>
</SELECT></div>

Revision as of 02:04, 24 October 2010

BS designer for miRNA

Construction of microRNA binding sites
Sequence name

microRNA Sequence ( 5' -> 3')

Spacer (inert sequence)

Perfect Binding Site
Imperfect Binding Site with 4 nt bulge (9-12)
Personalized Binding Site

Seed sequence (1-8)
Customized MISMATCH position

Supplementary region
Customized MATCH positions (input numbers from 9 to 22)


Modify AU content
A in position -1
A in position 0
A in position 1
A in position 8
A in position 9
A in position 10


Sticky ends for integration in plasmid:
Customized: 5' 3'


Name of primer 1

Sequence of primer 1

Name of primer 2

Sequence of primer 2