Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/allpy/raw-rev/b0d3c9413cf9
Дата изменения: Unknown
Дата индексирования: Tue Oct 2 08:09:09 2012
Кодировка:

# HG changeset patch
# User Boris Burkov
# Date 1309506146 -14400
# Node ID b0d3c9413cf9a4479bdf142ea6bc856acfdedc5b
# Parent 1a4a04829ba603b63821b72f453c98e9b2ece8fd# Parent 78e1700f589dfca25cba8b7293f9c9a49dd52f90
Merge between me and central.

diff -r 1a4a04829ba6 -r b0d3c9413cf9 .hgignore
--- a/.hgignore Fri Jul 01 11:40:00 2011 +0400
+++ b/.hgignore Fri Jul 01 11:42:26 2011 +0400
@@ -19,6 +19,7 @@

# Temporary files from building
allpy/data/components.cif
+blocks3d/www/input/conservative_groups.js

# Temporary files from sphinx
docs/build
diff -r 1a4a04829ba6 -r b0d3c9413cf9 NEWS
--- a/NEWS Fri Jul 01 11:40:00 2011 +0400
+++ b/NEWS Fri Jul 01 11:42:26 2011 +0400
@@ -4,6 +4,8 @@
* new: method allpy.base.Alignment.rows_as_strings()
* new: method allpy.base.Alignment.row_as_list(sequence)
* new: method allpy.base.Alignment.row_as_string(sequence)
+ * new: columns_as_lists() returns list of lists, each has 'column' attribute
+ * new: javascript viewer colors columns by conservedness

1.3.0 (2011-04-15)

diff -r 1a4a04829ba6 -r b0d3c9413cf9 blocks3d/www/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/blocks3d/www/Makefile Fri Jul 01 11:42:26 2011 +0400
@@ -0,0 +1,6 @@
+
+build:
+ python ../../sequence_based_blocks_search/functional_groups_to_javascript.py > input/conservative_groups.js
+ r2w
+ python test.py > output/test.html
+
diff -r 1a4a04829ba6 -r b0d3c9413cf9 blocks3d/www/README
--- a/blocks3d/www/README Fri Jul 01 11:40:00 2011 +0400
+++ b/blocks3d/www/README Fri Jul 01 11:42:26 2011 +0400
@@ -4,8 +4,10 @@
* libjs-jquery

build template file:
- cd www
- mkdir output
- r2w
+ make
output file is build to output/index.html

+build test.html
+ python test.py > test.html
+and open test.html in browser
+
diff -r 1a4a04829ba6 -r b0d3c9413cf9 blocks3d/www/input/blocks.js
--- a/blocks3d/www/input/blocks.js Fri Jul 01 11:40:00 2011 +0400
+++ b/blocks3d/www/input/blocks.js Fri Jul 01 11:42:26 2011 +0400
@@ -6,6 +6,7 @@
int end; (inclusive)
IDs: list of IDs
cores: []
+ is_conservative: list, mapping pos to bool
}
*/

@@ -41,13 +42,32 @@
// alignment_strings[ID] = string with sequence for

var alignment_strings = {};

+var conservative_groups_dict = []; // list of dictsets of uppercased letters

// useful_positions[ID][position] = block id
// (if this element is a part of at least one block)
var useful_positions = {};

+var blocks_inited = false;

-var blocks_inited = false;
+function is_conservative_column(column, sequences)
+{
+ var result = false;
+ $.each(conservative_groups_dict, function(i, group) {
+ var inside_group = true;
+ $.each(sequences, function(j, ID) {
+ if (!group[fasta_dict[ID].charAt(column).toUpperCase()])
+ {
+ inside_group = false;
+ }
+ });
+ if (inside_group)
+ {
+ result = true;
+ }
+ });
+ return result;
+}

// run application
function blocks_init()
@@ -62,6 +82,18 @@
var i, j, k;
var t = '';

+ for (i = 0; i < conservative_groups.length; i++)
+ {
+ var group = conservative_groups[i];
+ var d = {};
+ for (j = 0; j < group.length; j++)
+ {
+ var letter = group[j].toUpperCase();
+ d[letter] = true;
+ }
+ conservative_groups_dict.push(d);
+ }
+
var seq;

// calculate max_ID_length
@@ -81,12 +113,6 @@
IDs_count = 0;
$.each(fasta_dict, function(k,v) { IDs_count+=1});

- // calculate a color for each block
- for (i = 0; i < blocks.length; i++)
- {
- blocks[i].color = crc32_color(json(blocks[i]));
- }
-
// mark colorable positions
useful_positions = {};
for (ID in fasta_dict)
@@ -106,6 +132,24 @@
}
}

+ var is_conservative = [];
+ var all_sequences = [];
+ $.each(fasta_dict, function(ID, seq) { all_sequences.push(ID); });
+ for (j = 0; j < seq_length; j++)
+ {
+ is_conservative[j] = is_conservative_column(j, all_sequences);
+ }
+
+ for (i = 0; i < blocks.length; i++)
+ {
+ block = blocks[i];
+ block.is_conservative = [];
+ for (j = block.start; j <= block.end; j++)
+ {
+ block.is_conservative[j] = is_conservative_column(j, block.IDs);
+ }
+ }
+
// pre-calculate strings for

