Skip to content

Commit 0aa623a

Browse files
committed
methyl map
1 parent 3b4eab5 commit 0aa623a

6 files changed

Lines changed: 1206 additions & 24 deletions

File tree

src/delly.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ namespace torali
6565
uint32_t maxThreads;
6666
uint32_t maxReadPerSV;
6767
float flankQuality;
68+
float meiMinFrac;
69+
float trMinFrac;
6870
bool hasExcludeFile;
6971
bool hasVcfFile;
7072
bool hasDumpFile;
@@ -391,6 +393,8 @@ namespace torali
391393
// Run main program
392394
c.aliscore = DnaScore<int>(5, -4, -10, -1);
393395
c.flankQuality = 0.95;
396+
c.meiMinFrac = 0.8;
397+
c.trMinFrac = 0.85;
394398
c.minimumFlankSize = 13;
395399
c.indelsize = 1000;
396400
return dellyRun(c);

src/genotype.h

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <htslib/sam.h>
1414

1515
#include "util.h"
16+
#include "methyl.h"
1617

1718
namespace torali
1819
{
@@ -89,9 +90,9 @@ namespace torali
8990
return -1;
9091
}
9192

92-
template<typename TConfig, typename TJunctionMap, typename TReadCountMap>
93+
template<typename TConfig, typename TJunctionMap, typename TReadCountMap, typename TMethylMap>
9394
inline void
94-
genotypeLR(TConfig& c, std::vector<StructuralVariantRecord>& svs, TJunctionMap& jctMap, TReadCountMap& covMap) {
95+
genotypeLR(TConfig& c, std::vector<StructuralVariantRecord>& svs, TJunctionMap& jctMap, TReadCountMap& covMap, TMethylMap& methylMap) {
9596
typedef std::vector<StructuralVariantRecord> TSVs;
9697
if (svs.empty()) return;
9798

@@ -123,6 +124,12 @@ namespace torali
123124
refAlignedReadCount[file_c].resize(svs.size(), 0);
124125
}
125126

127+
// Methylation
128+
typedef std::vector<MethylAccum> TSVMethylAccum;
129+
typedef std::vector<TSVMethylAccum> TFileMethylAccum;
130+
TFileMethylAccum methylAccum(c.files.size());
131+
for (unsigned int file_c = 0; file_c < c.files.size(); ++file_c) methylAccum[file_c].resize(svs.size());
132+
126133
// Dump file
127134
boost::iostreams::filtering_ostream dumpOut;
128135
if (c.hasDumpFile) {
@@ -221,6 +228,9 @@ namespace torali
221228
if (psTag) ps = bam_aux2i(psTag);
222229
}
223230
std::string sequence;
231+
std::vector<int8_t> methCall;
232+
bool methCallBuilt = false;
233+
bool hasMethyl = false;
224234
for(typename TSVSet::const_iterator it = process.begin(); it != process.end(); ++it) {
225235
int32_t svid = *it;
226236
if ((jctMap[file_c][svid].ref.size() + jctMap[file_c][svid].alt.size()) >= c.maxGenoReadCount) continue;
@@ -293,19 +303,33 @@ namespace torali
293303
// Any confident alignment?
294304
if ((scoreRef > 0.6) || (scoreAlt > 0.6)) {
295305
if (scoreRef > scoreAlt) {
296-
// Account for reference bias
297-
if (++refAlignedReadCount[file_c][svid] % 2) {
298-
uint32_t rq = scoreRef * 35;
299-
if (rq >= c.minGenoQual) {
306+
uint32_t rq = scoreRef * 35;
307+
if (rq >= c.minGenoQual) {
308+
// Methylation for REF-supporting read
309+
if (!methCallBuilt) {
310+
methCallBuilt = true;
311+
hasMethyl = buildMethylCalls(rec, METHYL_PROB_THRESHOLD, methCall);
312+
}
313+
if (hasMethyl) accumulateMethyl(rec, methCall, svs[svid], refIndex, (int32_t)hdr[file_c]->target_len[refIndex], false, candidates, methylAccum[file_c][svid]);
314+
// Account for reference bias
315+
if (++refAlignedReadCount[file_c][svid] % 2) {
300316
uint8_t qual = (uint8_t) std::min(rq, (uint32_t) rec->core.qual);
301317
jctMap[file_c][svid].ref.push_back(qual);
302318
if (hp == 1) jctMap[file_c][svid].hp1ref.push_back(qual);
303319
else if (hp == 2) jctMap[file_c][svid].hp2ref.push_back(qual);
304320
}
305321
}
306322
} else {
323+
// Record ALT support
307324
uint32_t aq = scoreAlt * 35;
308325
if (aq >= c.minGenoQual) {
326+
// Parse methylation for ALT-supporting read
327+
if (!methCallBuilt) {
328+
methCallBuilt = true;
329+
hasMethyl = buildMethylCalls(rec, METHYL_PROB_THRESHOLD, methCall);
330+
}
331+
if (hasMethyl) accumulateMethyl(rec, methCall, svs[svid], refIndex, (int32_t)hdr[file_c]->target_len[refIndex], true, candidates, methylAccum[file_c][svid]);
332+
// Record ALT support
309333
uint8_t qual = (uint8_t) std::min(aq, (uint32_t) rec->core.qual);
310334
if (c.hasDumpFile) {
311335
std::string svidStr(_addID(svs[svid].svt));
@@ -367,6 +391,13 @@ namespace torali
367391
// Clean-up chromosome sequence
368392
if (seq != NULL) free(seq);
369393
}
394+
// Finalize methylation fractions from accumulated read counts
395+
for (unsigned int fc = 0; fc < c.files.size(); ++fc) {
396+
for (uint32_t i = 0; i < svs.size(); ++i) {
397+
finalizeMethylInfo(methylAccum[fc][i], methylMap[fc][i]);
398+
}
399+
}
400+
370401
// Clean-up
371402
fai_destroy(fai);
372403
for(unsigned int file_c = 0; file_c < c.files.size(); ++file_c) {

0 commit comments

Comments
 (0)