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 DATE
021 *
022 */
023package org.biojava.nbio.core.sequence;
024
025/**
026 * @author Scooter Willis
027 *
028 */
029import org.biojava.nbio.core.exceptions.CompoundNotFoundException;
030import org.biojava.nbio.core.sequence.compound.NucleotideCompound;
031import org.biojava.nbio.core.sequence.compound.RNACompoundSet;
032import org.biojava.nbio.core.sequence.template.AbstractSequence;
033import org.biojava.nbio.core.sequence.template.CompoundSet;
034import org.biojava.nbio.core.sequence.template.ProxySequenceReader;
035import org.biojava.nbio.core.sequence.template.SequenceView;
036import org.biojava.nbio.core.sequence.transcription.TranscriptionEngine;
037import org.biojava.nbio.core.sequence.views.ComplementSequenceView;
038import org.biojava.nbio.core.sequence.views.ReversedSequenceView;
039
040/**
041 * RNASequence where RNACompoundSet are the allowed values
042 * @author Scooter Willis <willishf at gmail dot com>
043 */
044
045public class RNASequence extends AbstractSequence<NucleotideCompound> {
046
047                /**
048                 * Create a RNA sequence from a String
049                 * @param seqString
050                 * @throws CompoundNotFoundException
051                 */
052        public RNASequence(String seqString) throws CompoundNotFoundException {
053                super(seqString, RNACompoundSet.getRNACompoundSet());
054        }
055
056        /**
057         * Create a RNA aequence from a proxy reader
058         * @param proxyLoader
059         */
060        public RNASequence(ProxySequenceReader<NucleotideCompound> proxyLoader) {
061                super(proxyLoader, RNACompoundSet.getRNACompoundSet());
062        }
063
064        /**
065         * Create a RNA sequence from a string with a user defined RNA compound set
066         * @param seqString
067         * @param compoundSet
068         * @throws CompoundNotFoundException
069         */
070        public RNASequence(String seqString, CompoundSet<NucleotideCompound> compoundSet) throws CompoundNotFoundException {
071                super(seqString, compoundSet);
072        }
073
074        /**
075         * Create a RNA sequence from a proxy reader and user-defined RNA compound set
076         * @param proxyLoader
077         * @param compoundSet
078         */
079        public RNASequence(ProxySequenceReader<NucleotideCompound> proxyLoader,
080                        CompoundSet<NucleotideCompound> compoundSet) {
081                super(proxyLoader, compoundSet);
082        }
083
084        /**
085         * Get reverse complement view of the sequence
086         * @return
087         */
088        public SequenceView<NucleotideCompound> getReverseComplement() {
089                return new ComplementSequenceView<>(getInverse());
090        }
091
092        /**
093         * Get the inverse view of the sequence. It is the reverse sequence from
094         * end to begin where use reverse could imply complement. Called getInverse()
095         * in the hopes of making less confusing.
096         * @return
097         */
098        @Override
099public SequenceView<NucleotideCompound> getInverse() {
100                return new ReversedSequenceView<>(this);
101        }
102
103        /**
104         * Get the complement view of the RNA sequence
105         * @return
106         */
107        public SequenceView<NucleotideCompound> getComplement() {
108                return new ComplementSequenceView<>(this);
109        }
110
111        /**
112         * Get the ProteinSequence from the RNA sequence
113         * @return
114         */
115        public ProteinSequence getProteinSequence() {
116                return getProteinSequence(TranscriptionEngine.getDefault());
117        }
118
119        /**
120         * Get the ProteinSequence from the RNA sequence with user-defined
121         * transcription engine
122         *
123         * @param engine
124         * @return
125         */
126        public ProteinSequence getProteinSequence(TranscriptionEngine engine) {
127                return (ProteinSequence)engine.getRnaAminoAcidTranslator().createSequence(this);
128        }
129
130        public double getGC() {
131                throw new UnsupportedOperationException("Not supported yet");
132        }
133}