module RGFATools::LinearPaths
Methods for the RGFA
class, which involve a traversal of the graph following links
Constants
- LN
- Redefined
@!method merge_linear_paths(**options)
Merge all linear paths in the graph, i.e. paths of segments without extra-branches @!macro merge_more @!macro merge_lim @!macro merge_options @return [RGFA] self
Private Instance Methods
add_segment_to_merged_with_rgfatools(merged, segment, reversed, cut, init, options)
click to toggle source
# File lib/rgfatools/linear_paths.rb, line 95 def add_segment_to_merged_with_rgfatools(merged, segment, reversed, cut, init, options) if !options[:enable_tracking] and (options[:disable_tracking] or !@extensions_enabled) return add_segment_to_merged_without_rgfatools(merged, segment, reversed, cut, init, options) end s = (reversed ? segment.sequence.rc[cut..-1] : segment.sequence[cut..-1]) n = (reversed ? reverse_segment_name(segment.name, "_") : segment.name.to_s) rn = (reversed ? reverse_pos_array(segment.rn, segment.LN) : segment.rn) mp = (reversed ? reverse_pos_array(segment.mp, segment.LN) : segment.mp) mp = [1, segment.LN] if mp.nil? and segment.LN if segment.or.nil? o = n else o = (reversed ? reverse_segment_name(segment.or, ",") : segment.or) end if init merged.sequence = s merged.name = options[:merged_name].nil? ? n : options[:merged_name] merged.LN = segment.LN merged.rn = rn merged.or = o merged.mp = mp else (segment.sequence == "*") ? (merged.sequence = "*") : (merged.sequence += s) merged.name = "#{merged.name}_#{n}" if options[:merged_name].nil? if merged.LN if rn rn = rn.map {|pos| pos - cut + merged.LN} merged.rn = merged.rn.nil? ? rn : merged.rn + rn end if mp and merged.mp merged.mp += mp.map {|pos| pos - cut + merged.LN} end segment.LN ? merged.LN += (segment.LN - cut) : merged.LN = nil else merged.mp = nil end merged.or = merged.or.nil? ? o : "#{merged.or},#{o}" end end
reverse_pos_array(pos_array, lastpos)
click to toggle source
# File lib/rgfatools/linear_paths.rb, line 90 def reverse_pos_array(pos_array, lastpos) return nil if pos_array.nil? or lastpos.nil? pos_array.map {|pos| lastpos - pos + 1}.reverse end
reverse_segment_name(name, separator)
click to toggle source
# File lib/rgfatools/linear_paths.rb, line 77 def reverse_segment_name(name, separator) name.to_s.split(separator).map do |part| openp = part[0] == "(" part = part[1..-1] if openp closep = part[-1] == ")" part = part[0..-2] if closep part = (part[-1] == "^") ? part[0..-2] : part+"^" part += ")" if openp part = "(#{part}" if closep part end.reverse.join(separator) end