Team:HokkaidoU Japan/Shuffling Kit/Primer Designer
From 2013.igem.org
(Difference between revisions)
Line 27: | Line 27: | ||
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script> | <script type="text/javascript" src="http://code.jquery.com/jquery-1.10.1.min.js"></script> | ||
<script type="text/javascript"> | <script type="text/javascript"> | ||
- | (function(){var | + | (function() { |
+ | var calculate_tm, decide_annealing_site, delta_h, delta_s, main, sigma_delta_h, sigma_delta_s; | ||
+ | |||
+ | delta_h = function(seq) { | ||
+ | switch (seq) { | ||
+ | case 'AA': | ||
+ | case 'TT': | ||
+ | return -9.1; | ||
+ | case 'AT': | ||
+ | return -8.6; | ||
+ | case 'TA': | ||
+ | return -6; | ||
+ | case 'CA': | ||
+ | case 'TG': | ||
+ | return -5.8; | ||
+ | case 'GT': | ||
+ | case 'AC': | ||
+ | return -6.5; | ||
+ | case 'CT': | ||
+ | case 'AG': | ||
+ | return -7.8; | ||
+ | case 'GA': | ||
+ | case 'TC': | ||
+ | return -5.6; | ||
+ | case 'CG': | ||
+ | return -11.9; | ||
+ | case 'GC': | ||
+ | return -11.1; | ||
+ | case 'GG': | ||
+ | case 'CC': | ||
+ | return -11; | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | sigma_delta_h = function(seq) { | ||
+ | var i, sum, _i, _ref; | ||
+ | sum = 0; | ||
+ | for (i = _i = 0, _ref = seq.length - 2; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { | ||
+ | sum += delta_h(seq.slice(i, +(i + 1) + 1 || 9e9)); | ||
+ | } | ||
+ | return sum; | ||
+ | }; | ||
+ | |||
+ | delta_s = function(seq) { | ||
+ | switch (seq) { | ||
+ | case 'AA': | ||
+ | case 'TT': | ||
+ | return -24; | ||
+ | case 'AT': | ||
+ | return -23.9; | ||
+ | case 'TA': | ||
+ | return -16.9; | ||
+ | case 'CA': | ||
+ | case 'TG': | ||
+ | return -12.9; | ||
+ | case 'GT': | ||
+ | case 'AC': | ||
+ | return -17.3; | ||
+ | case 'CT': | ||
+ | case 'AG': | ||
+ | return -20.8; | ||
+ | case 'GA': | ||
+ | case 'TC': | ||
+ | return -13.5; | ||
+ | case 'CG': | ||
+ | return -27.8; | ||
+ | case 'GC': | ||
+ | return -26.7; | ||
+ | case 'GG': | ||
+ | case 'CC': | ||
+ | return -26.6; | ||
+ | } | ||
+ | }; | ||
+ | |||
+ | sigma_delta_s = function(seq) { | ||
+ | var i, sum, _i, _ref; | ||
+ | sum = 0; | ||
+ | for (i = _i = 0, _ref = seq.length - 2; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { | ||
+ | sum += delta_s(seq.slice(i, +(i + 1) + 1 || 9e9)); | ||
+ | } | ||
+ | return sum; | ||
+ | }; | ||
+ | |||
+ | calculate_tm = function(seq) { | ||
+ | var h, s; | ||
+ | h = sigma_delta_h(seq); | ||
+ | s = sigma_delta_s(seq); | ||
+ | return (1000 * h / (-10.8 + s + 1.987 * -15.89495209964411)) - 273.15 + 16.6 * -1.3010299956639813; | ||
+ | }; | ||
+ | |||
+ | decide_annealing_site = function(seq) { | ||
+ | var n, tm, _i; | ||
+ | if (calculate_tm(seq.slice(0, 35)) < 60) { | ||
+ | alert("Sequence is too short."); | ||
+ | } | ||
+ | for (n = _i = 17; _i <= 35; n = ++_i) { | ||
+ | tm = calculate_tm(seq.slice(0, +(n - 1) + 1 || 9e9)); | ||
+ | if (tm > 60 && (seq[n - 1] === 'G' || seq[n - 1] === 'C')) { | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | return [seq.slice(0, +(n - 1) + 1 || 9e9), tm]; | ||
+ | }; | ||
+ | |||
+ | main = function(over_f, over_r, seq) { | ||
+ | var anneal_f, anneal_r, primer_f, primer_r, tm_f, tm_r; | ||
+ | anneal_f = decide_annealing_site(seq); | ||
+ | anneal_r = decide_annealing_site(seq.split("").reverse().join("")); | ||
+ | primer_f = "TTTGGTCTCT" + over_f + "T" + anneal_f[0]; | ||
+ | tm_f = anneal_f[1]; | ||
+ | primer_r = "TTTGGTCTCA" + over_f + "A" + anneal_r[0]; | ||
+ | tm_r = anneal_r[1]; | ||
+ | return [primer_f, tm_f, primer_r, tm_r]; | ||
+ | }; | ||
+ | |||
+ | $(function() { | ||
+ | return $('#primer-designer').submit(function(e) { | ||
+ | var $button, $form, overhang_f, overhang_r, result, sequence; | ||
+ | e.preventDefault(); | ||
+ | $form = $(this); | ||
+ | $button = $form.find('button'); | ||
+ | $button.attr('disabled', true); | ||
+ | overhang_f = $form.find('[name="overhang-f"]').val().toUpperCase(); | ||
+ | overhang_r = $form.find('[name="overhang-r"]').val().toUpperCase(); | ||
+ | sequence = $form.find('[name="sequence"]').val().toUpperCase(); | ||
+ | result = main(overhang_f, overhang_r, sequence); | ||
+ | $('#primer-f').text(result[0]); | ||
+ | $('#tm-f').text(result[1]); | ||
+ | $('#primer-r').text(result[2]); | ||
+ | $('#tm-r').text(result[3]); | ||
+ | return $button.attr('disabled', false); | ||
+ | }); | ||
+ | }); | ||
+ | |||
+ | }).call(this); | ||
+ | |||
</script> | </script> | ||
</body> | </body> | ||
</html> | </html> |
Revision as of 12:13, 19 September 2013
Forward
- sequence
- tm
Reverse
- sequence
- tm