-
Notifications
You must be signed in to change notification settings - Fork 0
/
ResultAnalyzer.py
86 lines (77 loc) · 2.85 KB
/
ResultAnalyzer.py
1
2
3
4
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
#!/usr/bin/python
def checkNumOfLines(expectedLineNum, actualLineNum):
"""
Args:
expectedLineNum: expected number of molecular lines (int)
actualLineNums: actual number of identified molecular lines (int, comes back from ADMIT task)
Returns"
Ture if inputs are equal in value, False otherwise
"""
if(expectedLineNum != actualLineNum):
print("Expected number of molecular lines does not match ADMIT calculation. Procced to next parameter set.")
return False
print("Expected number of mulecular lines matches ADMIT calculation. Proceed to further comparisons")
return True
def reduce(l):
"""
Args:
Rangelist: generic list of tuples (can be either float or int tuple)
Return:
Reduced int list based on average value of every tuple in input tuple list
"""
result = []
for s in l:
midVal = abs(float(s[0]) - float(s[1])) / 2.0
result.append(midVal)
return result
def strictCompare(expectedMidVal, actualMidVal):
"""
Args:
expectedMidVal: reduced tuple list of expected molecular line ranges
actualMidVal: reduced tuple list of actual identified molecular line ranges
Returns:
A list of absolute differences between every element in two input lists
"""
result = []
for i in range(0, len(expectedMidVal), 1):
lineDiff = abs(expectedMidVal[i] - actualMidVal[i])
result.append(lineDiff)
return result
def softCompare(list1, list2):
"""
Caller function of softCompareLists()
"""
return softCompareLists(list1, list2)
def softCompareLists(list1, list2):
"""
Args:
list1: int / float list
list2: int / float list
Returns:
A list of absolute differences between every element in two input lists based on soft comparison
"""
result = []
#complete search
for i in range(0, len(list1), 1):
lineDiff = -1
for j in range(0, len(list2), 1):
tempDiff = abs(list1[i] - list2[j])
lineDiff = min(lineDiff, tempDiff)
result.append(lineDiff) #length of result will be length of list1 (expectde molecular line)
return result
def compare(expectedLines, actualLines):
"""
Args:
expectedLines: expeced molecular lines (list of float tuples)
actualLines: actual identified molecular lines (list of float tuples)
Returns:
A list of absolute difference between every element in two input lists based on either soft or strict comparison
"""
result = []
if checkNumOfLines(expectedLines, actualLines) and len(actualLines) != 0:
#compare every line
result = strictCompare(reduce(expectedLines), reduce(actualLines))
else:
#soft comparison
result = softCompare(reduce(expectedLines), reduce(actualLines))
return result #final comparison result