/* PE functions using fragment_prev and fragment_next */ Alignment Filter::one_end_anchored_filter(Alignment& aln){ if (aln.fragment_prev().name() != ""){ if (aln.path().name() == "" || aln.fragment_prev().path().name() == ""){ inverse ? Alignment() : aln; } else{ inverse ? aln : Alignment(); } } else{ return inverse ? aln : Alignment(); } }
Alignment Filter::interchromosomal_filter(Alignment& aln){ bool fails = aln.path().name() != aln.fragment_prev().path().name(); if (fails){ return inverse ? Alignment() : aln; } else{ return inverse ? aln : Alignment(); } }
Alignment Filter::orientation_filter(Alignment& aln){ bool f_rev = false; bool s_rev = false; Path f_path = aln.path(); Path s_path = aln.fragment_prev().path(); for (int i = 0; i < f_path.mapping_size(); i++){ if (f_path.mapping(i).position().is_reverse()){ f_rev = true; } } for (int j = 0; j < s_path.mapping_size(); j++){ if (s_path.mapping(j).position().is_reverse()){ s_rev = true; } } if (f_rev & s_rev){ return inverse ? Alignment() : aln; } else{ return inverse ? aln : Alignment(); } }