- int sid = b->core.tid + 1;
- assert(sid == hit->getSid());
- assert(sid == b2->core.tid + 1);
- const Transcript& transcript = transcripts.getTranscriptAt(sid);
-
- if (transcripts.getType() == 0) {
- int pos = b->core.pos, pos2 = b2->core.pos;
- int readlen = b->core.l_qseq, readlen2 = b2->core.l_qseq;
- uint8_t *qname = b->data, *seq = bam1_seq(b), *qual = bam1_qual(b);
- uint8_t *qname2 = b2->data, *seq2 = bam1_seq(b2), *qual2 = bam1_qual(b2);
- std::vector<uint8_t> data, data2;
-
- data.clear();
- data2.clear();
-
- iter = refmap.find(transcript.getSeqName());
- assert(iter != refmap.end());
- b->core.tid = iter->second; b->core.mtid = iter->second;
- b2->core.tid = iter->second; b2->core.mtid = iter->second;
-
- uint16_t rstrand = b->core.flag & 0x0010;
- b->core.flag = b->core.flag - (b->core.flag & 0x0010) - (b->core.flag & 0x0020);
- b2->core.flag = b2->core.flag - (b2->core.flag & 0x0010) - (b2->core.flag & 0x0020);
-
- uint16_t add, add2;
- if ((!rstrand && transcript.getStrand() == '+') || (rstrand && transcript.getStrand() == '-')) {
- add = 0x0020; add2 = 0x0010;
- }
- else {
- add = 0x0010; add2 = 0x0020;
- }
- b->core.flag += add;
- b2->core.flag += add2;
-
- b->core.qual = b2->core.qual = 255;
-
- //Do I really need this? The insert size uses transcript coordinates
- if (transcript.getStrand() == '-') {
- b->core.isize = -b->core.isize;
- b2->core.isize = -b2->core.isize;
- }
-
- push_qname(qname, b->core.l_qname, data);
- push_qname(qname2, b2->core.l_qname, data2);
- int core_pos, core_n_cigar;
- tr2chr(transcript, pos + 1, pos + readlen, core_pos, core_n_cigar, data);
- if (core_pos < 0) b->core.tid = -1;
- b->core.pos = core_pos; b->core.n_cigar = core_n_cigar;
- tr2chr(transcript, pos2 + 1, pos2 + readlen2, core_pos, core_n_cigar, data2);
- if (core_pos < 0) b2->core.tid = -1;
- b2->core.pos = core_pos; b2->core.n_cigar = core_n_cigar;
- b->core.mpos = b2->core.pos;
- b2->core.mpos = b->core.pos;
- push_seq(seq, readlen, transcript.getStrand(), data);
- push_seq(seq2, readlen2, transcript.getStrand(), data2);
- push_qual(qual, readlen, transcript.getStrand(), data);
- push_qual(qual2, readlen2, transcript.getStrand(), data2);
-
- free(b->data);
- b->m_data = b->data_len = data.size() + 7; // 7 extra bytes for ZW tag
- b->l_aux = 7;
- b->data = (uint8_t*)malloc(b->m_data);
- for (int i = 0; i < b->data_len; i++) b->data[i] = data[i];
-
- free(b2->data);
- b2->m_data = b2->data_len = data2.size() + 7; // 7 extra bytes for ZW tag
- b2->l_aux = 7;
- b2->data = (uint8_t*)malloc(b2->m_data);
- for (int i = 0; i < b2->data_len; i++) b2->data[i] = data2[i];
-
- b->core.bin = bam_reg2bin(b->core.pos, bam_calend(&(b->core), bam1_cigar(b)));
- b2->core.bin = bam_reg2bin(b2->core.pos, bam_calend(&(b2->core), bam1_cigar(b2)));
- }
- else {
- b->m_data = b->data_len = b->data_len - b->l_aux + 7; // 7 extra bytes for ZW tag
- b->l_aux = 7;
- b->data = (uint8_t*)realloc(b->data, b->m_data);
-
- b2->m_data = b2->data_len = b2->data_len - b2->l_aux + 7; // 7 extra bytes for ZW tag
- b2->l_aux = 7;
- b2->data = (uint8_t*)realloc(b2->data, b2->m_data);
- }
-
- if (cqname != bam1_qname(b)) {
- if (!hmap.empty()) {
- for (hmapIter = hmap.begin(); hmapIter != hmap.end(); hmapIter++) {
- bam1_t *tmp_b = hmapIter->first.b;
- bam1_t *tmp_b2 = hmapIter->first.b2;