1 /* 2 * HHDatabase.h 3 * 4 * Created on: Apr 7, 2014 5 * Author: meiermark 6 */ 7 8 #ifndef HHDATABASE_H_ 9 #define HHDATABASE_H_ 10 11 class HHEntry; 12 class HHDatabaseEntry; 13 class Alignment; 14 class Prefilter; 15 16 #include <cstdlib> 17 18 #include "ffindexdatabase.h" 19 #include "hhutil.h" 20 #include "hash.h" 21 #include "hhhit.h" 22 #include "log.h" 23 #include "hhalignment.h" 24 25 class HHDatabase { 26 public: 27 HHDatabase(); 28 virtual ~HHDatabase(); 29 30 static bool checkDatabaseConflicts(const char* base); 31 32 protected: 33 static void buildDatabaseName(const char* base, const char* extension, 34 const char* suffix, char* databaseName); 35 }; 36 37 class HHblitsDatabase: HHDatabase { 38 public: 39 HHblitsDatabase(const char* base, bool initCs219 = true); 40 ~HHblitsDatabase(); 41 42 void initPrefilter(const std::string& cs_library); 43 void initNoPrefilter(std::vector<HHEntry*>& new_prefilter_hits); 44 void initSelected(std::vector<std::string>& selected_templates, 45 std::vector<HHEntry*>& new_entries); 46 47 void prefilter_db(HMM* q_tmp, Hash<Hit>* previous_hits, const int threads, 48 const int prefilter_gap_open, const int prefilter_gap_extend, 49 const int prefilter_score_offset, const int prefilter_bit_factor, 50 const double prefilter_evalue_thresh, 51 const double prefilter_evalue_coarse_thresh, 52 const int preprefilter_smax_thresh, const int min_prefilter_hits, const int maxnumdb, 53 const float R[20][20], std::vector<HHEntry*>& new_entries, 54 std::vector<HHEntry*>& old_entries); 55 56 char* basename; 57 58 FFindexDatabase* cs219_database; 59 60 FFindexDatabase* a3m_database; 61 FFindexDatabase* hhm_database; 62 63 FFindexDatabase* query_database; 64 65 bool use_compressed; 66 FFindexDatabase* ca3m_database; 67 FFindexDatabase* sequence_database; 68 FFindexDatabase* header_database; 69 70 private: 71 void getEntriesFromNames(std::vector<std::pair<int, std::string> >& names, 72 std::vector<HHEntry*>& entries); 73 bool checkAndBuildCompressedDatabase(const char* base); 74 75 Prefilter* prefilter; 76 }; 77 78 class HHEntry { 79 public: 80 int sequence_length; 81 82 HHEntry(int sequence_length); 83 virtual ~HHEntry(); 84 getTemplateA3M(Parameters & par,float * pb,const float S[20][20],const float Sim[20][20],Alignment & tali)85 virtual void getTemplateA3M(Parameters& par, float* pb, const float S[20][20], 86 const float Sim[20][20], Alignment& tali) {}; getTemplateHMM(Parameters & par,char use_global_weights,const float qsc,int & format,float * pb,const float S[20][20],const float Sim[20][20],HMM * t)87 virtual void getTemplateHMM(Parameters& par, char use_global_weights, const float qsc, int& format, 88 float* pb, const float S[20][20], const float Sim[20][20], HMM* t) {}; 89 getName()90 virtual char* getName() {return NULL;}; 91 92 protected: 93 void getTemplateHMM(FILE* inf, char* name, Parameters& par, char use_global_weights, 94 const float qsc, int& format, float* pb, const float S[20][20], 95 const float Sim[20][20], HMM* t); 96 }; 97 98 class HHDatabaseEntry : public HHEntry { 99 public: 100 HHDatabaseEntry(int sequence_length, HHblitsDatabase* hhdatabase, FFindexDatabase* ffdatabase, ffindex_entry_t* entry); 101 ~HHDatabaseEntry(); 102 103 void getTemplateA3M(Parameters& par, float* pb, const float S[20][20], 104 const float Sim[20][20], Alignment& tali); 105 void getTemplateHMM(Parameters& par, char use_global_weights, const float qsc, int& format, 106 float* pb, const float S[20][20], const float Sim[20][20], HMM* t); 107 108 char* getName(); 109 110 private: 111 HHblitsDatabase* hhdatabase; 112 FFindexDatabase* ffdatabase; 113 ffindex_entry_t* entry; 114 }; 115 116 class HHFileEntry : public HHEntry { 117 public: 118 HHFileEntry(const char* file, int sequence_length); 119 ~HHFileEntry(); 120 121 void getTemplateA3M(Parameters& par, float* pb, const float S[20][20], 122 const float Sim[20][20], Alignment& tali); 123 void getTemplateHMM(Parameters& par, char use_global_weights, const float qsc, int& format, 124 float* pb, const float S[20][20], const float Sim[20][20], HMM* t); 125 126 char* getName(); 127 128 private: 129 char* file; 130 }; 131 132 struct HHDatabaseEntryCompare { operatorHHDatabaseEntryCompare133 bool operator()(const HHEntry* l, const HHEntry* r) { 134 return (*l).sequence_length > (*r).sequence_length; 135 } 136 }; 137 138 int getMaxTemplateLength(std::vector<HHEntry*>& entries); 139 140 #endif /* HHDATABASE_H_ */ 141