-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathPeakFinder.py
54 lines (47 loc) · 1.87 KB
/
PeakFinder.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
from numpy import mean, shape, ceil, log2, sign
import pandas as pd
def has_anterior_peak(data, fold=3, thresh=3):
n = shape(data)[-1]
if isinstance(data, pd.DataFrame):
first_third = data.ix[:,:n//3].mean(axis=1)
middle_third = data.ix[:,n//3:-(n//3)].mean(axis=1)
else:
first_third = mean(data[:n//3])
middle_third = mean(data[n//3:-(n//3)])
return ((sign(fold) * first_third > fold * middle_third) *
first_third > thresh)
def has_posterior_peak(data, fold=3, thresh=3):
n = shape(data)[-1]
if isinstance(data, pd.DataFrame):
first_third = data.ix[:,-n//3:].mean(axis=1)
middle_third = data.ix[:,n//3:-(n//3)].mean(axis=1)
else:
first_third = mean(data[-n//3:])
middle_third = mean(data[n//3:-(n//3)])
return ((first_third > fold * middle_third) *
(first_third > thresh))
def has_central_peak(data, fold=3, thresh=3):
n = shape(data)[-1]
if isinstance(data, pd.DataFrame):
first_third = data.ix[:,:n//3].mean(axis=1)
middle_third = data.ix[:,n//3:-(n//3)].mean(axis=1)
last_third = data.ix[:,-(n//3):].mean(axis=1)
else:
first_third = mean(data[:n//3])
middle_third = mean(data[n//3:-(n//3)])
last_third = mean(data[-(n//3):])
return ((middle_third > fold * first_third)*
(middle_third > fold * last_third) *
(middle_third > thresh))
def make_sort_num(*args, **kwargs):
retval = 0
pow = 0
for func in (has_posterior_peak, has_central_peak, has_anterior_peak):
for exp_set in args:
if isinstance(exp_set, tuple):
retval += 2**pow * sum(func(s, **kwargs) for s in exp_set)
pow += int(ceil(log2(len(exp_set) + 1)))
else:
retval += 2**pow * func(exp_set, **kwargs)
pow += 1
return retval