BWA-FastAlign/mate_sw.h

88 lines
2.6 KiB
C
Raw Normal View History

/*
Description: mate sw
Copyright : All right reserved by ICT
Author : Zhang Zhonghai
Date : 2026/01/12
*/
#pragma once
#include <stdint.h>
#include "ksw_align_avx.h"
#include "kvec.h"
// 需要做mate sw的read
typedef struct {
int is_rev; // seq是否在反向互补链上
int xtra;
int64_t rb, re; // ref的起始截止位置左闭右开
int64_t seq_id; // 对应的当前数据块的seq id
int aj; // 对应的pair-end的第几个aln;
int to; // task order,因为u8和i16分开放入的但是他们也是有顺序的这个用来排序
kswr_avx_t aln;
} msw_task_t;
// mate sw task数组
typedef kvec_t(msw_task_t) msw_task_v;
// mate sw task的指针数组
typedef kvec_t(msw_task_t*) msw_task_ptr_v;
//////////////////////////////////////////////
// 用来存放获取的mate sw阶段的ref序列
typedef kvec_t(byte_v) byte_vv;
// 记录一些用到的数据统计比如最长ref长度最长seq长度等
typedef struct {
int max_seq_len;
int max_ref_len; // mate sw里的最长的ref长度
} msw_stats_t;
// 用于记录参与计算的query只保存指针
typedef struct {
uint8_t* seq; // 只是指向seq的指针
int l_seq; // seq长度
} msw_seq_t;
typedef kvec_t(msw_seq_t) msw_seq_v;
// 用于记录参与计算的ref只保存指针
typedef struct {
uint8_t* ref;
int l_ref;
} msw_ref_t;
typedef kvec_t(msw_ref_t) msw_ref_v;
// 记录结果
typedef kvec_t(kswr_avx_t) msw_kswr_v;
////////////////////////////////////////////
// mate sw相关的所有数据
typedef struct {
msw_task_v* t_msw_tasks_u8; // 线程内收集需要做mate sw的任务的数据
msw_task_v* t_msw_tasks_i16;
msw_task_ptr_v p_msw_tasks_u8; // 线程共享的mate sw task指针
msw_task_ptr_v p_msw_tasks_i16;
msw_buf_t* t_msw_buf; // 每个线程一个mate sw 缓存
msw_stats_t* t_msw_stats; // 每个线程一个,统计信息
msw_stats_t p_msw_stats; //只是用来开辟空间
byte_vv* t_msw_ref_buf; // ref的缓存
byte_vv* t_msw_seq_buf; // seq的缓存因为有些seq需要反向互补而且用了buf之后第二阶段反转不需要再还原了
msw_ref_v* t_msw_1_refs; // msw 第一阶段数据
msw_seq_v* t_msw_1_seqs;
int_v* t_msw_1_xtras;
msw_kswr_v* t_msw_1_kswrs;
msw_ref_v* t_msw_2_refs; // msw 第一阶段数据
msw_seq_v* t_msw_2_seqs;
int_v* t_msw_2_xtras;
msw_kswr_v* t_msw_2_kswrs;
} msw_data_t;
void init_msw_data(msw_data_t* msw, int n_threads, int msw_batch_size);