diff --git a/cdao.owl b/cdao.owl index 82dbdcd..f69c6c6 100644 --- a/cdao.owl +++ b/cdao.owl @@ -1,33 +1,24 @@ - - - - - - - - -]> - - - - Comparison of two or more biological entities of the same class when the similarities and differences of the entities are treated explicitly as the product of an evolutionary process of descent with modification. - The Comparative Data Analysis Ontology (CDAO) provides a framework for understanding data in the context of evolutionary-comparative analysis. This comparative approach is used commonly in bioinformatics and other areas of biology to draw inferences from a comparison of differently evolved versions of something, such as differently evolved versions of a protein. In this kind of analysis, the things-to-be-compared typically are classes called 'OTUs' (Operational Taxonomic Units). The OTUs can represent biological species, but also may be drawn from higher or lower in a biological hierarchy, anywhere from molecules to communities. The features to be compared among OTUs are rendered in an entity-attribute-value model sometimes referred to as the 'character-state data model'. For a given character, such as 'beak length', each OTU has a state, such as 'short' or 'long'. The differences between states are understood to emerge by a historical process of evolutionary transitions in state, represented by a model (or rules) of transitions along with a phylogenetic tree. CDAO provides the framework for representing OTUs, trees, transformations, and characters. The representation of characters and transformations may depend on imported ontologies for a specific type of character. + xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" + xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#" + xmlns:oboInOwl="http://www.geneontology.org/formats/oboInOwl#"> + + + + Comparison of two or more biological entities of the same class when the similarities and differences of the entities are treated explicitly as the product of an evolutionary process of descent with modification. CDAO Team - Comparative Data Analysis Ontology - comparative analysis; comparative data analysis; evolutionary comparative analysis; evolution; phylogeny; phylogenetics + The Comparative Data Analysis Ontology (CDAO) provides a framework for understanding data in the context of evolutionary-comparative analysis. This comparative approach is used commonly in bioinformatics and other areas of biology to draw inferences from a comparison of differently evolved versions of something, such as differently evolved versions of a protein. In this kind of analysis, the things-to-be-compared typically are classes called 'OTUs' (Operational Taxonomic Units). The OTUs can represent biological species, but also may be drawn from higher or lower in a biological hierarchy, anywhere from molecules to communities. The features to be compared among OTUs are rendered in an entity-attribute-value model sometimes referred to as the 'character-state data model'. For a given character, such as 'beak length', each OTU has a state, such as 'short' or 'long'. The differences between states are understood to emerge by a historical process of evolutionary transitions in state, represented by a model (or rules) of transitions along with a phylogenetic tree. CDAO provides the framework for representing OTUs, trees, transformations, and characters. The representation of characters and transformations may depend on imported ontologies for a specific type of character. - - + comparative analysis; comparative data analysis; evolutionary comparative analysis; evolution; phylogeny; phylogenetics + Comparative Data Analysis Ontology @@ -40,27 +31,66 @@ /////////////////////////////////////////////////////////////////////////////////////// --> - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -77,890 +107,890 @@ - - has_Character - This property associates a character data matrix with a character (a column) represented in the matrix. - - - + + + + + This property associates a character data matrix with a character (a column) represented in the matrix. + has_Character - - belongs_to_Edge_as_Child + + + + + The property links a Node to the Edge it belongs to in the child position. - - - - + belongs_to_Edge_as_Child - - - has_Ancestor + + + + + + The property links a node to any of the other nodes that are its ancestors in a rooted tree. - - - - + has_Ancestor - - has_Nucleotide_State - This property associates a nucleotide character-state instance with a state value from the domain of nucleotide states. - - + + + - - + + + This property associates a nucleotide character-state instance with a state value from the domain of nucleotide states. + has_Nucleotide_State - - belongs_to_Edge + + + + The property links a Node to one of the edges that are incident on such node. - - - + belongs_to_Edge - - belongs_to_Character_State_Data_Matrix - - + + - - + + + + belongs_to_Character_State_Data_Matrix - - - has_Root + + + + + + The property links a rooted tree to the specific node that represents the unique root of the tree. - - - + has_Root - - has_Child - The property links a node to a node that is an immediate descendant in the tree. - - - - + + + + + - - + + + The property links a node to a node that is an immediate descendant in the tree. + has_Child - - has_First_Coordinate_Item - The property that relates a coordinate list to the first item in the list. - - + + + - - + + + The property that relates a coordinate list to the first item in the list. + has_First_Coordinate_Item - - has_Coordinate - - - + + + + + has_Coordinate - - - belongs_to_Continuous_Character - - - + + + + + + belongs_to_Continuous_Character - - has_Datum - This property relates a character to a state datum for the character. - - + + - - + + + + This property relates a character to a state datum for the character. + has_Datum - - has_Standard_Datum - - + + - - + + + + has_Standard_Datum - - subtree_of + + + This property links two networks where the latter is a substructure of the former - - + subtree_of - - has_Amino_Acid_State - This property associates a amino acid character-state instance with a state value from the domain of amino acid states. - - + + + - - + + + This property associates a amino acid character-state instance with a state value from the domain of amino acid states. + has_Amino_Acid_State - - is_annotation_of - - + + + + + is_annotation_of - - has_RNA_Datum - + + + has_RNA_Datum - - has_Left_State - This property relates a transformation to a 'left' state (the state associated with the 'left' node). - - - + + + + + This property relates a transformation to a 'left' state (the state associated with the 'left' node). + has_Left_State - - precedes + + precedes - - exclude + + exclude - - has_Node + + + + Property that associates to each Edge the Nodes it connects. - - - + has_Node - - nca_node_of - - + + + + nca_node_of - - has_External_Reference - Associates a TU to some external taxonomy reference. - - + + + + Associates a TU to some external taxonomy reference. + has_External_Reference - - has_Coordinate_System - This property links a coordinate to the coordinate system it references. - - + + + + This property links a coordinate to the coordinate system it references. + has_Coordinate_System - - - belongs_to_Nucleotide_Character - - - + + + + + + belongs_to_Nucleotide_Character - - - connects_to - + + + + connects_to - - has_Amino_Acid_Datum - This property relates an amino acid character (a column in a protein sequence alignment) to a state datum for the character (an individual cell in the alignment column). - - + + - - + + + + This property relates an amino acid character (a column in a protein sequence alignment) to a state datum for the character (an individual cell in the alignment column). + has_Amino_Acid_Datum - - hereditary_change_of - This property relates a type of evolutionary change (an Edge_Transformation) to the character that undergoes the change. The change is a transformation_of the affected character. - + + + This property relates a type of evolutionary change (an Edge_Transformation) to the character that undergoes the change. The change is a transformation_of the affected character. + hereditary_change_of - - has_Compound_Datum - This property relates a compound character (a character with some states that are subdividable) to a state datum for the character. - - + + - - + + + + This property relates a compound character (a character with some states that are subdividable) to a state datum for the character. + has_Compound_Datum - - has_Descendants - - - + + + + + has_Descendants - - reconciliation_of - - + + + + reconciliation_of - - - belongs_to_Amino_Acid_Character - - - + + + + + + belongs_to_Amino_Acid_Character - - - has_Descendant + + + + + A property that links a node to any of its descendants in a rooted tree. - - - + has_Descendant - - has_Continuous_State - This property associates a character-state instance with a state value on a continuous numeric scale. - - - + + + + + This property associates a character-state instance with a state value on a continuous numeric scale. + has_Continuous_State - - has_Type - + + + has_Type - - belongs_to_Edge_as_Parent + + + + + The property links a Node to one of the Edges where the node appears in the parent position (i.e., closer to the root). - - - - + belongs_to_Edge_as_Parent - - has + + Generic 'has' property. + has - - has_Parent - The property that links a node to its unique parent in a rooted tree. - - - + + + + - - + + + The property that links a node to its unique parent in a rooted tree. + has_Parent - - belongs_to_Compound_Character - - - + + + + + belongs_to_Compound_Character - - homologous_to - This propery relates different instances of the same character, including the case when the states of the character differ (e.g., large_beak of beak_size_character of TU A is homologous_to small_beak of beak_size_character of TU B). - - + + + + This propery relates different instances of the same character, including the case when the states of the character differ (e.g., large_beak of beak_size_character of TU A is homologous_to small_beak of beak_size_character of TU B). + homologous_to - - has_Change_Component - This property relates a transformation to the components that compose it. - - + + + + This property relates a transformation to the components that compose it. + has_Change_Component - - has_Categorical_Datum - + + + has_Categorical_Datum - - has_State - This property associates a character-state instance with its state value, e.g., a state value expressed in terms of an imported domain ontology. - - - + + + + + This property associates a character-state instance with its state value, e.g., a state value expressed in terms of an imported domain ontology. + has_State - - has_Left_Node - This property relates a transformation to a 'left' node (the node that has the 'left' state). - - - + + + + + This property relates a transformation to a 'left' node (the node that has the 'left' state). + has_Left_Node - - has_Right_State - This property relates a transformation to a 'right' state (the state associated with the 'right' node). - - - + + + + + This property relates a transformation to a 'right' state (the state associated with the 'right' node). + has_Right_State - - - represents_TU - This property relates a TU or taxonomic unit (typically associated with character data) to a phylogenetic history (Tree). - - + + + + + + This property relates a TU or taxonomic unit (typically associated with character data) to a phylogenetic history (Tree). + represents_TU - - exclude_Node - - + + + + exclude_Node - - has_Compound_State - This property associates a compound character-state instance with its compound state value. - - + + + - - + + + This property associates a compound character-state instance with its compound state value. + has_Compound_State - - belongs_to + + + + Generic property that links a concept to another concept it is a constituent of. The property is a synonym of part_of. - - - + belongs_to - - - belongs_to_TU - This property relates a character-state datum to its TU. - - - + + + + + + This property relates a character-state datum to its TU. + belongs_to_TU - - belongs_to_Network - - + + - - + + + + belongs_to_Network - - has_Annotation - - - - + + + + + has_Annotation - - part_of - + + part_of - - has_Nucleotide_Datum - This property relates a nucleotide character (a column in a nucleotide alignment) to a state datum for the character (an individual cell in the alignment column). - - + + - - + + + + This property relates a nucleotide character (a column in a nucleotide alignment) to a state datum for the character (an individual cell in the alignment column). + has_Nucleotide_Datum - - represented_by_Node - This property relates a TU to a node that represents it in a network. - - - + + + + This property relates a TU to a node that represents it in a network. + represented_by_Node - - has_Remaining_Coordinate_List - The property that relates a coordinate list to the item in the list beyond the first item. - - - + + + + + The property that relates a coordinate list to the item in the list beyond the first item. + has_Remaining_Coordinate_List - - has_Element - - + + + + has_Element - - exclude_Subtree - - + + + + exclude_Subtree - - belongs_to_Tree - - + + - - + + + + belongs_to_Tree - - - has_Parent_Node + + + + + Associates to a Directed Edge the Node that is in the parent position in the edge (i.e., the node touched by the edge and closer to the root of the tree) - - - + has_Parent_Node - - has_Lineage_node - - - + + + + + has_Lineage_node - - belongs_to_Tree_as_Root - - - - + + + + + belongs_to_Tree_as_Root - - has_Hereditary_Change - - - + + + + + has_Hereditary_Change - - - belongs_to_Character - - - + + + + + + belongs_to_Character - - has_Molecular_Datum - - + + - - + + + + has_Molecular_Datum - - has_Continuous_Datum - This property relates a continuous character to a state datum for the character. - - + + - - + + + + This property relates a continuous character to a state datum for the character. + has_Continuous_Datum - - has_TU - This property associates a character data matrix with a TU (a row) represented in the matrix. - - - + + + + + This property associates a character data matrix with a TU (a row) represented in the matrix. + has_TU - - - has_Child_Node + + + + + The property associates to a Directed Edge the Node that is in the child position in the edge, i.e., the node touched by the edge and closer to the leaves of the tree. - - - + has_Child_Node - - has_Right_Node - This property relates a transformation to a 'right' node (the node that has the 'right' state). - - - + + + + + This property relates a transformation to a 'right' node (the node that has the 'right' state). + has_Right_Node @@ -978,85 +1008,85 @@ - - has_Precision - + + + has_Precision - - has_Point_Coordinate_Value - - + + + + has_Point_Coordinate_Value - - has_Int_Value - - + + + + has_Int_Value - - has_Support_Value - + + + has_Support_Value - - has_Value + + has_Value - - has_Uncertainty_Factor - + + + has_Uncertainty_Factor - - has_Range_End_Value - - + + + + has_Range_End_Value - - has_Float_Value - - + + + + has_Float_Value - - has_Range_Start_Value - - + + + + has_Range_Start_Value @@ -1074,128 +1104,133 @@ - - DesoxiRibonucleotideResidueStateDatum - + + + DesoxiRibonucleotideResidueStateDatum - - CoordinatePoint - + + + CoordinatePoint - - Lineage - + + - - + + + Lineage - - Phylo4Tree - + + + Phylo4Tree - - Network - + + - + - - + + + Network - - ModelDescription - + + Description of a model of transformations. This is a non-computible description of a model, not the fully specified mathematical model, which typically relates the probability of a transformation to various parameters. + ModelDescription - - StandardStateDatum - + + + StandardStateDatum - - ContinuousCharacterLengthType - + + + ContinuousCharacterLengthType - - ContinuousCharBayesianLengthType - + + + ContinuousCharBayesianLengthType - - NEXUSTreeBlock - + + + NEXUSTreeBlock - - RootedTree - + + - + + + + + + + - - + + @@ -1203,1558 +1238,1551 @@ - - + + 1 + - - - - - 1 - - - + + RootedTree - - Kimura2Parameters - + + + Kimura2Parameters - - TreeProcedure - + + + TreeProcedure - - Generic_State + - - - + + + - - This class should be renamed. These are not generic states but non-concrete states including gap, unknown and missing. + This concept is tied to the verbally ambiguous 'gap' concept and to the use of a gap character (often the en dash '-') in text representations of sequence alignments. In general, this represents the absence of any positively diagnosed Character-State. As such, the gap may be interpreted as an additional Character-State, as the absence of the Character, or as an unknown value. In some cases it is helpful to separate these. + This class should be renamed. These are not generic states but non-concrete states including gap, unknown and missing. + Generic_State - - UnrootedSubtree - + + + UnrootedSubtree - - UnresolvedTree - + + + UnresolvedTree - - BifurcatingTree - - + + + + BifurcatingTree - - ContinuousStateDatum - + + + ContinuousStateDatum - - SubstitutionModel - + + + SubstitutionModel - - JukesCantor - + + + JukesCantor - - DatumCoordinate - + + - - - 1 + + 1 + A positional coordinate giving the source of a character state, used for molecular sequences. drawing from seqloc categories from NCBI at http://www.ncbi.nlm.nih.gov/IEB/ToolBox/SDKDOCS/SEQLOC.HTML#_Seq-loc:_Locations_on + DatumCoordinate - - UnresolvedRootedTree - - + + + + UnresolvedRootedTree - - Branch - + + 'Branch' is the domain-specific synonym for an edge of a (Phylogenetic) Tree or Network. Branches may have properties such as length and degree of support. + Branch - - CharacterStateDataMatrixAnnotation + - + - - + + Meta-information associated with a character matrix, such as, for the case of a sequence alignment, the method of alignment. + CharacterStateDataMatrixAnnotation - - AncestralNode - + + - - + + - - - 1 + + + AncestralNode - - UnresolvedUnrootedTree - - + + + + UnresolvedUnrootedTree - - UncertainStateDomain - + + - - + + + UncertainStateDomain - - ReconcileTree - + + - - - 2 + + 2 + + ReconcileTree - - Continuous - + + - - 1 + + 1 This class describes a continuous value. The link to the actual float value is through the property has_Value. It could have also other properties attached (e.g., has_Precision). + Continuous - - AlignmentProcedure - + + + AlignmentProcedure - - Dichotomy - - - + + + + + Dichotomy - - Molecular - + + + Molecular - - ContinuousCharParsimonyLengthType - + + + ContinuousCharParsimonyLengthType - - Categorical - + + + Categorical - - CDAOAnnotation - - Its possible that this base class should be discarded and that annotations should inherit from an imported base class if one exists. + + The base class of annotations in CDAO. + Its possible that this base class should be discarded and that annotations should inherit from an imported base class if one exists. + CDAOAnnotation - - originationEvent + - - + + + originationEvent - - Polytomy + - - 3 + + 3 - - + + + Polytomy - - PolymorphicStateDomain - + + - - 1.0 + + 1.0 + PolymorphicStateDomain - - TreeAnnotation + - + - - + + + TreeAnnotation - - Standard - + + + Standard - - EdgeLength - + + - - + + - - + + - Its possible that this should not be classed as an 'annotation' since it contains data rather than meta-data. The length of an edge (branch) of a Tree or Network, typically in units of evolutionary changes in character-state per character. + Its possible that this should not be classed as an 'annotation' since it contains data rather than meta-data. + EdgeLength - - RibonucleotideResidue - + + + RibonucleotideResidue - - Clade - - + + + + Clade - - DiscreteCharParsimonyLengthType - + + + DiscreteCharParsimonyLengthType - - MolecularStateDatum - + + + MolecularStateDatum - - PolyphyleticGroup - + + - - + + - + + PolyphyleticGroup - - NexusDataBlock - + + + NexusDataBlock - - BranchingNode + - - 2 + + 2 - + + BranchingNode - - Compound - + + + Compound - - CharacterStateDataMatrix - + + - - + + - - + + - - + + A matrix of character-state data, typically containing observed data, though in some cases the states in the matrix might be simulated or hypothetical. Synonyms: character Data matrix, character-state matrix + CharacterStateDataMatrix - - RibonucleotideResidueStateDatum - + + + RibonucleotideResidueStateDatum - - TimeCalibratedLengthType - + + + TimeCalibratedLengthType - - SetOfNodes + - + - - + + + SetOfNodes - - MRCANode - + + - - - 1 + + 1 + + MRCANode - - FASTADataMatrix - + + + FASTADataMatrix - - evolutionaryTransition - - + + + - - - 1 + + 1 + - - - 1 + + 1 + - - - 1 + + 1 + + evolutionaryTransition - - EdgeLengthType - + + + EdgeLengthType - - cladogeneticChange - + + + cladogeneticChange - - anageneticChange - + + + anageneticChange - - TUAnnotation + - + - - + + + TUAnnotation - - PhyloTree - + + + PhyloTree - - ContinuousCharacter - + + - - + + - - + + + ContinuousCharacter - - PHYLIPTree - + + + PHYLIPTree - - Subtree - + + - - + + + Subtree - - Character + - - + + - Traits shown to be relevant for phylogenetic classification + Traits shown to be relevant for phylogenetic classification + Character - - GalledTree - + + + GalledTree - - SpeciesTree - + + + SpeciesTree - - TreeFormat - + + + TreeFormat - - StandardCharacter - + + + StandardCharacter - - AminoAcidResidue - + + This class will be declared equivalent ot the amino acid class description imported + AminoAcidResidue - - geneDuplication - + + + geneDuplication - - CompoundCharacter - + + - - + + - - + + - - + + A character that could be divided into separate characters but is not due to the non-independence of changes that would result, e.g., as in the case of a subsequence that is either present or absent as a block. + CompoundCharacter - - SIMMAPTree - + + + SIMMAPTree - - CommonAncestralNode - + + - + - - + + + CommonAncestralNode - - NewickTree - + + + NewickTree - - TimeProportionalLengthType - + + + TimeProportionalLengthType - - DiscreteCharDistanceLengthType - + + + DiscreteCharDistanceLengthType - - StarTree - + + - - + + + StarTree - - FullyResolvedUnrootedTree - - + + + + FullyResolvedUnrootedTree - - ParaphyleticGroup - + + - - + + - + + ParaphyleticGroup - - geneticEvent - + + + geneticEvent - - UnrootedTree - + + + UnrootedTree - - CategoricalStateDatum - + + + CategoricalStateDatum - - DiscreteCharLikelihoodLengthType - + + + DiscreteCharLikelihoodLengthType - - CharacterStateDomain + The universe of possible states for a particular type of character, e.g., the states of an Amino_Acid character come from the Amino_Acid domain. + CharacterStateDomain - - CoordinateList - + + + CoordinateList - - GammaDistribution - + + + GammaDistribution - - DesoxiRibonucleotideResidueCharacter - + + - - + + - - + + + DesoxiRibonucleotideResidueCharacter - - CoordinateRange - + + + CoordinateRange - - ReticulateEvolution - + + + ReticulateEvolution - - hereditaryChange + - - - 1 + + 1 + - - - 1 + + 1 + - - - 1 + + 1 + + hereditaryChange - - CharacterStateDatum - + + - - - 1 + + 1 + - - - 1 + + 1 + The instance of a given character for a given TU. Its state is an object property drawn from a particular character state domain, e.g., the state of an Amino_Acid_State_Datum is an object property drawn from the domain Amino_Acid. + CharacterStateDatum - - Edge - + + - - - 2 + + - - + + 2 + An edge connecting two nodes in a (Phylogenetic) Tree or Network, also known as a 'branch'. Edges may have attributes such as length, degree of support, and direction. An edge can be a surrogate for a 'split' or bipartition, since each edge in a tree divides the terminal nodes into two sets. + Edge - - DiscreteCharacterLengthType - + + + DiscreteCharacterLengthType - - EdgeAnnotation + - + - - + + + EdgeAnnotation - - FullyResolvedRootedTree - - + + + - + - - - + + + + FullyResolvedRootedTree - - GrafenLengthType - + + + GrafenLengthType - - CoordinateSystem - + + A reference to an external coordinate system. Coordinates for data must refer to some such external coordinate system. + CoordinateSystem - - GenBankDataMatrix - + + + GenBankDataMatrix - - DataMatrixFormat - + + + DataMatrixFormat - - TerminalNode + - + - + - + - + + TerminalNode - - RibonucleotideResidueCharacter - + + - - + + + RibonucleotideResidueCharacter - - Tree - + + + Tree - - CategoricalCharacter - + + + CategoricalCharacter - - AminoAcidResidueStateDatum - + + + AminoAcidResidueStateDatum - - PHYLIPDataMatrix - + + + PHYLIPDataMatrix - - ContinuousCharLikelihoodLengthType - + + + ContinuousCharLikelihoodLengthType - - MolecularCharacter - + + + MolecularCharacter - - hereditaryPersistance + - - + + + hereditaryPersistance - - SetOfCharacters + - + - - + + + SetOfCharacters - - SetOfThings + The class is used to describe colletions of phylogenetic data elements. Examples include sets of trees for annotating consensus tree provenance, and sets of characters or higher order grouping (e.g., groups of groups of characters) that extends the CharSet block of NEXUS. + SetOfThings - - Sequence - + + - - + + - + - - - 1 + + 1 + A set of ordered states, typically the residues in a macromolecular sequence. + Sequence - - speciation - - + + + + speciation - - cladogenesis - + + + cladogenesis - - Bifurcation - + + - - 2 + + 2 + Bifurcation - - DiscreteCharBayesianLengthType - + + + DiscreteCharBayesianLengthType - - TaxonomicLink - + + Link to an externally defined taxonomic hierarchy. + TaxonomicLink - - MonophyleticGroup - + + + MonophyleticGroup - - molecularRecombination - + + + molecularRecombination - - HolophyleticGroup - + + + HolophyleticGroup - - FullyResolvedTree - + + + FullyResolvedTree - - AminoAcidResidueCharacter - + + - - + + - - + + + AminoAcidResidueCharacter - - recombination - + + + recombination - - DesoxiRibonucleotideResidue - + + + DesoxiRibonucleotideResidue - - RootedSubtree - - + + + + RootedSubtree - - CompoundStateDatum - + + + CompoundStateDatum - - GapCost - + + + GapCost - - TU - + + A unit of analysis that may be tied to a node in a tree and to a row in a character matrix. It subsumes the traditional concepts of 'OTU' and 'HTU'. + TU - - DirectedEdge + - + - - - 1 + + 1 + - - - 1 + + 1 + A directed edge. Rooted trees have directed edges. The direction is specified by way of the parent and child relationships of nodes that the edge connects. + DirectedEdge - - Node - + + - - - 1 + + - - - 1 + + 1 + + Node - - ContinuousCharDistanceLengthType - + + + ContinuousCharDistanceLengthType @@ -2772,80 +2800,80 @@ - - - - dA + + + + dA - - - - absent + + + + absent - - - - unknown + + + + unknown - - - - gap + + + + gap - - - - dG + + + + dG - - - - rU + + + + rU - - - - dC + + + + dC - - - - dT + + + + dT @@ -2859,24 +2887,24 @@ --> - + - - - + + + - + - - - + + + - +