data = {}
dat_bin = {}
dat_mean = {}
dat_var = {}
dat = {}
stage_bins = {}
dat_bin_s = {}

for strain in strains:
    print 'processing %s...' % strain

    data[strain] = exp.load_data(strain)
    dat[strain] = getattr(data[strain], feat)

    sbinsb = exp.stage_bins(data[strain], nbins=sbins)

    dat_bin[strain] = exp.bin_data(dat[strain], sbinsb)
    dat_mean[strain] = np.mean(dat_bin[strain], axis=0)
    dat_var[strain] = np.var(dat_bin[strain], axis=0)

    stage_bins[strain] = exp.stage_bins(data[strain], nbins=1)
    dat_bin_s[strain] = exp.bin_data(dat[strain], stage_bins[strain])

#%% Order by activity

order = {}
for strain in strains:
    order[strain] = np.argsort(np.sum(dat[strain], axis=1))

#%% Plot Data
示例#2
0
    if save_fig is not None:
        fig.savefig(
            os.path.join(save_fig, '%s_%s.png' % (strain, 'stage_durations')))

    ### Mean feature accross worms and stages

    d = getattr(data, feat)

    #average+order
    dm = np.sum(d, axis=1) * 1.0 / data.total_time

    dorder = np.argsort(dm)
    exp.save(dorder, '%s_%s_order.npy' % (strain, feat))

    #stage resolved averages
    sbins = exp.stage_bins(data, nbins=1)
    dms = exp.bin_data(d, sbins)
    dms_shuffle = dms.copy()
    for i in range(dms.shape[1]):
        dms_shuffle[:, i] = np.random.permutation(dms_shuffle[:, i])
    dms_data = [dms, dms_shuffle]

    fig = plt.figure(20 + i)
    plt.clf()
    plt.subplot(3, 2, 1)
    plt.plot(dm[dorder])
    for s in range(data.nstages):
        plt.plot(dm[np.argsort(dms[:, s])])
    plt.title('%s %s - total mean' % (strain, feat))

    for s in range(data.nstages):
示例#3
0
        res = average(signal, kernel_flat, scales)
        #res = average(signal, kernel_gauss, scales);
        fres = exp.load('%s_%s_scales_mean.npy' % (strain, feat), memmap='r+')
        fres[i, :, :] = res[0]

    from multiprocessing import Pool  #, cpu_count;

    #pool = Pool(processes = cpu_count()-6);
    pool = Pool(processes=12)

    pool.map(run, range(data.nworms))

    ### Time normalize data
    fres = exp.load('%s_%s_scales_mean.npy' % (strain, feat), memmap='r')

    sbins = exp.stage_bins(data, nbins=8192)
    res_shape = (fres.shape[0], fres.shape[1], sbins[0].shape[1])

    exp.memmap('%s_%s_time_normalized_scales_mean.npy' % (strain, feat),
               shape=res_shape,
               mode='w+')

    def norm(i):
        print 'scale %d' % i
        fres = exp.load('%s_%s_scales_mean.npy' % (strain, feat), memmap='r')
        fres_tn = exp.load('%s_%s_time_normalized_scales_mean.npy' %
                           (strain, feat),
                           memmap='r+')
        fres_tn[:, i, :] = exp.bin_data(fres[:, i, :], sbins)

    pool = Pool(processes=12)
  else:
    return -dd;

#%% Load / Prepare data

data = {}; dat_bin = {}; dat_mean = {}; dat_var = {};
dat = {}; stage_bins = {}; dat_bin_s = {};

