Provided by: libgo-perl_0.15-9_all
NAME
GO::Model::Graph - a collection of relationships over terms
SYNOPSIS
# FETCHING GRAPH FROM FILES use GO::Parser; my $parser = new GO::Parser({handler=>'obj'}); $parser->parse("gene_ontology.obo"); # ontology $parser->parse("gene-associations.sgd"); # gene assocs # get L<GO::Model::Graph> object my $graph = $parser->handler->graph; my $terms = $graph->term_query("/transmembrane/"); # matching terms foreach my $term (@$terms) { # find gene products associated to this term my $assocs = $graph->deep_association_list($term->acc); printf "Term: %s %s\n", $term->acc, $term->name; print " Associations (direct and via transitive closure_\n"; foreach my $assoc (@$assocs) { next if $assoc->is_not; printf " Assoc evidence: %s to: %s %s\n", join(';', map {$_->code} @{$assoc->evidence_list}), $assoc->gene_product->xref->as_str, $assoc->gene_product->symbol; } } # -- alternatively, use this code... -- # FETCHING FROM DATABASE (requires go-db-perl library) # pretty-printing a subgraph from "nuclear pore" $apph = GO::AppHandle->connect(-dbname=>"$dbname"); $term = $apph->get_term({name=>"nuclear pore"}); $graph = $apph->get_graph_by_terms([$term], $depth); $it = $graph->create_iterator; # returns a GO::Model::GraphIterator object while (my $ni = $it->next_node_instance) { $depth = $ni->depth; $term = $ni->term; $reltype = $ni->parent_rel->type; printf "%s %8s Term = %s (%s) // number_of_association=%s // depth=%d\n", "----" x $depth, $reltype, $term->name, $term->public_acc, $term->n_associations || 0, $depth; }
DESCRIPTION
Object containing Nodes (GO::Model::Term objects) and relationships (:<GO::Model::Relationship> objects) this may be either the whole ontology tree, or a subgraph, depending on how the object is instantiated. ONTOLOGY GRAPH MODEL relationships can be thought of as statements or sentences of the form SUBJECT-TERM PREDICATE OBJECT-TERM for example, "dog" IS_A "animal" "G-Protein coupled receptor" IS_A "transmembrane receptor" Statements have a subject (i.e. the subject of the sentence/statement), a predicate/relationship-type and an object (i.e. the object of the sentence/statement) Relationships can also be seen as arcs in a directed graph, with the subject being equivalent to the child, and the object equivalent to the parent. The arc is labeled with the predicate/relationship-type. perl doesn't handle bidirectional links between objects too well, so rather than having the relationship object know about the terms or the term know about the realtionships, all the graph info is in the Graph object the Relationship object gives you the accessions of the related terms, use the Graph methods to fetch these actual terms. The idea is to keep the Term & Relationship objects lightweight, and keep the Graph logic in the Graph object. The Graph object is responsible for stuff like making sure that a Term object is not instantiated twice if it can be reached by two different paths. Currently all graphs are acyclic, cyclic graphs may be allowed in the future when such relationships are added to GO/OBOA TRANSITIVE CLOSURES graph object will calculate transitive closures for you - that is it will follow the path in the graph to the root or to all leafs ITERATORS Using the create_iterator and iterate methods, you can create "visitors" that will traverse the graph, performing actions along the way. Functional-style programming is encouraged, as the iterature() method allows for the passing of lexical closures: $graph->iterate(sub {$term=shift->term; printf "%s %s\n", $term->acc,$term->name}, {direction=>'up', acc=>"GO:0008045"}) SEE ALSO go-perl GO::Model::Term GO::Parser GO::AppHandle new Usage - $g = GO::Model::Graph->new; Returns - GO::Model::Graph; Args - Normally you would not create a graph object yourself - this is typically done for you by either a GO::Parser object or a GO::AppHandle object create_iterator Usage - $it = $graph->create_iterator("GO:0003677") Usage - $it = $graph->create_iterator({acc=>"GO:0008045", direction=>"up"}); Returns - GO::Model::GraphIterator; Args - accession no [optional] or GO::Model::Term [optional] makes a GO::Model::GraphIterator, an object which traverses the graph iterate Usage - $graph->iterate(sub {$ni=shift;printf "%s\n", $ni->term->name}); Usage - sub mysub {...}; $graph->iterate(\&mysub); Returns - Args - CODE iterates through the graph executing CODE on every GO::Model::GraphNodeInstance object term_filter Alias - node_filter Usage - $terms = $graph->term_filter(sub {shift->term->name =~ /transmembrane/}); Usage - sub mysub {...}; $graph->iterate(\&mysub); Returns - ref to an array of GO::Model::Term objects Args - CODE iterates through the graph executing CODE on every GO::Model::GraphNodeInstance object. If CODE returns true, that node will be returned term_query Usage - $terms = $graph->term_query({name=>'/transmembrane/'}); Usage - $terms = $graph->term_query({acc=>'GO:0008045'}); Usage - $terms = $graph->term_query('/transmembrane/'); Returns - ref to an array of GO::Model::Term objects Args - hashref of constraints OR name constraint as string returns a set of terms matching query constraints. If the constraint value is enclosed in // a regexp match will be performed constraints are ANDed. For more complex queries, use node_filter() subgraph Usage - my $subgraph = $graph->subgraph({acc=>"GO:0008045"}); Returns - GO::Model::Graph Args - as term_query() creates a subgraph of the current graph containing the terms returned by a term_query() call and all paths to the root subgraph_by_terms Usage - my $subgraph = $graph->subgraph_by_terms($terms); Usage - my $subgraph = $graph->subgraph_by_terms($terms,{partial=>1}); Returns - GO::Model::Graph Args - GO::Model::Term listref creates a subgraph of the current graph containing the specified terms The path-to-top will be calculated for all terms and added to the subgraph, UNLESS the partial option is set; in this case a relationship between get_all_nodes Usage - my $node_listref = $graph->get_all_nodes(); Synonyms- get_all_terms Returns - ref to an array of GO::Model::Term objects Args - none The returned array is UNORDERED If you want the returned list ordered (eg breadth first or depth first) use the create_iterator() method to get a GO::Model::GraphIterator See also GO::Model::Term get_term Usage - my $term = $graph->get_term($acc); Synonyms- get_node Returns - GO::Model::Term Args - id returns a GO::Model::Term object for an accession no. the term must be in the Graph object See also GO::Model::Term get_term_by_name Usage - my $term = $graph->get_term_by_name("blah"); Returns - GO::Model::Term Args - string returns a GO::Model::Term object for a name the term must be in the Graph object CASE INSENSITIVE See also GO::Model::Term get_terms_by_subset Usage - my $term = $graph->get_terms_by_subset("goslim_plant"); Returns - GO::Model::Term Args - string returns a GO::Model::Term object for a subset the term must be in the Graph object CASE INSENSITIVE See also GO::Model::Term get_top_nodes Usage - my $node_listref = $graph->get_top_nodes(); Synonyms- get_top_terms Returns - ref to an array of GO::Model::Term objects Args - none usually returns 1 node - the root term See also GO::Model::Term get_leaf_nodes Usage - my $node_listref = $graph->get_top_nodes(); Synonyms- get_leaf_terms Returns - ref to an array of GO::Model::Term objects Args - none See also GO::Model::Term is_leaf_node Usage - if ($graph->is_leaf_node($acc)) {...} Returns - bool Args - accession str See also GO::Model::Term seed_nodes Usage - $nodes = $graph->seed_nodes; Returns - GO::Model::Term listref Args - GO::Model::Term listref [optional] gets/sets the "seed" nodes/terms - these are the terms the Graph is started from, e.g. for building a node ancestory graph, the seed term would be the leaf of this graph, but not term that are expanded or collpased from the ancestory graph. This is mostly relevant if you are fetching your graphs from a database via go-db-perl See also GO::Model::Term focus_nodes Usage - $nodes = $graph->focus_nodes; Synonyms- focus_terms Returns - GO::Model::Term listref Args - GO::Model::Term listref [optional] gets/sets the "focus" nodes/terms - these are the terms the Graph is centred around; for instance, if the graph was built around a query to "endoplasmic*" all the terms matching this string would be focused This is mostly relevant if you are fetching your graphs from a database via go-db-perl See also GO::Model::Term is_focus_node Usage - if ($g->is_focus_node($term)) {..} Returns - bool Args - GO::Model::Term add_focus_node Usage - $g->add_focus_node($term) Returns - Args - GO::Model::Term See also GO::Model::Term paths_to_top Usage - my $paths = $graph->paths_to_top("GO:0005045"); Returns - arrayref of GO::Model::Path objects Args - See also GO::Model::Path node_count Usage - my $count = $g->node_count Synonyms- term_count Returns - int Args - returns the number of terms/nodes in the graph See also GO::Model::Term n_associations Usage - my $count = $g->n_associations($acc); Returns - int Args - if you parsed an association file into this graph, this will return the number of instances attached directly to acc See also GO::Model::Association See also GO::Model::GeneProduct n_deep_associations Usage - my $count = $g->n_deep_associations($acc); Returns - int Args - if you parsed an association file into this graph, this will return the number of instances attached directly to acc OR to a node subsumed by acc See also GO::Model::Association See also GO::Model::GeneProduct n_children Usage - $n = $graph->n_children('GO:0003677'); Synonyms- n_sterms, n_subj_terms, n_subject_terms Returns - int Args - returns the number of DIRECT children/subject/subordinate terms beneath this one n_parents Usage - $n = $graph->n_parents(3677); Synonyms- n_oterms, n_obj_terms, n_object_terms Returns - int Args - returns the number of DIRECT parent/object/superordinate terms above this one association_list Usage - $assocs = $g->association_list('GO:0003677') Returns - listref of GO::Model::Association Args - acc (string) returns a list of association objects directly attached to the specified term See also GO::Model::Association get_direct_associations Usage - Returns - Args - See also GO::Model::Association deep_association_list Usage - $assocs = $g->association_list('GO:0003677') Returns - listref of GO::Model::Association Args - acc (string) returns a list of association objects directly and indirectly attached to the specified term. (ie assocs attached to the term or to terms subsumed by the specified term). See also GO::Model::Association product_list Usage - $prods = $g->product_list('GO:0003677') Returns - listref of GO::Model::GeneProduct Args - acc (string) returns a list of distinct gene product objects directly attached to the specified term. See also GO::Model::GeneProduct deep_product_list Usage - $prods = $g->deep_product_list('GO:0003677') Returns - listref of GO::Model::GeneProduct Args - acc (string) returns a list of distinct gene product objects directly and indirectly attached to the specified term. (ie assocs attached to the term or to terms subsumed by the specified term). See also GO::Model::GeneProduct deep_product_count Usage - $n_prods = $g->deep_product_count('GO:0003677') Returns - int Args - acc (string) returns a count of distinct gene product objects directly and indirectly attached to the specified term. performs transitive closure. will not count gene products twice See also GO::Model::GeneProduct get_relationships Usage - my $rel_listref = $graph->get_relationships('GO:0003677'); Returns - ref to an array of GO::Model::Relationship objects Args - identifier/acc (string) returns relationships which concern the specified term; the specified term can be the subject or object term in the relationship (ie child or parent) See also GO::Model::Relationship get_parent_relationships Usage - my $rel_listref = $graph->get_parent_relationships('GO:0003677'); Synonym - get_relationships_by_child Synonym - get_relationships_by_subj Synonym - get_relationships_by_subject Synonym - get_obj_relationships Synonym - get_object_relationships Returns - ref to an array of GO::Model::Relationship objects Args - identifier/acc (string) See also GO::Model::Relationship get_child_relationships Usage - my $rel_listref = $graph->get_child_relationships('GO:0003677'); Synonym - get_relationships_by_parent Synonym - get_relationships_by_obj Synonym - get_relationships_by_object Synonym - get_subj_relationships Synonym - get_subject_relationships Returns - ref to an array of GO::Model::Relationship objects Args - identifier/acc (string) See also GO::Model::Relationship get_all_relationships Usage - Returns - GO::Model::Relationship list Args - returns all the relationships/statements in this graph See also GO::Model::Relationship get_parent_terms Usage - my $term_lref = $graph->get_parent_terms($parent_term->acc); Synonym - get_obj_terms Synonym - get_object_terms Returns - ref to array of GO::Model::Term objs Args - the accession of the query term See also GO::Model::Term get_parent_terms_by_type Usage - Synonym - get_obj_terms_by_type Synonym - get_object_terms_by_type Returns - ref to array of GO::Model::Term objs Args - the accession of the query term - the type by which to constrain relationships See also GO::Model::Term get_recursive_parent_terms Title : get_recursive_parent_terms Usage : Synonyms: get_recursive_obj_terms Synonyms: get_recursive_object_terms Function: Example : Returns : Args : accession of query term See also GO::Model::Term get_recursive_parent_terms_by_type Title : get_recursive_parent_terms_by_type Usage : Synonyms: get_recursive_obj_terms_by_type Synonyms: get_recursive_object_terms_by_type Function: Example : Returns : Args : if type is blank, gets all See also GO::Model::Term get_reflexive_parent_terms Title : get_reflexive_parent_terms Usage : Function: Example : Returns : Args : acc returns parent terms plus the term (for acc) itself [reflexive transitive closure of relationships in upward direction] See also GO::Model::Term get_reflexive_parent_terms_by_type Title : get_reflexive_parent_terms_by_type Usage : Function: Example : Returns : listref of terms Args : acc, type closure of relationship including the term itself See also GO::Model::Term get_child_terms Usage - my $term_lref = $graph->get_child_terms($parent_term->acc); Synonym - get_subj_terms Synonym - get_subject_terms Returns - ref to array of GO::Model::Term objs Args - See also GO::Model::Term get_child_terms_by_type Synonym - get_subj_terms_by_type Synonym - get_subject_terms_by_type Returns - ref to array of GO::Model::Term objs Args - the accession of the query term - the type by which to constrain relationships See also GO::Model::Term get_recursive_child_terms Title : get_recursive_child_terms Usage : Synonyms: get_recursive_subj_terms Synonyms: get_recursive_subject_terms Function: Example : Returns : a reference to an array of L<GO::Model::Term> objects Args : the accession of the query term See also GO::Model::Term get_recursive_child_terms_by_type Title : get_recursive_child_terms_by_type Usage : Synonyms: get_recursive_subj_terms_by_type Synonyms: get_recursive_subject_terms_by_type Function: Example : Returns : a reference to an array of L<GO::Model::Term> objects Args : accession, type if type is blank, gets all See also GO::Model::Term _get_recursive_related_terms_by_type Title : _get_recursive_related_terms_by_type Usage : Function: Obtain all relationships of the given kind and type for the term identified by its accession, and recursively repeat this with all parents and children as query for parent and child relationships, respectively. This is an internal method. Example : Returns : A reference to an array of L<GO::Model::Term> objects. Args : - the kind of relationship, either "child" or "parent" - the accession of the term with which to query - the type to which to constrain relationships (optional, all types if left undef) - TRUE if reflexive and FALSE otherwise (default FALSE) See also GO::Model::Term _get_related_terms_by_type Usage - my $term_lref = $graph->_get_related_terms_by_type("child",$acc); Returns - ref to array of GO::Model::Term objs Args - the kind of relationship, either "child" or "parent" - the accession of the term for which to obtain rel.ships - the type by which to constrain relationships (optional, defaults to all terms if left undef) This is an internal method. get_parent_accs_by_type Usage - Returns - Args - acc, type get_reflexive_parent_accs_by_type Title : get_reflexive_parent_accs_by_type Usage : Function: Example : Returns : listref of terms Args : acc, type closure of relationship including the term itself See also GO::Model::Term get_relationships_between_terms Title : get_relationships_between_terms Usage : Function: Example : Returns : [] of relationships Args : parent id, child id See also GO::Model::Relationship get_parent_closure_hash_by_type Title : get_parent_closure_hash_by_type Usage : Function: given a term-acc and relationship type, will give a hash that can be used to check if a term X is a parent of term Y Example : Returns : Args : keys will be lower-cased add_child_relationship See also GO::Model::Relationship add_parent_relationship parent relationships are as valued as child relationships See also GO::Model::Relationship close_below Usage - $graph->close_below(3677); Returns - Args - term (as acc or GO::Model::Term object) gets rid of everything below a node used by AmiGO for when a user closes a term in the graph find_roots Usage - my $terms = $graph->find_roots; Returns - arrayref of GO::Model::Term objects Args - All terms withOUT a parent See also GO::Model::Term get_all_products Usage - Returns - Args - See also GO::Model::GeneProduct merge Usage - $g->merge($g2); Returns - Args - GO::Model::Graph merges two graphs export Usage - $graph->export({format=>$format}); Returns - Args - opt hash writes out the graph in any export format, including obo, go_ont, owl, png (graphviz) etc to_xml Usage - Returns - Args - add_term Usage - $g->add_term($term) Returns - Args - GO::Model::Term add_node Usage - Returns - Args - synonym for add_term add_relationship Usage - $graph->add_relationship({acc1=>from_id, acc2=>to_id}); Usage - $graph->add_relationship($from_id, $to_id, $type}); Usage - $graph->add_relationship($obj, $subj, $type}); Returns - Args - only one relationship between id1 and id2 is allowed See also GO::Model::Relationship add_buckets Usage - Returns - Args - adds bucket terms to non-leaf nodes this is useful for making GO slims to_text_output Usage - Returns - Args - fmt, assocs [bool] hacky text output this method should probably move out of the model code into output adapters