-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyBindMat.py
More file actions
105 lines (89 loc) · 4.06 KB
/
pyBindMat.py
File metadata and controls
105 lines (89 loc) · 4.06 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import numpy as np
import tc
r2bThresh = 3.0
r2bPercentile = 99.5
'''
### The data structures below are now obtained from the C++ code.
# These are the data structures. Params go into the function, and
# CellScore comes out. Default values are indicated here.
# These are initialized in C++, shown here for clarity.
class AnalysisParams():
def __init__( self ):
self.numCells = 100
self.numTrials = 60
self.numFrames = 202
self.csOnsetFrame = 75
self.usOnsetFrame = 190
self.circPad = 20
self.circShuffleFrames = 40 + 190 - 75
self.binFrames = 3
self.numShuffle = 1000
self.epsilon = 1.0e-6
class TiAnalysisParams():
def __init__( self ):
self.transientThresh = 2.0
self.tiPercentile = 99.0
self.fracTRialsFiredThresh = 0.25
self.frameDt = 1.0 / 12.5
'''
def convScoreToList( cs ):
return {
'meanScore': cs.meanScore,
'baseScore': cs.baseScore,
'percentileScore': cs.percentileScore,
'sigMean': cs.sigMean,
'sigBootstrap': cs.sigBootstrap,
'fracTrialsFired': cs.fracTrialsFired,
'meanPkIdx': cs.meanPkIdx,
'allPkIndices': list( cs.allPkIndices ),
'allPkScores': list( cs.allPkScores ),
'allPkPvalues': list( cs.allPkPvalues ),
'meanTrace': list( cs.meanTrace ),
}
def _setCommonParams( ap, DATA, csOnset, usOnset, circPad, circShuffleFrames, binFrames, numShuffle, frameDt, minPeakSep, dipFrames=2, dipSdev=1.0 ):
ap.numCells, ap.numTrials, ap.numFrames = DATA.shape
ap.csOnsetFrame = int( csOnset )
ap.usOnsetFrame = int( usOnset )
ap.circPad = int( circPad )
ap.circShuffleFrames = int( circShuffleFrames )
ap.binFrames = int( binFrames )
ap.numShuffle = int( numShuffle )
ap.frameDt = float( frameDt )
ap.minPeakSep = float( minPeakSep )
ap.dipFrames = int( dipFrames )
ap.dipSdev = float( dipSdev )
def runR2Banalysis( DATA, csOnset, usOnset, circPad, circShuffleFrames, binFrames, numShuffle, r2bThresh, r2bPercentile, frameDt=0.08, minPeakSep=0.4 ):
ap = tc.AnalysisParams()
_setCommonParams( ap, DATA, csOnset, usOnset, circPad, circShuffleFrames, binFrames, numShuffle, frameDt, minPeakSep )
# Input DATA[cell, trial, frame] -> C++ expects [frame, trial, cell] flattened
dat = np.array( np.swapaxes(DATA, 0, 2) ).reshape( -1 )
cs = tc.r2bScore( dat, ap, r2bThresh, r2bPercentile )
return [ convScoreToList( rr ) for rr in cs ]
def runTIanalysis( DATA, csOnset, usOnset, circPad, circShuffleFrames, binFrames, numShuffle, transientThresh, tiPercentile, fracTrialsFiredThresh, frameDt, minPeakSep=0.4 ):
ap = tc.AnalysisParams()
_setCommonParams( ap, DATA, csOnset, usOnset, circPad, circShuffleFrames, binFrames, numShuffle, frameDt, minPeakSep )
tip = tc.TiAnalysisParams()
tip.transientThresh = transientThresh
tip.tiPercentile = tiPercentile
tip.fracTrialsFiredThresh = fracTrialsFiredThresh
tip.frameDt = frameDt
dat = np.array( np.swapaxes(DATA, 0, 2) ).reshape( -1 )
cs = tc.tiScore( dat, ap, tip )
return [ convScoreToList( rr ) for rr in cs ]
def runPEQanalysis( DATA, csOnset, usOnset, circPad, circShuffleFrames, binFrames, numShuffle, frameDt=0.08, minPeakSep=0.4 ):
ap = tc.AnalysisParams()
_setCommonParams( ap, DATA, csOnset, usOnset, circPad, circShuffleFrames, binFrames, numShuffle, frameDt, minPeakSep )
pep = tc.PeqAnalysisParams()
dat = np.array( np.swapaxes(DATA, 0, 2) ).reshape( -1 )
cs = tc.peqScore( dat, ap, pep )
return [ convScoreToList( rr ) for rr in cs ]
def main():
parser = argparse.ArgumentParser( description = "Perform r2b time cell analysis on given matlab file" )
parser.add_argument( "datafile", type = str, help = "Required. File name to load, in matlab format" )
args = parser.parse_args()
dat = h5py.File( args.datafile, 'r' )
printDatasetInfo( dat )
'''
if __name__ == '__main__':
main()
'''