Class: SpiceKernelHelper
- Inherits:
-
Object
- Object
- SpiceKernelHelper
- Defined in:
- lib/spice_utils.rb
Overview
The SpiceKernelHelper class is used to parse out mk files.
LROC mk files, as a whole, wayyy blow past the 1000 file handle limit.
This pares it down to only the kernels which we need.
This file is already 'required' when you run 'require "spice"'
Instance Attribute Summary (collapse)
-
- (Object) base_kernels
readonly
Returns the value of attribute base_kernels.
Instance Method Summary (collapse)
-
- (Array<String>) detail_kernels(time)
Return kernels that cover a specified time.
-
- (SpiceKernelHelper) initialize
constructor
A new instance of SpiceKernelHelper.
-
- (Object) parse(file)
Parse an mk kernel and save kernel information that can be retrieved with #base_kernels or #detail_kernels.
Constructor Details
- (SpiceKernelHelper) initialize
Returns a new instance of SpiceKernelHelper
44 45 46 47 |
# File 'lib/spice_utils.rb', line 44 def initialize @base_kernels = [] @detail_kernels = [] end |
Instance Attribute Details
- (Object) base_kernels (readonly)
Returns the value of attribute base_kernels
42 43 44 |
# File 'lib/spice_utils.rb', line 42 def base_kernels @base_kernels end |
Instance Method Details
- (Array<String>) detail_kernels(time)
Return kernels that cover a specified time
98 99 100 101 102 103 |
# File 'lib/spice_utils.rb', line 98 def detail_kernels time magic_sym = RUBY_VERSION =~ /^1\.8\./ ? :include? : :cover? @detail_kernels.find_all do |range, kernel| range.send(magic_sym, time) or range.send(magic_sym, time + 86400) or range.send(magic_sym, time - 86400) end.collect { |range, kernel| kernel } end |
- (Object) parse(file)
Parse an mk kernel and save kernel information that can be retrieved with #base_kernels or #detail_kernels
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/spice_utils.rb', line 54 def parse file mkdata = open(file).read.gsub(/\s+/, " ").strip mkdata =~ /PATH_VALUES\s*=\s*\(\s*([^)]+?)\s*\)/ path_values = $1.split(/\s*,\s*/).collect {|v| v.gsub "'", ''} mkdata =~ /PATH_SYMBOLS\s*=\s*\(\s*([^)]+?)\s*\)/ path_symbols = $1.split(/\s*,\s*/).collect {|v| v.gsub "'", ''} mkdata =~ /KERNELS_TO_LOAD\s*=\s*\(\s*([^)]+?)\s*\)/ raw_kernels = $1 path_symbols.zip(path_values).each do |key, value| raw_kernels.gsub!("$#{key}", value) end kernels = raw_kernels.split(/\s*,\s*/).collect {|v| v.gsub "'", ''}.collect kernels.each do |kernel| if kernel =~ /\w\w\w\w\w\w?_(\d\d\d\d\d\d\d)_(\d\d\d\d\d\d\d)_.*?.(bc|bsp)$/ start_doy = $1 stop_doy = $2 if start_doy == stop_doy @base_kernels << kernel else start_time = Time.gm(start_doy[0..3].to_i, 1, 1, 0, 0, 0) + (start_doy[4..6].to_i-1)*24*60*60 stop_time = Time.gm(stop_doy[0..3].to_i, 1, 1, 0, 0, 0) + (stop_doy[4..6].to_i-1)*24*60*60 @detail_kernels << [start_time..stop_time, kernel] end else @base_kernels << kernel end end end |