[Bio] / WebApplication / WebComponent / IntervalDraw.pm Repository:
ViewVC logotype

Annotation of /WebApplication/WebComponent/IntervalDraw.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (view) (download) (as text)

1 : devoid 1.1 package WebComponent::IntervalDraw;
2 :    
3 :     use strict;
4 :     use warnings;
5 :    
6 :     use base qw( WebComponent );
7 :    
8 :     use FIGMODEL;
9 :    
10 :     1;
11 :    
12 :     =pod
13 :    
14 :     =head1 NAME
15 :    
16 :     IntervalTable - A table of available intervals
17 :    
18 :     =head1 DESCRIPTION
19 :    
20 :     WebComponent for a strain select box
21 :    
22 :     =head1 METHODS
23 :    
24 :     =over 4
25 :    
26 :     =item * B<new> ()
27 :    
28 :     Called when the object is initialized. Expands SUPER::new.
29 :    
30 :     =cut
31 :    
32 :     sub new {
33 :    
34 :     my $self = shift->SUPER::new(@_);
35 :     $self->application->register_component('GenomeDrawer', 'interval_GD');
36 :     $self->application->register_component('GrowthData', 'interval_draw_growth_data');
37 :    
38 :     return $self;
39 :     }
40 :    
41 :     =item * B<output> ()
42 :    
43 :     Returns the html output of the ModelSelect component.
44 :    
45 :     =cut
46 :    
47 :     sub output {
48 :     my ($self,$width, $IDList) = @_;
49 :     my $html;
50 :    
51 :     #Getting various packages
52 :     my $application = $self->application();
53 :     my $model = $application->data_handle('FIGMODEL');
54 :     my $cgi = $application->cgi();
55 :     #define the global strain table
56 :     my $IntervalTableModel = $model->GetDBTable("INTERVAL TABLE");
57 :     my $StrainTableModel = $model->GetDBTable("STRAIN TABLE");
58 :     my @IDs;
59 :     if(defined($IDList) ) {
60 :     #Parsing the ID list
61 :     @IDs = split(/,/,$IDList); # split on commas; 11232,523523,...
62 :     }
63 :     $IntervalTableModel->sort_rows('END');
64 :    
65 :     #Creating the basic table object that is the foundation of this object
66 :     my $interval_gd = $application->component('interval_GD');
67 :     my $growth_data = $application->component('interval_draw_growth_data');
68 :    
69 :     #Loading the data table listing the reactions in the model or in the database
70 :    
71 :     my $TwoDList;
72 :     my $CurrentRow = 0;
73 :     my $CurrentRowMembers;
74 :     my $Done;
75 :     for( my $j=0; $j < $IntervalTableModel->size(); $j++) {
76 :     my $Row = $IntervalTableModel->get_row($j);
77 :     if(!defined($Row->{"PARENT"}->[0])) {
78 :     $CurrentRowMembers->{$Row->{"ID"}->[0]} = 1;
79 :     $Done->{$Row->{"ID"}->[0]} = 1;
80 :     push(@{$TwoDList->[$CurrentRow]},$Row);
81 :     }
82 :     }
83 :    
84 :     my $Continue = 1;
85 :     my $NewRowMembers;
86 :     while($Continue == 1) {
87 :     $CurrentRow++;
88 :     $NewRowMembers = {};
89 :     $Continue = 0;
90 :     for (my $j=0; $j < $IntervalTableModel->size(); $j++) {
91 :     my $Row = $IntervalTableModel->get_row($j);
92 :     my $ID = $Row->{"ID"}->[0];
93 :     my $Parent = $Row->{"PARENT"}->[0];
94 :    
95 :     if( !defined($Done->{$ID}) ) {
96 :     if( defined($Parent) && defined($CurrentRowMembers->{$Parent}) ) {
97 :     $NewRowMembers->{$ID} = 1;
98 :     $Done->{$ID} = 1;
99 :     push(@{$TwoDList->[$CurrentRow]},$Row);
100 :     } else {
101 :     $Continue = 1;
102 :     }
103 :     }
104 :     }
105 :     $CurrentRowMembers = $NewRowMembers;
106 :     }
107 :    
108 :    
109 :     my $min_start = undef;
110 :     my $max_end = 0;
111 :     my $interval_lines = undef;
112 :     my $interval_order = 0;
113 :    
114 :     for(my $j=0; $j < @{$TwoDList}; $j++) {
115 :     for(my $k=0; $k < @{$TwoDList->[$j]}; $k++) {
116 :     my $rowhash = $TwoDList->[$j]->[$k];
117 :    
118 :     # Get relevant data from rowhash
119 :     my $ID = $rowhash->{'ID'}->[0];
120 :     my $start = $rowhash->{'START'}->[0];
121 :     my $end = $rowhash->{'END'}->[0];
122 :    
123 :     # Set the hover-description information
124 :     my $description;
125 :     push(@{$description}, {'title' => 'ID', 'value' => $ID});
126 :     push(@{$description}, {'title' => 'Growth', 'value' => $growth_data->output($ID)});
127 :     push(@{$description}, {'title' => 'Start', 'value' => $start});
128 :     push(@{$description}, {'title' => 'End', 'value' => $end});
129 :     my $link_list;
130 :     push(@{$link_list}, {'link' => 'seedviewer.cgi?page=IntervalViewer&id='.$ID,
131 :     'link_title' => 'Jump to page for interval '.$ID});
132 :    
133 :     # Set the hash for this interval to be drawn
134 :     my $color = $growth_data->intervalNodeColor($ID);
135 :     for(my $k=0; $k < @IDs; $k++) {
136 :     if($IDs[$k] == $ID) { $color = [204, 0, 52]; }
137 :     }
138 :     my $box_hash = {'start' => $start, 'end' => $end, 'type' => 'smallbox',
139 :     'color' => $color, 'zlayer' => 1, 'label' => $ID,
140 :     'description' => $description, 'links_list' => $link_list};
141 :    
142 :     unless( defined($interval_lines->[$j]) ) {
143 :     my $new_line;
144 :     push(@{$new_line}, $box_hash);
145 :     push(@{$interval_lines}, $new_line);
146 :     }
147 :     push(@{$interval_lines->[$j]}, $box_hash);
148 :    
149 :     # Update the bounds of the line
150 :     unless(defined($min_start)) { $min_start = $start; }
151 :     if($min_start > $start) { $min_start = $start; }
152 :     if($max_end < $end) { $max_end = $end; }
153 :     $interval_order++;
154 :     }
155 :     }
156 :    
157 :     $interval_gd->width(6200);
158 :     $interval_gd->show_legend(1);
159 :     $interval_gd->window_size(($max_end - $min_start + 500));
160 :     $interval_gd->line_height(35);
161 :     $interval_gd->display_titles(1);
162 :     my $title = 'Primary Intervals';
163 :     for(my $i=0; $i < @{$interval_lines}; $i++) {
164 :     my $line_config = {'title' => $title, 'basepair_offset' => 0};
165 :     $interval_gd->add_line($interval_lines->[$i], $line_config);
166 :     $title = "split ".($i + 1);
167 :     }
168 :     $html .= "<div class='IntervalDragWrapper' style='width: " . $width . ";'>";
169 :     $html .= "<h3>Interval Plot</h3>";
170 :     $html .= "<div class='IntervalDraggable' style='overflow-x: scroll; overflow-y: hidden;'>";
171 :     $html .= $interval_gd->output();
172 :     $html .= "</div></div>";
173 :     return $html;
174 :     }
175 :    
176 :     sub require_javascript {
177 :     return ['./Html/IntervalDraw.js', './Html/ui.draggable.js', './Html/jquery-1.3.2.min.js'];
178 :     }
179 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3