00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef OST_SEQUENCE_HH
00020 #define OST_SEQUENCE_HH
00021
00022
00023
00024
00025 #include <ost/message.hh>
00026 #include <list>
00027
00028 #include <boost/shared_ptr.hpp>
00029 #include <ost/generic_property.hh>
00030 #include <ost/config.hh>
00031 #if(OST_INFO_ENABLED)
00032 #include <ost/info/info_fw.hh>
00033 #endif
00034 #include <ost/mol/residue_prop.hh>
00035 #include <ost/mol/entity_view.hh>
00036 #include <ost/mol/residue_view.hh>
00037
00038 #include <ost/seq/module_config.hh>
00039 #include <ost/seq/invalid_sequence.hh>
00040 namespace ost { namespace seq { namespace impl {
00041
00043 class SequenceImpl;
00044
00046 typedef boost::shared_ptr<SequenceImpl> SequenceImplPtr;
00047
00049 class DLLEXPORT_OST_SEQ SequenceImpl : public GenericPropContainerImpl {
00050 public:
00052 static SequenceImplPtr FromString(const String& seq_name,
00053 const String& sequence_string,
00054 const String& role="UNKNOWN");
00055
00059 int GetResidueIndex(int pos) const;
00060
00063 int GetPos(int residue_index) const;
00064
00066 int GetFirstNonGap() const;
00067
00069 int GetLastNonGap() const;
00070
00071 const String& GetName() const;
00072
00073 void SetName(const String& name);
00074
00075 void Cut(int start, int n);
00076
00077 void ShiftRegion(int start, int end, int amount);
00078 const String& GetString() const {
00079 return seq_string_;
00080 }
00082 void SetString(const String& seq);
00083
00085 void Normalise();
00086
00088 void Replace(const String& str,int start, int end);
00089
00091 String GetGaplessString() const;
00092
00096 int GetOffset() const;
00097
00098 int GetIndex(const String& substr) const;
00104 void SetOffset(int offset);
00105
00107 int GetLength() const;
00112 SequenceImpl(const String& seq_name, const String& sequence_string,
00113 const String& role);
00114
00116 char GetOneLetterCode(int position) const;
00117
00118 void SetOneLetterCode(int position, char new_char);
00124 mol::ResidueView GetResidue(int position) const;
00125
00127 mol::EntityView GetAttachedView() const;
00128
00132 void AttachView(const mol::EntityView& view);
00133
00137 SequenceImplPtr Copy() const;
00141 void AttachView(const mol::EntityView& view, const String& chain_name);
00142
00144 bool HasAttachedView() const;
00145
00146 void Append(char olc);
00147
00148 char& operator[](size_t index)
00149 {
00150 return seq_string_[index];
00151 }
00152 char operator[](size_t index) const
00153 {
00154 return seq_string_[index];
00155 }
00156 const String& GetRole() const
00157 {
00158 return seq_role_;
00159 }
00160
00161 void SetRole(const String& role)
00162 {
00163 seq_role_=role;
00164 }
00165 private:
00166
00172 void ShiftsFromSequence();
00173
00174
00175 int GetPosNoBounds(int index) const;
00176
00177 static bool IsSequenceStringSane(const String& seq_string);
00178
00179 typedef struct {
00180 int start;
00181 int shift;
00182 } Shift;
00183 String seq_name_;
00184 String seq_string_;
00185 String seq_role_;
00186 std::list<Shift> shifts_;
00187 bool editing_;
00188 int offset_;
00189 mol::EntityView attached_view_;
00190 };
00191
00193 typedef std::vector<SequenceImplPtr> SequenceList;
00194
00195 #if(OST_INFO_ENABLED)
00197 SequenceImplPtr DLLEXPORT_OST_SEQ SequenceImplFromInfo(const info::InfoGroup& group);
00198
00200 void DLLEXPORT_OST_SEQ SequenceImplToInfo(const SequenceImplPtr& sequence,
00201 info::InfoGroup& group);
00202 #endif
00203
00204
00205 }}}
00206 #endif
00207