alignment_strings = {};
var block_i;
@@ -116,12 +160,16 @@
for (j = 0; j < seq_length; j++)
{
block_i = useful_positions[ID][j];
+ block = blocks[block_i];
if (block_i || block_i === 0)
{
// current element is a part of block
+ var dark = block.is_conservative[j] && seq.charAt(j) != '-';
+ var color = crc32_color(json(block), dark);
t += ' - t += ' style="background:' + blocks[block_i].color + '; cursor:pointer;" ' ;
+ t += ' style="background:' + color + '; cursor:pointer;" ' ;
t += ' onclick=letter_click("' + ID + '",' + j + ') ' ;
+ t += ' class=block' + block_i + ' ';
t += '>';
}
t += seq.charAt(j);
@@ -146,11 +194,30 @@
current_number = '' + current_number; // convert to string
for (j = 0; j < legend_interval - current_number.length; j++)
{
- t += ' ';
+ t += ' ';
}
t += current_number;
}
- t = '
' + t + '
';
+ var conservative_t = '';
+ for (i = 0; i < t.length; i++)
+ {
+ var dark = is_conservative[i];
+ var bgcolor = dark ? 'black' : 'white';
+ var fgcolor = dark ? 'white' : 'black';
+ var l;
+ if (t.charAt(i) == ' ')
+ {
+ l = ' '
+ }
+ else
+ {
+ l = t.charAt(i);
+ }
+ conservative_t += ' + conservative_t += ' style="background:' + bgcolor + ';color:' + fgcolor + ';" ' ;
+ conservative_t += '>' + l + '
';
+ }
+ t = '
' + conservative_t + '
';
$('#legend').html(t);

// run
@@ -159,6 +226,19 @@
blocks_show();
}

+function blocks_bind_mouseover()
+{
+ for (var i = 0; i < blocks.length; i++)
+ {
+ var s = '.block' + i;
+ $(s).mouseover({s: s}, function(event) {
+ $(event.data.s).css('color', 'green');
+ });
+ $(s).mouseleave({s: s}, function(event) {
+ $(event.data.s).css('color', 'black');
+ });
+ }
+}
// set width and height of main table
function set_table_width_height()
{
@@ -287,5 +367,6 @@
}
$('#mainpanel').html(t);
blocks_make_pre();
+ blocks_bind_mouseover();
}

diff -r 1a4a04829ba6 -r b0d3c9413cf9 blocks3d/www/input/crc32_color.js
--- a/blocks3d/www/input/crc32_color.js Fri Jul 01 11:40:00 2011 +0400
+++ b/blocks3d/www/input/crc32_color.js Fri Jul 01 11:42:26 2011 +0400
@@ -2,9 +2,12 @@
/**
* returns color, corresponding to something (using crc32 value)
*
- * something -- string
+ * @param string something string
+ * @param bool dark Should color be dark
+ * If dark is true, first bit of each byte from color is set to 0,
+ * otherwise to 1
*/
-function crc32_color(something)
+function crc32_color(something, dark)
{
var crc = crc32(something);
var rgb = []; // [r, g, b] (3 last bytes of crc32 are used)
@@ -15,12 +18,18 @@
// lighten
for (j = 0; j < 3; j++)
{
- rgb[j] |= 128;
+ rgb[j] |= 0x80;
+ }
+ for (j = 0; j < 3; j++)
+ {
+ if (dark)
+ {
+ rgb[j] *= 0.8;
+ }
}
for (j = 0; j < 3; j++)
{
rgb[j] = dechex(rgb[j]);
-
if (rgb[j].length == 1)
{
rgb[j] = '0' + rgb[j];
diff -r 1a4a04829ba6 -r b0d3c9413cf9 blocks3d/www/input/index.txt
--- a/blocks3d/www/input/index.txt Fri Jul 01 11:40:00 2011 +0400
+++ b/blocks3d/www/input/index.txt Fri Jul 01 11:42:26 2011 +0400
@@ -16,7 +16,7 @@

Reliable blocks finding




-
+


Enable Javascript!

@@ -54,6 +54,7 @@
{include_minified;crc32_color.js}
{include_minified;crc32.js}
{include_minified;dechex.js}
+{include_minified;conservative_groups.js}
{include_minified;blocks.js}

self_js_text
diff -r 1a4a04829ba6 -r b0d3c9413cf9 blocks3d/www/test.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/blocks3d/www/test.py Fri Jul 01 11:42:26 2011 +0400
@@ -0,0 +1,10 @@
+
+print open('output/index.html').read().replace('self_js_text', """
+blocks = [{"start": 2, "end": 17, "IDs": ["B", "A"]},
+ {"start": 19, "end": 28, "IDs": ["B", "C"]},
+ {"start": 35, "end": 47, "IDs": ["B", "A", "C"]}];
+fasta_dict = {"A": "SNAKIDQLSSDVQTLNAK-DQLSNDVNAARSDAQAAKDDAARANQRLDNM",
+ "B": "SNAKIDQLSSDAQTANAK-DQASNDANAARSDAQAAKDDAARANQRLDNM",
+ "C": "SNAARANQRLDNMKIDQLSSDAQTANAKA-SDAQAAKDDAARANQRLDNM"};
+""")
+
diff -r 1a4a04829ba6 -r b0d3c9413cf9 sequence_based_blocks_search/functional_groups_to_javascript.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sequence_based_blocks_search/functional_groups_to_javascript.py Fri Jul 01 11:42:26 2011 +0400
@@ -0,0 +1,7 @@
+import pprint
+
+from functional_groups import aminoacids2functional_groups
+
+print 'conservative_groups ='
+pprint.pprint(list(aminoacids2functional_groups.values()))
+