Merge pull request #5 from solgenomics/topic/fix_il_maps
[cview.git] / lib / CXGN / Cview / Utils.pm
blobf907948f7006b7a2ba438b321e8f14773b69272f
2 =head1 NAME
4 CXGN::Cview::Utils - library for cview-related helper code
6 =head1 DESCRIPTION
8 =head1 AUTHOR(S)
10 Lukas Mueller (lam87@cornell.edu)
12 =cut
14 use strict;
16 package CXGN::Cview::Utils;
18 use CXGN::Cview::ChrLinkList;
20 require Exporter;
21 our (@ISA) = qw(Exporter);
22 our (@EXPORT_OK) = qw | get_maps_select set_marker_color get_chromosome_links |; # symbols to export on request
24 =head2 get_chromosome_links
26 Usage: my @chromosome_links = CXGN::Cview::Utils::get_chromosome_links($chr1_object, $chr2_object)
27 Desc: get_chromosome_links gets all the links between two
28 chromosomes (CXGN::Cview::Chromosome and subclasses).
29 Ret: returns a list of CXGN::Cview::ChrLink objects
30 Args: two CXGN::Cview::Chromosome objects (or subclasses)
31 Side Effects: none
32 Example:
34 =cut
36 sub get_chromosome_links {
37 my $chr1 = shift;
38 my $chr2 = shift;
40 my %find_by_id=();
41 my %find_by_name=();
43 my $link_list = CXGN::Cview::ChrLinkList->new();
45 #print STDERR "Finding links between chr ".$chr1->get_caption()." and ".$chr2->get_caption()."\n";
47 foreach my $m1 ($chr1->get_markers()) {
48 my $name1 = uc($m1->get_marker_name());
49 $find_by_name{$name1}=$m1->get_offset();
50 $find_by_id{$m1->get_id()}=$m1->get_offset();
52 foreach my $m2 ($chr2->get_markers()) {
53 # we want to connect if either the marker names are identical (but not undef),
54 # or the ids are identical (but not undef).
55 my $name2 = uc($m2->get_marker_name());
56 my $id2 = $m2->get_id();
57 my $offset1 = 0;
58 if (exists($find_by_name{$name2}) && defined($find_by_name{$name2})) {
59 $offset1=$find_by_name{$name2};
62 if (exists($find_by_id{$id2}) && defined($find_by_id{$id2})) {
63 $offset1=$find_by_id{$id2};
65 if ($offset1) {
66 my $clink = CXGN::Cview::ChrLink -> new($chr1, $offset1, $chr2, $m2->get_offset(), $name2) ;
67 $clink -> set_color(100,100,100);
68 $link_list->add_link($name2, $clink);
72 return $link_list;
77 =head2 function get_maps_select()
79 Synopsis:
80 Parameters: none
81 Returns: a string with html code for the maps select pull down menu
82 Side effects: none
83 Status: implemented
84 Example:
85 Notes:
86 Version:
88 =cut
90 sub get_maps_select {
91 my $dbh = shift;
92 my $selected_map_version = shift;
93 my $field_name = shift;
94 my $db_backend = shift;
95 my $add_empty_selection =1;
98 #print STDERR "DB BACKEND IS $db_backend\n";
100 if (!$field_name) { $field_name = "map_version_id"; }
102 # my $query = "select map.map_id, short_name from map join "
103 # . "map_version using (map_id) where current_version = 't' order by short_name";
104 # my $sth = $self -> prepare($query);
105 # $sth -> execute();
107 my $select = qq { <select name="$field_name" > };
108 my $selected="";
109 my $map_factory = CXGN::Cview::MapFactory->new($dbh, { cview_db_backend=>$db_backend });
110 my @maps = $map_factory->get_all_maps();
112 if ($add_empty_selection) {
113 $select .= qq { <option value=""></option> };
116 foreach my $m (@maps) {
117 my ($map_version_id, $short_name) = ($m->get_id(), $m->get_short_name());
118 if ($map_version_id =~ /^$selected_map_version$/) { $selected="selected=\"selected\""; }
119 else {$selected=""; }
120 $select .= "<option value=\"$map_version_id\" $selected>$short_name</option>";
122 $select .= "</select>";
123 return $select;
126 =head2 function set_marker_color()
128 Synopsis:
129 Parameters: marker object [CXGN::Cview::Marker], color model [string]
130 Returns: nothing
131 Side effects: sets the marker color according to the supplied marker color model
132 the color model is a string from the list:
133 "marker_types", "confidence"
134 Status: implemented
135 Example:
136 Note: this function was moved to Utils from ChromosomeViewer, such that
137 it is available for other scripts, such as view_maps.pl
139 =cut
141 sub set_marker_color {
142 my $m = shift;
143 my $color_model = shift;
144 if ($color_model eq "marker_types") {
145 if ($m->get_marker_type() =~ /RFLP/i) {
146 $m->set_color(255, 0, 0);
147 $m->set_label_line_color(255, 0,0);
148 $m->set_text_color(255,0,0);
150 elsif ($m->get_marker_type() =~ /SSR/i) {
151 $m->set_color(0, 255, 0);
152 $m->set_label_line_color(0, 255,0);
153 $m->set_text_color(0,255,0);
155 elsif ($m->get_marker_type() =~ /CAPS/i) {
156 $m->set_color(0, 0, 255);
157 $m->set_label_line_color(0, 0,255);
158 $m->set_text_color(0,0,255);
160 elsif ($m->get_marker_type() =~ /COS/i) {
161 $m->set_color(255,0 , 255);
162 $m->set_label_line_color(255,0, 255);
163 $m->set_text_color(255,0,255);
165 else {
166 $m->set_color(0, 0, 0);
167 $m->set_label_line_color(0, 0,0);
168 $m->set_text_color(0,0,0);
172 else {
173 my $c = $m -> get_confidence();
174 if ($c==0) {
175 $m->set_color(0,0,0);
176 $m->set_label_line_color(0,0,0);
177 $m->set_text_color(0,0,0);
179 if ($c==1) {
180 $m->set_color(0,0,255);
181 $m->set_label_line_color(0,0,255);
182 $m->set_text_color(0,0,255);
185 if ($c==2) {
186 $m->set_color(0,255, 0);
187 $m->set_label_line_color(0,255,0);
188 $m->set_text_color(0,255,0);
190 if ($c==3) {
191 $m->set_color(255, 0, 0);
192 $m->set_label_line_color(255, 0,0);
193 $m->set_text_color(255, 0,0);
195 if ($c==4) {
196 $m->set_color(128, 128, 128);
197 $m->set_label_line_color(128, 128, 128);
198 $m->set_text_color(128, 128, 128);
205 return 1;