SeqAnnotList::const_iterator
n,
ne= seqAnnots.end();
60 for(
n=seqAnnots.begin();
n!=
ne; ++
n) {
62 if(!
n->GetObject().GetData().IsAlign())
63 THROW_MESSAGE(
"AlignmentSet::AlignmentSet() - confused by Seq-annot data format");
64 if(
n!= seqAnnots.begin())
67CSeq_annot::C_Data::TAlign::const_iterator
68 a, ae =
n->GetObject().GetData().GetAlign().end();
69 for(
a=
n->GetObject().GetData().GetAlign().begin();
a!=ae; ++
a) {
73!
a->GetObject().IsSetDim() ||
a->GetObject().GetDim() != 2 ||
74(!
a->GetObject().GetSegs().IsDendiag() && !
a->GetObject().GetSegs().IsDenseg()))
75 THROW_MESSAGE(
"AlignmentSet::AlignmentSet() - confused by alignment type");
77seqAligns.push_back(*
a);
80 if(seqAligns.size() == 0)
81 THROW_MESSAGE(
"AlignmentSet::AlignmentSet() - must have at least one Seq-align");
87 boolseq1PresentInAll =
true, seq2PresentInAll =
true;
90 const CSeq_id& frontSid = seqAligns.front()->GetSegs().IsDendiag() ?
91seqAligns.front()->GetSegs().GetDendiag().front()->GetIds().front().GetObject() :
92seqAligns.front()->GetSegs().GetDenseg().GetIds().front().GetObject();
93 const CSeq_id& backSid = seqAligns.front()->GetSegs().IsDendiag() ?
94seqAligns.front()->GetSegs().GetDendiag().front()->GetIds().back().GetObject() :
95seqAligns.front()->GetSegs().GetDenseg().GetIds().back().GetObject();
96SequenceSet::SequenceList::const_iterator s, se = sequenceSet.m_sequences.end();
97 for(s=sequenceSet.m_sequences.begin(); s!=se; ++s) {
98 if((*s)->MatchesSeqId(frontSid)) seq1 = *s;
99 if((*s)->MatchesSeqId(backSid)) seq2 = *s;
100 if(seq1 && seq2)
break;
103 THROW_MESSAGE(
"AlignmentSet::AlignmentSet() - can't match first pair of Seq-ids to Sequences");
106SeqAlignList::const_iterator
a= seqAligns.begin(), ae = seqAligns.end();
107 for(++
a;
a!=ae; ++
a) {
108 const CSeq_id& frontSid2 = (*a)->GetSegs().IsDendiag() ?
109(*a)->GetSegs().GetDendiag().front()->GetIds().front().GetObject() :
110(*a)->GetSegs().GetDenseg().GetIds().front().GetObject();
111 const CSeq_id& backSid2 = (*a)->GetSegs().IsDendiag() ?
112(*a)->GetSegs().GetDendiag().front()->GetIds().back().GetObject() :
113(*a)->GetSegs().GetDenseg().GetIds().back().GetObject();
115seq1PresentInAll =
false;
116 if(!seq2->MatchesSeqId(frontSid2) && !seq2->MatchesSeqId(backSid2))
117seq2PresentInAll =
false;
119 if(!seq1PresentInAll && !seq2PresentInAll)
121 "all pairwise sequence alignments must have a common master sequence");
122 else if(seq1PresentInAll && !seq2PresentInAll)
124 else if(seq2PresentInAll && !seq1PresentInAll)
126 else if(seq1PresentInAll && seq2PresentInAll && seq1 == seq2)
131 WARNING_MESSAGE(
"alignment master sequence is ambiguous - using the first one (" 135 TRACE_MESSAGE(
"determined master sequence: "<< m_master->IdentifierString());
138SeqAlignList::const_iterator
l,
le= seqAligns.end();
139 for(
l=seqAligns.begin();
l!=
le; ++
l)
140m_alignments.push_back(
143 TRACE_MESSAGE(
"number of alignments: "<< m_alignments.size());
148 const SequenceSet& sequenceSet,
constvector < unsigned int > *rowOrder)
155 for(
unsigned int i=0;
i<rowOrder->size(); ++
i)
156rowCheck[(*rowOrder)[
i]] =
i;
157 if(rowOrder->size() != multiple->
NRows() || rowCheck.
size() != multiple->
NRows() || (*rowOrder)[0] != 0) {
158 ERROR_MESSAGE(
"AlignmentSet::CreateFromMultiple() - bad row order vector");
166newSeqAnnots.push_back(seqAnnot);
169seqAligns.resize((multiple->
NRows() == 1) ? 1 : multiple->
NRows() - 1);
170CSeq_annot::C_Data::TAlign::iterator sa = seqAligns.begin();
177 if(multiple->
NRows() > 1) {
178 for(
unsigned int row=1;
row<multiple->
NRows(); ++
row, ++sa) {
180(rowOrder ? (*rowOrder)[
row] :
row)));
185unique_ptr<AlignmentSet> newAlignmentSet;
187newAlignmentSet.reset(
new AlignmentSet(newSeqAnnots, sequenceSet));
190 "AlignmentSet::CreateFromMultiple() - failed to create AlignmentSet from new asn object: " 196 returnnewAlignmentSet.release();
204m_master(masterSequence), m_slave(
NULL)
211 const CSeq_id& frontSeqId = seqAlign.GetSegs().IsDendiag() ?
212seqAlign.GetSegs().GetDendiag().front()->GetIds().front().GetObject() :
213seqAlign.GetSegs().GetDenseg().GetIds().front().GetObject();
214 const CSeq_id& backSeqId = seqAlign.GetSegs().IsDendiag() ?
215seqAlign.GetSegs().GetDendiag().front()->GetIds().back().GetObject() :
216seqAlign.GetSegs().GetDenseg().GetIds().back().GetObject();
218 boolmasterFirst =
true;
219SequenceSet::SequenceList::const_iterator s, se = sequenceSet.
m_sequences.end();
220 for(s=sequenceSet.
m_sequences.begin(); s!=se; ++s) {
222(*s)->MatchesSeqId(backSeqId)) {
224}
else if((*s)->MatchesSeqId(frontSeqId) &&
226masterFirst =
false;
231 ERROR_MESSAGE(
"MasterSlaveAlignment::MasterSlaveAlignment() - couldn't find matching sequences; " 233<< backSeqId.
AsFastaString() <<
" must be in the sequence list for this file!");
239 intmasterRes, slaveRes, blockNum = 0;
243 if(seqAlign.GetSegs().IsDendiag()) {
245CSeq_align::C_Segs::TDendiag::const_iterator d , de = seqAlign.GetSegs().GetDendiag().end();
246 for(d=seqAlign.GetSegs().GetDendiag().begin(); d!=de; ++d, ++blockNum) {
250 THROW_MESSAGE(
"MasterSlaveAlignment::MasterSlaveAlignment() - incorrect dendiag block dimensions");
259 THROW_MESSAGE(
"MasterSlaveAlignment::MasterSlaveAlignment() - mismatched Seq-id in dendiag block");
262 for(
i=0;
i<block.
GetLen(); ++
i) {
271 THROW_MESSAGE(
"MasterSlaveAlignment::MasterSlaveAlignment() - seqloc in dendiag block > length of sequence!");
279 else if(seqAlign.GetSegs().IsDenseg()) {
281 const CDense_seg& block = seqAlign.GetSegs().GetDenseg();
284block.
GetIds().size() != 2 ||
287 THROW_MESSAGE(
"MasterSlaveAlignment::MasterSlaveAlignment() - incorrect denseg block dimension");
296 THROW_MESSAGE(
"MasterSlaveAlignment::MasterSlaveAlignment() - mismatched Seq-id in denseg block");
299CDense_seg::TStarts::const_iterator starts = block.
GetStarts().begin();
300CDense_seg::TLens::const_iterator lens,
le= block.
GetLens().end();
301 for(lens=block.
GetLens().begin(); lens!=
le; ++lens) {
303masterRes = *(starts++);
304slaveRes = *(starts++);
306slaveRes = *(starts++);
307masterRes = *(starts++);
309 if(masterRes != -1 && slaveRes != -1) {
312 THROW_MESSAGE(
"MasterSlaveAlignment::MasterSlaveAlignment() - " 313 "seqloc in denseg block > length of sequence!");
314 for(
i=0;
i<*lens; ++
i) {
User-defined methods of the data storage class.
list< const CSeq_align * > SeqAlignList
#define WARNING_MESSAGE(s)
AlignmentSet(SequenceSet *seqSet, const SeqAnnotList &seqAnnots, bool ignoreBadPairwiseAlignments=false)
SeqAnnotList * newAsnAlignmentData
std::list< ncbi::CRef< ncbi::objects::CSeq_annot > > SeqAnnotList
static AlignmentSet * CreateFromMultiple(const BlockMultipleAlignment *multiple, SeqAnnotList *newAsnAlignmentData, const SequenceSet &sequenceSet, const std::vector< unsigned int > *rowOrder=NULL)
std::vector< const UngappedAlignedBlock * > UngappedAlignedBlockList
void GetUngappedAlignedBlocks(UngappedAlignedBlockList *blocks) const
unsigned int NRows(void) const
ResidueVector m_blockStructure
MasterSlaveAlignment(const SequenceSet *sequenceSet, const Sequence *masterSequence, const objects::CSeq_align &seqAlign)
const Sequence * m_master
ResidueVector m_masterToSlave
unsigned int Length(void) const
bool MatchesSeqId(const ncbi::objects::CSeq_id &seqID) const
std::string IdentifierString(void) const
const string & GetMsg(void) const
Get message string.
const string AsFastaString(void) const
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_SCOPE(ns)
Define a new scope.
bool IsSetDim(void) const
dimensionality Check if a value has been assigned to Dim data member.
const TStarts & GetStarts(void) const
Get the Starts member data.
const TLens & GetLens(void) const
Get the Lens member data.
TLen GetLen(void) const
Get the Len member data.
TDim GetDim(void) const
Get the Dim member data.
const TIds & GetIds(void) const
Get the Ids member data.
TDim GetDim(void) const
Get the Dim member data.
const TIds & GetIds(void) const
Get the Ids member data.
const TStarts & GetStarts(void) const
Get the Starts member data.
TNumseg GetNumseg(void) const
Get the Numseg member data.
@ eType_partial
mapping pieces together
@ eType_diags
unbroken, but not ordered, diagonals
void SetData(TData &value)
Assign a value to Data data member.
list< CRef< CSeq_align > > TAlign
The NCBI C++/STL use hints.
bool le(T x_, T y_, T round_)
bool ne(T x_, T y_, T round_)
static SLJIT_INLINE sljit_ins l(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
#define row(bind, expected)
static DP_BlockInfo * blocks
ncbi::objects::CSeq_align * CreatePairwiseSeqAlignFromMultipleRow(const BlockMultipleAlignment *multiple, const BlockMultipleAlignment::UngappedAlignedBlockList &blocks, unsigned int slaveRow)
#define THROW_MESSAGE(str)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4