[Bio] / FigKernelPackages / Observation.pm Repository:
ViewVC logotype

Diff of /FigKernelPackages/Observation.pm

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

revision 1.11, Thu Jun 21 21:15:23 2007 UTC revision 1.16, Mon Jun 25 22:21:40 2007 UTC
# Line 3  Line 3 
3  require Exporter;  require Exporter;
4  @EXPORT_OK = qw(get_objects);  @EXPORT_OK = qw(get_objects);
5    
6    use FIG_Config;
7  use strict;  use strict;
8  use warnings;  #use warnings;
9  use HTML;  use HTML;
10    
11  1;  1;
# Line 118  Line 119 
119    
120  =item PFAM (dom)  =item PFAM (dom)
121    
122  =item SIGNALP (dom)  =item SIGNALP_CELLO_TMPRED (loc)
   
 =item  CELLO(loc)  
123    
124  =item TMHMM (loc)  =item TMHMM (loc)
125    
# Line 287  Line 286 
286  }  }
287    
288    
289  =head3 display_method()  =head3 display()
290    
291  If available use the function specified here to display the "raw" observation.  will be different for each type
 In the case of a BLAST alignment of fid1 and fid2 a cgi script  
 will be called to display the results of running the command "bl2seq fid1 fid2".  
   
 B<Please note> that URL linked to in display_method() is an external component and needs to added to the code for every class of evidence.  
