| 1904 | | def pairwise_crosscorrelate(self, nb_pairs, pairs_generator=None, time_bin=1., average=True, lag=None, n_pred=1, predictor=None, display=False, kwargs={}): |
| 1905 | | """ |
| 1906 | | Function to generate an array of cross correlations computed |
| 1907 | | between pairs of cells within the SpikeTrains. Based on pairwise_cc but |
| 1908 | | using function analysis.crosscorrelate instead. |
| 1909 | | |
| 1910 | | Inputs: |
| 1911 | | nb_pairs - int specifying the number of pairs |
| 1912 | | pairs_generator - The generator that will be used to draw the pairs. If None, a default one is |
| 1913 | | created as RandomPairs(spk, spk, no_silent=False, no_auto=True) |
| 1914 | | time_bin - The time bin used to gather the spikes |
| 1915 | | average - If true, only the averaged CC among all the pairs is returned (less memory needed) |
| 1916 | | display - if True, a new figure is created. Could also be a subplot. The averaged |
| 1917 | | spike_histogram over the whole population is then plotted |
| 1918 | | kwargs - dictionary contening extra parameters that will be sent to the plot |
| 1919 | | function |
| 1920 | | |
| 1921 | | Examples |
| 1922 | | >> a.pairwise_cc(500, time_bin=1, averaged=True) |
| 1923 | | >> a.pairwise_cc(500, time_bin=1, averaged=True, display=subplot(221), kwargs={'color':'r'}) |
| 1924 | | >> a.pairwise_cc(100, CustomPairs(a,a,[(i,i+1) for i in xrange(100)]), time_bin=5) |
| 1925 | | |
| 1926 | | See also |
| 1927 | | pairwise_pearson_corrcoeff, pairwise_cc_zero, RandomPairs, AutoPairs, CustomPairs |
| 1928 | | """ |
| 1929 | | subplot = get_display(display) |
| 1930 | | |
| 1931 | | ## We have to extract only the non silent cells, to avoid problems |
| 1932 | | if pairs_generator is None: |
| 1933 | | pairs_generator = RandomPairs(self, self, False, True) |
| 1934 | | |
| 1935 | | # Then we select the pairs of cells |
| 1936 | | pairs = pairs_generator.get_pairs(nb_pairs) |
| 1937 | | N = len(pairs) |
| 1938 | | if newnum: |
| 1939 | | length = 2*(len(pairs_generator.spk1.time_axis(time_bin))-1) |
| 1940 | | else: |
| 1941 | | length = 2*len(pairs_generator.spk1.time_axis(time_bin)) |
| 1942 | | if not average: |
| 1943 | | results = numpy.zeros((N,length), float) |
| 1944 | | else: |
| 1945 | | results = numpy.zeros(length, float) |
| 1946 | | for idx in xrange(N): |
| 1947 | | # We need to avoid empty spike histogram, otherwise the ccf function |
| 1948 | | # will give a nan vector |
| 1949 | | hist_1 = pairs_generator.spk1[pairs[idx,0]].time_histogram(time_bin) |
| 1950 | | hist_2 = pairs_generator.spk2[pairs[idx,1]].time_histogram(time_bin) |
| 1951 | | if not average: |
| 1952 | | results[idx,:] = analysis.ccf(hist_1,hist_2) |
| 1953 | | else: |
| 1954 | | results += analysis.ccf(hist_1,hist_2) |
| 1955 | | if not subplot or not HAVE_PYLAB: |
| 1956 | | if not average: |
| 1957 | | return results |
| 1958 | | else: |
| 1959 | | return results/N |
| 1960 | | else: |
| 1961 | | if average: |
| 1962 | | results = results/N |
| 1963 | | else: |
| 1964 | | results = numpy.sum(results, axis=0)/N |
| 1965 | | xaxis = time_bin*numpy.arange(-len(results)/2, len(results)/2) |
| 1966 | | xlabel = "Time (ms)" |
| 1967 | | ylabel = "Cross Correlation" |
| 1968 | | subplot.plot(xaxis, results, **kwargs) |
| 1969 | | set_labels(subplot, xlabel, ylabel) |
| 1970 | | pylab.draw() |
| 1971 | | |
| | 1904 | |