int getMaxClipLen( SamRecord & sam_rec ) { Cigar * myCigar = sam_rec.getCigarInfo(); int begin_clip = myCigar->getNumBeginClips(); int end_clip = myCigar->getNumEndClips(); if (begin_clip >= end_clip) return begin_clip; else return -end_clip; }
void Sites::addToCurrentCluster( vector<bool> & is_in_coord, SingleSite & new_site, SamRecord & rec ) { if (is_in_coord.size() != NMEI) morphError("[Sites::setNewCluster] is_in_coord size error"); // update breakpoint int old_evi = new_site.evidence; float a1 = (float)1 / float(old_evi+1); int ep = getEstimatedBreakPoint(rec); new_site.breakp = round( a1 * (float)ep + (float)new_site.breakp * (1-a1)); new_site.evidence++; // update position if (rec.get1BasedPosition() < new_site.start) new_site.start = rec.get1BasedPosition(); else if (rec.get1BasedAlignmentEnd() > new_site.end) new_site.end = rec.get1BasedAlignmentEnd(); // update info if (rec.getFlag() & 0x10) { if (new_site.right_clip_only) { Cigar * myCigar = rec.getCigarInfo(); int begin_clip = myCigar->getNumBeginClips(); if ( begin_clip < MIN_CLIP/2) new_site.right_clip_only = 0; } for(int m=0; m<NMEI; m++) { if (is_in_coord[m]) new_site.right[m]++; } } else { if (new_site.left_clip_only) { Cigar * myCigar = rec.getCigarInfo(); int end_clip = myCigar->getNumEndClips(); if (end_clip < MIN_CLIP/2) new_site.left_clip_only = 0; } for( int m=0; m<NMEI; m++) { if (is_in_coord[m]) new_site.left[m]++; } } }
void Sites::setNewCluster( vector<bool> & is_in_coord, SingleSite & new_site, SamRecord & rec ) { if (is_in_coord.size() != NMEI) morphError("[Sites::setNewCluster] is_in_coord size error"); // set info new_site.breakp = getEstimatedBreakPoint(rec); new_site.rcount = 1; new_site.evidence = 1; for(int m=0; m<NMEI; m++) { new_site.left[m] = 0; new_site.right[m] = 0; } new_site.left_clip_only = 1; new_site.right_clip_only = 1; new_site.depth = current_depth; new_site.depth_add = 1; // set position & mtype if ( rec.getFlag() & 0x10 ) { // right anchor new_site.start = rec.get1BasedPosition(); new_site.end = rec.get1BasedAlignmentEnd(); Cigar * myCigar = rec.getCigarInfo(); int begin_clip = myCigar->getNumBeginClips(); if ( begin_clip < MIN_CLIP/2) new_site.right_clip_only = 0; for(int m=0; m<NMEI; m++) { if (is_in_coord[m]) new_site.right[m] = 1; } } else { new_site.start = rec.get1BasedPosition(); new_site.end = rec.get1BasedAlignmentEnd(); Cigar * myCigar = rec.getCigarInfo(); int end_clip = myCigar->getNumEndClips(); if (end_clip < MIN_CLIP/2) new_site.left_clip_only = 0; for(int m=0; m<NMEI; m++) { if (is_in_coord[m]) new_site.left[m] = 1; } } }