edfize 0.1.0 → 0.2.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/lib/edfize/edf.rb +28 -3
- data/lib/edfize/signal.rb +1 -1
- data/lib/edfize/version.rb +2 -2
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6dff2062988c3f2049fb84f7e69ab8a2a6a9d050
|
4
|
+
data.tar.gz: 74403328abbb74f222e6cd09e7f1c2033bfe79ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5196f1d573d713da7214c2c0b5210f3603e56d5df54ece83de093b5f3be220c4db33066408593df7d35b6955eb10b954c608d6a9c0bfb7980e3591c3c7062704
|
7
|
+
data.tar.gz: cb47c743158f709599374ca69bd3d601d9ba25ba19243f6d0416b0a7a3b73bc87176af901acef8e8f1997f7367d26274b8f3bb90b8b29592333ddd3b35f06a11
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 0.2.0
|
2
|
+
|
3
|
+
### Enhancements
|
4
|
+
- EDFs can now be partially loaded by specifying the epoch number and epoch size in seconds
|
5
|
+
|
6
|
+
### Testing
|
7
|
+
- Updated to minitest test framework along with simplecov for coverage
|
8
|
+
|
1
9
|
## 0.1.0 (May 28, 2014)
|
2
10
|
- Initial EDF class to load headers and signals into Ruby objects
|
3
11
|
- `edfize` command has the following actions:
|
data/lib/edfize/edf.rb
CHANGED
@@ -58,6 +58,13 @@ module Edfize
|
|
58
58
|
get_data_records
|
59
59
|
end
|
60
60
|
|
61
|
+
# Epoch Number is Zero Indexed, and Epoch Size is in Seconds (Not Data Records)
|
62
|
+
def load_epoch(epoch_number, epoch_size)
|
63
|
+
# reset_signals!
|
64
|
+
load_digital_signals_by_epoch(epoch_number, epoch_size)
|
65
|
+
calculate_physical_values!
|
66
|
+
end
|
67
|
+
|
61
68
|
def size_of_header
|
62
69
|
HEADER_OFFSET + ns * Signal::SIGNAL_CONFIG.collect{|k,h| h[:size]}.inject(:+)
|
63
70
|
end
|
@@ -153,6 +160,11 @@ module Edfize
|
|
153
160
|
@number_of_signals
|
154
161
|
end
|
155
162
|
|
163
|
+
def reset_signals!
|
164
|
+
@signals = []
|
165
|
+
read_signal_header
|
166
|
+
end
|
167
|
+
|
156
168
|
def create_signals
|
157
169
|
(0..ns-1).to_a.each do |signal_number|
|
158
170
|
@signals[signal_number] ||= Signal.new()
|
@@ -190,12 +202,25 @@ module Edfize
|
|
190
202
|
calculate_physical_values!()
|
191
203
|
end
|
192
204
|
|
205
|
+
def load_digital_signals_by_epoch(epoch_number, epoch_size)
|
206
|
+
size_of_data_record_in_bytes = @signals.collect(&:samples_per_data_record).inject(:+).to_i * SIZE_OF_SAMPLE_IN_BYTES
|
207
|
+
data_records_to_retrieve = (epoch_size / @duration_of_a_data_record rescue 0)
|
208
|
+
length_of_bytes_to_read = (data_records_to_retrieve+1) * size_of_data_record_in_bytes
|
209
|
+
epoch_offset_size = epoch_number * epoch_size * size_of_data_record_in_bytes # TODO: The size in bytes of an epoch
|
210
|
+
|
211
|
+
all_signal_data = (IO.binread(@filename, length_of_bytes_to_read, size_of_header + epoch_offset_size).unpack('s<*') rescue [])
|
212
|
+
load_signal_data(all_signal_data, data_records_to_retrieve+1)
|
213
|
+
end
|
214
|
+
|
193
215
|
# 16-bit signed integer size = 2 Bytes = 2 ASCII characters
|
194
216
|
# 16-bit signed integer in "Little Endian" format (least significant byte first)
|
195
217
|
# unpack: s< 16-bit signed, (little-endian) byte order
|
196
218
|
def load_digital_signals
|
197
|
-
|
219
|
+
all_signal_data = IO.binread(@filename, nil, size_of_header).unpack('s<*')
|
220
|
+
load_signal_data(all_signal_data, @number_of_data_records)
|
221
|
+
end
|
198
222
|
|
223
|
+
def load_signal_data(all_signal_data, data_records_retrieved)
|
199
224
|
all_samples_per_data_record = @signals.collect{|s| s.samples_per_data_record}
|
200
225
|
total_samples_per_data_record = all_samples_per_data_record.inject(:+).to_i
|
201
226
|
|
@@ -206,11 +231,11 @@ module Edfize
|
|
206
231
|
offset += samples_per_data_record
|
207
232
|
end
|
208
233
|
|
209
|
-
(0
|
234
|
+
(0..data_records_retrieved-1).to_a.each do |data_record_index|
|
210
235
|
@signals.each_with_index do |signal, signal_index|
|
211
236
|
read_start = data_record_index * total_samples_per_data_record + offsets[signal_index]
|
212
237
|
(0..signal.samples_per_data_record - 1).to_a.each do |value_index|
|
213
|
-
signal.digital_values <<
|
238
|
+
signal.digital_values << all_signal_data[read_start+value_index]
|
214
239
|
end
|
215
240
|
end
|
216
241
|
end
|
data/lib/edfize/signal.rb
CHANGED
@@ -39,7 +39,7 @@ module Edfize
|
|
39
39
|
|
40
40
|
# Physical value (dimension PhysiDim) = (ASCIIvalue-DigiMin)*(PhysiMax-PhysiMin)/(DigiMax-DigiMin) + PhysiMin.
|
41
41
|
def calculate_physical_values!
|
42
|
-
@physical_values = @digital_values.collect{|sample| ( sample - @digital_minimum ) * ( @physical_maximum - @physical_minimum ) / ( @digital_maximum - @digital_minimum) + @physical_minimum }
|
42
|
+
@physical_values = @digital_values.collect{|sample| (( sample - @digital_minimum ) * ( @physical_maximum - @physical_minimum ) / ( @digital_maximum - @digital_minimum) + @physical_minimum rescue nil) }
|
43
43
|
end
|
44
44
|
|
45
45
|
def samples
|
data/lib/edfize/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edfize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Remo Mueller
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-08-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -92,9 +92,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
92
|
version: '0'
|
93
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - "
|
95
|
+
- - ">"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 1.3.1
|
98
98
|
requirements: []
|
99
99
|
rubyforge_project:
|
100
100
|
rubygems_version: 2.2.2
|