You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
174 lines
5.1 KiB
174 lines
5.1 KiB
# -*- coding: utf-8 -*- |
|
#!/usr/bin/env python |
|
from __future__ import absolute_import, print_function |
|
import os |
|
import sys |
|
import csv |
|
import getopt |
|
from base import RAW_DIR, TARGET_DIR, create_csv |
|
|
|
OCT_RAW_DIR = os.path.join(RAW_DIR, '..', 'oct') |
|
verbose = False |
|
writefile = False |
|
|
|
|
|
def get_keyword_level(ksearch=None): |
|
''' |
|
if ksearch is none will return dict with all K_search |
|
''' |
|
groupy = {} |
|
with open(os.path.join(OCT_RAW_DIR, 'keyword_level.csv'), 'rU') as f: |
|
rows = csv.reader(f) |
|
for row in rows: |
|
if row[1] not in groupy: |
|
groupy[row[0]] = row |
|
if ksearch and ksearch in groupy: |
|
return groupy[ksearch] |
|
else: |
|
return groupy |
|
|
|
|
|
def get_keyword_weight(ksearch=None): |
|
''' |
|
if ksearch is none will return dict with all K_search |
|
''' |
|
groupy = {} |
|
with open(os.path.join(OCT_RAW_DIR, 'keyword_weight.csv'), 'rU') as f: |
|
rows = csv.reader(f) |
|
for row in rows: |
|
if row[1] not in groupy: |
|
groupy[row[0]] = row |
|
if ksearch and ksearch in groupy: |
|
return groupy[ksearch] |
|
else: |
|
return groupy |
|
|
|
|
|
def get_s10_result(model, rtype): |
|
s10_fname = '%s-%s.csv' % (model, rtype) |
|
filepath = os.path.join(TARGET_DIR, 'part10', s10_fname) |
|
if not os.path.exists(filepath): |
|
print("S10's output file not found") |
|
sys.exit(2) |
|
## TODO: this should force getting live data instead of throw error |
|
|
|
new_data = [] |
|
with open(filepath, 'rb') as f: |
|
new_data = [row for row in csv.reader(f)] |
|
return new_data |
|
|
|
|
|
def processingS11(model, rtype, ksearch): |
|
s10_data = get_s10_result(model, rtype) |
|
|
|
if not s10_data: |
|
print('[s10] zero record. Thus, no output for s11.') |
|
sys.exit() |
|
## get keyword data |
|
level = get_keyword_level(ksearch) |
|
weight = get_keyword_weight(ksearch) |
|
|
|
a2s = [(s[:1] + s[35:]) for s in s10_data] |
|
# * by kw_weight and + with kw_level |
|
result = [] |
|
for i in a2s: |
|
### replace '' (blank) with 0 zero too |
|
data_only = [_ or 0 for _ in i[1:]] |
|
w_only = [_ or 0 for _ in weight[1:]] |
|
l_only = [_ or 0 for _ in level[1:]] |
|
|
|
### [s11] (2) & (3) |
|
zipped_list = zip(data_only, w_only, l_only) |
|
multiply_by_weight = [(float(_[0])*float(_[1])) for _ in zipped_list] |
|
|
|
## get sum KWT-x *** |
|
row_kwt_sum = [0, 0, 0, 0, 0] |
|
for _ in zipped_list: |
|
|
|
if float(_[2]) == 1: |
|
row_kwt_sum[1] += (float(_[0])*float(_[1])) |
|
elif float(_[2]) == 2: |
|
row_kwt_sum[2] += (float(_[0])*float(_[1])) |
|
elif float(_[2]) == 3: |
|
row_kwt_sum[3] += (float(_[0])*float(_[1])) |
|
row_kwt_sum[0] = sum(row_kwt_sum[1:4]) |
|
row_kwt_sum[4] = sum(row_kwt_sum[1:3]) |
|
result.append(i[:1]+multiply_by_weight+row_kwt_sum) |
|
|
|
## concat with s10_data |
|
finale = [] |
|
for i in xrange(0, len(result)): |
|
if verbose: |
|
print(','.join([('%s' % k if k != 0 else '-') for k in result[i]])) |
|
finale.append( |
|
s10_data[i]+result[i][1:] |
|
) |
|
|
|
if writefile: |
|
output_name = '%s-%s-%s.csv' % (model, rtype, ksearch) |
|
create_csv(output_name, finale, directory='part11') |
|
|
|
|
|
def usage(): |
|
print( |
|
'''Help: |
|
[opts] |
|
-m, --model Model Name [4-char] |
|
-r, --rtype R_Type [1-4] |
|
-k, --ksearch K_search [a-s] |
|
-v verbose |
|
-w write output to file |
|
Usage: |
|
$ python s11.py [opts] [value] |
|
Example: |
|
$ python s11.py -mCFHD -r3 -kA |
|
$ python s11.py -mCFHD -r3 -kB -v << show more information |
|
$ python s11.py -m CFHD -r 3 -k B -v << same as above |
|
$ python s11.py -m CFHD -r 3 -k F -w << write output file too. |
|
$ python s11.py -mCFHD -r3 -k C -vw << show more information & output file. |
|
''') |
|
|
|
|
|
def main(): |
|
try: |
|
opts, args = getopt.getopt(sys.argv[1:], 'm:r:k:vw', ['model=', 'rtype=', 'ksearch=']) |
|
except getopt.GetoptError: |
|
usage() |
|
sys.exit(2) |
|
model_value = rtype_value = k_value = None |
|
for opt, arg in opts: |
|
if opt == "-v": |
|
global verbose |
|
verbose = True |
|
elif opt == "-w": |
|
global writefile |
|
writefile = True |
|
elif opt in ('-m', '--model'): |
|
## TODO: filter model availabel and throw exception if invalid |
|
if len(arg) != 4: |
|
usage() |
|
sys.exit(2) |
|
model_value = arg.upper() |
|
elif opt in ('-r', '--rtype'): |
|
if arg not in '1234': |
|
usage() |
|
sys.exit(2) |
|
rtype_value = arg |
|
elif opt in ('-k', '--ksearch'): |
|
if arg.upper() not in 'ABCDEFGHIJKLMNOPQRS': |
|
usage() |
|
sys.exit(2) |
|
k_value = arg.upper() |
|
|
|
if not (model_value and rtype_value and k_value): |
|
usage() |
|
sys.exit(2) |
|
|
|
print('[s11] model: %s | r_type: %s | k_search: %s' % ( |
|
model_value, rtype_value, k_value)) |
|
|
|
processingS11(model_value, rtype_value, k_value) |
|
|
|
|
|
if __name__ == '__main__': |
|
main()
|
|
|