168 template<
typename TIDRefCont>
169 typename TIDRefCont::const_iterator
172 ITERATE (
typename TIDRefCont, it, cont) {
173 if((*it)->Equals(
id))
218 bool check_std =
false;
225 case TSegs::e_Denseg:
226 case TSegs::e_Dendiag:
227 case TSegs::e_Sparse:
228 case TSegs::e_Spliced:
239 ERR_POST(
"CHitMatrixDataSource skipping Seq-align - " << e.what());
251 ERR_POST(
"CHitMatrixDataSource::x_TestAndSelectAligns() - unsupported type of Seq-align");
281 LOG_POST(
Info <<
"Seq-locs in a Std-seg have invalid strand information");
313 if(based_ch || orient_ch) {
316 unique_ptr<IHitSeqId> q_id(
m_QueryID.release());
336 if(create_hits && s_id.get() && q_id.get()) {
364 const CScore& score = **itSc;
371 switch(
val.Which()) {
416 return id->GetSeqId()->Equals(*
m_Id);
431 case TSegs::e_Denseg:
432 case TSegs::e_Dendiag:
433 case TSegs::e_Sparse:
434 case TSegs::e_Spliced:
436 const CSeq_id& seq_id = *
id.GetSeqId();
448 add = (self_count == 2);
451 if(ids.end() == std::find_if(ids.begin(), ids.end(), Eq)) {
457 if(self_count == 0) {
475 case TSegs::e_Denseg:
476 case TSegs::e_Dendiag:
477 case TSegs::e_Sparse:
478 case TSegs::e_Spliced:
487 if(ids.end() == std::find_if(ids.begin(), ids.end(), Eq)) {
516 for(
size_t row = 0;
row < aln_ids.size();
row++ ) {
533 if(seq_ids.end() == std::find_if(seq_ids.begin(), seq_ids.end(), Eq)) {
534 seq_ids.push_back(
new CHitSeqId(*seq_id));
562 for(
size_t i = 0;
i < ids.size();
i++ ) {
563 ids[
i] = ids[
i]->Clone();
588 if(! (*it)->Equals(
id)) {
589 aligned.push_back(*it);
594 TIdVector::const_iterator it_id =
find_id(ids,
id);
596 if(it_id != ids.end()) {
638 size_t index_2 = min<size_t>(1,
m_SeqIds.size() - 1);
690 int q_index = q_id->
GetRow();
691 int s_index = s_id->
GetRow();
701 vector<size_t> s_rows;
702 size_t n_rows = aln_ids.size();
703 for(
size_t s_index = 0; s_index < n_rows; s_index++ ) {
704 const CSeq_id&
id = *aln_ids[s_index];
706 s_rows.push_back(s_index);
711 for(
size_t q_index = 0; q_index < n_rows; q_index++ ) {
712 const CSeq_id&
id = *aln_ids[q_index];
716 for(
size_t i = 0;
i < s_rows.size();
i++ ) {
717 size_t s_index = s_rows[
i];
728 size_t q_index,
size_t s_index)
738 case TSegs::e_Denseg:
739 case TSegs::e_Dendiag:
740 case TSegs::e_Sparse:
741 case TSegs::e_Spliced:
746 LOG_POST(
Info <<
"CHitMatrixDataSource() - this type of Seq-align"
747 <<
" is not supported");
756 size_t q_index,
size_t s_index)
788 size_t q_index,
size_t s_index)
792 typedef list< CRef< CStd_seg > >
TStd;
804 size_t q_index,
size_t s_index)
812 if( ! pairwise->empty()) {
822 for(
size_t i = 0;
i <
m_Hits.size();
i++ ) {
826 for(
size_t j = 0; j < n_elem; j++ ) {
886 return m_Scope->GetBioseqHandle(*seq_id);
915 names.push_back(it->first);
void ConvertSeqAlignToPairwiseAln(CPairwiseAln &pairwise_aln, const objects::CSeq_align &sa, objects::CSeq_align::TDim row_1, objects::CSeq_align::TDim row_2, CAlnUserOptions::EDirection direction=CAlnUserOptions::eBothDirections, const TAlnSeqIdVec *ids=0)
Build pairwise alignment from the selected rows of a seq-align.
TAlnSeqIdExtract::TIdVec TIdVec
Container (vector) of seq-ids.
Default IAlnSeqId implementation based on CSeq_id_Handle.
_TAlnIdVec::TIdVec TIdVec
Vector of ids used in all alignments.
@ eBothDirections
No filtering: use both direct and reverse sequences.
Wraps a CSeq_align containing CDense_seg and provides a simple API for interpreting it as a pairwise ...
static bool HasAlignment(const objects::CDense_seg &denseg, size_t q_index, size_t s_index, TDirection dir)
CDenseSegHit.
objects::CBioseq_Handle m_QueryHandle
void x_CreateHit_Denseg(const objects::CSeq_align &align, size_t q_index, size_t s_index)
creates a single hit from 2 rows of a Seq-align
void x_GetSeqAlignIds(const objects::CSeq_align &align, TSeqIdRefVector &ids, bool unique) const
bool x_GoodSeg(const TStd &std_list)
TSeqRange GetStdSegRange(const TStd &std_list, size_t row)
vector< CConstRef< objects::CSeq_id > > TSeqIdRefVector
virtual bool SelectDefaultIds()
selects default query and subject
TSeqRange m_SubjectHitsRange
objects::CBioseq_Handle m_SubjectHandle
virtual void GetAlignedIdsForParams(const IHitSeqId &id, const TIdVector &ids, TIdVector &aligned, const SParams ¶ms)
returns a list of ids that will be aligned with the specified id if the given params are applied.
void x_CreateHits_Diagonal(const objects::CSeq_align &align, size_t q_index, size_t s_index)
virtual objects::CBioseq_Handle GetSubjectHandle()
virtual void SetParams(const SParams ¶ms, bool create_hits)
virtual void GetParams(SParams ¶ms) const
TValueRange GetScoreRange(const string &name) const
const THitAdapterCont & GetHits() const
virtual objects::CScope & GetScope()
bool x_CanCreateRowBased()
THIdToHandleMap m_HIdToHandleMap
list of Ids for all sequences
unique_ptr< IHitSeqId > m_QueryID
void x_CalculateHitsRange()
void Init(objects::CScope &scope, TAlignVector &aligns)
void x_CreateHit_Std(const objects::CSeq_align &align, size_t q_index, size_t s_index)
virtual string GetLabel(const IHitSeqId &id)
CAlnIdMap< TAlnPtrVector, TIdExtract > TAlnIdMap
TSeqRange GetQueryHitsRange()
void x_CreateIds(TIdVector &seq_ids, const SParams ¶ms) const
void x_GetAlignedSeqIds(const CSeq_align &align, const IHitSeqId &id, TSeqIdRefVector &ids) const
virtual IHitSeqId & GetSubjectId() const
void x_CreateHits(const objects::CSeq_align &align)
virtual IHitSeqId & GetQueryId() const
objects::CSeq_align::TSegs::TStd TStd
virtual void GetAlignedIds(const IHitSeqId &id, TIdVector &aligned)
unique_ptr< IHitSeqId > m_SubjectID
CAlnStats< TAlnIdMap > TAlnStats
virtual objects::CBioseq_Handle GetBioseqHandle(const IHitSeqId &id)
void x_TestAndSelectAligns(TAlignVector &aligns)
TSeqRange GetSubjectHitsRange()
unique_ptr< TAlnIdMap > m_AlnIdMap
CAlnSeqIdsExtract< CAlnSeqId > TIdExtract
virtual objects::CBioseq_Handle GetQueryHandle()
virtual void GetHitSeqIdsForParams(TIdVector &ids, const SParams ¶ms) const
returns a list of ids that Data Source will create if the given params are applied.
void x_TestAndSelectAlign(const objects::CSeq_align &align)
virtual bool SelectIds(const IHitSeqId &q_id, const IHitSeqId &s_id)
Creates Hits for all pairwise alignments between selected by Query and Subject IDs.
void x_UpdateScoreMap()
builds a map of all scores found in the alignments
virtual ~CHitMatrixDataSource()
CRef< objects::CScope > m_Scope
CHitMatrixDataSource()
CHitMatrixDataSource.
TSeqRange m_QueryHitsRange
void x_CreateHit(const objects::CSeq_align &align, size_t q_index, size_t s_index)
virtual bool CanCreateRowBased() const
CRef< TAlnStats > m_AlnStats
virtual void GetScoreNames(vector< string > &names) const
virtual const TIdVector & GetHitSeqIds()
returns list of all seq ids in the Data Source
CConstRef< objects::CSeq_id > m_SeqId
virtual bool Equals(const IHitSeqId &id) const
CHitSeqId.
CHitSeqId(const objects::CSeq_id &id)
virtual IHitSeqId * Clone() const
virtual bool Equals(const IHitSeqId &id) const
virtual CConstRef< objects::CSeq_id > GetSeqId() const
returns CSeq_id associated with IHitSeqId
CHitSeqRowId(int row, const objects::CSeq_id &id)
CHitSeqRowId.
virtual IHitSeqId * Clone() const
CConstRef< objects::CSeq_id > m_SeqId
A pairwise aln is a collection of ranges for a pair of rows.
bool operator()(IHitSeqId *id) const
CSeqIdEquals(const CRef< CSeq_id > &id)
CConstRef< CSeq_id > m_Id
CSeqIdEquals(const CConstRef< CSeq_id > &id)
CSeqIdEquals(const CSeq_id &id)
bool operator()(const CSeq_id &id) const
bool operator()(CConstRef< CSeq_id > &id) const
Wraps a CSeq_align containing CStd_seg and provides a simple API for interpreting it as a pairwise al...
static bool HasAlignment(const TStd &std_list, size_t q_index, size_t s_index, TDirection dir)
TSignedSeqPos GetSeqStop(TDim row) const
TSignedSeqPos GetSeqStart(TDim row) const
Wrapper interface for seq-ids used in alignments.
virtual const CSeq_id & GetSeqId(void) const =0
Get CSeq_id.
virtual TSeqPos GetQueryLength() const =0
virtual TSignedSeqPos GetQueryStart() const =0
virtual TSeqPos GetSubjectLength() const =0
virtual TSignedSeqPos GetSubjectStart() const =0
vector< CConstRef< objects::CSeq_align > > TAlignVector
vector< IHitSeqId * > TIdVector
vector< IHit * > THitAdapterCont
pair< double, double > TValueRange
IHitSeqId - abstract identifier of a sequence in an alignment.
virtual IHitSeqId * Clone() const =0
virtual TDim GetElemsCount() const =0
virtual const IHitElement & GetElem(TDim elem_index) const =0
container_type::const_iterator const_iterator
container_type::iterator iterator
const_iterator end() const
const_iterator find(const key_type &key) const
iterator_bool insert(const value_type &val)
Include a standard set of the NCBI C++ Toolkit most basic headers.
bool FIdEqual(const CConstRef< CSeq_id > &id1, const CConstRef< CSeq_id > &id2)
USING_SCOPE(ncbi::objects)
TIDRefCont::const_iterator find_id(const TIDRefCont &cont, const IHitSeqId &id)
static const struct name_t names[]
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define ERR_POST(message)
Error posting with file, line number information but without error codes.
#define LOG_POST(message)
This macro is deprecated and it's strongly recomended to move in all projects (except tests) to macro...
void Info(CExceptionArgs_Base &args)
static void GetLabel(const CObject &obj, string *label, ELabelType type=eDefault)
virtual bool Equals(const CSerialObject &object, ESerialRecursionMode how=eRecursive) const
Check if both objects contain the same values.
ENa_strand GetStrand(void) const
Get the location's strand.
CBioseq_Handle GetBioseqHandle(const CSeq_id &id)
Get bioseq handle by seq-id.
TObjectType * GetPointer(void) THROWS_NONE
Get pointer,.
void Reset(void)
Reset reference object.
TObjectType & GetObject(void)
Get object.
static TThisType GetEmpty(void)
TThisType & Set(position_type from, position_type to)
CRange< TSeqPos > TSeqRange
typedefs for sequence ranges
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
const TDenseg & GetDenseg(void) const
Get the variant data.
vector< CRef< CSeq_loc > > TLoc
E_Choice Which(void) const
Which variant is currently selected.
vector< CRef< CScore > > TScore
const TLoc & GetLoc(void) const
Get the Loc member data.
bool IsSetSegs(void) const
Check if a value has been assigned to Segs data member.
bool CanGetSegs(void) const
Check if it is safe to call GetSegs method.
const TStd & GetStd(void) const
Get the variant data.
const TValue & GetValue(void) const
Get the Value member data.
bool CanGetId(void) const
Check if it is safe to call GetId method.
bool IsStd(void) const
Check if variant Std is selected.
list< CRef< CSeq_align > > Tdata
const TScore & GetScore(void) const
Get the Score member data.
const TDisc & GetDisc(void) const
Get the variant data.
const TId & GetId(void) const
Get the Id member data.
const Tdata & Get(void) const
Get the member data.
const TSegs & GetSegs(void) const
Get the Segs member data.
bool IsDenseg(void) const
Check if variant Denseg is selected.
ENa_strand
strand of nucleic acid
range(_Ty, _Ty) -> range< _Ty >
const GenericPointer< typename T::ValueType > T2 value
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
static bool GetSeqId(const T &d, set< string > &labels, const string name="", bool detect=false, bool found=false)
#define row(bind, expected)