292    
293  =cut  =cut
294    
# Line 411  Line 406 
406          get_functional_coupling($fid,\@matched_datasets);          get_functional_coupling($fid,\@matched_datasets);
407      }      }
408      else{      else{
         #IPR,CDD,CELLO,PFAM,SIGNALP - attribute based  
409          my %domain_classes;          my %domain_classes;
410          my $identical_flag=0;          my $identical_flag=0;
411          my $pch_flag=0;          my $pch_flag=0;
412            my $location_flag = 0;
413          my $sims_flag=0;          my $sims_flag=0;
414            my $cluster_flag = 0;
415          foreach my $class (@$classes){          foreach my $class (@$classes){
416              if($class =~ /(IPR|CDD|PFAM)/){              if($class =~ /(IPR|CDD|PFAM)/){
417                  $domain_classes{$class} = 1;                  $domain_classes{$class} = 1;
# Line 428  Line 424 
424              {              {
425                  $pch_flag = 1;                  $pch_flag = 1;
426              }              }
427                elsif ($class =~/(SIGNALP_CELLO_TMPRED)/)
428                {
429                    $location_flag = 1;
430                }
431              elsif ($class eq "SIM")              elsif ($class eq "SIM")
432              {              {
433                  $sims_flag = 1;                  $sims_flag = 1;
434              }              }
435                elsif ($class eq "CLUSTER")
436                {
437                    $cluster_flag = 1;
438                }
439          }          }
440    
441          if ($identical_flag ==1)          if ($identical_flag ==1)
# Line 450  Line 454 
454              get_sims_observations($fid,\@matched_datasets);              get_sims_observations($fid,\@matched_datasets);
455          }          }
456    
457          #add CELLO and SignalP later          if ($location_flag == 1)
458            {
459                get_attribute_based_location_observations($fid,\@matched_datasets);
460            }
461            if ($cluster_flag == 1)
462            {
463                get_cluster_observations($fid,\@matched_datasets);
464            }
465    
466      }      }
467    
468      foreach my $dataset (@matched_datasets) {      foreach my $dataset (@matched_datasets) {
# Line 464  Line 476 
476          if ($dataset->{'class'} eq "IDENTICAL"){          if ($dataset->{'class'} eq "IDENTICAL"){
477              $object = Observation::Identical->new($dataset);              $object = Observation::Identical->new($dataset);
478          }          }
479            if ($dataset->{'class'} eq "SIGNALP_CELLO_TMPRED"){
480                $object = Observation::Location->new($dataset);
481            }
482          if ($dataset->{'class'} eq "SIM"){          if ($dataset->{'class'} eq "SIM"){
483              $object = Observation::Sims->new($dataset);              $object = Observation::Sims->new($dataset);
484          }          }
485            if ($dataset->{'class'} eq "CLUSTER"){
486                $object = Observation::Cluster->new($dataset);
487            }
488          push (@$objects, $object);          push (@$objects, $object);
489      }      }
490    
# Line 585  Line 603 
603      }      }
604  }  }
605    
606    sub get_attribute_based_location_observations{
607    
608        my ($fid,$datasets_ref) = (@_);
609        my $fig = new FIG;
610    
611        my $location_attributes = ['SignalP','CELLO','TMPRED'];
612    
613        my $dataset = {'type' => "loc", 'class' => 'SIGNALP_CELLO_TMPRED'};
614        foreach my $attr_ref ($fig->get_attributes($fid,$location_attributes)) {
615            my $key = @$attr_ref[1];
616            my @parts = split("::",$key);
617            my $sub_class = $parts[0];
618            my $sub_key = $parts[1];
619            my $value = @$attr_ref[2];
620            if($sub_class eq "SignalP"){
621                if($sub_key eq "cleavage_site"){
622                    my @value_parts = split(";",$value);
623                    $dataset->{'cleavage_prob'} = $value_parts[0];
624                    $dataset->{'cleavage_loc'} = $value_parts[1];
625                }
626                elsif($sub_key eq "signal_peptide"){
627                    $dataset->{'signal_peptide_score'} = $value;
628                }
629            }
630            elsif($sub_class eq "CELLO"){
631                $dataset->{'cello_location'} = $sub_key;
632                $dataset->{'cello_score'} = $value;
633            }
634            elsif($sub_class eq "TMPRED"){
635                my @value_parts = split(";",$value);
636                $dataset->{'tmpred_score'} = $value_parts[0];
637                $dataset->{'tmpred_locations'} = $value_parts[1];
638            }
639        }
640    
641        push (@{$datasets_ref} ,$dataset);
642    
643    }
644    
645    
646  =head3 get_attribute_based_evidence (internal)  =head3 get_attribute_based_evidence (internal)
647    
648  This method retrieves evidence from the attribute server  This method retrieves evidence from the attribute server
# Line 657  Line 715 
715      }      }
716  }  }
717    
718    =head3 get_cluster_observations() (internal)
719    
720    This methods sets the type and class for cluster observations
721    
722    =cut
723    
724    sub get_cluster_observations{
725        my ($fid,$datasets_ref) = (@_);
726    
727        my $dataset = {'class' => 'CLUSTER',
728                       'type' => 'fc'
729                       };
730        push (@{$datasets_ref} ,$dataset);
731    }
732    
733    
734  =head3 get_sims_observations() (internal)  =head3 get_sims_observations() (internal)
735    
736  This methods retrieves sims fills the internal data structures.  This methods retrieves sims fills the internal data structures.
# Line 1136  Line 1210 
1210      push(@$descriptions,$score);      push(@$descriptions,$score);
1211    
1212      my $link_id;      my $link_id;
1213      if ($thing->acc =~/CDD::(\d+)/){      if ($thing->acc =~/\w+::(\d+)/){
1214          $link_id = $1;          $link_id = $1;
1215      }      }
1216    
1217      my $link;      my $link;
1218        my $link_url;
1219        if ($thing->class eq "CDD"){$link_url = "http://0-www.ncbi.nlm.nih.gov.library.vu.edu.au:80/Structure/cdd/cddsrv.cgi?uid=$link_id"}
1220        elsif($thing->class eq "PFAM"){$link_url = "http://www.sanger.ac.uk/cgi-bin/Pfam/getacc?$link_id"}
1221        else{$link_url = "NO_URL"}
1222    
1223      $link = {"link_title" => $thing->acc,      $link = {"link_title" => $thing->acc,
1224               "link" => "http://0-www.ncbi.nlm.nih.gov.library.vu.edu.au:80/Structure/cdd/cddsrv.cgi?uid=$link_id"};               "link" => $link_url};
1225      push(@$links_list,$link);      push(@$links_list,$link);
1226    
1227      my $element_hash = {      my $element_hash = {
# Line 1163  Line 1242 
1242    
1243  #########################################  #########################################
1244  #########################################  #########################################
1245    package Observation::Location;
1246    
1247    use base qw(Observation);
1248    
1249    sub new {
1250    
1251        my ($class,$dataset) = @_;
1252        my $self = $class->SUPER::new($dataset);
1253        $self->{cleavage_prob} = $dataset->{'cleavage_prob'};
1254        $self->{cleavage_loc} = $dataset->{'cleavage_loc'};
1255        $self->{signal_peptide_score} = $dataset->{'signal_peptide_score'};
1256        $self->{cello_location} = $dataset->{'cello_location'};
1257        $self->{cello_score} = $dataset->{'cello_score'};
1258        $self->{tmpred_score} = $dataset->{'tmpred_score'};
1259        $self->{tmpred_locations} = $dataset->{'tmpred_locations'};
1260    
1261        bless($self,$class);
1262        return $self;
1263    }
1264    
1265    sub display {
1266        my ($thing,$gd,$fid) = @_;
1267    
1268        my $fig= new FIG;
1269        my $length = length($fig->get_translation($fid));
1270    
1271        my $cleavage_prob;
1272        if($thing->cleavage_prob){$cleavage_prob = $thing->cleavage_prob;}
1273        my ($cleavage_loc_begin,$cleavage_loc_end) = split("-",$thing->cleavage_loc);
1274        my $signal_peptide_score = $thing->signal_peptide_score;
1275        my $cello_location = $thing->cello_location;
1276        my $cello_score = $thing->cello_score;
1277        my $tmpred_score = $thing->tmpred_score;
1278        my @tmpred_locations = split(",",$thing->tmpred_locations);
1279    
1280        my $lines = [];
1281        my $line_config = { 'title' => 'Localization Evidence',
1282                            'short_title' => 'Local',
1283                            'basepair_offset' => '1' };
1284    
1285        #color is
1286        my $color = "5";
1287    
1288        my $line_data = [];
1289    
1290        if($cello_location){
1291            my $cello_descriptions = [];
1292            my $description_cello_location = {"title" => 'Best Cello Location',
1293                                              "value" => $cello_location};
1294    
1295            push(@$cello_descriptions,$description_cello_location);
1296    
1297            my $description_cello_score = {"title" => 'Cello Score',
1298                                           "value" => $cello_score};
1299    
1300            push(@$cello_descriptions,$description_cello_score);
1301    
1302            my $element_hash = {
1303                "title" => "CELLO",
1304                "start" => "1",
1305                "end" =>  $length + 1,
1306                "color"=> $color,
1307                "type" => 'box',
1308                "zlayer" => '2',
1309                "description" => $cello_descriptions};
1310    
1311            push(@$line_data,$element_hash);
1312        }
1313    
1314        my $color = "6";
1315        #if(0){
1316        if($tmpred_score){
1317            foreach my $tmpred (@tmpred_locations){
1318                my $descriptions = [];
1319                my ($begin,$end) =split("-",$tmpred);
1320                my $description_tmpred_score = {"title" => 'TMPRED score',
1321                                 "value" => $tmpred_score};
1322    
1323                push(@$descriptions,$description_tmpred_score);
1324    
1325                my $element_hash = {
1326                "title" => "transmembrane location",
1327                "start" => $begin + 1,
1328                "end" =>  $end + 1,
1329                "color"=> $color,
1330                "zlayer" => '5',
1331                "type" => 'smallbox',
1332                "description" => $descriptions};
1333    
1334                push(@$line_data,$element_hash);
1335            }
1336        }
1337    
1338        my $color = "1";
1339        if($signal_peptide_score){
1340            my $descriptions = [];
1341            my $description_signal_peptide_score = {"title" => 'signal peptide score',
1342                                                    "value" => $signal_peptide_score};
1343    
1344            push(@$descriptions,$description_signal_peptide_score);
1345    
1346            my $description_cleavage_prob = {"title" => 'cleavage site probability',
1347                                             "value" => $cleavage_prob};
1348    
1349            push(@$descriptions,$description_cleavage_prob);
1350    
1351            my $element_hash = {
1352                "title" => "SignalP",
1353                "start" => $cleavage_loc_begin - 2,
1354                "end" =>  $cleavage_loc_end + 3,
1355                "type" => 'bigbox',
1356                "color"=> $color,
1357                "zlayer" => '10',
1358                "description" => $descriptions};
1359    
1360            push(@$line_data,$element_hash);
1361        }
1362    
1363        $gd->add_line($line_data, $line_config);
1364    
1365        return ($gd);
1366    
1367    }
1368    
1369    sub cleavage_loc {
1370      my ($self) = @_;
1371    
1372      return $self->{cleavage_loc};
1373    }
1374    
1375    sub cleavage_prob {
1376      my ($self) = @_;
1377    
1378      return $self->{cleavage_prob};
1379    }
1380    
1381    sub signal_peptide_score {
1382      my ($self) = @_;
1383    
1384      return $self->{signal_peptide_score};
1385    }
1386    
1387    sub tmpred_score {
1388      my ($self) = @_;
1389    
1390      return $self->{tmpred_score};
1391    }
1392    
1393    sub tmpred_locations {
1394      my ($self) = @_;
1395    
1396      return $self->{tmpred_locations};
1397    }
1398    
1399    sub cello_location {
1400      my ($self) = @_;
1401    
1402      return $self->{cello_location};
1403    }
1404    
1405    sub cello_score {
1406      my ($self) = @_;
1407    
1408      return $self->{cello_score};
1409    }
1410    
1411    
1412    #########################################
1413    #########################################
1414  package Observation::Sims;  package Observation::Sims;
1415    
1416  use base qw(Observation);  use base qw(Observation);
# Line 1294  Line 1542 
1542  }  }
1543    
1544  sub html_enc { $_ = $_[0]; s/\&/&amp;/g; s/\>/&gt;/g; s/\</&lt;/g; $_ }  sub html_enc { $_ = $_[0]; s/\&/&amp;/g; s/\>/&gt;/g; s/\</&lt;/g; $_ }
1545    
1546    
1547    
1548    ############################
1549    package Observation::Cluster;
1550    
1551    use base qw(Observation);
1552    
1553    sub new {
1554    
1555        my ($class,$dataset) = @_;
1556        my $self = $class->SUPER::new($dataset);
1557    
1558        bless($self,$class);
1559        return $self;
1560    }
1561    
1562    sub display {
1563        my ($self,$gd, $fid) = @_;
1564    
1565        my $fig = new FIG;
1566        my $all_regions = [];
1567    
1568        #get the organism genome
1569        my $target_genome = $fig->genome_of($fid);
1570    
1571        # get location of the gene
1572        my $data = $fig->feature_location($fid);
1573        my ($contig, $beg, $end);
1574    
1575        if ($data =~ /(.*)_(\d+)_(\d+)$/){
1576            $contig = $1;
1577            $beg = $2;
1578            $end = $3;
1579        }
1580    
1581        my ($region_start, $region_end);
1582        if ($beg < $end)
1583        {
1584            $region_start = $beg - 4000;
1585            $region_end = $end+4000;
1586        }
1587        else
1588        {
1589            $region_end = $end+4000;
1590            $region_start = $beg-4000;
1591        }
1592    
1593        # call genes in region
1594        my ($target_gene_features, $reg_beg, $reg_end) = $fig->genes_in_region($target_genome, $contig, $region_start, $region_end);
1595        push(@$all_regions,$target_gene_features);
1596        my (@start_array_region);
1597        push (@start_array_region, $region_start);
1598    
1599        my %all_genes;
1600        my %all_genomes;
1601        foreach my $feature (@$target_gene_features){ $all_genes{$feature} = 1}
1602    
1603        my ($to);
1604        my @tmp = $fig->coupling_and_evidence($fid,5000,1e-10,4,1);
1605    #    foreach my $member (@tmp)
1606    #    {
1607    #       my $tmp1 = $member->[2];
1608    #       my ($peg1, $peg2) = @$tmp1;
1609    #       print STDERR "@{$peg1}[0], @{$peg1}[1]";
1610    #    }
1611    
1612        my @coup = grep { $_->[1]} $fig->coupling_and_evidence($fid,5000,1e-10,4,1);
1613    
1614        my $count_coup = @coup;
1615        my $coup_count = 0;
1616    
1617        foreach my $pair (@{$coup[0]->[2]}) {
1618            last if ($coup_count > 10);
1619            my ($peg1,$peg2) = @$pair;
1620    
1621            my $location = $fig->feature_location($peg1);
1622            my ($pair_contig,$pair_beg,$pair_end,$pair_region_start,$pair_region_stop,$pair_genome);
1623            if($location =~/(.*)_(\d+)_(\d+)$/){
1624                $pair_contig = $1;
1625                $pair_beg = $2;
1626                $pair_end = $3;
1627                if ($pair_beg < $pair_end)
1628                {
1629                    $pair_region_start = $pair_beg - 4000;
1630                    $pair_region_stop = $pair_end+4000;
1631                }
1632                else
1633                {
1634                    $pair_region_stop = $pair_end+4000;
1635                    $pair_region_start = $pair_beg-4000;
1636                }
1637    
1638                push (@start_array_region, $pair_region_start);
1639    
1640                $pair_genome = $fig->genome_of($peg1);
1641                $all_genomes{$pair_genome} = 1;
1642                my ($pair_features) = $fig->genes_in_region($pair_genome, $pair_contig, $pair_region_start, $pair_region_stop);
1643                push(@$all_regions,$pair_features);
1644                foreach my $pair_feature (@$pair_features){ $all_genes{$pair_feature} = 1;}
1645            }
1646            $coup_count++;
1647    
1648        }
1649    
1650        my $bbh_sets = [];
1651        my %already;
1652        foreach my $gene_key (keys(%all_genes)){
1653            if($already{$gene_key}){next;}
1654            my $gene_set = [$gene_key];
1655    
1656            my $gene_key_genome = $fig->genome_of($gene_key);
1657    
1658            foreach my $genome_key (keys(%all_genomes)){
1659                next if ($gene_key_genome eq $genome_key);
1660                my $return = $fig->bbh_list($genome_key,[$gene_key]);
1661    
1662                my $feature_list = $return->{$gene_key};
1663                foreach my $fl (@$feature_list){
1664                    #next if ($already{$fl});
1665                    push(@$gene_set,$fl);
1666                    $already{$fl} = 1;
1667                }
1668            }
1669            $already{$gene_key} = 1;
1670            push(@$bbh_sets,$gene_set);
1671        }
1672    
1673        my %bbh_set_rank;
1674        my $order = 0;
1675        foreach my $set (@$bbh_sets){
1676            my $count = scalar(@$set);
1677            $bbh_set_rank{$order} = $count;
1678            $order++;
1679        }
1680    
1681        my %peg_rank;
1682        my $counter =  1;
1683        open (FH, ">$FIG_Config::temp/good_sets.txt");
1684        foreach my $bbh_order (sort {$bbh_set_rank{$b} <=> $bbh_set_rank{$a}} keys %bbh_set_rank){
1685            my $good_set = @$bbh_sets[$bbh_order];
1686            foreach my $peg (@$good_set){
1687                $peg_rank{$peg} = $counter;
1688                print STDERR "$FIG_Config::temp";
1689                print FH "COLOR: $counter\tPEG: $peg\n";
1690            }
1691            $counter++;
1692        }
1693        close (FH);
1694    
1695    
1696        foreach my $region (@$all_regions){
1697            my $sample_peg = @$region[0];
1698            my $region_genome = $fig->genome_of($sample_peg);
1699            my $region_gs = $fig->genus_species($region_genome);
1700            my $line_config = { 'title' => $region_gs,
1701                                'short_title' => $region_gs,
1702                                'basepair_offset' => '0'
1703                                };
1704    
1705            my $offset = shift @start_array_region;
1706    
1707    
1708            my $line_data = [];
1709            foreach my $fid1 (@$region){
1710                my $element_hash;
1711                my $links_list = [];
1712                my $descriptions = [];
1713    
1714                my $color = $peg_rank{$fid1};
1715                if ($color == 1) {
1716                    print STDERR "PEG: $fid1, RANK: $color";
1717    
1718                }
1719    
1720    
1721                my $fid_location = $fig->feature_location($fid1);
1722                if($fid_location =~/(.*)_(\d+)_(\d+)$/){
1723                    my($start,$stop);
1724                    if ($2 < $3){$start = $2; $stop = $3;}
1725                    else{$stop = $2; $start = $3;}
1726                    $start = $start - $offset;
1727                    $stop = $stop - $offset;
1728                    $element_hash = {
1729                        "title" => $fid1,
1730                        "start" => $start,
1731                        "end" =>  $stop,
1732                        "type"=> 'arrow',
1733                        "color"=> $color,
1734                        "zlayer" => "2"
1735                    };
1736                    push(@$line_data,$element_hash);
1737    
1738                }
1739            }
1740            $gd->add_line($line_data, $line_config);
1741        }
1742        return $gd;
1743    }
1744    
1745    

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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3