Merge pull request #4106 from solgenomics/topic/wishlist
[sgn.git] / mason / tools / genefamily / search.mas
blob6e2c0d49c5c92b7008adb2ae32b3f1059da6cb30
2 <%doc>
4 </%doc>
6 <%args>
7 $dataset
8 $genefamily_id => undef
9 $member_id => undef
10 $action => undef
11 </%args>
13 <& /page/page_title.mas, title=>'Gene family search' &>
15 <%perl>
17 use SGN::Genefamily;
18 use Bio::Seq;
20 my  $DIR = $c->get_conf('genefamily_dir'); # '/home/mueller/dutch_tomato_assembly/tomato_ara_rice_comparison/';
21 if (!$action) { $action = "input"; }
22 if ($genefamily_id eq '') { $genefamily_id=0; }
24 if ($action eq 'detail') {
25     my $gf = SGN::Genefamily->new(
26         name      => "ORTHOMCL$genefamily_id",
27         dataset   => $dataset,
28         files_dir => $DIR,
29        );
31     my $seq_data ="";
32     my $fasta_data = "";
33     my $tree_data = "";
34     my $annot_data = "";
35     my $exp_data = "";
37     my $align_link_disabled = "";
38     my $fasta_link_disabled = "";
39     my $tree_link_disabled = "";
40     my $exp_link_disabled = "";
42     my $errors = "";
43     my $big_errors = 0;
44     eval {
45       $seq_data = $gf->get_alignment();
46     };
47     if ($@) {
48       $errors .= "Alignment data not available. ";
49       $big_errors++;
50       $align_link_disabled="disabled";
51     }
52     eval {
53       $fasta_data = $gf->get_fasta();
55     };
56     if ($@) {
57       $errors .= "Sequence data not available. ";
58       $big_errors++;
59       $fasta_link_disabled = "disabled";
60     }
61     eval {
62       $tree_data = $gf->get_tree();
63     };
64     if ($@) {
65       $errors .= "Tree data not available. ";
66       $tree_link_disabled = "disabled"
67     }
68     eval {
69       $annot_data = $gf->get_annotation();
70     };
71     if ($@) {
72       $errors .= "Annotation data not available. ";
73       $annot_data = "(No annotation data available)";
74     }
75     eval {
76       $errors .= "Expression data not available. ";
77       $exp_data = $gf->get_expression();
78     };
79     if ($@) {
80       $exp_link_disabled = "disabled";
81     }
83     if ($big_errors > 0) { 
84       $errors = "This family does not seem to exist!\n";
85     }
87 </%perl>
89 <h1>Family detail for family <% $genefamily_id %></h1>
90 <table><tr><td>Family: <b><% $genefamily_id %></b></td><td><% $annot_data %></td></tr>
91   <tr><td colspan="2">Note: <% $errors %></td></tr>
92 </table>
93 <table><tr>
94     <hr>
95     <td>View</td>
96     <td>
97       <form name="alignment_viewer_form" method="POST" action="/tools/align_viewer/index.pl">
98         <input type="hidden" name="seq_data" value="<% $seq_data %>" />
99         <input type="submit" value="Alignment" <% $align_link_disabled %> />
100         <input type="hidden" name="format" value="fasta" />
101       </form>
102     </td>
104     <td>
105       <form name="tree_browser_form" method="post" action="/tools/tree_browser/index.pl">
106         <input type="hidden" name="" value="<% $tree_data %>" />
107         <input type="submit" value="Tree" <% $tree_link_disabled %> />
108       </form>
109     </td>
113     </tr>
114 </table>
115 <hr>
116 <table><tr><td>
117 Sequences in fasta:</td><td>
118 <form name="tree_browser_unaligned" method="post" action="/tools/align_viewer/index.pl">
119   <input type="hidden" name="seq_data" value="<% $fasta_data %>" />
120   <input type="hidden" name="format" value="fasta_unaligned" />
121   <input type="submit" value="Align" />
122 </form>
124 <td></tr>
125 <td colspan="2">
126       <pre><% $fasta_data %></pre>
127 </td></tr></table>
129 <%perl>
132 if ($action eq 'search' && $member_id) {
133     die 'must provide dataset' unless $dataset;
134     my $member_file = catfile($DIR,$dataset,'genefamily_defs.txt');
135     open (my $F, "<", $member_file) || die "can't open family file $member_file";
136     my $family_nr = 0;
137     my $found = 0;
138     while(<$F>) {
139         
140         if ($_=~/\b$member_id\b/i) {
141             $found=1;
142             last();
143         }
144         $family_nr++;
145     }
148     if ($found) {
149 </%perl>
151         <form name="genefamily_display_form">
152         In dataset <b><% $dataset %></b>, sequence <% $member_id %> is in family <% $family_nr %>.
153         <input type="hidden" name="genefamily_id" value="<% $family_nr %>" />
154         <input type="hidden" name="dataset" value="<% $dataset %>" />
155           <input type="hidden" name="action" value="detail" />
156           <input type="submit" name="view_family" value="view family <% $family_nr %>" />
157         </form>
159 %   }
160 %   else {
161         <% $member_id %> was not found in any family.
162 %       return;
163 %   }
166 <%perl>
167 my @datasets = SGN::Genefamily->get_available_datasets($DIR);
169 my $select = '<select name="dataset">';
170 my $selected = "";
171 foreach my $d (@datasets) {
172   if ($d eq $dataset) { $selected="selected=\"selected\" "; }
173   else { $selected= ""; }
174   $select .= qq | <option value="$d" $selected>$d</option> |;
176 $select .= "</select>";
178 if ($action eq 'input')  {
180 </%perl>
182           <table>
183             <tr><td colspan="2">If you know the ID of your gene family, enter it below.</td></tr>
184             <tr><td>Genefamily id</td><td>
185                 <form name="genefamily_detail_form">
186                   <input name="genefamily_id" size="10" />(a number)
187                   <input type="hidden" name="action" value="detail" />
188                   <% $select %>
189                   <input type="submit" value="Details" />
190                 </form>
191             </td></tr>
192             <tr><td colspan="2"><b>-OR-</b></td></tr>
193             <tr><td colspan="2">if you know a member ID, search for the corresponding family:</td></tr>
194             <tr><td>Member id</td><td>
195               <form name="member_search_form">
196                 <input name="member_id" size="10" /> (e.g. At1g01060)
197                 <input type="hidden" name="action" value="search" />
198                 <% $select %>
199                 <input type="submit" />
200               </form>
201 </td>
202 </tr>
203 </table>
205 % }
207 <%init>
208 use File::Spec::Functions;
209 </%init>