From 153e05399d6b5babfc0483179a2bc97d8a3ef726 Mon Sep 17 00:00:00 2001 From: zzh Date: Thu, 21 Nov 2024 23:16:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=88=E5=8E=BB=E9=99=A4=E4=BA=86=E4=B8=80?= =?UTF-8?q?=E9=83=A8=E5=88=86singleton=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sam/markdups/pipeline_md.cpp | 35 ++++++++++++-------------------- src/sam/markdups/pipeline_md.h | 4 ---- 2 files changed, 13 insertions(+), 26 deletions(-) diff --git a/src/sam/markdups/pipeline_md.cpp b/src/sam/markdups/pipeline_md.cpp index 5877929..d731f76 100644 --- a/src/sam/markdups/pipeline_md.cpp +++ b/src/sam/markdups/pipeline_md.cpp @@ -322,20 +322,17 @@ static inline void refreshPairDupIdx(DPSet &dupIdx, MDSet &opt // 用来分别处理dup和optical dup static void refeshTaskDupInfo(DPSet &dupIdx, MDSet &opticalDupIdx, DPSet &repIdx, - MDSet &singletonIdx, MDSet ¬DupIdx, MDSet ¬OpticalDupIdx, - MDSet ¬RepIdx, MDSet ¬SingletonIdx, DPSet &latterDupIdx, + MDSet ¬DupIdx, MDSet ¬OpticalDupIdx, MDSet ¬RepIdx, + MDSet ¬SingletonIdx, DPSet &latterDupIdx, MDSet &latterOpticalDupIdx, DPSet &latterRepIdx, - MDSet &latterSingletonIdx, MDSet &latterNotDupIdx, - MDSet &latterNotOpticalDupIdx, MDSet &latterNotRepIdx, - MDSet &latterNotSingletonIdx) { + MDSet &latterNotDupIdx, MDSet &latterNotOpticalDupIdx, + MDSet &latterNotRepIdx) { for (auto idx : dupIdx) latterDupIdx.insert(idx); for (auto idx : opticalDupIdx) latterOpticalDupIdx.insert(idx); for (auto idx : repIdx) latterRepIdx.insert(idx); - for (auto idx : singletonIdx) latterSingletonIdx.insert(idx); for (auto idx : notDupIdx) latterNotDupIdx.insert(idx); for (auto idx : notOpticalDupIdx) latterNotOpticalDupIdx.insert(idx); for (auto idx : notRepIdx) latterNotRepIdx.insert(idx); - for (auto idx : notSingletonIdx) latterNotSingletonIdx.insert(idx); } /* 最后合并数据并排序 */ @@ -506,7 +503,6 @@ static void doMarkDup(PipelineArg &pipeArg) { mdData.pairDupIdx.clear(); mdData.pairOpticalDupIdx.clear(); mdData.pairRepIdx.clear(); - mdData.pairSingletonIdx.clear(); tm_arr[5].acc_start(); auto tmpPtr = mdData.dataPtr; @@ -516,7 +512,7 @@ static void doMarkDup(PipelineArg &pipeArg) { SortMarkData &smd = *(SortMarkData *)mdData.dataPtr; // 先处理 pair processPairs(smd.pairs, &mdData.pairDupIdx, &mdData.pairOpticalDupIdx, &mdData.pairRepIdx, - &mdData.pairSingletonIdx); + nullptr); // 再处理frag processFrags(smd.frags, &mdData.fragDupIdx); } @@ -543,12 +539,10 @@ static void refreshMarkDupData(DPSet &dupIdx, MDSet &opticalDu refreshDupIdx(dupIdx, lp.pairDupIdx, p.pairDupIdx); refreshDupIdx(opticalDupIdx, lp.pairOpticalDupIdx, p.pairOpticalDupIdx); refreshDupIdx(repIdx, lp.pairRepIdx, p.pairRepIdx); - refreshDupIdx(singletonIdx, lp.pairSingletonIdx, p.pairSingletonIdx); refreshNotDupIdx(notDupIdx, lp.pairDupIdx, p.pairDupIdx); refreshNotDupIdx(notOpticalDupIdx, lp.pairOpticalDupIdx, p.pairOpticalDupIdx); refreshNotDupIdx(notRepIdx, lp.pairRepIdx, p.pairRepIdx); - refreshNotDupIdx(notSingletonIdx, lp.pairSingletonIdx, p.pairSingletonIdx); } // for step-5 sort @@ -751,12 +745,10 @@ static void doIntersect(PipelineArg &pipeArg) { auto taskSeq = e.first; auto &t = e.second; if (taskSeq < lp.taskSeq) { - refeshTaskDupInfo(t.dupIdx, t.opticalDupIdx, t.repIdx, t.singletonIdx, t.notDupIdx, t.notOpticalDupIdx, - t.notRepIdx, t.notSingletonIdx, g.latterDupIdxArr[taskSeq], - g.latterOpticalDupIdxArr[taskSeq], g.latterRepIdxArr[taskSeq], - g.latterSingletonIdxArr[taskSeq], g.latterNotDupIdxArr[taskSeq], - g.latterNotOpticalDupIdxArr[taskSeq], g.latterNotRepIdxArr[taskSeq], - g.latterNotSingletonIdxArr[taskSeq]); + refeshTaskDupInfo(t.dupIdx, t.opticalDupIdx, t.repIdx, t.notDupIdx, t.notOpticalDupIdx, t.notRepIdx, + t.notSingletonIdx, g.latterDupIdxArr[taskSeq], g.latterOpticalDupIdxArr[taskSeq], + g.latterRepIdxArr[taskSeq], g.latterNotDupIdxArr[taskSeq], + g.latterNotOpticalDupIdxArr[taskSeq], g.latterNotRepIdxArr[taskSeq]); } else if (taskSeq == lp.taskSeq) { refreshMarkDupData(t.dupIdx, t.opticalDupIdx, t.repIdx, t.singletonIdx, t.notDupIdx, t.notOpticalDupIdx, t.notRepIdx, t.notSingletonIdx, lp, p); @@ -1033,11 +1025,10 @@ static void mergeAllTask(PipelineArg &pipeArg) { for (auto &e : taskChanged) { auto taskSeq = e.first; auto &t = e.second; - refeshTaskDupInfo(t.dupIdx, t.opticalDupIdx, t.repIdx, t.singletonIdx, t.notDupIdx, t.notOpticalDupIdx, - t.notRepIdx, t.notSingletonIdx, g.latterDupIdxArr[taskSeq], g.latterOpticalDupIdxArr[taskSeq], - g.latterRepIdxArr[taskSeq], g.latterSingletonIdxArr[taskSeq], g.latterNotDupIdxArr[taskSeq], - g.latterNotOpticalDupIdxArr[taskSeq], g.latterNotRepIdxArr[taskSeq], - g.latterNotSingletonIdxArr[taskSeq]); + refeshTaskDupInfo(t.dupIdx, t.opticalDupIdx, t.repIdx, t.notDupIdx, t.notOpticalDupIdx, t.notRepIdx, + t.notSingletonIdx, g.latterDupIdxArr[taskSeq], g.latterOpticalDupIdxArr[taskSeq], + g.latterRepIdxArr[taskSeq], g.latterNotDupIdxArr[taskSeq], + g.latterNotOpticalDupIdxArr[taskSeq], g.latterNotRepIdxArr[taskSeq]); } g.unpairedPosArr.clear(); diff --git a/src/sam/markdups/pipeline_md.h b/src/sam/markdups/pipeline_md.h index 47859d6..8e48a5d 100644 --- a/src/sam/markdups/pipeline_md.h +++ b/src/sam/markdups/pipeline_md.h @@ -42,7 +42,6 @@ struct MarkDupData { MDSet pairOpticalDupIdx; // optical冗余read的索引 DPSet fragDupIdx; // frag的冗余read的索引 DPSet pairRepIdx; // pair的dupset代表read的索引 - MDSet pairSingletonIdx; // 某位置只有一对read的所有read pair个数 volatile void *dataPtr; // SortMarkData pointer }; @@ -55,17 +54,14 @@ struct IntersectData { vector> dupIdxArr; vector> opticalDupIdxArr; vector> repIdxArr; - vector> singletonIdxArr; // 用来存放后续计算的数据 vector> latterDupIdxArr; vector> latterOpticalDupIdxArr; vector> latterRepIdxArr; - vector> latterSingletonIdxArr; vector> latterNotDupIdxArr; vector> latterNotOpticalDupIdxArr; vector> latterNotRepIdxArr; - vector> latterNotSingletonIdxArr; }; // 记录流水线状态,task的序号,以及某阶段是否结束