00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef ALGO_BLAST_API___BL2SEQ__HPP
00034 #define ALGO_BLAST_API___BL2SEQ__HPP
00035
00036 #include <algo/blast/api/blast_types.hpp>
00037 #include <algo/blast/api/sseqloc.hpp>
00038 #include <algo/blast/api/blast_aux.hpp>
00039 #include <algo/blast/api/blast_options_handle.hpp>
00040 #include <algo/blast/api/blast_results.hpp>
00041
00042
00043
00044
00045
00046
00047 class CBlastFilterTest;
00048
00049 BEGIN_NCBI_SCOPE
00050 BEGIN_SCOPE(blast)
00051
00052
00053
00054 class CBl2Seq : public CObject
00055 {
00056 public:
00057
00058
00059 CBl2Seq(const SSeqLoc& query, const SSeqLoc& subject, EProgram p);
00060
00061
00062
00063 CBl2Seq(const SSeqLoc& query, const TSeqLocVector& subjects, EProgram p);
00064
00065
00066 CBl2Seq(const TSeqLocVector& queries, const TSeqLocVector& subjects,
00067 EProgram p);
00068
00069
00070 CBl2Seq(const SSeqLoc& query, const SSeqLoc& subject,
00071 CBlastOptionsHandle& opts);
00072
00073
00074
00075 CBl2Seq(const SSeqLoc& query, const TSeqLocVector& subjects,
00076 CBlastOptionsHandle& opts);
00077
00078
00079 CBl2Seq(const TSeqLocVector& queries, const TSeqLocVector& subjects,
00080 CBlastOptionsHandle& opts);
00081
00082
00083 virtual ~CBl2Seq();
00084
00085
00086 void SetQuery(const SSeqLoc& query);
00087
00088
00089 const SSeqLoc& GetQuery() const;
00090
00091
00092 void SetQueries(const TSeqLocVector& queries);
00093
00094
00095 const TSeqLocVector& GetQueries() const;
00096
00097
00098 void SetSubject(const SSeqLoc& subject);
00099
00100
00101 const SSeqLoc& GetSubject() const;
00102
00103
00104 void SetSubjects(const TSeqLocVector& subjects);
00105
00106
00107 const TSeqLocVector& GetSubjects() const;
00108
00109
00110 CBlastOptionsHandle& SetOptionsHandle();
00111
00112
00113 const CBlastOptionsHandle& GetOptionsHandle() const;
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127 virtual TSeqAlignVector Run();
00128
00129
00130
00131
00132
00133
00134 CRef<CSearchResultSet> RunEx();
00135
00136
00137
00138
00139
00140 NCBI_DEPRECATED virtual void RunWithoutSeqalignGeneration();
00141
00142
00143
00144
00145
00146 NCBI_DEPRECATED BlastHSPResults* GetResults() const;
00147
00148
00149 TSeqLocInfoVector GetFilteredQueryRegions() const;
00150
00151
00152
00153 void GetFilteredSubjectRegions(vector<TSeqLocInfoVector>& retval) const;
00154
00155
00156 BlastDiagnostics* GetDiagnostics() const;
00157
00158
00159
00160
00161 void GetAncillaryResults(CSearchResultSet::TAncillaryVector& retval) const;
00162
00163
00164 void GetMessages(TSearchMessages& messages) const;
00165
00166
00167
00168
00169
00170
00171
00172
00173 TInterruptFnPtr SetInterruptCallback(TInterruptFnPtr fnptr,
00174 void* user_data = NULL);
00175
00176 protected:
00177
00178 virtual void SetupSearch();
00179
00180
00181 virtual void RunFullSearch();
00182
00183
00184 virtual TSeqAlignVector x_Results2SeqAlign();
00185
00186
00187
00188
00189 static void x_SimplifyTSeqLocVector(const TSeqLocVector& slv,
00190 vector< CConstRef<objects::CSeq_id> >& query_ids);
00191
00192
00193
00194 void x_BuildAncillaryData(const TSeqAlignVector& alignments);
00195
00196 private:
00197
00198 TSeqLocVector m_tQueries;
00199 TSeqLocVector m_tSubjects;
00200 CRef<CBlastOptionsHandle> m_OptsHandle;
00201
00202
00203 void x_Init(const TSeqLocVector& queries, const TSeqLocVector& subjs);
00204
00205
00206 CBl2Seq(const CBl2Seq& rhs);
00207
00208 CBl2Seq& operator=(const CBl2Seq& rhs);
00209
00210
00211 bool mi_bQuerySetUpDone;
00212 CBLAST_SequenceBlk mi_clsQueries;
00213 CBlastQueryInfo mi_clsQueryInfo;
00214
00215 BlastSeqSrc* mi_pSeqSrc;
00216 BlastScoreBlk* mi_pScoreBlock;
00217 CLookupTableWrap mi_pLookupTable;
00218 BlastSeqLoc* mi_pLookupSegments;
00219
00220
00221 TSearchMessages m_Messages;
00222
00223
00224 BlastHSPResults* mi_pResults;
00225
00226 BlastDiagnostics* mi_pDiagnostics;
00227
00228
00229 BlastMaskLoc* m_ipFilteredRegions;
00230
00231
00232 TInterruptFnPtr m_fnpInterrupt;
00233
00234 CSBlastProgress m_ProgressMonitor;
00235
00236 CSearchResultSet::TAncillaryVector m_AncillaryData;
00237
00238 vector<TSeqLocInfoVector> m_SubjectMasks;
00239
00240
00241 void x_ResetQueryDs();
00242
00243 void x_ResetSubjectDs();
00244
00245 friend class ::CBlastFilterTest;
00246 };
00247
00248 inline void
00249 CBl2Seq::SetQuery(const SSeqLoc& query)
00250 {
00251 x_ResetQueryDs();
00252 m_tQueries.clear();
00253 m_tQueries.push_back(query);
00254 }
00255
00256 inline const SSeqLoc&
00257 CBl2Seq::GetQuery() const
00258 {
00259 return m_tQueries.front();
00260 }
00261
00262 inline void
00263 CBl2Seq::SetQueries(const TSeqLocVector& queries)
00264 {
00265 x_ResetQueryDs();
00266 m_tQueries.clear();
00267 m_tQueries = queries;
00268 }
00269
00270 inline const TSeqLocVector&
00271 CBl2Seq::GetQueries() const
00272 {
00273 return m_tQueries;
00274 }
00275
00276 inline void
00277 CBl2Seq::SetSubject(const SSeqLoc& subject)
00278 {
00279 x_ResetSubjectDs();
00280 m_tSubjects.clear();
00281 m_tSubjects.push_back(subject);
00282 }
00283
00284 inline const SSeqLoc&
00285 CBl2Seq::GetSubject() const
00286 {
00287 return m_tSubjects.front();
00288 }
00289
00290 inline void
00291 CBl2Seq::SetSubjects(const TSeqLocVector& subjects)
00292 {
00293 x_ResetSubjectDs();
00294 m_tSubjects.clear();
00295 m_tSubjects = subjects;
00296 }
00297
00298 inline const TSeqLocVector&
00299 CBl2Seq::GetSubjects() const
00300 {
00301 return m_tSubjects;
00302 }
00303
00304 inline CBlastOptionsHandle&
00305 CBl2Seq::SetOptionsHandle()
00306 {
00307 mi_bQuerySetUpDone = false;
00308 return *m_OptsHandle;
00309 }
00310
00311 inline const CBlastOptionsHandle&
00312 CBl2Seq::GetOptionsHandle() const
00313 {
00314 return *m_OptsHandle;
00315 }
00316
00317 inline BlastDiagnostics* CBl2Seq::GetDiagnostics() const
00318 {
00319 return mi_pDiagnostics;
00320 }
00321
00322 inline BlastHSPResults* CBl2Seq::GetResults() const
00323 {
00324 return mi_pResults;
00325 }
00326
00327 inline void
00328 CBl2Seq::GetMessages(TSearchMessages& messages) const
00329 {
00330 messages = m_Messages;
00331 }
00332
00333 inline TInterruptFnPtr
00334 CBl2Seq::SetInterruptCallback(TInterruptFnPtr fnptr, void* user_data)
00335 {
00336 swap(m_fnpInterrupt, fnptr);
00337 m_ProgressMonitor.Reset(SBlastProgressNew(user_data));
00338 return fnptr;
00339 }
00340
00341 inline void
00342 CBl2Seq::GetAncillaryResults(CSearchResultSet::TAncillaryVector& retval) const
00343 {
00344 retval = m_AncillaryData;
00345 }
00346
00347 inline void
00348 CBl2Seq::GetFilteredSubjectRegions(vector<TSeqLocInfoVector>& retval) const
00349 {
00350 retval = m_SubjectMasks;
00351 }
00352
00353 END_SCOPE(blast)
00354 END_NCBI_SCOPE
00355
00356
00357
00358 #endif
00359
00360