tasci_merger 0.3.1 → 0.3.2
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/lib/man_merger.rb +228 -231
- data/tasci_merger.gemspec +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a7097b481a5ccd05ccbb429433cc122fcfedc655
|
4
|
+
data.tar.gz: 981ca465620a29860db631b0678d6c69e9e37810
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e301450ff95d0764fee633acf430fb63f08bd5c953a265c5203cc1fc9e6e4bffa88597ec88939d467d5bd148185eb16d02ca532d4f6ac1cd146b2fe88e0603c4
|
7
|
+
data.tar.gz: 9c260f76bc1610525f46aa9884eb7c91f211d34f5d2e7d3120de5ff4870b28b5449d643755959ccaeb3850a49c77dad1fb3574466ff452699360bbf56bc3f332
|
data/lib/man_merger.rb
CHANGED
@@ -3,297 +3,294 @@ require 'csv'
|
|
3
3
|
## CHANGELOG
|
4
4
|
# 2173 Master file: change sp16,17,18 to *_rev
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
6
|
+
class ManMerger
|
7
|
+
LIST_DIR = "/usr/local/htdocs/access/lib/data/etl/klerman_merge_man_files/file_lists/"
|
8
|
+
T_DRIVE_DIRS = ["/home/pwm4/Windows/tdrive/IPM/Modafinil_FD_42.85h/", "/home/pwm4/Windows/tdrive/IPM/NSBRI_65d_Entrainment/"]
|
9
|
+
#T_DRIVE_DIR = "/home/pwm4/Windows/tdrive/IPM/Modafinil_FD_42.85h/"
|
10
|
+
EPOCH_LENGTH = 30
|
11
|
+
|
12
|
+
def merge_files
|
13
|
+
subject_list = load_subject_list
|
14
|
+
subject_list.each do |subject_code, file_list|
|
15
|
+
merged_file = CSV.open("/usr/local/htdocs/access/lib/data/etl/klerman_merge_man_files/merged_files/#{subject_code}_merged.csv", "wb")
|
16
|
+
merged_file << %w(SUBJECT_CODE LABTIME SLEEP_STAGE SLEEP_PERIOD SEM_FLAG)
|
17
|
+
MY_LOG.info "---- #{subject_code}"
|
18
|
+
|
19
|
+
previous_first_labtime = nil
|
20
|
+
previous_last_labtime = nil
|
21
|
+
subject_year = get_subject_year(file_list)
|
22
|
+
|
23
|
+
file_list.each do |file_hash|
|
24
|
+
matched_files = Dir.glob("#{T_DRIVE_DIRS[0]}#{subject_code}/PSG/SCORED/**/#{file_hash[:pattern]}.man", File::FNM_CASEFOLD)
|
25
|
+
matched_files = Dir.glob("#{T_DRIVE_DIRS[1]}#{subject_code}/Sleep/#{file_hash[:pattern]}.man", File::FNM_CASEFOLD) if matched_files.length != 1
|
26
|
+
|
27
|
+
## Validate File List
|
28
|
+
if matched_files.length != 1
|
29
|
+
raise StandardError, "None or more than one matched file. #{file_hash[:pattern]} #{matched_files} #{matched_files.length} #{subject_code}"
|
30
|
+
else
|
31
|
+
man_file_path = matched_files[0]
|
32
|
+
end
|
34
33
|
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
man_file = File.open(man_file_path)
|
35
|
+
LOADER_LOGGER.info "--- Loading #{man_file_path}"
|
36
|
+
file_info = {}
|
38
37
|
|
39
38
|
|
40
|
-
|
41
|
-
|
39
|
+
## Ignore Corrupted Files
|
40
|
+
#next if tasci_file_path == "/home/pwm4/Windows/tdrive/IPM/AFOSR9_Slp_Restrict//24B7GXT3/PSG/TASCI_SEM/24b7gxt3_082907_wp19ap1_PID_24B7GXT3_082907_WP19AP1_RID_0_SEM.TASCI"
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
# Date from file name
|
43
|
+
matched_date = /_(\d\d)(\d\d)(\d\d)_/.match(man_file_path)
|
44
|
+
file_info[:fn_date] = (matched_date ? Time.zone.local((matched_date[3].to_i > 30 ? matched_date[3].to_i + 1900 : matched_date[3].to_i + 2000), matched_date[1].to_i, matched_date[2].to_i) : nil)
|
46
45
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
46
|
+
# read file
|
47
|
+
lines = man_file.readlines("\r")
|
48
|
+
# delete possible empty last line
|
49
|
+
lines.pop if lines.last.blank?
|
51
50
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
51
|
+
# get file first and last times
|
52
|
+
matched_time = /(\d\d):(\d\d):(\d\d):(\d\d\d)/.match(lines.first)
|
53
|
+
file_info[:first_time] = {hour: matched_time[1].to_i, min: matched_time[2].to_i, sec: matched_time[3].to_i}
|
54
|
+
matched_time = /(\d\d):(\d\d):(\d\d):(\d\d\d)/.match(lines.last)
|
55
|
+
file_info[:last_time] = {hour: matched_time[1].to_i, min: matched_time[2].to_i, sec: matched_time[3].to_i}
|
57
56
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
57
|
+
# validate first/last times
|
58
|
+
if file_hash[:start_time] != file_info[:first_time]
|
59
|
+
MY_LOG.error "---- FIRST TIME MISMATCH ---\n#{man_file_path}\n#{file_hash[:start_time]} #{file_info[:first_time]}\n\n"
|
60
|
+
end
|
61
|
+
if file_hash[:last_line_time] != file_info[:last_time]
|
62
|
+
MY_LOG.error "---- LAST TIME MISMATCH ----\n#{man_file_path}\n#{file_hash[:last_line_time]} #{file_info[:last_time]}\n\n"
|
63
|
+
end
|
64
|
+
if file_hash[:last_line_number] != lines.length
|
65
|
+
MY_LOG.error "---- LINE COUNT MISMATCH ----\n#{man_file_path}\n#{file_hash[:last_line_number]} #{lines.length}\n\n"
|
66
|
+
end
|
68
67
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
68
|
+
##
|
69
|
+
# VALIDATION
|
70
|
+
file_hash[:start_labtime] = Labtime.from_decimal(file_hash[:start_labtime], subject_year)
|
71
|
+
file_hash[:last_line_labtime] = Labtime.from_decimal(file_hash[:last_line_labtime], subject_year)
|
73
72
|
|
74
|
-
|
75
|
-
|
73
|
+
start_realtime = file_hash[:start_labtime].to_time
|
74
|
+
last_line_realtime = file_hash[:last_line_labtime].to_time
|
76
75
|
|
77
|
-
|
78
|
-
|
76
|
+
first_realtime = file_hash[:start_labtime].time_zone.local(start_realtime.year, start_realtime.month, start_realtime.day, file_info[:first_time][:hour], file_info[:first_time][:min], file_info[:first_time][:sec])
|
77
|
+
last_realtime = file_hash[:last_line_labtime].time_zone.local(last_line_realtime.year, last_line_realtime.month, last_line_realtime.day, file_info[:last_time][:hour], file_info[:last_time][:min], file_info[:last_time][:sec])
|
79
78
|
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
file_info[:first_labtime] = Labtime.parse(first_realtime)
|
80
|
+
file_info[:last_labtime] = Labtime.parse(last_realtime)
|
81
|
+
predicted_last_labtime = Labtime.parse(file_info[:first_labtime].to_time + ((lines.length - 1) * 30).seconds)
|
83
82
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
83
|
+
sep = false
|
84
|
+
if (file_hash[:start_labtime].time_in_seconds - file_info[:first_labtime].time_in_seconds).abs > 2
|
85
|
+
MY_LOG.error "---- FIRST LABTIME MISMATCH ----\n#{man_file_path}\n#{file_hash[:start_labtime].time_in_seconds - file_info[:first_labtime].time_in_seconds} | #{file_hash[:start_labtime].to_time}\n#{file_hash[:start_labtime]} | #{file_info[:first_labtime]}\n"
|
86
|
+
sep = true
|
87
|
+
end
|
89
88
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end
|
96
|
-
if (file_info[:last_labtime].time_in_seconds - predicted_last_labtime.time_in_seconds).abs > 0
|
97
|
-
MY_LOG.error "---- PRED LABTIME MISMATCH ----\n#{man_file_path}\n#{(file_info[:last_labtime].time_in_seconds - predicted_last_labtime.time_in_seconds)} | #{predicted_last_labtime.to_time}\nl: #{file_info[:last_labtime]} | #{predicted_last_labtime}\n"
|
98
|
-
sep = true
|
99
|
-
end
|
89
|
+
# These checks fail if DST TRANSITION HAPPENS
|
90
|
+
if last_line_realtime.dst? == start_realtime.dst?
|
91
|
+
if (file_hash[:last_line_labtime].time_in_seconds - file_info[:last_labtime].time_in_seconds).abs > 2
|
92
|
+
MY_LOG.error "---- LAST LABTIME MISMATCH ----\n#{man_file_path}\n#{file_hash[:last_line_labtime].time_in_seconds - file_info[:last_labtime].time_in_seconds} | #{file_hash[:last_line_labtime].to_time}\n#{file_hash[:last_line_labtime]} | #{file_info[:last_labtime]}\n"
|
93
|
+
sep = true
|
100
94
|
end
|
101
|
-
|
102
|
-
|
103
|
-
MY_LOG.error "---- !PRED LABTIME MISMATCH ----\n#{man_file_path}\n#{(file_hash[:last_line_labtime].time_in_seconds - predicted_last_labtime.time_in_seconds)} | #{predicted_last_labtime.to_time}\nl: #{file_info[:last_line_labtime]} | #{predicted_last_labtime}\n"
|
95
|
+
if (file_info[:last_labtime].time_in_seconds - predicted_last_labtime.time_in_seconds).abs > 0
|
96
|
+
MY_LOG.error "---- PRED LABTIME MISMATCH ----\n#{man_file_path}\n#{(file_info[:last_labtime].time_in_seconds - predicted_last_labtime.time_in_seconds)} | #{predicted_last_labtime.to_time}\nl: #{file_info[:last_labtime]} | #{predicted_last_labtime}\n"
|
104
97
|
sep = true
|
105
98
|
end
|
99
|
+
end
|
106
100
|
|
107
|
-
|
108
|
-
|
109
|
-
|
101
|
+
if (file_hash[:last_line_labtime].time_in_seconds - predicted_last_labtime.time_in_seconds).abs > 2
|
102
|
+
MY_LOG.error "---- !PRED LABTIME MISMATCH ----\n#{man_file_path}\n#{(file_hash[:last_line_labtime].time_in_seconds - predicted_last_labtime.time_in_seconds)} | #{predicted_last_labtime.to_time}\nl: #{file_info[:last_line_labtime]} | #{predicted_last_labtime}\n"
|
103
|
+
sep = true
|
104
|
+
end
|
110
105
|
|
111
|
-
|
112
|
-
|
106
|
+
unless previous_first_labtime.nil? or previous_last_labtime.nil?
|
107
|
+
MY_LOG.error "Start time is before previous end labtime for #{man_file_path}" if file_info[:first_labtime] < previous_last_labtime
|
108
|
+
end
|
109
|
+
|
110
|
+
raise StandardError, "AHHHHH" if file_info[:first_labtime].sec != first_realtime.sec
|
111
|
+
raise StandardError, "AHHHHH" if file_info[:last_labtime].sec != last_realtime.sec
|
113
112
|
|
114
|
-
|
113
|
+
MY_LOG.info "-----------------------------------\n\n" if sep
|
115
114
|
|
116
|
-
|
117
|
-
|
115
|
+
last_labtime = nil
|
116
|
+
ibob_flag = 0
|
118
117
|
|
119
|
-
|
120
|
-
|
118
|
+
lines.each_with_index do |line, line_number|
|
119
|
+
#merged_file << %w(SUBJECT_CODE LABTIME SLEEP_STAGE SLEEP_PERIOD SEM_FLAG)
|
121
120
|
=begin
|
122
121
|
sleep man file:
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
122
|
+
0 undef/unscored
|
123
|
+
1 stage 1
|
124
|
+
2 stage 2
|
125
|
+
3 stage 3
|
126
|
+
4 stage 4
|
127
|
+
5 wake
|
128
|
+
6 REM
|
129
|
+
7 MVT
|
130
|
+
8 LOff and LOn
|
132
131
|
|
133
132
|
wake man file:
|
134
|
-
|
133
|
+
0 undef/un
|
135
134
|
cored
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
135
|
+
1 stage 1
|
136
|
+
2 stage 2
|
137
|
+
3 stage 3
|
138
|
+
4 stage 4
|
139
|
+
5 wake
|
140
|
+
6 REM
|
141
|
+
7 MVT
|
142
|
+
8 SEM
|
144
143
|
=end
|
145
144
|
|
146
145
|
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
# Sleep Period Coding:
|
151
|
-
# 1 Sleep Onset (Lights Off) (IN BED)
|
152
|
-
# 2 Sleep Offset (Lights On) (OUT OF BED)
|
153
|
-
if file_hash[:type] == :sleep and line_code == 8
|
154
|
-
if ibob_flag == 0
|
155
|
-
sleep_period = 1
|
156
|
-
ibob_flag = 1
|
157
|
-
else
|
158
|
-
sleep_period = 2
|
159
|
-
ibob_flag = 0
|
160
|
-
end
|
161
|
-
else
|
162
|
-
sleep_period = nil
|
163
|
-
end
|
164
|
-
|
165
|
-
# Sleep Stage Coding:
|
166
|
-
# 1 stage 1
|
167
|
-
# 2 stage 2
|
168
|
-
# 3 stage 3
|
169
|
-
# 4 stage 4
|
170
|
-
# 6 MT
|
171
|
-
# 7 Undef
|
172
|
-
# 5 REM
|
173
|
-
# 9 Wake
|
174
|
-
if line_code >= 1 and line_code <= 4
|
175
|
-
line_event = line_code
|
176
|
-
elsif line_code == 0
|
177
|
-
line_event = 7
|
178
|
-
elsif line_code == 5 or line_code == 8
|
179
|
-
line_event = 9
|
180
|
-
elsif line_code == 6
|
181
|
-
line_event = 5
|
182
|
-
elsif line_code == 7
|
183
|
-
line_event = 6
|
184
|
-
else
|
185
|
-
raise StandardError, "Cannot map the following event: #{line_code}"
|
186
|
-
end
|
146
|
+
line_labtime = file_info[:first_labtime].add_seconds(EPOCH_LENGTH * line_number)
|
147
|
+
line_code = /(\d)\s\d\d:\d\d:\d\d:\d\d\d/.match(line)[1].to_i
|
187
148
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
149
|
+
# Sleep Period Coding:
|
150
|
+
# 1 Sleep Onset (Lights Off) (IN BED)
|
151
|
+
# 2 Sleep Offset (Lights On) (OUT OF BED)
|
152
|
+
if file_hash[:type] == :sleep and line_code == 8
|
153
|
+
if ibob_flag == 0
|
154
|
+
sleep_period = 1
|
155
|
+
ibob_flag = 1
|
193
156
|
else
|
194
|
-
|
157
|
+
sleep_period = 2
|
158
|
+
ibob_flag = 0
|
195
159
|
end
|
160
|
+
else
|
161
|
+
sleep_period = nil
|
162
|
+
end
|
196
163
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
164
|
+
# Sleep Stage Coding:
|
165
|
+
# 1 stage 1
|
166
|
+
# 2 stage 2
|
167
|
+
# 3 stage 3
|
168
|
+
# 4 stage 4
|
169
|
+
# 6 MT
|
170
|
+
# 7 Undef
|
171
|
+
# 5 REM
|
172
|
+
# 9 Wake
|
173
|
+
if line_code >= 1 and line_code <= 4
|
174
|
+
line_event = line_code
|
175
|
+
elsif line_code == 0
|
176
|
+
line_event = 7
|
177
|
+
elsif line_code == 5 or line_code == 8
|
178
|
+
line_event = 9
|
179
|
+
elsif line_code == 6
|
180
|
+
line_event = 5
|
181
|
+
elsif line_code == 7
|
182
|
+
line_event = 6
|
183
|
+
else
|
184
|
+
raise StandardError, "Cannot map the following event: #{line_code}"
|
201
185
|
end
|
202
186
|
|
187
|
+
# SEM Event Coding:
|
188
|
+
# 1 Slow Eye Movement
|
189
|
+
# 0 No Slow Eye Movement
|
190
|
+
if file_hash[:type] == :wake and line_code == 8
|
191
|
+
sem_event = 1
|
192
|
+
else
|
193
|
+
sem_event = 0
|
194
|
+
end
|
203
195
|
|
204
|
-
|
205
|
-
previous_last_labtime = last_labtime
|
196
|
+
last_labtime = line_labtime
|
206
197
|
|
198
|
+
output_line = [subject_code.upcase, line_labtime.to_decimal, line_event, sleep_period, sem_event]
|
199
|
+
merged_file << output_line
|
207
200
|
end
|
208
|
-
|
209
|
-
|
201
|
+
|
202
|
+
|
203
|
+
previous_first_labtime = file_info[:first_labtime]
|
204
|
+
previous_last_labtime = last_labtime
|
210
205
|
|
211
206
|
end
|
207
|
+
merged_file.close
|
208
|
+
MY_LOG.info "---- end #{subject_code}\n\n"
|
209
|
+
|
212
210
|
end
|
211
|
+
end
|
213
212
|
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
213
|
+
def load_subject_list
|
214
|
+
subject_info = {}
|
215
|
+
Dir.foreach(LIST_DIR) do |file|
|
216
|
+
next if file == '.' or file == '..'
|
217
|
+
#MY_LOG.info "#{file}"
|
218
|
+
csv_file = CSV.open("#{LIST_DIR}#{file}", {headers: true})
|
219
|
+
|
220
|
+
# Match and Validate File Name
|
221
|
+
matched_sc = /(.*)SLEEP\.csv/i.match(File.basename(csv_file.path))
|
222
|
+
if matched_sc
|
223
|
+
subject_code = matched_sc[1].upcase
|
224
|
+
else
|
225
|
+
next
|
226
|
+
end
|
227
|
+
|
228
|
+
subject_info[subject_code] = []
|
229
|
+
csv_file.each do |row|
|
230
|
+
file_info = {}
|
231
|
+
pattern = /(.*)\.man/i.match(row[0])
|
232
|
+
|
233
|
+
matched_time = /(\d\d):(\d\d):(\d\d):(\d\d\d)/.match(row[1])
|
234
|
+
if matched_time
|
235
|
+
file_info[:start_time] = {hour: matched_time[1].to_i, min: matched_time[2].to_i, sec: matched_time[3].to_i}
|
225
236
|
else
|
237
|
+
MY_LOG.error "No Valid Start Time Found: #{row}"
|
226
238
|
next
|
227
239
|
end
|
228
240
|
|
229
|
-
|
230
|
-
|
231
|
-
file_info = {}
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
file_info[:start_time] = {hour: matched_time[1].to_i, min: matched_time[2].to_i, sec: matched_time[3].to_i}
|
237
|
-
else
|
238
|
-
MY_LOG.error "No Valid Start Time Found: #{row}"
|
239
|
-
next
|
240
|
-
end
|
241
|
-
|
242
|
-
matched_time = /(\d\d):(\d\d):(\d\d):(\d\d\d)/.match(row[4])
|
243
|
-
if matched_time
|
244
|
-
file_info[:last_line_time] = {hour: matched_time[1].to_i, min: matched_time[2].to_i, sec: matched_time[3].to_i}
|
245
|
-
else
|
246
|
-
MY_LOG.error "No Valid End Time Found: #{row}"
|
247
|
-
next
|
248
|
-
end
|
241
|
+
matched_time = /(\d\d):(\d\d):(\d\d):(\d\d\d)/.match(row[4])
|
242
|
+
if matched_time
|
243
|
+
file_info[:last_line_time] = {hour: matched_time[1].to_i, min: matched_time[2].to_i, sec: matched_time[3].to_i}
|
244
|
+
else
|
245
|
+
MY_LOG.error "No Valid End Time Found: #{row}"
|
246
|
+
next
|
247
|
+
end
|
249
248
|
|
250
|
-
|
251
|
-
|
252
|
-
|
249
|
+
file_info[:start_labtime] = row[2].to_f
|
250
|
+
file_info[:last_line_number] = row[3].to_i
|
251
|
+
file_info[:last_line_labtime] = row[5].to_f
|
253
252
|
|
254
|
-
|
255
|
-
|
256
|
-
|
253
|
+
if pattern
|
254
|
+
file_info[:pattern] = pattern[1]
|
255
|
+
subject_info[subject_code] << file_info
|
257
256
|
|
258
|
-
|
259
|
-
|
260
|
-
|
257
|
+
# Determine if sleep or wake file
|
258
|
+
raise StandardError, "CAN'T DETERMINE SP/WP (none match): #{pattern[1]}" unless (/_sp?\d/i.match(pattern[1]) or /_wp?\d/i.match(pattern[1]))
|
259
|
+
raise StandardError, "CAN'T DETERMINE SP/WP (both match): #{pattern[1]}" if (/_sp?\d/i.match(pattern[1]) and /_wp?\d/i.match(pattern[1]))
|
261
260
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
else
|
267
|
-
raise StandardError, "Didn't match any SP/WP..."
|
268
|
-
end
|
261
|
+
if /_sp?\d/i.match(pattern[1])
|
262
|
+
file_info[:type] = :sleep
|
263
|
+
elsif /_wp?\d/i.match(pattern[1])
|
264
|
+
file_info[:type] = :wake
|
269
265
|
else
|
270
|
-
|
271
|
-
next
|
266
|
+
raise StandardError, "Didn't match any SP/WP..."
|
272
267
|
end
|
268
|
+
else
|
269
|
+
MY_LOG.info "No Valid File Name Found: #{row}"
|
270
|
+
next
|
273
271
|
end
|
274
|
-
#MY_LOG.info subject_info[subject_code]
|
275
272
|
end
|
276
|
-
#MY_LOG.info subject_info
|
277
|
-
subject_info
|
278
|
-
end
|
279
|
-
|
280
|
-
def get_subject_year(file_list)
|
281
|
-
years = file_list.map do |h|
|
282
|
-
matched_date = /_(\d\d)(\d\d)(\d\d)_/.match(h[:pattern])
|
283
|
-
matched_date ? matched_date[3] : nil
|
284
|
-
end
|
285
|
-
years.delete_if {|x| x.nil? }
|
286
|
-
years = years.uniq
|
287
|
-
|
288
|
-
raise StandardError, "More than one unique year found in files: #{years}" if years.length > 1
|
289
|
-
year = years.first.to_i
|
290
|
-
year > 30 ? year + 1900 : year + 2000
|
273
|
+
#MY_LOG.info subject_info[subject_code]
|
291
274
|
end
|
275
|
+
#MY_LOG.info subject_info.inspect
|
276
|
+
subject_info
|
292
277
|
end
|
293
278
|
|
279
|
+
def get_subject_year(file_list)
|
280
|
+
years = file_list.map do |h|
|
281
|
+
matched_date = /_(\d\d)(\d\d)(\d\d)_/.match(h[:pattern])
|
282
|
+
matched_date ? matched_date[3] : nil
|
283
|
+
end
|
284
|
+
years.delete_if {|x| x.nil? }
|
285
|
+
years = years.uniq
|
294
286
|
|
287
|
+
raise StandardError, "More than one unique year found in files: #{years}" if years.length > 1
|
288
|
+
year = years.first.to_i
|
289
|
+
year > 30 ? year + 1900 : year + 2000
|
290
|
+
end
|
295
291
|
end
|
296
292
|
|
293
|
+
|
297
294
|
=begin
|
298
295
|
path: /home/pwm4/Windows/tdrive/IPM/Modafinil_FD_42.85h/
|
299
296
|
path: /usr/local/htdocs/access/lib/data/etl/klerman_merge_man_files/file_list
|
data/tasci_merger.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'tasci_merger'
|
3
|
-
s.version = '0.3.
|
4
|
-
s.date = '2018-
|
3
|
+
s.version = '0.3.2'
|
4
|
+
s.date = '2018-07-12'
|
5
5
|
s.summary = "Merger utility for TASCI scored sleep files."
|
6
6
|
s.description = "Merger utility for TASCI scored sleep files, built for the Division of Sleep and Circadian Disorders at BWH."
|
7
7
|
s.authors = ["Piotr Mankowski", "Chenxi Gao"]
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tasci_merger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Mankowski
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-07-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|