Skip to content
Snippets Groups Projects
Commit 1a5e74eb authored by juergen's avatar juergen
Browse files

added method for obtaining sequenceoffset for a given seq in an alignment

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2195 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 5eed6897
No related branches found
No related tags found
No related merge requests found
......@@ -250,6 +250,7 @@ void export_sequence()
.add_property("sequences", &AlignmentHandle::GetSequences)
.def("SetSequenceName", &AlignmentHandle::SetSequenceName)
.def("SetSequenceOffset", &AlignmentHandle::SetSequenceOffset)
.def("GetSequenceOffset", &AlignmentHandle::GetSequenceOffset)
;
class_<AlignedColumn>("AlignedColumn", no_init)
.def("GetIndex", &AlignedColumn::GetIndex)
......
......@@ -62,7 +62,7 @@ int AlignmentHandle::GetResidueIndex(int seq_index, int pos) const
void AlignmentHandle::AddSequence(const ConstSequenceHandle& sequence)
{
this->CheckValidity();
if (impl_->GetCount()>0 &&
if (impl_->GetCount()>0 &&
impl_->GetSequence(0)->GetLength()!=sequence.GetLength()) {
throw InvalidAlignment();
}
......@@ -143,7 +143,7 @@ void AlignmentHandle::AttachView(int seq_index, const mol::EntityView& view)
impl_->GetSequence(seq_index)->AttachView(view);
}
void AlignmentHandle::AttachView(int seq_index, const mol::EntityView& view,
void AlignmentHandle::AttachView(int seq_index, const mol::EntityView& view,
const String& chain_name)
{
this->CheckValidity();
......@@ -160,7 +160,7 @@ ConstSequenceHandle AlignmentHandle::FindSequence(const String& name) const
void AlignmentHandle::Cut(int start, int end)
{
this->CheckValidity();
for (impl::SequenceListImpl::Iterator i=impl_->Begin(),
for (impl::SequenceListImpl::Iterator i=impl_->Begin(),
e=impl_->End(); i!=e; ++i) {
(*i)->Cut(start, end-start);
}
......@@ -183,12 +183,12 @@ void AlignmentHandle::Replace(const AlignedRegion& aln_r, int start, int end){
}
}
void AlignmentHandle::ShiftRegion(int start, int end, int amount,
void AlignmentHandle::ShiftRegion(int start, int end, int amount,
int master)
{
this->CheckValidity();
int cnt=0;
for (impl::SequenceListImpl::Iterator i=impl_->Begin(),
for (impl::SequenceListImpl::Iterator i=impl_->Begin(),
e=impl_->End(); i!=e; ++i, ++cnt) {
if (master==-1 || cnt==master) {
(*i)->ShiftRegion(start, end, amount);
......@@ -216,7 +216,7 @@ char AlignmentHandle::GetOneLetterCode(int seq_index, int pos) const
AlignedColumnIterator AlignmentHandle::begin() const
{
// no need to check for validity here
// no need to check for validity here
return AlignedColumnIterator(*this, 0, this->GetLength());
}
......@@ -244,4 +244,9 @@ void AlignmentHandle::SetSequenceOffset(int seq_index, int offset)
impl_->GetSequence(seq_index)->SetSequenceOffset(offset);
}
int AlignmentHandle::GetSequenceOffset(int seq_index)
{
this->CheckValidity();
return impl_->GetSequence(seq_index)->GetSequenceOffset();
}
}}
......@@ -35,27 +35,27 @@ class AlignedRegion;
class AlignedColumn;
class AlignedColumnIterator;
/// \brief representation of a multiple sequence alignemnt consisting of two or
/// \brief representation of a multiple sequence alignemnt consisting of two or
/// more sequences
///
/// A sequence alignment consists of two or more sequences. The number of
/// sequences in the alignment can be obtained by #GetCount().
/// A sequence alignment consists of two or more sequences. The number of
/// sequences in the alignment can be obtained by #GetCount().
/// All sequences are of length #GetLength().
///
/// Typically sequence alignments are used column-based, i.e by looking at an
/// aligned columns in the sequence alignment. To get a row-based (sequence)
/// view on the sequence list, use AlignmentHandle::GetSequenceList(). For an
///
/// Typically sequence alignments are used column-based, i.e by looking at an
/// aligned columns in the sequence alignment. To get a row-based (sequence)
/// view on the sequence list, use AlignmentHandle::GetSequenceList(). For an
/// overview of how to use the sequence module, see \ref module_seq "here"
///
/// All operators that operate on an alignment will again produce a valid
/// alignment. This mean that it is not possible to change the length of one
///
/// All operators that operate on an alignment will again produce a valid
/// alignment. This mean that it is not possible to change the length of one
/// sequence, without adjusting the other sequences, too.
class DLLEXPORT_OST_SEQ AlignmentHandle {
public:
typedef AlignedColumnIterator iterator;
AlignmentHandle();
/// \brief Get position in sequence with index seq_index that corresponds to
/// the given residue index.
///
......@@ -68,19 +68,19 @@ public:
int GetResidueIndex(int seq_index, int pos) const;
mol::ResidueView GetResidue(int seq_index, int pos) const;
char GetOneLetterCode(int seq_index, int pos) const;
/// \brief Add new sequence to multiple sequence alignment.
///
/// If the sequence length does not match with the length of the other
///
/// If the sequence length does not match with the length of the other
/// sequences in the alignment, an InvalidSequence() exception is thrown.
void AddSequence(const ConstSequenceHandle& sequence);
/// \brief Get sequence with given index.
/// \return sequence or invalid handle if the index is out of bounds
ConstSequenceHandle GetSequence(int seq_id) const;
ConstSequenceHandle GetSequence(int seq_id) const;
/// \brief Convert multiple sequence alignment to string.
String ToString(int width=80) const;
......@@ -88,87 +88,88 @@ public:
int GetLength() const;
/// \brief deep-copy multi sequence alignment
AlignmentHandle Copy() const;
AlignmentHandle Copy() const;
/// \brief find sequence by name.
///
/// If several sequences have the same name, the first matching sequence will
///
/// If several sequences have the same name, the first matching sequence will
/// be returned.
ConstSequenceHandle FindSequence(const String& name) const;
/// \brief attach view to given sequence
/// \sa SequenceHandle::AttachView(const mol::EntityView&)
void AttachView(int seq_index, const mol::EntityView& view);
/// \brief attach view to given sequence
/// \sa SequenceHandle::AttachView(const mol::EntityView&, const String&)
void AttachView(int seq_index, const mol::EntityView& view,
/// \sa SequenceHandle::AttachView(const mol::EntityView&, const String&)
void AttachView(int seq_index, const mol::EntityView& view,
const String& chain_name);
/// \brief set name of sequence
void SetSequenceName(int seq_index, const String& name);
void SetSequenceOffset(int seq_index, int offset);
void SetSequenceOffset(int seq_index, int offset);
int GetSequenceOffset(int seq_index);
/// \brief Get list of sequences (read-only)
ConstSequenceList GetSequences() const;
/// \brief create an aligned region.
///
///
/// \param start is the index of the first column
/// \param n is the length of the sequence
/// \param master is the reference system for operations such as shifting.
/// If set to -1, no master sequence is defined and the operations will
/// \param master is the reference system for operations such as shifting.
/// If set to -1, no master sequence is defined and the operations will
/// affect all sequences
///
/// This method does not throw any exceptions, even if the aligned region is
///
/// This method does not throw any exceptions, even if the aligned region is
/// out of bounds.
AlignedRegion MakeRegion(int start, int n, int master=-1) const;
/// \brief get number of sequences in alignment
int GetCount() const;
bool operator==(const AlignmentHandle& rhs) const;
bool operator!=(const AlignmentHandle& rhs) const;
bool operator!=(const AlignmentHandle& rhs) const;
/// \brief get aligned column at index
///
/// This method does not throw any exception. Upon accessing methods of the
/// aligned column, exceptions might be thrown when the index is out of
///
/// This method does not throw any exception. Upon accessing methods of the
/// aligned column, exceptions might be thrown when the index is out of
/// bounds.
AlignedColumn operator[](int index) const;
AlignmentHandle(const impl::SequenceListImplPtr& impl);
AlignmentHandle(const impl::SequenceListImplPtr& impl);
/// \brief cut out half-closed interval start, end
void Cut(int start, int end);
///\brief Replace part of an alignment
void Replace(const AlignedRegion& rhs, int start, int end);
/// \brief shift half-closed interval by amount
///
///
/// if master is -1, all sequences of the alignment will be shifted. Otherwise
/// only the sequence with given index is affected.
void ShiftRegion(int start, int end, int amount, int master=-1);
/// \brief Column iterator start-point
iterator begin() const;
/// \brief Column iterator end-point
iterator end() const;
private:
void CheckValidity() const;
impl::SequenceListImplPtr impl_;
impl::SequenceListImplPtr impl_;
};
AlignmentHandle DLLEXPORT_OST_SEQ CreateAlignment();
/// \brief convert alignment from sequence list
///
/// If the sequences in the SequenceList have different lengths, an
///
/// If the sequences in the SequenceList have different lengths, an
/// InvalidAlignment exception is thrown.
///
///
/// \return alignment consisting of the sequences in seq_list.
AlignmentHandle DLLEXPORT_OST_SEQ
AlignmentHandle DLLEXPORT_OST_SEQ
AlignmentFromSequenceList(const SequenceList& seq_list);
typedef std::vector<AlignmentHandle> AlignmentList;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment