# -*- coding: utf-8 -*-
"""
Created on Fri May 1 13:38:29 2020
@author: sanoev
STiMCON: Speech Timing in a Model Constrained Oscillatory Network
This script contains the code for creating sensory input
"""
import numpy as np
import scipy.signal as sp
class modelSen(object):
def __init__(self, stimpara,parameters):
self.Nnodes = parameters['Nnodes']
self.wordDur = stimpara['word_duration']
self.onsetdelay = stimpara['onsetdelay']
self.Nnames = parameters['LMnames']
def create_stim(self, seninput):
Ntime = int(self.onsetdelay*2+seninput['tot_length'])
sensory_input = np.zeros([self.Nnodes,Ntime])
for it,stim in enumerate(seninput['stim_ord']):
stt = int(seninput['stim_time'][it])+self.onsetdelay
sensory_input[stim,stt:stt+self.wordDur] = np.linspace(0,2,self.wordDur)
return sensory_input
def create_stim_vartimethres(self, seninput):
Ntime = int(self.onsetdelay*2+seninput['tot_length'])
sensory_input = np.zeros([self.Nnodes,Ntime])
if len(seninput['stim_ord'])>0:
for it,stim in enumerate(seninput['stim_ord']):
stt = int(seninput['stim_time'][it])+self.onsetdelay
sensory_input[stim,stt:stt+self.wordDur] = np.linspace(0,seninput['intensity'][it],self.wordDur)
else:
for stimC in range(len(seninput['intensity'][0])):
for it in range(self.Nnodes):
stt = int(seninput['stim_time'][stimC]+self.onsetdelay)
sensory_input[it,stt:stt+self.wordDur] = np.linspace(0,seninput['intensity'][it,stimC],self.wordDur)
return sensory_input
def create_stim_vartimethredur(self, seninput):
Ntime = int(self.onsetdelay*2+seninput['tot_length'])
sensory_input = np.zeros([self.Nnodes,Ntime])
if len(seninput['stim_ord'])>0:
for it,stim in enumerate(seninput['stim_ord']):
stt = int(seninput['stim_time'][it])+self.onsetdelay
curwordDur = seninput['stim_dur'][it]
#sensory_input[stim,stt:stt+curwordDur] = np.arange(curwordDur)*seninput['increase']
sensory_input[stim,stt:stt+curwordDur] = np.linspace(0,seninput['intensity'][it], curwordDur)
#sensory_input[stim,stt:stt+self.wordDur] = np.linspace(0,seninput['intensity'][it],self.wordDur
else:
for stimC in range(len(seninput['intensity'][0])):
for it in range(self.Nnodes):
stt = int(seninput['stim_time'][stimC]+self.onsetdelay)
sensory_input[it,stt:stt+self.wordDur] = np.linspace(0,seninput['intensity'][it,stimC],self.wordDur)
return sensory_input
def create_stim_vartimethresG(self, seninput, GausW = 3):
Ntime = int(self.onsetdelay*2+seninput['tot_length'])
sensory_input = np.zeros([self.Nnodes,Ntime])
if len(seninput['stim_ord'])>0:
for it,stim in enumerate(seninput['stim_ord']):
stt = int(seninput['stim_time'][it])+self.onsetdelay
sig = sp.windows.gaussian(self.wordDur*2, self.wordDur/GausW)
sig = sig*seninput['intensity'][it]
sensory_input[stim,stt:stt+self.wordDur*2] = sig
else:
for stimC in range(len(seninput['intensity'][0])):
for it in range(self.Nnodes):
stt = int(seninput['stim_time'][stimC]+self.onsetdelay)
sig = sp.windows.gaussian(self.wordDur*2, self.wordDur/GausW)
sig = sig*seninput['intensity'][it,stimC]
sensory_input[it,stt:stt+self.wordDur] = sig
return sensory_input