for strain in strains:
  print 'processing %s...'% strain;

  data[strain] = exp.load_data(strain);
  dat[strain] = getattr(data[strain], feat);
  rids = getattr(data[strain], 'roam') > 0;
  
  bins, bine = exp.stage_bins(data[strain], nbins= sbins);
  
  nworms = rids.shape[0];
  dat_bin[strain] = np.zeros((nworms, tbins));
  for t in range(tbins):
    for w in range(nworms):
      ids = np.arange(bins[w,t], bine[w,t]);
      dd = dat[strain][w, ids][rids[w][ids]];
      dat_bin[strain][w,t] = np.std(dd) / np.mean(dd);
    

  #dat_bin[strain] = exp.bin_data(dat[strain], sbinsb);
  dat_mean[strain] = np.mean(dat_bin[strain], axis = 0);
  dat_var[strain]  = np.var(dat_bin[strain], axis = 0);
  
  #stage_bins[strain] = exp.stage_bins(data[strain], nbins=1);
示例#5
0
plt.plot(model.predict(d[wid, tstart:tend]), 'r')
plt.plot(-d[wid, tstart:tend] + 2.1, 'b')
#plt.plot(d[wid, tstart:tend] - idx_from_path(path))

## see how the hmm parameter change over time


def model_to_param(model):
    emis = []
    for s in model.states[:-2]:
        emis.append(s.distribution.values()[-1])
    trans = model.dense_transition_matrix()
    return np.hstack([trans[0, 0], trans[1, 1], emis, trans[2, :2]])


sbins_start, sbins_end = exp.stage_bins(data, nbins=2**5)

nbins_total = sbins_start.shape[1]
#nparam = nstates * (nstates-1) + nstates; #transition parameter + emission prob for 1
nparam = 6
nworms = d.shape[0]
probs = np.zeros((nparam, nbins_total))
for i in range(nbins_total):
    print '%d/%d' % (i, nbins_total)
    model = hmm(nstates=2)
    dd = [d[:, sbins_start[j][i]:sbins_end[j][i]] for j in range(nworms)]
    model.fit(dd, max_iterations=500, stop_threshold=10e-5, n_jobs=12)
    probs[:, i] = model_to_param(model)
probs[3, :] = 1 - probs[3, :]

droam = exp.bin_data(d, (sbins_start, sbins_end))
示例#6
0
    idx_dw = np.logical_and(bin_st[b] < t_dw + d_dw, t_dw < bin_ed[b]);
    durs_up.append(d_up[idx_up]);
    durs_dw.append(d_dw[idx_dw]);
  return (durs_up, durs_dw);
  
def bin_durations(t_up, t_dw, d_up, d_dw, bin_st, bin_ed):
  nworms = len(t_up);
  durs_up = [];
  durs_dw = [];
  for w in range(nworms):
    du,dd = bin_durations_for_worm(t_up[w], t_dw[w], d_up[w], d_dw[w], bin_st[w], bin_ed[w]);
    durs_up.append(du); durs_dw.append(dd);
  return (durs_up, durs_dw);


sbin_st, sbin_ed = exp.stage_bins(data, nbins=10);

durs_up, durs_dw = bin_durations(times_up, times_dw, dur_up, dur_dw, sbin_st, sbin_ed);


## distributions for individual worms

# durs have shape (nworms, nbins, xx)

nworms = len(durs_up);
nbins = len(sbin_st[0]);

# number of periods
ndurs_up = np.zeros((nworms, nbins));
ndurs_dw = np.zeros((nworms, nbins));
for w in range(nworms):
t = np.random.rand(100) > 0.5
t = np.array(t, dtype=int)

p, c = pk.maximum_likelihood_probabilities(t)

os.chdir(dir_base)

import experiment as exp

strain = 'N2'
feat = 'roam'

data = exp.load_data(strain)
d = getattr(data, feat)

sbins = exp.stage_bins(data, nbins=2**4)

c = np.zeros((data.nworms, sbins[0].shape[1], 2))
p = np.zeros((data.nworms, sbins[0].shape[1], 2))
for wid in range(data.nworms):
    print 'worm %d' % wid
    st = sbins[0][wid]
    ed = sbins[1][wid]
    for i, se in enumerate(zip(st, ed)):
        s, e = se
        pp, cc = pk.maximum_likelihood_probabilities(d[wid, s:e])
        c[wid, i] = [cc[(0, 1)], cc[(1, 0)]]
        p[wid, i] = [pp[0], pp[1]]

### plot the result