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
00034 #ifndef ALGO_BLAST_API___BLAST_AUX__HPP
00035 #define ALGO_BLAST_API___BLAST_AUX__HPP
00036
00037 #include <corelib/ncbistd.hpp>
00038 #include <corelib/ddumpable.hpp>
00039 #include <corelib/ncbifile.hpp>
00040 #include <corelib/metareg.hpp>
00041 #include <objects/seqalign/Seq_align_set.hpp>
00042 #include <objects/seqloc/Seq_id.hpp>
00043 #include <objects/seqloc/Seq_interval.hpp>
00044 #include <util/range.hpp>
00045 #include <objects/seq/seqlocinfo.hpp>
00046
00047
00048 #include <algo/blast/api/blast_types.hpp>
00049 #include <algo/blast/api/blast_exception.hpp>
00050 #include <algo/blast/core/blast_query_info.h>
00051 #include <algo/blast/core/blast_util.h>
00052 #include <algo/blast/core/blast_options.h>
00053 #include <algo/blast/core/blast_filter.h>
00054 #include <algo/blast/core/blast_extend.h>
00055 #include <algo/blast/core/blast_gapalign.h>
00056 #include <algo/blast/core/blast_hits.h>
00057 #include <algo/blast/core/blast_psi.h>
00058 #include <algo/blast/core/blast_hspstream.h>
00059
00060 BEGIN_NCBI_SCOPE
00061
00062 BEGIN_SCOPE(objects)
00063 class CSeq_loc;
00064 class CPacked_seqint;
00065 END_SCOPE(objects)
00066
00067 template <>
00068 struct Deleter<BlastHSPStream>
00069 {
00070 static void Delete(BlastHSPStream* p)
00071 { BlastHSPStreamFree(p); }
00072 };
00073
00074
00075
00076
00077
00078
00079 BEGIN_SCOPE(blast)
00080
00081
00082
00083
00084
00085
00086 #define TYPEDEF_AUTOPTR_CDELETER(type) \
00087 typedef AutoPtr<type, CDeleter<type> > TAuto ## type ## Ptr
00088
00089
00090 #define TYPEDEF_AUTOPTR_ARRAYDELETER(type) \
00091 typedef AutoPtr<type, ArrayDeleter<type> > TAuto ## type ## ArrayPtr
00092
00093 #ifndef SKIP_DOXYGEN_PROCESSING
00094
00095 TYPEDEF_AUTOPTR_CDELETER(Uint1);
00096
00097 TYPEDEF_AUTOPTR_CDELETER(Char);
00098
00099 TYPEDEF_AUTOPTR_ARRAYDELETER(Uint1);
00100 #endif
00101
00102
00103
00104
00105
00106 string Blast_ProgramNameFromType(EBlastProgramType program);
00107
00108
00109
00110
00111
00112
00113 BlastSeqLoc*
00114 CSeqLoc2BlastSeqLoc(const objects::CSeq_loc* slp);
00115
00116
00117
00118
00119
00120
00121
00122
00123 TAutoUint1ArrayPtr
00124 FindGeneticCode(int genetic_code);
00125
00126
00127
00128
00129 class CFrameFinder : public unary_function<CRef<CSeqLocInfo>, bool>
00130 {
00131 public:
00132
00133 typedef CSeqLocInfo::ETranslationFrame ETranslationFrame;
00134
00135
00136
00137 CFrameFinder(ETranslationFrame frame) : m_Frame(frame) {}
00138
00139
00140
00141
00142 bool operator() (const CRef<CSeqLocInfo>& seqlocinfo) const {
00143 if (seqlocinfo.Empty()) {
00144 NCBI_THROW(CBlastException, eInvalidArgument,
00145 "Empty CRef<CSeqLocInfo>!");
00146 }
00147 return (seqlocinfo->GetFrame() == m_Frame) ? true : false;
00148 }
00149 private:
00150 ETranslationFrame m_Frame;
00151 };
00152
00153
00154
00155
00156
00157 bool IsLocalId(const objects::CSeq_id* seqid);
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169 TMaskedQueryRegions
00170 PackedSeqLocToMaskedQueryRegions(CConstRef<objects::CSeq_loc> sloc,
00171 EBlastProgramType program,
00172 bool assume_both_strands = false);
00173
00174
00175
00176
00177
00178 CRef<objects::CSeq_loc>
00179 MaskedQueryRegionsToPackedSeqLoc( const TMaskedQueryRegions & sloc);
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190 void
00191 Blast_GetSeqLocInfoVector(EBlastProgramType program,
00192 const objects::CPacked_seqint& queries,
00193 const BlastMaskLoc* mask,
00194 TSeqLocInfoVector& mask_v);
00195
00196
00197
00198 class CAutomaticGenCodeSingleton {
00199 public:
00200
00201 CAutomaticGenCodeSingleton();
00202
00203 ~CAutomaticGenCodeSingleton();
00204 private:
00205
00206
00207 static Uint4 m_RefCounter;
00208 };
00209
00210
00211
00212
00213
00214
00215 #define DECLARE_AUTO_CLASS_WRAPPER(struct_name, free_func) \
00216 \
00217 \
00218 class C##struct_name : public CObject \
00219 { \
00220 public: \
00221 C##struct_name() : m_Ptr(NULL) {} \
00222 C##struct_name(struct_name* p) : m_Ptr(p) {} \
00223 virtual ~C##struct_name() { Reset(); } \
00224 void Reset(struct_name* p = NULL) { \
00225 if (m_Ptr) { \
00226 free_func(m_Ptr); \
00227 } \
00228 m_Ptr = p; \
00229 } \
00230 struct_name* Release() { \
00231 struct_name* retval = m_Ptr; \
00232 m_Ptr = NULL; \
00233 return retval; \
00234 } \
00235 struct_name* Get() const { return m_Ptr; } \
00236 operator struct_name *() { return m_Ptr; } \
00237 operator struct_name *() const { return m_Ptr; } \
00238 struct_name* operator->() { return m_Ptr; } \
00239 struct_name* operator->() const { return m_Ptr; } \
00240 struct_name** operator&() { return &m_Ptr; } \
00241 virtual void DebugDump(CDebugDumpContext ddc, unsigned int depth) const;\
00242 private: \
00243 struct_name* m_Ptr; \
00244 }
00245
00246 #ifndef SKIP_DOXYGEN_PROCESSING
00247
00248
00249
00250 DECLARE_AUTO_CLASS_WRAPPER(BLAST_SequenceBlk, BlastSequenceBlkFree);
00251
00252 DECLARE_AUTO_CLASS_WRAPPER(BlastQueryInfo, BlastQueryInfoFree);
00253 DECLARE_AUTO_CLASS_WRAPPER(QuerySetUpOptions, BlastQuerySetUpOptionsFree);
00254
00255 DECLARE_AUTO_CLASS_WRAPPER(LookupTableOptions, LookupTableOptionsFree);
00256 DECLARE_AUTO_CLASS_WRAPPER(LookupTableWrap, LookupTableWrapFree);
00257
00258 DECLARE_AUTO_CLASS_WRAPPER(BlastInitialWordOptions,
00259 BlastInitialWordOptionsFree);
00260 DECLARE_AUTO_CLASS_WRAPPER(BlastInitialWordParameters,
00261 BlastInitialWordParametersFree);
00262
00263 DECLARE_AUTO_CLASS_WRAPPER(Blast_ExtendWord, BlastExtendWordFree);
00264 DECLARE_AUTO_CLASS_WRAPPER(BlastExtensionOptions, BlastExtensionOptionsFree);
00265 DECLARE_AUTO_CLASS_WRAPPER(BlastExtensionParameters, BlastExtensionParametersFree);
00266
00267 DECLARE_AUTO_CLASS_WRAPPER(BlastHitSavingOptions, BlastHitSavingOptionsFree);
00268 DECLARE_AUTO_CLASS_WRAPPER(BlastHitSavingParameters,
00269 BlastHitSavingParametersFree);
00270
00271 DECLARE_AUTO_CLASS_WRAPPER(PSIBlastOptions, PSIBlastOptionsFree);
00272 DECLARE_AUTO_CLASS_WRAPPER(BlastDatabaseOptions, BlastDatabaseOptionsFree);
00273
00274 DECLARE_AUTO_CLASS_WRAPPER(BlastScoreBlk, BlastScoreBlkFree);
00275 DECLARE_AUTO_CLASS_WRAPPER(BlastScoringOptions, BlastScoringOptionsFree);
00276 DECLARE_AUTO_CLASS_WRAPPER(BlastScoringParameters, BlastScoringParametersFree);
00277
00278 DECLARE_AUTO_CLASS_WRAPPER(BlastEffectiveLengthsOptions,
00279 BlastEffectiveLengthsOptionsFree);
00280 DECLARE_AUTO_CLASS_WRAPPER(BlastEffectiveLengthsParameters,
00281 BlastEffectiveLengthsParametersFree);
00282
00283 DECLARE_AUTO_CLASS_WRAPPER(BlastGapAlignStruct, BLAST_GapAlignStructFree);
00284 DECLARE_AUTO_CLASS_WRAPPER(BlastHSPResults, Blast_HSPResultsFree);
00285
00286 DECLARE_AUTO_CLASS_WRAPPER(PSIMsa, PSIMsaFree);
00287 DECLARE_AUTO_CLASS_WRAPPER(PSIMatrix, PSIMatrixFree);
00288 DECLARE_AUTO_CLASS_WRAPPER(PSIDiagnosticsRequest, PSIDiagnosticsRequestFree);
00289 DECLARE_AUTO_CLASS_WRAPPER(PSIDiagnosticsResponse, PSIDiagnosticsResponseFree);
00290
00291 DECLARE_AUTO_CLASS_WRAPPER(BlastSeqSrc, BlastSeqSrcFree);
00292 DECLARE_AUTO_CLASS_WRAPPER(BlastSeqSrcIterator, BlastSeqSrcIteratorFree);
00293 DECLARE_AUTO_CLASS_WRAPPER(Blast_Message, Blast_MessageFree);
00294
00295 DECLARE_AUTO_CLASS_WRAPPER(BlastMaskLoc, BlastMaskLocFree);
00296 DECLARE_AUTO_CLASS_WRAPPER(BlastSeqLoc, BlastSeqLocFree);
00297
00298 DECLARE_AUTO_CLASS_WRAPPER(SBlastProgress, SBlastProgressFree);
00299
00300 #endif
00301
00302 END_SCOPE(blast)
00303 END_NCBI_SCOPE
00304
00305
00306
00307 #endif
00308
00309