[Bio] / FigWebServices / get_dlits.cgi Repository:
ViewVC logotype

Diff of /FigWebServices/get_dlits.cgi

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3, Sat Jun 28 12:12:22 2008 UTC revision 1.11, Thu Jul 10 19:35:34 2008 UTC
# Line 1  Line 1 
1  # -*- perl -*-  # -*- perl -*-
2  #  #
3  # Copyright (c) 2003-2006 University of Chicago and Fellowship  # Copyright (c) 2003-2008 University of Chicago and Fellowship
4  # for Interpretations of Genomes. All Rights Reserved.  # for Interpretations of Genomes. All Rights Reserved.
5  #  #
6  # This file is part of the SEED Toolkit.  # This file is part of the SEED Toolkit.
# Line 16  Line 16 
16  # http://www.theseed.org/LICENSE.TXT.  # http://www.theseed.org/LICENSE.TXT.
17  #  #
18    
19    #
20    #  DBMS tables used:
21    #
22    #     dlits
23    #     flds => "status char(1), md5_hash varchar(32), pubmed varchar(16), curator varchar(30), go_code varchar(15)"
24    #
25    #     titles
26    #     flds => "pubmed varchar(16), title varchar(1000)"
27    #
28    #     hash_role
29    #     flds => "md5_hash char(32), role varchar(1000)"
30    #
31    #     curr_role
32    #     flds => "curator varchar(30), role varchar(1000)"
33    #
34    #     genome_hash
35    #     flds => "genome varchar(32), md5_hash char(32)"
36    #
37    
38  use FIG;  use FIG;
39  my $fig = new FIG;  my $fig = new FIG;
# Line 26  Line 44 
44  use CGI;  use CGI;
45  my $cgi = new CGI;  my $cgi = new CGI;
46    
47    use Data::Dumper;
48    
49  if (0)  if (0)
50  {  {
# Line 58  Line 77 
77  my($genome);  my($genome);
78    
79  my $html = [];  my $html = [];
80  unshift @$html, "<TITLE>Get Dlits</TITLE>\n";  push @$html, "<TITLE>Get Dlits</TITLE>\n";
81    
82  my $user      = $cgi->param('user');  my $user      = $cgi->param('user');           #  Current user
83  my $curator   = $cgi->param('curator');  my $curator   = $cgi->param('curator') || '';  #  Filter roles by subsystem curator
84  my $role      = $cgi->param('role');  my $genomeD   = $cgi->param('genomeD');        #  Find lit by genome
85  my $submit1   = $cgi->param('Show Genomes');  my $ref_id    = $cgi->param('ref_id');         #  Show data by reference
86  my $submit2   = $cgi->param('Show Roles');  my $role      = $cgi->param('role');           #  Find lit by role
87  my $submit3   = $cgi->param('Show Genome');  my $show_just = $cgi->param('show_just');      #  Filter lit by status
 my $submit4   = $cgi->param('Show Role');  
 my $show_just = $cgi->param('show_just');  
88     $show_just = ($show_just eq "all") ? '' : $show_just;     $show_just = ($show_just eq "all") ? '' : $show_just;
89    
90  my $genomeD   = $cgi->param('genomeD');  #  Requested actions:
91  my $submit5   = $cgi->param('Process Changes');  
92    my ( $submit1, $submit2, $submit3, $submit4, $submit5 );
93    if    ( $cgi->param( 'Process Changes' )          ) { $submit5 = 1 }
94    if    ( $ref_id                                   ) {}
95    elsif ( $cgi->param( 'Change subsystem curator' ) ) {}
96    elsif ( $cgi->param( 'Show Genomes' )             ) { $submit1 = 1 }
97    elsif ( $cgi->param( 'Show Roles' )               ) { $submit2 = 1 }
98    elsif ( $cgi->param( 'Show Genome' )              ) { $submit3 = 1 }
99    elsif ( $cgi->param( 'Show Role' )                ) { $submit4 = 1 }
100    
101    my $done = 0;
102    
103  my $rdbH  = $fig->db_handle;  my $rdbH  = $fig->db_handle;
104    
105  if (! $user)  if (! -d "$FIG_Config::data/Dlits")
106  {  {
107      push(@$html,$cgi->h1('you need to set user= in the URL'));      push( @$html, $cgi->h1("dlit data are not installed") );
108        $done = 1;
109  }  }
110  elsif (! -d "$FIG_Config::data/Dlits")  elsif ( ! $user )
111  {  {
112      push(@$html,$cgi->h1("dlit data not installed"));      push( @$html, $cgi->h2('To curate literature, please provide a user name') );
113        push( @$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
114                      'Username: ',
115                      $cgi->textfield( -name=>"user", -size => 20 ),
116                      $cgi->br,
117                      $cgi->submit( 'Set user' ),
118                      $cgi->end_form
119            );
120        $done = 1;
121  }  }
122  elsif ($submit5)  
123    
124    #  This is a one-time special case to add an index to the dlits table
125    
126    if ( $user eq 'master:gjo' && $cgi->param('add_pubmed_index') ) { &add_pubmed_index( $rdbH, $html ) }
127    
128    
129    #  Process a page of curated literature ----------------------------------------
130    
131    if ( $submit5 && ! $done )
132  {  {
133      &process_changes($fig,$cgi,$html);      &process_changes($fig,$cgi,$html);
134        my $prev_req = $cgi->param( 'prev_req' );
135        $submit3 = 1 if $prev_req eq 'Show Genome';
136        $submit4 = 1 if $prev_req eq 'Show Role';
137  }  }
138  elsif ($submit1)  
139    #  If there is a problem, skip the rest of the action tests --------------------
140    #  This is organized this way so that a useful page can be
141    #  provided after processing a curated page.
142    
143    if ( $done ) { }
144    
145    #  All sequences in a reference ------------------------------------------------
146    
147    elsif ( $ref_id )
148  {  {
149      my $where   = $show_just ? "AND (dlits.status = '$show_just ') " : "";      my $and_status = $show_just ? " AND ( dlits.status = '$show_just' )" : '';
150      my $genomes = $rdbH->SQL("select DISTINCT genome_hash.genome from genome_hash,dlits WHERE genome_hash.md5_hash = dlits.md5_hash $where");      my $tuples = $rdbH->SQL( "SELECT DISTINCT status,md5_hash,curator "
151      my @genomes = sort map { &compute_genome_label($fig,$_->[0]) } @$genomes;                             . "FROM dlits "
152                               . "WHERE ( pubmed = '$ref_id' )"
153                               . $and_status
154                               );
155        my @to_display = ();
156        foreach my $x ( @$tuples )
157        {
158            my( $status, $hash, $prev_curator ) = @$x;
159            my @pegs = grep { $fig->is_real_feature($_) }
160                       $fig->pegs_with_md5( $hash );
161            if ( @pegs > 0 )
162            {
163                push( @to_display, [ $status, $pegs[0], $ref_id, $prev_curator ] );
164            }
165        }
166    
167      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),      &display_set( $fig, $cgi, $html, \@to_display, "Genes linked to Reference: $ref_id", 'Show Reference' ) ;
168                   $cgi->hidden(-name => 'user', -value=>$user),  }
169                   $cgi->hidden(-name => 'show_just', -value=>$show_just),  
170                   $cgi->hidden(-name => 'curator', -value=> $curator),  #  Literature selected by role -------------------------------------------------
171                   $cgi->scrolling_list( -name   => 'genomeD',  
172                                         -values => [@genomes],  elsif ( $submit4 && $role )
173                                         -size   => 30  {
174                                       ),      my $roleQ = quotemeta $role;
175                   $cgi->br,      my $and_status = $show_just ? " AND ( dlits.status = '$show_just' )" : '';
176                   $cgi->submit( 'Show Genome' ),      my $tuples = $rdbH->SQL( "SELECT DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed,dlits.curator "
177                   $cgi->end_form                             . "FROM hash_role,dlits "
178                               . "WHERE ( hash_role.role = '$roleQ') AND ( hash_role.md5_hash = dlits.md5_hash )"
179                                  . $and_status
180           );           );
181        my @to_display = ();
182        foreach my $x ( @$tuples )
183        {
184            my( $status, $hash, $pubmed, $prev_curator ) = @$x;
185            my @pegs = grep { $fig->is_real_feature($_) }
186                       $fig->pegs_with_md5( $hash );
187            if ( @pegs > 0 )
188            {
189                push( @to_display, [ $status, $pegs[0], $pubmed, $prev_curator ] );
190  }  }
191  elsif ($submit2)      }
192    
193        &display_set( $fig, $cgi, $html, \@to_display, "Genes for Role: $role", 'Show Role' );
194    }
195    
196    #  Show the role list ----------------------------------------------------------
197    
198    elsif ( $submit2 || $submit4 )
199  {  {
200        #  Did user request role literature, and not select a role?
201        push @$html, $cgi->h3( '<FONT Color=red>Please select a role.</FONT>' ) if $submit4;
202    
203      my $where1   = $show_just ? "AND (dlits.status = '$show_just ') " : "";      my $where1   = $show_just ? "AND (dlits.status = '$show_just ') " : "";
204      my $where2   = $curator ? "AND (curr_role.curator = '$curator' AND curr_role.role = hash_role.role) " : "";      my $where2   = $curator ? "AND (curr_role.curator = '$curator' AND curr_role.role = hash_role.role) " : "";
205    
206      my @roles = map { $_->[0] } @{$rdbH->SQL("select DISTINCT hash_role.role from hash_role,dlits,curr_role WHERE hash_role.md5_hash = dlits.md5_hash $where1  $where2")};      my @roles = sort { lc $a cmp lc $b }  #  Make sort case insensitive
207                    map { $_->[0] }
208                    @{ $rdbH->SQL( "SELECT DISTINCT hash_role.role "
209                                 . "FROM hash_role,dlits,curr_role "
210                                 . "WHERE hash_role.md5_hash = dlits.md5_hash $where1 $where2"
211                                 ) };
212      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
213                   $cgi->hidden(-name => 'user', -value=>$user),                   $cgi->hidden(-name => 'user', -value=>$user),
214                   $cgi->hidden(-name => 'show_just', -value=>$show_just),                    $cgi->hidden( -name => 'curator',  -value => $curator )
215                   $cgi->hidden(-name => 'curator', -value=> $curator),          );
216                   $cgi->scrolling_list( -name   => 'role',  
217        my $whom   = $curator ? "'$curator'" : "any one";
218        my $status = $show_just ? " with literature of status code '$show_just':" : ":";
219        push( @$html, $cgi->h3( "Subsystem roles curated by $whom" . $status ) );
220    
221        push( @$html, $cgi->scrolling_list( -name   => 'role',
222                                         -values => [@roles],                                         -values => [@roles],
223                                         -size   => 30                                         -size   => 30
224                                       ),                                       ),
225                   $cgi->br,                    $cgi->br, &show_just_selector( $cgi ),
226                   $cgi->submit( 'Show Role' ),                    $cgi->br, $cgi->submit( 'Show Role' ),
227                      $cgi->br, $cgi->submit( 'Show Genomes' ),
228                      $cgi->br, $cgi->submit( 'Change subsystem curator' ), " currently '$curator'.",
229                   $cgi->end_form                   $cgi->end_form
230           );           );
231  }  }
232  elsif ($submit3 && $genomeD && ($genomeD =~ /\((\d+\.\d+)\)/))  
233    #  Literature selected by genome -----------------------------------------------
234    
235    elsif ( $submit3 && $genomeD && ( $genomeD =~ /\((\d+\.\d+)\)$/ ) )
236  {  {
     my $where = $show_just ? " AND dlits.status = '$show_just'" : '';  
237      my $genome = $1;      my $genome = $1;
238      my $tuples = $rdbH->SQL("select DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed      my $where  = $show_just ? " AND (dlits.status = '$show_just')" : '';
239                                FROM genome_hash,dlits      my $tuples = $rdbH->SQL( "SELECT DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed,dlits.curator "
240                                WHERE genome_hash.genome = '$genome' AND genome_hash.md5_hash = dlits.md5_hash $where");                             . "FROM genome_hash,dlits "
241                               . "WHERE genome_hash.genome = '$genome' AND genome_hash.md5_hash = dlits.md5_hash $where"
242                               );
243      my @to_display = ();      my @to_display = ();
244      foreach my $x (@$tuples)      foreach my $x (@$tuples)
245      {      {
246          my($status,$hash,$pubmed) = @$x;          my ( $status, $hash, $pubmed, $prev_curator ) = @$x;
247          foreach my $peg ($fig->pegs_with_md5($hash))          push @to_display, map  { [ $status, $_, $pubmed, $prev_curator ] }
248          {                            grep { &FIG::genome_of($_) eq $genome && $fig->is_real_feature($_) }
249              if (&FIG::genome_of($peg) eq $genome)                            $fig->pegs_with_md5($hash);
             {  
                 push(@to_display,[$status,$peg,$pubmed]);  
250              }              }
251    
252        &display_set( $fig, $cgi, $html, \@to_display, "Genes for $genomeD", 'Show Genome' );
253          }          }
254      }  
255      &display_set($fig,$cgi,$html,\@to_display,'Genes for $genomeD','Show Genome');  #  Show genome list ------------------------------------------------------------
256  }  
257  elsif ($submit4)  elsif ( $submit1 || $submit3 )
 {  
     my $where = $show_just ? " AND dlits.status = '$show_just'" : '';  
     my $roleQ = quotemeta $role;  
     my $tuples = $rdbH->SQL("select DISTINCT dlits.status,dlits.md5_hash,dlits.pubmed  
                               FROM hash_role,dlits,pubmed_titles  
                               WHERE hash_role.role = '$roleQ' AND hash_role.md5_hash = dlits.md5_hash $where");  
     my @to_display = ();  
     foreach my $x (@$tuples)  
     {  
         my($status,$hash,$pubmed) = @$x;  
         my @pegs = $fig->pegs_with_md5($hash);  
         if (@pegs > 0)  
258          {          {
259              push(@to_display,[$status,$pegs[0],$pubmed]);      #  Did user request genome literature, and not select a genome?
260          }      push @$html, $cgi->h3( '<FONT Color=red>Please select a genome.</FONT>' ) if $submit3;
261      }  
262      &display_set($fig,$cgi,$html,\@to_display,'Genes for Role: $role','Show Role');      my $where   = $show_just ? " AND (dlits.status = '$show_just')" : "";
263    
264        my $genomes = $rdbH->SQL( "SELECT DISTINCT genome_hash.genome "
265                                . "FROM genome_hash,dlits "
266                                . "WHERE genome_hash.md5_hash = dlits.md5_hash $where"
267                                );
268        my @genomes = sort { lc $a cmp lc $b }  #  Make sort case insensitive
269                      map { &compute_genome_label( $fig, $_->[0] ) }
270                      @$genomes;
271    
272        push( @$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
273                      $cgi->hidden( -name => 'user',     -value => $user ),
274                      $cgi->hidden( -name => 'curator',  -value => $curator ),
275                      $cgi->scrolling_list( -name   => 'genomeD',
276                                            -values => [@genomes],
277                                            -size   => 30
278                                          ),
279                      $cgi->br, &show_just_selector( $cgi ),
280                      $cgi->br, $cgi->submit( 'Show Genome' ), ' selected above.',
281                      $cgi->br, $cgi->submit( 'Show Roles' ),
282                      ( $curator ? " for subsystem curator '$curator'." : '' ),
283                      $cgi->br, $cgi->submit( 'Change subsystem curator' ), " currently '$curator'.",
284                      $cgi->end_form
285             );
286  }  }
287    
288    #  Default = display subsystem curators ----------------------------------------
289    
290  else  else
291  {  {
292      my @cur  = map { $_->[0]} @{$rdbH->SQL( "SELECT DISTINCT curator FROM dlits" )};      my @cur  = map  { $_->[0] }
293                   sort { $a->[1] cmp $b->[1] || length $a->[0] <=> length $b->[0] }
294                   map  { my $cur = $_->[0];
295                          my $nam = lc $cur;
296                          $nam =~ s/^master[:_]?//;
297                          [ $cur, $nam ]
298                        }
299                   @{ $rdbH->SQL( "SELECT DISTINCT curator FROM dlits" ) };
300      my $curN = @cur;      my $curN = @cur;
301    
     my $show_just_opt =  $cgi->scrolling_list( -name   => 'show_just',  
                                                -values => ['all',' ','D','R','N','G'],  
                                                -default => 'all',  
                                                -override => 1,  
                                                -size   => 1  
                                      ),  
   
302      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),      push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),
303                   $cgi->hidden(-name => 'user', -value=>$user),                   $cgi->hidden(-name => 'user', -value=>$user),
304                   $cgi->scrolling_list( -name   => 'curator',                   $cgi->scrolling_list( -name   => 'curator',
305                                         -values => [ @cur ],                                         -values => [ @cur ],
306                                              -size   => $curN                                              -size   => $curN
307                                              ),                                              ),
                  $cgi->scrolling_list( -name   => 'show_just',  
                                        -values => ['all',' ','D','R','N','G'],  
                                        -default => 'all',  
                                        -override => 1,  
                                        -size   => 1  
                                        ),  
308                   $cgi->br,                   $cgi->br,
309                      &show_just_selector( $cgi ),
310                   $cgi->submit( 'Show Roles' ),                   $cgi->submit( 'Show Roles' ),
311                   $cgi->br,                   $cgi->br,
312                   $cgi->submit( 'Show Genomes' ),                   $cgi->submit( 'Show Genomes' ),
313                   $cgi->end_form                   $cgi->end_form
314           );           );
315  }  }
   
