001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 * Created on 05.03.2004
021 * @author Andreas Prlic
022 *
023 */
024package org.biojava.nbio.structure;
025
026/**
027 * <p>
028 * A {@link Group} that represents an AminoAcid.
029 * </p>
030 *
031 * <p>
032 * In PDB files information on AminoAcids can be observed in the SEQRES and in the ATOM records.
033 * Since frequently coordinates for some of the amino acids are missing, during parsing of the PDB
034 * files the SEQRES and the ATOM records are aligned and a whenever possible the AminoAcid objects
035 * are combined. Access to the SEQRES and ATOM sequence is possible through the {@link Chain} object.
036 * It is possible to distinguish between SEQRES and ATOM derived AminoAcids by {@link #getRecordType()}.
037 * </p>
038 *
039 *<p>
040 *  AminoAcid inherits most from {@link HetatomImpl }.  Adds a few AminoAcid
041 *  specific methods.
042 *  </p>
043 *
044 * @author Andreas Prlic
045 * @since 1.4
046 * @version %I% %G%
047 *
048 */
049public interface AminoAcid extends Group {
050
051        /**
052         * Field to distinguish AminoAcids that have been created from SEQRES records and ATOM records.
053         *
054         */
055        public static final String ATOMRECORD = "ATOM";
056
057        /**
058         * Field to distinguish AminoAcids that have been created from SEQRES records and ATOM records.
059         *
060         */
061        public static final String SEQRESRECORD = "SEQRES";
062
063        /**
064         * Get N atom.
065         *
066         * @return an Atom object or null if N atom does not exist
067         */
068        public Atom getN()    ;
069
070        /**
071         * Get CA atom.
072         * @return an Atom object or null if CA atom does not exist
073         */
074        public Atom getCA()   ;
075
076        /**
077         * Get C atom.
078         * @return an Atom object or null if C atom does not exist
079         */
080        public Atom getC()    ;
081
082        /**
083         * Get O atom.
084         * @return an Atom object or null if O atom does not exist
085         */
086        public Atom getO()    ;
087
088        /**
089         * Get CB atom.
090         * @return an Atom object or null if CB atom does not exist
091         */
092        public Atom getCB()   ;
093
094        /**
095         * Returns the name of the AA, in single letter code.
096         *
097         * @return a Character object representing the amino type value
098         * @see #setAminoType
099         */
100        public  Character getAminoType() ;
101
102        /**
103         * Set the name of the AA, in single letter code .
104         *
105         * @param aa  a Character object specifying the amino type value
106         * @see #getAminoType
107         */
108        public void setAminoType(Character aa) ;
109
110        /**
111         * Allows to distinguish between amino acids that are provided
112         * as ATOM records and a SEQRES records.
113         * @param recordName either ATOMRECORD or SEQRESRECORD
114         * @see #getRecordType()
115         */
116        public void setRecordType(String recordName);
117
118        /**
119         * Allows to distinguish between amino acids that are provided
120         * as ATOM records and a SEQRES records.
121         * @return the origin of this amino acid (ATOM or SEQRES records)
122         * @see #setRecordType(String)
123         */
124        public String getRecordType();
125
126}