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" src="final_code_miBS_HD2010.txt"> </script>
+
<script type="text/javascript">
 +
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>

Revision as of 02:00, 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