bwa-mem中的ksw演算法到底是怎麼回事兒?
阿新 • • 發佈:2018-12-24
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兩個引數