316  &HTML::show_page($cgi,$html);  &HTML::show_page($cgi,$html);
317    exit;
318    
319    
320    sub show_just_selector
321    {
322        my ( $cgi, $html ) = @_;
323        my $default = $cgi->param( 'show_just' );
324        $default =~ /^[ A-Z]$/ or $default = 'all';
325        return 'Show literature links with all status codes, or pick a specific one: '
326              . $cgi->scrolling_list( -name     => 'show_just',
327                                      -values   => ['all',' ','D','R','N','G'],
328                                      -default  => $default,
329                                      -override => 1,
330                                      -size     => 1
331                                    )
332              . $cgi->br;
333    }
334    
335    
336  sub compute_genome_label  sub compute_genome_label
337  {  {
# Line 207  Line 341 
341      return "$gs ($org)";      return "$gs ($org)";
342  }  }
343    
344    
345  sub title_of {  sub title_of {
346      my($fig,$pubmed) = @_;      my($fig,$pubmed) = @_;
347    
348      my $rdbH  = $fig->db_handle;      my $rdbH  = $fig->db_handle;
349      my $retval = $rdbH->SQL( "SELECT title FROM pubmed_titles WHERE (pubmed = $pubmed)");      my $retval = $rdbH->SQL( "SELECT title "
350                               . "FROM pubmed_titles "
351                               . "WHERE (pubmed = $pubmed)"
352                               );
353      return (@$retval > 0) ? $retval->[0]->[0] : "";      return (@$retval > 0) ? $retval->[0]->[0] : "";
354  }  }
355    
356    
357    sub pubmed_link
358    {
359        return "<a target=_blank href=http://www.ncbi.nlm.nih.gov/sites/entrez?db=pubmed&cmd=search&term=$_[0]>$_[0]</a>";
360    }
361    
362    
363  sub display_set {  sub display_set {
364      my($fig,$cgi,$html,$to_display,$tab_title,$submit) = @_;      my($fig,$cgi,$html,$to_display,$tab_title,$submit) = @_;
365    
     my $from = $cgi->param('from_line');  
     if (! $from) { $from = 0 }  
     my $lines_left = 100;  
   
366      my %status_code = ( 'D' => 1, ' ' => 2, 'N' => 3, 'R' => 4, 'G' => 5);      my %status_code = ( 'D' => 1, ' ' => 2, 'N' => 3, 'R' => 4, 'G' => 5);
367    
368      my $col_hdrs = [' ','G','N','R','D','PEG','Function','Genus/Species','PubMed','Title'];      #  @$to_distplay items are [ $status, $peg, $pubmed ]
369      my $tab = [];  
370      foreach $_ (@$to_display) { $_->[0] =~ s/^\s*$/ /; }      foreach $_ ( @$to_display ) { $_->[0] =~ s/^\s*$/ /; }  # fix empty status strings
371      my @tuples = sort { ($status_code{$a->[0]} <=> $status_code{$b->[0]}) or &FIG::by_fig_id($a->[1],$b->[1]) } @$to_display;      my @tuples = sort { ( $status_code{$a->[0]} <=> $status_code{$b->[0]} )
372                         or &FIG::by_fig_id( $a->[1], $b->[1] )
373                         or ( $a->[2] <=> $b->[2] )  # Numeric sort of PMID
374                          }
375                     @$to_display;
376      my $total_tuples = @tuples;      my $total_tuples = @tuples;
377    
378      if (@tuples > 0) { splice(@tuples,0,$from); $from = $from + $lines_left; splice(@tuples,$lines_left) }      my $from;                    #  Offset to first item displayed
379        my $n_per_page = 100;        #  Really the lines per page
380    
381        if ( $cgi->param( 'Go to item numbers' ) )
382        {
383            $from = $cgi->param( 'offset_select' );
384        }
385        else
386        {
387            $from  = $cgi->param( 'from_line' ) || 0;
388            $from -= $n_per_page if $cgi->param( 'Previous page' );
389            $from += $n_per_page if $cgi->param( 'Next page' );
390        }
391    
392        #  Cut down the array to that to be displayed
393    
394        if ( $total_tuples > 0 )
395        {
396            if ( $from < 0 ) { $from = 0 }
397            if ( $from > $total_tuples )
398            {
399                $from = $n_per_page * int( ( $total_tuples - 1 ) / $n_per_page );
400            }
401            splice( @tuples, 0, $from );
402            splice( @tuples, $n_per_page );
403        }
404      else      else
405      {      {
406          undef $from;          undef $from;
407      }      }
408    
409        # Add status code key at top of page
410    
411        &desc( $html );
412    
413        # Build the html form
414    
415        push( @$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post') );
416    
417        #  Current user
418        my $user = $cgi->param('user');
419        push( @$html, $cgi->hidden( -name => 'user', -value => $user, -override => 1 ) );
420    
421        #  Filter roles by subsystem curator
422        my $curator = $cgi->param('curator');
423        push( @$html, $cgi->hidden( -name => 'curator', -value => $curator, -override => 1 ) ) if $curator;
424    
425        #  Find lit by genome
426        my $genomeD = $cgi->param('genomeD');
427        push( @$html, $cgi->hidden( -name => 'genomeD', -value => $genomeD, -override => 1 ) ) if $genomeD;
428    
429        #  Show sequences associated with a reference
430        my $ref_id = $cgi->param('ref_id');
431        push( @$html, $cgi->hidden( -name => 'ref_id', -value => $ref_id, -override => 1 ) ) if $ref_id;
432    
433        #  Find lit by role
434        my $role = $cgi->param('role');
435        push( @$html, $cgi->hidden( -name => 'role', -value => $role, -override => 1 ) ) if $role;
436    
437        #  Requested action
438        push( @$html, $cgi->hidden( -name => 'prev_req', -value => $submit, -override => 1 ) ) if $submit;
439    
440        #  Used to inherit action
441        push( @$html, $cgi->hidden( -name => $submit, -value => 1, -override => 1 ) ) if $submit;
442    
443        push( @$html, $cgi->br );
444    
445        #  If this is not a table built around one reference, we want to append
446        #  links to all proteins associated with the reference.  We will
447        #  compute this on a unique set of the references:
448    
449        my %genes_in_pub;
450        if ( ! $ref_id )
451        {
452            foreach ( @tuples )
453            {
454                my $pub = $_->[2];
455                next if defined $genes_in_pub{ $pub };
456                #  This count intentionally omits filtering by status
457                $genes_in_pub{ $pub } = scalar ( &all_seqs_in_pub( $fig, $pub ) );
458            }
459        }
460    
461        #  Build the status selection table
462    
463        my $col_hdrs = [' ','G','N','R','D','Curator','PEG','Function','Genus/Species','PubMed','Title'];
464        my $tab = [];
465      my $i;      my $i;
466      for ($i=0; ($i < @tuples); $i++)      for ($i=0; ($i < @tuples); $i++)
467      {      {
468          my $tuple = $tuples[$i];          my $tuple = $tuples[$i];
469          my($status,$peg,$pubmed) = @$tuple;          my( $status, $peg, $pubmed, $prev_curator ) = @$tuple;
470          next if (! $fig->is_real_feature($peg));          next if ( ! $fig->is_real_feature($peg) );   # This should never fail
471    
472            $prev_curator =~ s/^master://i;  #  Remove master from displayed curator
473          my $gs = $fig->genus_species(&FIG::genome_of($peg));          my $gs = $fig->genus_species(&FIG::genome_of($peg));
474          $gs =~ s/^(\S+)\s+(\S+).*$/$1/;          $gs =~ s/^(\S+\s+\S+).*$/$1/;
475          my $title = &title_of($fig,$pubmed);          my $title = &title_of($fig,$pubmed);
476          my $func = $fig->function_of($peg);          my $func = $fig->function_of($peg);
477          my @codes = $cgi->radio_group(-name => "tuple:$peg:$pubmed:$status",          my @codes = $cgi->radio_group(-name => "tuple:$peg:$pubmed:$status",
478                                        -values => [' ','G','N','R','D'],                                        -values => [' ','G','N','R','D'],
479                                        -default => "$status",                                        -default => "$status",
480                                        -nolabels => 1);                                         -nolabels => 1
481                                         );
482    
483            my $pub_link = &pubmed_link( $pubmed );
484    
485            #  Does this paper cover more than one protein?
486    
487          if (($i % 15) == 14) { push(@$tab,$col_hdrs) }          if ( $genes_in_pub{ $pubmed } > 1 )
488          push(@$tab,[@codes,&HTML::fid_link($cgi,$peg),$func,$gs,          {
489                      "<a target=_blank href=http://www.ncbi.nlm.nih.gov/sites/entrez?db=pubmed&cmd=search&term=$pubmed>$pubmed</a>",              #  This link intentionally omits $show_just
490                      $title]);              my $href = "get_dlits.cgi?user=$user&ref_id=$pubmed";
491                $pub_link .= "<BR />(<A HRef='$href' Target=_blank>$genes_in_pub{$pubmed} seqs</A>)";
492            }
493            if ( $i && ($i % 15) == 0 ) { push(@$tab,$col_hdrs) }
494            push( @$tab, [ @codes, $prev_curator, &HTML::fid_link( $cgi, $peg ), $func, $gs, $pub_link, $title ] );
495      }      }
     push(@$html, $cgi->start_form(-action => "get_dlits.cgi", -method => 'post'),  
                  $cgi->hidden(-name => 'user', -value=>$user),  
                  $cgi->br,  
          );  
496    
497      push(@$html,&HTML::make_table($col_hdrs,$tab,$tab_title));      push(@$html,&HTML::make_table($col_hdrs,$tab,$tab_title));
498      if (defined($from))  
499        push( @$html, $cgi->br, &show_just_selector( $cgi ) );
500    
501        #  Navigation controls through long lists
502    
503        if ( defined( $from ) && ( $total_tuples > $n_per_page ) )
504      {      {
505          my $genomeD = $cgi->param('genomeD');          my $i1 = $from + 1;
506          $genomeD = $genomeD ? $genomeD : "none";          my $i2 = $from + $n_per_page;
507          push(@$html,"<br>To get the next 100 (out of $total_tuples)",          $i2 = $total_tuples if $i2 > $total_tuples;
508                      $cgi->hidden(-name => 'from_line', -value => $from, -override => 1),          push( @$html, $cgi->hidden( -name => 'from_line', -value => $from, -override => 1 ) );
509                      $cgi->hidden(-name => 'genomeD', -value => "$genomeD"),          push( @$html, $cgi->br, "Currently displaying items $i1 - $i2 of $total_tuples.", $cgi->br );
510                      $cgi->submit($submit));          push( @$html, $cgi->submit( 'Previous page' ) ) if $from > 0;
511            push( @$html, $cgi->submit( 'Next page' ) ) if $i2 < $total_tuples;
512    
513            my @offsets;
514            my %labels;
515            for ( my $i = 0; $i < $total_tuples; $i += $n_per_page )
516            {
517                push @offsets, $i;
518                my $imax = $i + $n_per_page;
519                $imax = $total_tuples if $imax > $total_tuples;
520                $labels{ $i } = ( $i+1 ) . " - $imax";
521            }
522            push( @$html, $cgi->submit( 'Go to item numbers' ),
523                          $cgi->scrolling_list( -name     => 'offset_select',
524                                                -values   => \@offsets,
525                                                -labels   => \%labels,
526                                                -default  => $from,
527                                                -size     => 1,
528                                                -override => 1
529                                              ),
530                          $cgi->br );
531      }      }
532      push(@$html,$cgi->br,$cgi->submit('Process Changes'));  
533        #  Some action buttons:
534    
535        push( @$html, $cgi->br, $cgi->submit( 'Process Changes' ), "entered on this page." );
536    
537        #  Display some general navigation buttons.  However, these are not
538        #  consistent with the intended use of the publication-based view.
539    
540        if ( ! $ref_id )
541        {
542            push( @$html, $cgi->br, $cgi->submit( 'Show Genomes' ), "discarding any changes made on this page." );
543            if ( $curator )
544            {
545                push( @$html, $cgi->br, $cgi->submit( 'Show Roles' ),
546                                        "for subsystem curator '$curator', discarding any changes made on this page." );
547            }
548            push( @$html, $cgi->br, $cgi->submit( 'Change subsystem curator' ), " currently '$curator', discarding any changes made on this page." );
549        }
550    
551      push(@$html,$cgi->end_form);      push(@$html,$cgi->end_form);
552  }  }
553    
554    
555    #     dlits
556    #     flds => "status char(1), md5_hash varchar(32), pubmed varchar(16), curator varchar(30), go_code varchar(15)"
557    
558    sub all_seqs_in_pub {
559        my ( $fig, $pubmed, $status ) = @_;
560        my $rdbH = $fig->db_handle;
561        my $and_status = $status ? " AND ( status = '$status' )" : "";
562        my $response = $rdbH->SQL( "SELECT DISTINCT md5_hash "
563                                 . "FROM dlits "
564                                 . "WHERE ( pubmed = '$pubmed' )"
565                                 . $and_status
566                                 );
567        return ( ref $response ) ? map { $_->[0] } @$response : ();
568    }
569    
570    
571    sub desc {
572        my( $html ) = @_;
573    
574        my $col_hdrs = [ "Code", "Meaning" ];
575        my $tab      = [ [ [" ","TD Align=center"], "No one has curated this link yet" ],
576                         [ ["G","TD Align=center"], "Genome paper - marks all uncurated protein links of this paper to 'G' (implicitly irrelevant)" ],
577                         [ ["N","TD Align=center"], "Not relevant to this protein" ],
578                         [ ["R","TD Align=center"], "Relevant, but not strong enough to determine function" ],
579                         [ ["D","TD Align=center"], "Direct reference that can be used to support function assertion" ]
580                       ];
581        push( @$html, &HTML::make_table( $col_hdrs, $tab, "Code Meanings" ), "<hr>" );
582    }
583    
584    
585  sub process_changes {  sub process_changes {
586      my($fig,$cgi,$html) = @_;      my($fig,$cgi,$html) = @_;
587        my $user = $cgi->param('user');
588    
589      my @tuples = grep { $_->[2] ne $_->[3] }      my @tuples = grep { $_->[2] ne $_->[3] }
590                   map { ($_ =~ /^tuple:(fig\|\d+\.\d+\.peg\.\d+)\s*:\s*(\d+)\s*:([ RDGN])/) ? [$1,$2,$3,$cgi->param($_)] : () }                   map { ($_ =~ /^tuple:(fig\|\d+\.\d+\.peg\.\d+)\s*:\s*(\d+)\s*:([ RDGN])/) ? [$1,$2,$3,$cgi->param($_)] : () }
591                   $cgi->param();                   $cgi->param();
592      my $user = $cgi->param('user');      my $n_change = 0;
593      foreach my $tuple (@tuples)      foreach my $tuple (@tuples)
594      {      {
595          my($peg,$pubmed,$from,$to) = @$tuple;          my($peg,$pubmed,$from,$to) = @$tuple;
# Line 292  Line 599 
599                          -curator  => $user,                          -curator  => $user,
600                          -override => 1                          -override => 1
601                        );                        );
602            $n_change++;
603      }      }
604      push(@$html,$cgi->h2('made the requested changes'));  
605        push( @$html, $cgi->h2( "<FONT Color=green>Made $n_change requested changes.</FONT>" ) );
606  }  }
607    
608    
609    # Not sure why this was not done before
610    
611    sub add_pubmed_index {
612        my ( $rdbH, $html ) = @_;
613        return if ! $rdbH;
614        my $rtn = $rdbH->SQL( 'SHOW INDEX FROM dlits' );
615        push @$html, "<BR />Initial return value from 'SHOW INDEX FROM dlits' = $rtn\n";
616        if ( $rtn == 3 )
617        {
618            my $rtn = $rdbH->create_index( idx  => "pubmed_in_dlits_ix",
619                                           tbl  => "dlits",
620                                           type => "btree",
621                                           flds => "pubmed" );
622            $rtn = $rdbH->SQL( 'SHOW INDEX FROM dlits' );
623            push @$html, "<BR />Final return value from 'SHOW INDEX FROM dlits' = $rtn<BR />\n";
624        }
625        else
626        {
627            push @$html, "<BR />Index might already exist<BR />\n";
628        }
629    }

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.11

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3