001package org.biopax.paxtools.model.level3; 002 003import java.util.Set; 004 005/** 006 * <b>Definition</b>: A physical entity whose structure is comprised of other physical entities bound to each other 007 * non-covalently, at least one of which is a macromolecule (e.g. protein, DNA, or RNA). Complexes must be stable enough 008 * to function as a biological unit; in general, the temporary association of an enzyme with its substrate(s) should not 009 * be considered or represented as a complex. A complex is the physical product of an interaction (complexAssembly) and 010 * is not itself considered an interaction. 011 * 012 * <b>Comment</b>: In general, complexes should not be defined recursively so that smaller complexes exist within larger 013 * complexes, i.e. a complex should not be a COMPONENT of another complex (see comments on the COMPONENT property). The 014 * boundaries on the size of complexes described by this class are not defined here, although elements of the cell as 015 * large and dynamic as, e.g., a mitochondrion would typically not be described using this class (later versions of this 016 * ontology may include a cellularComponent class to represent these). The strength of binding and the topology of the 017 * components cannot be described currently, but may be included in future versions of the ontology, depending on 018 * community need. 019 * 020 * <b>Examples</b>: Ribosome, RNA polymerase II. Other examples of this class include complexes of multiple protein 021 * monomers and complexes of proteins and small molecules. 022 */ 023 024public interface Complex extends PhysicalEntity { 025 026 027 /** 028 * Defines the PhysicalEntity subunits of this complex. This property should not contain other complexes, i.e. it 029 * should always be a flat representation of the complex. For example, if two protein complexes join to form a 030 * single larger complex via a complex assembly interaction, the component of the new complex should be the 031 * individual proteins of the smaller complexes, not the two smaller complexes themselves. Exceptions are black-box 032 * complexes (i.e. complexes in which the component property is empty), which may be used as component of other 033 * complexes because their constituent parts are unknown / unspecified. The reason for keeping complexes flat is to 034 * signify that there is no information stored in the way complexes are nested, such as assembly order. Otherwise, 035 * the complex assembly order may be implicitly encoded and interpreted by some users, while others created 036 * hierarchical complexes randomly, which could lead to data loss. Additionally, the physicalEntityParticipants used 037 * in the component property are in the context of the complex, thus should not be reused between complexes. For 038 * instance, a protein may participate in two different complexes, but have different conformation in each. 039 * 040 * @return components of this complex 041 */ 042 Set<PhysicalEntity> getComponent(); 043 044 /** 045 * Defines the PhysicalEntity subunits of this complex. This property should not contain other complexes, i.e. it 046 * should always be a flat representation of the complex. For example, if two protein complexes join to form a 047 * single larger complex via a complex assembly interaction, the component of the new complex should be the 048 * individual proteins of the smaller complexes, not the two smaller complexes themselves. Exceptions are black-box 049 * complexes (i.e. complexes in which the component property is empty), which may be used as component of other 050 * complexes because their constituent parts are unknown / unspecified. The reason for keeping complexes flat is to 051 * signify that there is no information stored in the way complexes are nested, such as assembly order. Otherwise, 052 * the complex assembly order may be implicitly encoded and interpreted by some users, while others created 053 * hierarchical complexes randomly, which could lead to data loss. Additionally, the physicalEntityParticipants used 054 * in the component property are in the context of the complex, thus should not be reused between complexes. For 055 * instance, a protein may participate in two different complexes, but have different conformation in each. 056 * 057 * @param component to be added as a new member 058 */ 059 void addComponent(PhysicalEntity component); 060 061 /** 062 * Defines the PhysicalEntity subunits of this complex. This property should not contain other complexes, i.e. it 063 * should always be a flat representation of the complex. For example, if two protein complexes join to form a 064 * single larger complex via a complex assembly interaction, the component of the new complex should be the 065 * individual proteins of the smaller complexes, not the two smaller complexes themselves. Exceptions are black-box 066 * complexes (i.e. complexes in which the component property is empty), which may be used as component of other 067 * complexes because their constituent parts are unknown / unspecified. The reason for keeping complexes flat is to 068 * signify that there is no information stored in the way complexes are nested, such as assembly order. Otherwise, 069 * the complex assembly order may be implicitly encoded and interpreted by some users, while others created 070 * hierarchical complexes randomly, which could lead to data loss. Additionally, the physicalEntityParticipants used 071 * in the component property are in the context of the complex, thus should not be reused between complexes. For 072 * instance, a protein may participate in two different complexes, but have different conformation in each. 073 * @param component to be removed from members. 074 */ 075 void removeComponent(PhysicalEntity component); 076 077 /** 078 * The stoichiometry of components in a complex. 079 * 080 * @return the stoichiometry of components in a complex. 081 */ 082 Set<Stoichiometry> getComponentStoichiometry(); 083 084 /** 085 * The stoichiometry of components in a complex. 086 * 087 * @param stoichiometry add a stoichiometry for the member. 088 */ 089 void addComponentStoichiometry(Stoichiometry stoichiometry); 090 091 /** 092 * The stoichiometry of components in a complex. 093 * 094 * @param stoichiometry remove a stoichiometry for the member. 095 */ 096 void removeComponentStoichiometry(Stoichiometry stoichiometry); 097 098 099 /** 100 * Gets the member physical entities which are not complex. When the complex is nested, members of inner complexes 101 * are added to the returned set recursively. 102 * 103 * @return non-complex member physical entities 104 */ 105 Set<SimplePhysicalEntity> getSimpleMembers(); 106 107 /** 108 * Gets the <code>EntityReference</code>s of the member simple physical entities. When the complex is nested, 109 * contents of the member complexes are retrieved recursively. 110 * 111 * @return non-complex members' entity references 112 */ 113 Set<EntityReference> getMemberReferences(); 114 115}