Source code for brainbox.tests.test_modeling

import unittest
import numpy as np
import pandas as pd
import brainbox.modeling.design_matrix as bdm
import brainbox.modeling.utils as mut
from pathlib import Path


[docs]class TestModeling(unittest.TestCase):
[docs] def setUp(self): # Params for test self.binwidth = 0.02 # Generate fake trial start, stimon, feedback, and end times starts = np.array([0, 1.48, 2.93, 4.67, 6.01, 7.31, 8.68, 9.99, 11.43, 12.86]) ends = np.array([1.35, 2.09, 3.53, 5.23, 6.58, 7.95, 9.37, 11.31, 12.14, 13.26]) stons = starts + 0.1 fdbks = np.array([0.24, 1.64, 3.15, 4.81, 6.23, 7.50, 8.91, 10.16, 11.64, 13.05]) # Figure out how many bins each trial is and generate non-monotonic trace of fake wheel whlpath = Path(__file__).parent.joinpath('fixtures', 'design_wheel_traces_test.p') if whlpath.exists(): fakewheels = np.load(whlpath, allow_pickle=True) # Store trialsdf for later use self.trialsdf = pd.DataFrame({'trial_start': starts, 'trial_end': ends, 'stim_onset': stons, 'feedback': fdbks, 'wheel_traces': fakewheels})
[docs] def binf(self, x): return np.ceil(x / self.binwidth).astype(int)
[docs] def test_dm_construct(self): """ Check whether or not design matrix construction works as intended """ # Design matrix instance self.design = bdm.DesignMatrix(self.trialsdf, vartypes={'trial_start': 'timing', 'trial_end': 'timing', 'stim_onset': 'timing', 'feedback': 'timing', 'wheel_traces': 'continuous'}) # Separate bases for wheel and timing tbases = mut.raised_cosine(0.2, 3, self.binf) wbases = mut.raised_cosine(0.1, 2, self.binf) # Add covariates one by one. Add different offsets on timings to test self.design.add_covariate_timing('start', 'trial_start', tbases, offset=0.02) self.design.add_covariate_timing('stim_on', 'stim_onset', tbases) self.design.add_covariate_timing('feedback', 'feedback', tbases, offset=-0.02) self.design.add_covariate('wheelpos', self.trialsdf.wheel_traces, wbases, offset=-0.1) self.design.compile_design_matrix() # Finally compile # Load target DM npy_file = Path(__file__).parent.joinpath('fixtures', 'design_matrix_test.npy') if npy_file.exists(): ref_dm = np.load(npy_file) self.assertTrue(np.allclose(self.design.dm, ref_dm))