1. 程式人生 > >bwa-mem中的ksw演算法到底是怎麼回事兒?

bwa-mem中的ksw演算法到底是怎麼回事兒?

ksw演算法簡介

研究了這麼久bwa-mem演算法,也不知一次啃了ksw這塊硬骨頭,之前沒有好好總結,今天來重點研究一下它。
主要研究的物件是ksw_extend2函式,它是一個單執行緒、非完全匹配的sequence alignment演算法,該演算法基於動態規劃的邏輯,進行資料匹配,由於資料間存在大量相關性,所以不方便並行實現,序列實現有十分耗時,我們的工作就是,把這一塊從原工程中拎出來,並改寫成GPU加速版本。

ksw_extend2

   @param qlen    query length		待匹配段鹼基的query長度
 * @param query   query sequence with 0 <= query[i] < m    //query的指標		
 * @param tlen    target length                               //reference長度
 * @param target  target sequence with 0 <= target[i] < m          //reference資料的指標
 * @param m       number of residue types                           // 鹼基種類=5
 * @param mat     m*m scoring mattrix in one-dimension array      //每個位置的query和target的匹配得分
 * @param gapo    gap open penalty; a gap of length l cost "-(gapo+l*gape)"  //錯配開始的懲罰係數=6
 * @param gape    gap extension penalty       						//錯配繼續的懲罰係數=1
 * @param w       band width					//提前剪枝係數,w =100   匹配位置和beg的最大距離
 * @param         end_bonus                                             end_bonus=5
 * @param         zdrop 							 zdrop=100
 * @param h0      alignment score of upstream sequences   //該seed的初始得分(完全匹配query的鹼基數)
 * @param _qle    (out) length of the query in the alignment     //匹配得到全域性最大得分的鹼基在query的位置
 * @param _tle    (out) length of the target in the alignment   //匹配得到全域性最大得分的鹼基在reference的位置
 * @param _gtle   (out) length of the target if query is fully aligned	//query全部匹配上的target的長度
 * @param _gscore (out) score of the best end-to-end alignment;    //query的端到端匹配得分
 *
 * @return        best semi-local alignment score

int ksw_extend2(int qlen, const uint8_t *query, int tlen, const uint8_t *target, int m, const int8_t *mat,int o_del, int e_del, int o_ins, int e_ins, int w, int end_bonus, int zdrop, int h0, int *qle, int *tle, int *gtle, int *gscore, int *max_off);

其中綠色的四個引數對應上面的gapo和gape兩個引數