;
73 virtual void Init(
void);
74 virtual int Run(
void);
76 voidLoadInputAlns(
void);
78m_AlnContainer.insert(*aln);
82 voidReportTime(
const string&
msg);
83 voidPrintAnchoredAln(
const CAnchoredAln& anchored_aln);
97arg_desc->AddDefaultKey
98(
"in",
"input_file_name",
99 "Name of file to read from (standard input by default)",
102arg_desc->AddDefaultKey
103(
"b",
"bin_obj_type",
104 "This forces the input file to be read in binary ASN.1 mode\n" 105 "and specifies the type of the top-level ASN.1 object.\n",
108arg_desc->AddDefaultKey
109(
"noobjmgr",
"bool",
112 "Skip ObjMgr in identifying sequences, calculating scores, etc.",
115arg_desc->AddDefaultKey
116(
"single",
"bool",
117 "Create a single AnchoredAln in addition to building/merging all alignments.\n" 118 "If input contains more than one aligmnent the first one will be used only.\n",
122arg_desc->AddDefaultKey
124 "Print the sequence strings",
128arg_desc->AddDefaultKey
129(
"asnout",
"asn_out_file_name",
135arg_desc->AddDefaultKey
136(
"dir",
"filter_direction",
137 "eBothDirections = 0, ///< No filtering: use both direct and reverse sequences.\n" 138 "eDirect = 1, ///< Use only sequences whose strand is the same as that of the anchor\n" 139 "eReverse = 2 ///< Use only sequences whose strand is opposite to that of the anchor\n",
144arg_desc->AddOptionalKey
145(
"anchor",
"anchor",
"Anchor row",
150arg_desc->AddDefaultKey
151(
"merge_algo",
"merge_algo",
152 "eMergeAllSeqs = 0, ///< Merge all sequences [greedy algo]\n" 153 "eQuerySeqMergeOnly = 1, ///< Only put the query seq on same\n" 154 " /// row [input order is not\n" 155 " /// significant]\n" 156 "ePreserveRows = 2, ///< Preserve all rows as they were in\n" 157 " /// the input (e.g. self-align a\n" 158 " /// sequence) (coresponds to separate\n" 159 " /// alignments) [greedy algo]\n" 160 "eDefaultMergeAlgo = eMergeAllSeqs",
166arg_desc->AddDefaultKey
167(
"merge_flags",
"merge_flags",
168 "fTruncateOverlaps = 1 << 0, ///< Otherwise put on separate\n" 170 "fAllowMixedStrand = 1 << 1, ///< Allow mixed strand on the\n" 172 "fAllowTranslocation = 1 << 2, ///< Allow translocations on the\n" 174 "fSkipSortByScore = 1 << 3, ///< In greedy algos, skip\n" 175 " /// sorting input alignments by\n" 176 " /// score thus allowing for\n" 177 " /// user-defined sort order.\n" 178 "fUseAnchorAsAlnSeq = 1 << 4 ///< (Not recommended!) Use the\n" 179 " /// anchor sequence as the\n" 180 " /// alignment sequence.\n" 181 " /// Otherwise (the default) a\n" 182 " /// pseudo sequence is created\n" 183 " /// whose coordinates are the\n" 184 " /// alignment coordinates.\n" 185 " /// WARNING: This will make all\n" 186 " /// CSparseAln::*AlnPos*\n" 187 " /// methods incosistent with\n" 188 " /// CAlnVec::*AlnPos*.\n",
194 stringprog_description =
"Alignment build application.\n";
195arg_desc->SetUsageContext(GetArguments().GetProgramBasename(),
196prog_description,
false);
198SetupArgDescriptions(arg_desc.release());
210 stringasn_type = args[
"b"].AsString();
211 boolbinary = !asn_type.empty();
212unique_ptr<CObjectIStream>
in 240<<
"\t"<<
msg<< endl;
241m_StopWatch.Restart();
248ReportTime(
"CSparseAln");
249 if(
GetArgs()[
"print"].AsBoolean()) {
251cout <<
"Row "<<
row<<
": " 252<< sparse_aln.
GetSeqId(
row).AsFastaString() << endl;
259cout << sequence << endl;
265unique_ptr<IAlnSegmentIterator> sparse_ci
271cout << **sparse_ci << endl;
276cout <<
"GetSeqPosFromAlnPos("<<
row<<
", "<< aln_seg.
GetAlnRange().
GetFrom() <<
", IAlnExplorer::eLeft): " 285cout <<
"GetSeqPosFromAlnPos("<<
row<<
", "<< aln_seg.
GetAlnRange().
GetTo() <<
", IAlnExplorer::eRight): " 299ReportTime(
"GetAlnSeqString");
311ReportTime(
"LoadInputAlns");
316 TAlnIdMapaln_id_map(id_extract, m_AlnContainer.size());
321cerr <<
"Skipping this alignment: "<< e.what() << endl;;
324ReportTime(
"TAlnIdMap");
329ReportTime(
"TAlnStats");
332m_StopWatch.Restart();
339ReportTime(
"GetAlignedIds");
340cerr << aln_stats.
GetIdVec()[0]->AsString()
341<<
" is aligned to:"<< endl;
343cerr << (*id_it)->AsString() << endl;
346m_StopWatch.Restart();
361cout <<
"Input alignments cannot be anchored because they don't share at least one common sequence."<< endl;
366 size_tanchor_row =
GetArgs()[
"anchor"].AsInteger();
368TAlnStats::TIdxVec::const_iterator find_it = find(idx_vec.begin(), idx_vec.end(), anchor_row);
369 if(find_it == idx_vec.end()) {
370cerr <<
"Invalid anchor index! Please choose among the following: ";
371 copy(idx_vec.begin(), idx_vec.end(), ostream_iterator<int>(cerr,
" "));
376cout <<
"Manually set anchor to: "<< aln_user_options.
GetAnchorId();
378cout <<
"Anchor will be automatically set.";
380cout << endl << endl;
384 if(
GetArgs()[
"single"].AsBoolean()) {
389 GetArgs()[
"anchor"] ?
GetArgs()[
"anchor"].AsInteger() : -1);
390cout <<
"Single anchored alignment"<< endl;
391cout << *single_anchored_aln;
392PrintAnchoredAln(*single_anchored_aln);
399ReportTime(
"TAnchoredAlnVec");
402cout << **aln_vec_it;
404m_StopWatch.Restart();
431ReportTime(
"BuildAln");
433cout << out_anchored_aln;
435cout << out_anchored_aln;
436m_StopWatch.Restart();
441PrintAnchoredAln(out_anchored_aln);
448ReportTime(
"CreateSeqAlignFromAnchoredAln");
449unique_ptr<CObjectOStream> asn_out
451 GetArgs()[
"asnout"].AsString()));
465vector<CRef<CSeq_align> > out_seqaligns;
478 int main(
intargc,
const char* argv[])
static CRef< CScope > m_Scope
int main(int argc, const char *argv[])
void BuildAln(TAnchoredAlnVec &in_alns, CAnchoredAln &out_aln, const CAlnUserOptions &options, TAlnSeqIdIRef pseudo_seqid=TAlnSeqIdIRef())
Build anchored alignment from a set of alignmnets.
void CreateAnchoredAlnVec(_TAlnStats &aln_stats, TAnchoredAlnVec &out_vec, const CAlnUserOptions &options)
Create anchored alignment from each seq-align in the stats.
CRef< CAnchoredAln > CreateAnchoredAlnFromAln(const _TAlnStats &aln_stats, size_t aln_idx, const CAlnUserOptions &options, objects::CSeq_align::TDim explicit_anchor_row=-1)
Create an anchored alignment from Seq-align using hints.
void CreateSeqAlignFromEachPairwiseAln(const CAnchoredAln::TPairwiseAlnVector pairwises, CAnchoredAln::TDim anchor, vector< CRef< CSeq_align > > &out_seqaligns, CSeq_align::TSegs::E_Choice choice, CScope *scope=NULL)
Create seq-align from each of the pairwise alignments vs the selected anchor row.
CRef< CSeq_align > CreateSeqAlignFromAnchoredAln(const CAnchoredAln &anchored_aln, CSeq_align::TSegs::E_Choice choice, CScope *scope=NULL)
Convert CAnchoredAln to seq-align of the selected type.
CRef< CDense_seg > CreateDensegFromPairwiseAln(const CPairwiseAln &pairwise_aln, CScope *scope=NULL)
Helper class for reading seq-align objects from a CObjectIStream.
void Read(CObjectIStream *obj_in_stream, TCallback callback, const string &top_level_asn_object=kEmptyStr)
Read all seq-align objects from the stream.
CRef< CObjectManager > m_ObjMgr
void PrintAnchoredAln(const CAnchoredAln &anchored_aln)
CScope & GetScope(void) const
bool InsertAln(const CSeq_align *aln)
virtual int Run(void)
Run the application.
virtual void Init(void)
Initialize the application.
void ReportTime(const string &msg)
CAlnContainer m_AlnContainer
Container mapping seq-aligns to vectors of participating seq-ids.
void push_back(const CSeq_align &aln)
Adding an alignment.
Default IAlnSeqId implementation based on CSeq_id_Handle.
Helper class which collects seq-align statistics: seq-ids participating in alignments and rows,...
_TAlnIdVec::TIdVec TIdVec
Vector of ids used in all alignments.
const TIdxVec & GetAnchorIdxVec(void) const
Get vector of id indexes (from IdVec) for potential anchors.
const TIdVec & GetIdVec(void) const
Get vector of all ids from all alignments.
bool CanBeAnchored(void) const
Check if there are any ids which can be used as anchors for the whole set of alignments.
vector< size_t > TIdxVec
Vector of indexes in TIdVec.
const TIdVec & GetAlignedIds(const TAlnSeqIdIRef &id) const
Get a set of ids that are aligned to a particular id.
Options for different alignment manager operations.
void SetAnchorId(const TAlnSeqIdIRef &anchor_id)
Set anchor id.
const TAlnSeqIdIRef & GetAnchorId(void) const
Get anchor id.
EMergeAlgo
Alignment merging algorithm.
EDirection
Row direction flags.
EMergeFlags
Additional merge flags.
Query-anchored alignment can be 2 or multi-dimentional.
const TPairwiseAlnVector & GetPairwiseAlns(void) const
The vector of pairwise alns.
vector< CRef< CPairwiseAln > > TPairwiseAlnVector
TDim GetAnchorRow(void) const
Which is the anchor row?
bool SplitStrands(void)
Split rows with mixed dir into separate rows returns true if the operation was performed.
static TRegisterLoaderInfo RegisterInObjectManager(CObjectManager &om, CReader *reader=0, CObjectManager::EIsDefault is_default=CObjectManager::eDefault, CObjectManager::TPriority priority=CObjectManager::kPriority_NotSet)
void Validate(bool full_test=false) const
TRng GetAlnRange(void) const
Get whole alignment range.
CAnchoredAln::TDim TDim
Synonym of TNumrow.
virtual IAlnSegmentIterator * CreateSegmentIterator(TNumrow row, const TSignedRange &range, IAlnSegmentIterator::EFlags flags) const
Create segment iterator.
string & GetAlnSeqString(TNumrow row, string &buffer, const TSignedRange &rq_aln_rng, bool force_translation=false) const
Fetch alignment sequence data.
TSignedSeqPos GetSeqPosFromAlnPos(TNumrow for_row, TSeqPos aln_pos, ESearchDirection dir=eNone, bool try_reverse_dir=true) const
TDim GetDim(void) const
Alignment dimension (number of sequence rows in the alignment)
TSignedRange GetSeqAlnRange(TNumrow row) const
Get sequence range in alignment coords (strand ignored).
const objects::CSeq_id & GetSeqId(TNumrow row) const
Get seq-id for the row.
@ eRight
Towards higher aln coord (always to the right)
@ eLeft
Towards lower aln coord (always to the left)
@ eSkipInserts
Iterate segments where at least some rows are aligned (including gap segments)
Alignment segment interface.
virtual const TSignedRange & GetRange(void) const =0
Get the selected row range.
@ fGap
Both anchor row and the selected row are not included in the segment (some other row is present and t...
virtual TSegTypeFlags GetType(void) const =0
Get current segment type.
virtual const TSignedRange & GetAlnRange(void) const =0
Get alignment range for the segment.
Include a standard set of the NCBI C++ Toolkit most basic headers.
int AppMain(int argc, const char *const *argv, const char *const *envp=0, EAppDiagStream diag=eDS_Default, const char *conf=NcbiEmptyCStr, const string &name=NcbiEmptyString)
Main function (entry point) for the NCBI application.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
@ eInputFile
Name of file (must exist and be readable)
@ eBoolean
{'true', 't', 'false', 'f'}, case-insensitive
@ eString
An arbitrary string.
@ eOutputFile
Name of file (must be writable)
@ eInteger
Convertible into an integer number (int or Int8)
@ fText
Open file in text mode.
@ fBinary
Open file in binary mode.
@ eDS_Default
Try standard log file (app.name + ".log") in /log/, use stderr on failure.
@ eSerial_AsnText
ASN.1 text.
@ eSerial_AsnBinary
ASN.1 binary.
static CObjectOStream * Open(ESerialDataFormat format, CNcbiOstream &outStream, bool deleteOutStream)
Create serial object writer and attach it to an output stream.
static CObjectIStream * Open(ESerialDataFormat format, CNcbiIstream &inStream, bool deleteInStream)
Create serial object reader and attach it to an input stream.
static CRef< CObjectManager > GetInstance(void)
Return the existing object manager or create one.
void AddDefaults(TPriority pri=kPriority_Default)
Add default data loaders from object manager.
void Run(void)
Enter the main loop.
void CONNECT_Init(const IRWRegistry *reg=0, CRWLock *lock=0, TConnectInitFlags flag=eConnectInit_OwnNothing, FSSLSetup ssl=0)
Init [X]CONNECT library with the specified "reg" and "lock" (ownership for either or both can be deta...
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
Magic spell ;-) needed for some weird compilers... very empiric.
Defines the CNcbiApplication and CAppException classes for creating NCBI applications.
#define GetArgs
Avoid preprocessor name clash with the NCBI C Toolkit.
Defines command line argument related classes.
Defines unified interface to application:
std::istream & in(std::istream &in_, double &x_)
void copy(Njn::Matrix< S > *matrix_, const Njn::Matrix< T > &matrix0_)
vector< CRef< CAnchoredAln > > TAnchoredAlnVec
Collection of anchored alignments.
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
#define row(bind, expected)
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