From 2519826de611b7fb5b84d5123803a984ba46b240 Mon Sep 17 00:00:00 2001 From: FUJISHIGE TEMMA Date: Fri, 26 May 2023 13:58:27 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20new=20saving?= =?UTF-8?q?=20method(shelve=5Faps)=20and=20chores?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .devcontainer/devcontainer.json | 25 +++++ .gitignore | 9 +- .vscode/settings.json | 6 ++ ouropy/genconnection.py | 2 +- ouropy/gennetwork.py | 38 +++++-- ouropy/genpopulation.py | 2 +- paradigm_pattern_separation_baseline.py | 2 +- pydentate/inputs.py | 137 ++++++++++++------------ 8 files changed, 134 insertions(+), 87 deletions(-) create mode 100644 .devcontainer/devcontainer.json create mode 100644 .vscode/settings.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..033cb5e --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,25 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/ubuntu +{ + "name": "Ubuntu", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "image": "mcr.microsoft.com/devcontainers/base:jammy", + "features": { + "ghcr.io/devcontainers/features/python:1": {} + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "uname -a", + + // Configure tool-specific properties. + // "customizations": {}, + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.gitignore b/.gitignore index c590f49..56d281d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,12 +3,6 @@ __pycache__/ *.py[cod] *$py.class - - - - - - # Distribution / packaging .Python build/ @@ -105,3 +99,6 @@ venv.bak/ # mypy .mypy_cache/ + +# macos +.DS_Store diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..6ba1afd --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "python.formatting.provider": "none" +} \ No newline at end of file diff --git a/ouropy/genconnection.py b/ouropy/genconnection.py index 0c5a433..ee5df69 100644 --- a/ouropy/genconnection.py +++ b/ouropy/genconnection.py @@ -1026,7 +1026,7 @@ def write_aps(self, directory='', fname=''): directory = os.getcwd() if not os.path.isdir(directory): os.mkdir(directory) - path = directory + '\\' + fname + '.npz' + path = os.path.join(directory, f'{fname}.npz') try: ap_list = [x[0].as_numpy() for x in self.ap_counters] except: diff --git a/ouropy/gennetwork.py b/ouropy/gennetwork.py index 1f7e0b7..253a8ff 100644 --- a/ouropy/gennetwork.py +++ b/ouropy/gennetwork.py @@ -153,7 +153,7 @@ def save_ap_fig(self, fig, directory=None, file_name=None): if not os.path.isdir(directory): os.mkdir(directory) - full_file_path = directory + "\\" + file_name + full_file_path = os.path.join(directory, file_name) if os.path.isfile(full_file_path): raise ValueError("The file already exists.\n" + "shelve_network does not overwrite files.") @@ -181,7 +181,7 @@ def shelve_network(self, directory=None, file_name=None): if not os.path.isdir(directory): os.mkdir(directory) - full_file_path = directory + "\\" + file_name + '.pydd' + full_file_path = os.path.join(directory, file_name+'.pydd') if os.path.isfile(full_file_path): raise ValueError("The file already exists.\n" + "shelve_network does not overwrite files.") @@ -190,6 +190,26 @@ def shelve_network(self, directory=None, file_name=None): # BUG with paradigm_frequency_inhibition at 1Hz, possibly too long sim? curr_shelve[str(self)] = self.get_properties() curr_shelve.close() + + def shelve_aps(self, directory=None, file_name=None): + if not directory: + directory = os.getcwd() + if not file_name: + loc_time_str = '_'.join(time.asctime(time.localtime()).split(' ')) + file_name = str(self) + '_' + loc_time_str + if not os.path.isdir(directory): + os.mkdir(directory) + + full_file_path = os.path.join(directory, file_name+'.pydd') + if os.path.isfile(full_file_path): + raise ValueError("The file already exists.\n" + + "shelve_aps does not overwrite files.") + + curr_shelve = shelve.open(full_file_path, flag='n') + # BUG with paradigm_frequency_inhibition at 1Hz, possibly too long sim? + curr_shelve['populations'] = [[(i, timestamps) for i, timestamps in enumerate(p.get_timestamps()) if len(timestamps) > 0] for p in self.populations] + curr_shelve.close() + def __str__(self): return str(self.__class__).split("'")[1] @@ -939,7 +959,7 @@ def write_aps(self, directory='', fname=''): directory = os.getcwd() if not os.path.isdir(directory): os.mkdir(directory) - path = directory + '\\' + fname + '.npz' + path = os.path.join(directory, f'{fname}.npz') try: ap_list = [x[0].as_numpy() for x in self.ap_counters] except: @@ -972,8 +992,10 @@ def mk_current_clamp(self, cells, amp=0.3, dur=5, delays=3): self.cells[cell]._current_clamp_soma(amp=amp, dur=dur, delay=delay) def get_timestamps(self): - ap_list = [np.array(x[0]) for x in self.ap_counters] - return ap_list + try: + return [x[0].as_numpy() for x in self.ap_counters] + except: + return [np.array(x[0]) for x in self.ap_counters] def current_clamp_rnd(self, n_cells, amp=0.3, dur=5, delay=3): """DEPRECATE""" @@ -1003,10 +1025,7 @@ def add_connection(self, conn): def get_properties(self): """Get the properties of the network""" - try: - ap_time_stamps = [x[0].as_numpy() for x in self.ap_counters] - except: - ap_time_stamps = [np.array(x[0]) for x in self.ap_counters] + ap_time_stamps = self.get_timestamps() ap_numbers = [x[1].n for x in self.ap_counters] try: v_rec = [x.as_numpy() for x in self.VRecords] @@ -1024,7 +1043,6 @@ def get_properties(self): 'v_records': v_rec, 'VClamps_i': vclamp_i} - properties return properties def __str__(self): diff --git a/ouropy/genpopulation.py b/ouropy/genpopulation.py index b280fcf..9fc5078 100644 --- a/ouropy/genpopulation.py +++ b/ouropy/genpopulation.py @@ -158,7 +158,7 @@ def write_aps(self, directory='', fname=''): directory = os.getcwd() if not os.path.isdir(directory): os.mkdir(directory) - path = directory + '\\' + fname + '.npz' + path = os.path.join(directory, f'{fname}.npz') try: ap_list = [x[0].as_numpy() for x in self.ap_counters] except: diff --git a/paradigm_pattern_separation_baseline.py b/paradigm_pattern_separation_baseline.py index b77d9c6..bcd4185 100644 --- a/paradigm_pattern_separation_baseline.py +++ b/paradigm_pattern_separation_baseline.py @@ -129,7 +129,7 @@ str(input_scale).zfill(3) + '_' + str(run).zfill(3) + '_') - nw.shelve_network(savedir, tuned_save_file_name) + nw.shelve_aps(savedir, tuned_save_file_name) fig = nw.plot_aps(time=600) tuned_fig_file_name = (str(nw) + "_spike-plot_paradigm_local-pattern" + diff --git a/pydentate/inputs.py b/pydentate/inputs.py index 3da87de..70896dd 100644 --- a/pydentate/inputs.py +++ b/pydentate/inputs.py @@ -5,14 +5,15 @@ @author: Daniel & barisckuru """ +import pdb + import numpy as np +import quantities as pq from elephant import spike_train_generation as stg from neo.core import AnalogSignal -import quantities as pq +from scipy import stats from scipy.stats import skewnorm from skimage.measure import profile_line -from scipy import stats -import pdb def inhom_poiss(modulation_rate=10, max_rate=100, n_cells=400): @@ -26,13 +27,9 @@ def inhom_poiss(modulation_rate=10, max_rate=100, n_cells=400): t = np.arange(0, 0.5, sampling_interval.magnitude) - rate_profile = (np.sin(t*modulation_rate*np.pi*2-np.pi/2) + 1) * max_rate / 2 + rate_profile = (np.sin(t * modulation_rate * np.pi * 2 - np.pi / 2) + 1) * max_rate / 2 - rate_profile_as_asig = AnalogSignal(rate_profile, - units=1*pq.Hz, - t_start=0*pq.s, - t_stop=0.5*pq.s, - sampling_period=sampling_interval) + rate_profile_as_asig = AnalogSignal(rate_profile, units=1 * pq.Hz, t_start=0 * pq.s, t_stop=0.5 * pq.s, sampling_period=sampling_interval) spike_trains = [] for x in range(n_cells): @@ -41,11 +38,10 @@ def inhom_poiss(modulation_rate=10, max_rate=100, n_cells=400): # If there is not, we move the next spike by 0.1ms spike_trains.append(curr_train) - array_like = np.array([np.around(np.array(x.times)*1000, decimals=1) - for x in spike_trains], dtype=np.object) + array_like = np.array([np.around(np.array(x.times) * 1000, decimals=1) for x in spike_trains], dtype=object) for arr_idx in range(array_like.shape[0]): bad_idc = np.argwhere(np.diff(array_like[arr_idx]) == 0).flatten() - bad_idc = bad_idc+1 + bad_idc = bad_idc + 1 while bad_idc.any(): for bad_idx in bad_idc: array_like[arr_idx][bad_idx] = array_like[arr_idx][bad_idx] + 0.1 @@ -54,11 +50,20 @@ def inhom_poiss(modulation_rate=10, max_rate=100, n_cells=400): return array_like + def gaussian_connectivity_gc_bc(n_pre, n_gc, n_bc, n_syn_gc, n_syn_bc, scale_gc, scale_bc): """TODO""" pass -def gaussian_connectivity(n_pre, n_post, n_syn=[100,], scale=[1000, 12]): + +def gaussian_connectivity( + n_pre, + n_post, + n_syn=[ + 100, + ], + scale=[1000, 12], +): """TODO THIS IS A STUB FOR A GENERALIZED VERSION OF gaussian_connectivity_gc_bc Choose n_syn postsynaptic cells for each presynaptic cells. Clean up this function. It is not Pythonic. @@ -84,9 +89,9 @@ def gaussian_connectivity(n_pre, n_post, n_syn=[100,], scale=[1000, 12]): center = np.array(n_post) // 2 gauss = stats.norm(loc=center[0], scale=scale[0]) pdf = gauss.pdf(np.arange(n_post[0])) - pdf = pdf/pdf.sum() + pdf = pdf / pdf.sum() post_idc = np.arange(n_post[0]) - start_idc = np.random.randint(0, n_post[0]-1, size=n_pre) + start_idc = np.random.randint(0, n_post[0] - 1, size=n_pre) out_list = [] for idx, n_post_pop in enumerate(n_post): @@ -95,66 +100,68 @@ def gaussian_connectivity(n_pre, n_post, n_syn=[100,], scale=[1000, 12]): for x in start_idc: curr_idc = np.concatenate((post_idc[x:n_post_pop], post_idc[0:x])) # pdb.set_trace() - pre_to_post.append(np.random.choice(curr_idc, size=n_syn[idx], replace=False, - p=pdf)) + pre_to_post.append(np.random.choice(curr_idc, size=n_syn[idx], replace=False, p=pdf)) out_list.append(pre_to_post) - if idx+1 < len(n_post): - gauss = stats.norm(loc=center[idx+1], scale=scale[idx+1]) - pdf = gauss.pdf(n_post[idx+1]) - pdf = pdf/pdf.sum() - post_idc = np.arange(n_post[idx+1]) - start_idc = np.array(((start_idc/n_post_pop)*n_post[idx+1]), dtype=int) - + if idx + 1 < len(n_post): + gauss = stats.norm(loc=center[idx + 1], scale=scale[idx + 1]) + pdf = gauss.pdf(n_post[idx + 1]) + pdf = pdf / pdf.sum() + post_idc = np.arange(n_post[idx + 1]) + start_idc = np.array(((start_idc / n_post_pop) * n_post[idx + 1]), dtype=int) return np.array(pre_to_post) -#Solstad 2006 Grid Model + +# Solstad 2006 Grid Model def _grid_maker(spacing, orientation, pos_peak, arr_size, sizexy, max_rate): - #define the params from input here, scale the resulting array for maxrate and sperate the xy for size and shift - arr_size = arr_size #200*200 dp was good enough in terms of resolution + # define the params from input here, scale the resulting array for maxrate and sperate the xy for size and shift + arr_size = arr_size # 200*200 dp was good enough in terms of resolution x, y = pos_peak - pos_peak = np.array([x,y]) + pos_peak = np.array([x, y]) max_rate = max_rate - lambda_spacing = spacing*(arr_size/100) #100 required for conversion - k = (4*np.pi)/(lambda_spacing*np.sqrt(3)) + lambda_spacing = spacing * (arr_size / 100) # 100 required for conversion + k = (4 * np.pi) / (lambda_spacing * np.sqrt(3)) degrees = orientation - theta = np.pi*(degrees/180) + theta = np.pi * (degrees / 180) meterx, metery = sizexy - arrx = meterx*arr_size # *arr_size for defining the 2d array size - arry = metery*arr_size - dims = np.array([arrx,arry]) + arrx = meterx * arr_size # *arr_size for defining the 2d array size + arry = metery * arr_size + dims = np.array([arrx, arry]) rate = np.ones(dims) - #implementation of grid function + # implementation of grid function # 3 k values for 3 cos gratings with different angles to generate grid fields - k1 = ((k/np.sqrt(2))*np.array((np.cos(theta+(np.pi)/12) + np.sin(theta+(np.pi)/12), - np.cos(theta+(np.pi)/12) - np.sin(theta+(np.pi)/12)))).reshape(2,) - k2 = ((k/np.sqrt(2))*np.array((np.cos(theta+(5*np.pi)/12) + np.sin(theta+(5*np.pi)/12), - np.cos(theta+(5*np.pi)/12) - np.sin(theta+(5*np.pi)/12)))).reshape(2,) - k3 = ((k/np.sqrt(2))*np.array((np.cos(theta+(9*np.pi)/12) + np.sin(theta+(9*np.pi)/12), - np.cos(theta+(9*np.pi)/12) - np.sin(theta+(9*np.pi)/12)))).reshape(2,) - - rate[i,j] = (np.cos(np.dot(k1, curr_dist))+ - np.cos(np.dot(k2, curr_dist))+ np.cos(np.dot(k3, curr_dist)))/3 - rate = max_rate*2/3*(rate+1/2) # arr is the resulting 2d grid out of 3 gratings + k1 = ((k / np.sqrt(2)) * np.array((np.cos(theta + (np.pi) / 12) + np.sin(theta + (np.pi) / 12), np.cos(theta + (np.pi) / 12) - np.sin(theta + (np.pi) / 12)))).reshape( + 2, + ) + k2 = ((k / np.sqrt(2)) * np.array((np.cos(theta + (5 * np.pi) / 12) + np.sin(theta + (5 * np.pi) / 12), np.cos(theta + (5 * np.pi) / 12) - np.sin(theta + (5 * np.pi) / 12)))).reshape( + 2, + ) + k3 = ((k / np.sqrt(2)) * np.array((np.cos(theta + (9 * np.pi) / 12) + np.sin(theta + (9 * np.pi) / 12), np.cos(theta + (9 * np.pi) / 12) - np.sin(theta + (9 * np.pi) / 12)))).reshape( + 2, + ) + + rate[i, j] = (np.cos(np.dot(k1, curr_dist)) + np.cos(np.dot(k2, curr_dist)) + np.cos(np.dot(k3, curr_dist))) / 3 + rate = max_rate * 2 / 3 * (rate + 1 / 2) # arr is the resulting 2d grid out of 3 gratings return rate - -def _grid_population(n_grid, max_rate, seed, arena_size=[1,1], arr_size=200): + + +def _grid_population(n_grid, max_rate, seed, arena_size=[1, 1], arr_size=200): # skewed normal distribution for grid spacings np.random.seed(seed) median_spc = 43 spc_max = 100 - skewness = 6 #Negative values are left skewed, positive values are right skewed. - grid_spc = skewnorm.rvs(a = skewness,loc=spc_max, size=n_grid) #Skewnorm function - grid_spc = grid_spc - min(grid_spc) #Shift the set so the minimum value is equal to zero. - grid_spc = grid_spc / max(grid_spc) #Standadize all the vlues between 0 and 1. - grid_spc = grid_spc * spc_max #Multiply the standardized values by the maximum value. + skewness = 6 # Negative values are left skewed, positive values are right skewed. + grid_spc = skewnorm.rvs(a=skewness, loc=spc_max, size=n_grid) # Skewnorm function + grid_spc = grid_spc - min(grid_spc) # Shift the set so the minimum value is equal to zero. + grid_spc = grid_spc / max(grid_spc) # Standadize all the vlues between 0 and 1. + grid_spc = grid_spc * spc_max # Multiply the standardized values by the maximum value. grid_spc = grid_spc + (median_spc - np.median(grid_spc)) - - grid_ori = np.random.randint(0, high=60, size=[n_grid,1]) #uniform dist for orientation btw 0-60 degrees - grid_phase = np.random.randint(0, high=(arr_size-1), size=[n_grid,2]) #uniform dist grid phase - + + grid_ori = np.random.randint(0, high=60, size=[n_grid, 1]) # uniform dist for orientation btw 0-60 degrees + grid_phase = np.random.randint(0, high=(arr_size - 1), size=[n_grid, 2]) # uniform dist grid phase + # create a 3d array with grids for n_grid - rate_grids = np.zeros((arr_size, arr_size, n_grid))#empty array + rate_grids = np.zeros((arr_size, arr_size, n_grid)) # empty array for i in range(n_grid): x = grid_phase[i][0] y = grid_phase[i][1] @@ -166,17 +173,11 @@ def _grid_population(n_grid, max_rate, seed, arena_size=[1,1], arr_size=200): def _inhom_poiss(arr, dur_s, poiss_seed=0, dt_s=0.025): np.random.seed(poiss_seed) n_cells = arr.shape[0] - spi_arr = np.zeros((n_cells), dtype = np.ndarray) + spi_arr = np.zeros((n_cells), dtype=np.ndarray) for grid_idc in range(n_cells): - np.random.seed(poiss_seed+grid_idc) - rate_profile = arr[grid_idc,:] - asig = AnalogSignal(rate_profile, - units=1*pq.Hz, - t_start=0*pq.s, - t_stop=dur_s*pq.s, - sampling_period=dt_s*pq.s, - sampling_interval=dt_s*pq.s) + np.random.seed(poiss_seed + grid_idc) + rate_profile = arr[grid_idc, :] + asig = AnalogSignal(rate_profile, units=1 * pq.Hz, t_start=0 * pq.s, t_stop=dur_s * pq.s, sampling_period=dt_s * pq.s, sampling_interval=dt_s * pq.s) curr_train = stg.inhomogeneous_poisson_process(asig) - spi_arr[grid_idc] = np.array(curr_train.times*1000) #time conv to ms + spi_arr[grid_idc] = np.array(curr_train.times * 1000) # time conv to ms return spi_arr - From e4b834cfd7e210ab26e3dd74234f096efc782ab7 Mon Sep 17 00:00:00 2001 From: FUJISHIGE TEMMA Date: Fri, 28 Jul 2023 15:37:28 +0900 Subject: [PATCH 2/4] for debug --- .gitignore | 3 + analysis_main.py | 188 +- mechs/gskch.mod | 4 +- mechs/hyperde3.mod | 6 - mechs/ichan2.mod | 9 +- mechs/nca.mod | 4 +- ouropy/gennetwork.py | 235 +- paradigm_pattern_separation_baseline.py | 146 +- ...cy_scale_run_10000_10000_10_1000_000_.pydd | Bin 0 -> 32768 bytes ...scale_run_10000_10000_10_1000_000_.pydd.db | Bin 0 -> 24576 bytes ...d_nw-seed_000_1000_10000[10000][10000].eps | 5713 +++++++++++++++++ ...d_nw-seed_000_1000_10000[10000][10000].pdf | Bin 0 -> 22953 bytes pydentate/__init__.py | 6 +- pydentate/inputs.py | 2 - pydentate/net_tunedrev.py | 95 +- pydentate/neuron_tools.py | 24 +- pydentate/win64/gskch.mod | 4 +- pydentate/win64/hyperde3.mod | 7 +- pydentate/win64/ichan2.mod | 8 +- pydentate/win64/nca.mod | 4 +- pydentate/x86_64/.libs/libnrnmech.so | Bin 191064 -> 168696 bytes pydentate/x86_64/CaBK.c | 44 +- pydentate/x86_64/CaBK.o | Bin 20616 -> 16664 bytes pydentate/x86_64/Gfluct2.c | 62 +- pydentate/x86_64/Gfluct2.o | Bin 19488 -> 14136 bytes pydentate/x86_64/LcaMig.c | 43 +- pydentate/x86_64/LcaMig.o | Bin 22424 -> 17408 bytes pydentate/x86_64/bgka.c | 45 +- pydentate/x86_64/bgka.o | Bin 19744 -> 14872 bytes pydentate/x86_64/ccanl.c | 61 +- pydentate/x86_64/ccanl.o | Bin 20848 -> 14776 bytes pydentate/x86_64/gskch.c | 46 +- pydentate/x86_64/gskch.o | Bin 15496 -> 10944 bytes pydentate/x86_64/hyperde3.c | 260 +- pydentate/x86_64/hyperde3.o | Bin 29592 -> 20656 bytes pydentate/x86_64/ichan2.c | 262 +- pydentate/x86_64/ichan2.o | Bin 28312 -> 20560 bytes pydentate/x86_64/libnrnmech.dylib | Bin 0 -> 168696 bytes pydentate/x86_64/libnrnmech.so | Bin 191064 -> 0 bytes pydentate/x86_64/makemod2c_inc | 163 +- pydentate/x86_64/{mod_func.c => mod_func.cpp} | 52 +- pydentate/x86_64/mod_func.o | Bin 4968 -> 2456 bytes pydentate/x86_64/nca.c | 231 +- pydentate/x86_64/nca.o | Bin 19512 -> 14560 bytes pydentate/x86_64/netstim125.c | 90 +- pydentate/x86_64/netstim125.o | Bin 17800 -> 15320 bytes pydentate/x86_64/netstimbox.c | 71 +- pydentate/x86_64/netstimbox.o | Bin 12656 -> 9640 bytes pydentate/x86_64/special | 120 +- pydentate/x86_64/special.nrn | Bin 0 -> 33592 bytes pydentate/x86_64/tca.c | 47 +- pydentate/x86_64/tca.o | Bin 26536 -> 20888 bytes pydentate/x86_64/tmgexp2syn.c | 90 +- pydentate/x86_64/tmgexp2syn.o | Bin 22200 -> 17456 bytes pydentate/x86_64/tmgsyn.c | 83 +- pydentate/x86_64/tmgsyn.o | Bin 17928 -> 13808 bytes pydentate/x86_64/vecevent.c | 40 +- pydentate/x86_64/vecevent.o | Bin 10840 -> 7568 bytes 58 files changed, 7179 insertions(+), 1089 deletions(-) create mode 100644 pydentate.net_tunedrev.TunedNetwork-data-paradigm-local-pattern-separation_nw-seed_input-seed_input-frequency_scale_run_10000_10000_10_1000_000_.pydd create mode 100644 pydentate.net_tunedrev.TunedNetwork-data-paradigm-local-pattern-separation_nw-seed_input-seed_input-frequency_scale_run_10000_10000_10_1000_000_.pydd.db create mode 100644 pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].eps create mode 100644 pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].pdf mode change 100644 => 100755 pydentate/x86_64/.libs/libnrnmech.so create mode 100755 pydentate/x86_64/libnrnmech.dylib delete mode 100644 pydentate/x86_64/libnrnmech.so rename pydentate/x86_64/{mod_func.c => mod_func.cpp} (57%) mode change 100644 => 100755 pydentate/x86_64/special create mode 100755 pydentate/x86_64/special.nrn diff --git a/.gitignore b/.gitignore index 56d281d..45623de 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,6 @@ venv.bak/ # macos .DS_Store + +# outputs +outputs/ diff --git a/analysis_main.py b/analysis_main.py index 769c9c4..3250ccc 100644 --- a/analysis_main.py +++ b/analysis_main.py @@ -13,31 +13,35 @@ @author: daniel """ +import pdb + +# from burst_generator_inhomogeneous_poisson import inhom_poiss +import shelve + +import matplotlib.pyplot as plt import numpy as np +import pylab from scipy.signal import convolve from scipy.stats import pearsonr from sklearn.preprocessing import normalize -#from burst_generator_inhomogeneous_poisson import inhom_poiss -import shelve -import matplotlib.pyplot as plt -import pylab -import pdb + def tri_filter(signal, kernel_delta): """ kernel_delta width of kernel in datapoints """ - kernel = np.append(np.arange(kernel_delta/2),np.arange(kernel_delta/2,-1,-1)) + kernel = np.append(np.arange(kernel_delta / 2), np.arange(kernel_delta / 2, -1, -1)) # convolve2d has proven PAINFULLY slow for some reason - #signal_conv = convolve2d(signal,kernel,'same') + # signal_conv = convolve2d(signal,kernel,'same') new_signal = [] for x in signal: - new_signal.append(convolve(x, kernel, 'same')) + new_signal.append(convolve(x, kernel, "same")) signal_conv = np.array(new_signal) return signal_conv -def correlate_signals(signal1,signal2): + +def correlate_signals(signal1, signal2): """Correlates two nxm dimensional signals. Correlates sig1n with Sign2n along m and then averages all n correlation coefficients. @@ -48,216 +52,216 @@ def correlate_signals(signal1,signal2): for idx in range(signal1.shape[0]): sig1 = signal1[idx] - pylab.std(signal1[idx]) sig2 = signal2[idx] - pylab.std(signal2[idx]) - #cor = sum(sig1*sig2)/(len(sig1)*pylab.std(sig1)*pylab.std(sig2)) - cor = sum(sig1*sig2)/(np.sqrt(sum(sig1**2))*np.sqrt(sum(sig2**2))) + # cor = sum(sig1*sig2)/(len(sig1)*pylab.std(sig1)*pylab.std(sig2)) + cor = sum(sig1 * sig2) / (np.sqrt(sum(sig1**2)) * np.sqrt(sum(sig2**2))) corrs.append(cor) - + corrs = np.array(corrs) return np.nanmean(corrs) -def avg_dotprod_signals(signal1,signal2): + +def avg_dotprod_signals(signal1, signal2): """Average dot product of signal1 and signal2 excluding silent cells""" - non_silent_sigs = np.unique(np.concatenate((np.argwhere(signal1.any(axis=1)),np.argwhere(signal2.any(axis=1))))) + non_silent_sigs = np.unique(np.concatenate((np.argwhere(signal1.any(axis=1)), np.argwhere(signal2.any(axis=1))))) non_silent_sigs.sort() - product = signal1[non_silent_sigs]*signal2[non_silent_sigs] + product = signal1[non_silent_sigs] * signal2[non_silent_sigs] prod_sum = product.sum(axis=1) avg_dot_product = prod_sum.mean() return avg_dot_product + def ndp_signals(signal1, signal2): - #pdb.set_trace() + # pdb.set_trace() dotproduct = (signal1 * signal2).sum() - #pdb.set_trace() - normalization = np.sqrt((signal1*signal1).sum())*np.sqrt((signal2*signal2).sum()) - #pdb.set_trace() - return dotproduct/normalization + # pdb.set_trace() + normalization = np.sqrt((signal1 * signal1).sum()) * np.sqrt((signal2 * signal2).sum()) + # pdb.set_trace() + return dotproduct / normalization + def ndp_signals_tresolved(signal1, signal2, len_bin): pdb.set_trace() - signal1 = np.reshape(signal1[:,0:int(len_bin*int(signal1.shape[1]/len_bin))], (signal1.shape[0],int(signal1.shape[1]/len_bin),len_bin)) + signal1 = np.reshape(signal1[:, 0 : int(len_bin * int(signal1.shape[1] / len_bin))], (signal1.shape[0], int(signal1.shape[1] / len_bin), len_bin)) signal1 = signal1.sum(axis=2) pdb.set_trace() - signal2 = np.reshape(signal2[:,0:int(len_bin*int(signal2.shape[1]/len_bin))], (signal2.shape[0],int(signal2.shape[1]/len_bin),len_bin)) + signal2 = np.reshape(signal2[:, 0 : int(len_bin * int(signal2.shape[1] / len_bin))], (signal2.shape[0], int(signal2.shape[1] / len_bin), len_bin)) signal2 = signal2.sum(axis=2) pdb.set_trace() dotproduct = (signal1 * signal2).sum(axis=0) pdb.set_trace() - normalization = np.sqrt((signal1*signal1).sum(axis=0))*np.sqrt((signal2*signal2).sum(axis=0)) - - return dotproduct/normalization + normalization = np.sqrt((signal1 * signal1).sum(axis=0)) * np.sqrt((signal2 * signal2).sum(axis=0)) + + return dotproduct / normalization + -def avg_dotprod_signals_tbinned(signal1,signal2, len_bin = 1000): +def avg_dotprod_signals_tbinned(signal1, signal2, len_bin=1000): """Average dot product of signal1 and signal2""" # Normalize every time bin invididually - - signal1 = np.reshape(signal1[:,0:int((signal1.shape[1]/len_bin)*len_bin)], - (signal1.shape[0], signal1.shape[1]/len_bin,len_bin), len_bin) - signal1 = signal1[:,0:5,:] - signal2 = np.reshape(signal2[:,0:int((signal2.shape[1]/len_bin)*len_bin)], - (signal2.shape[0], signal2.shape[1]/len_bin,len_bin), len_bin) - signal2 = signal2[:,0:5,:] + + signal1 = np.reshape(signal1[:, 0 : int((signal1.shape[1] / len_bin) * len_bin)], (signal1.shape[0], signal1.shape[1] / len_bin, len_bin), len_bin) + signal1 = signal1[:, 0:5, :] + signal2 = np.reshape(signal2[:, 0 : int((signal2.shape[1] / len_bin) * len_bin)], (signal2.shape[0], signal2.shape[1] / len_bin, len_bin), len_bin) + signal2 = signal2[:, 0:5, :] sig1 = [] for x in signal1: - sig1.append(normalize(x,axis=1)) + sig1.append(normalize(x, axis=1)) signal1 = np.array(sig1) - + sig2 = [] for x in signal2: sig2.append(normalize(x, axis=1)) signal2 = np.array(sig2) - product = signal1*signal2 + product = signal1 * signal2 prod_sum = product.sum(axis=2) silent_sigs = np.argwhere(np.logical_and(np.invert(signal1.any(axis=2)), np.invert(signal2.any(axis=2)))) for x in silent_sigs: - prod_sum[x[0],x[1]] = np.NaN + prod_sum[x[0], x[1]] = np.NaN avg_dot_product = np.nanmean(prod_sum, axis=0) return avg_dot_product + def time_stamps_to_signal(time_stamps, dt_signal, t_start, t_stop): """Convert an array of timestamps to a signal where 0 is absence and 1 is presence of spikes """ # Construct a zero array with size corresponding to desired output signal - sig = np.zeros((np.shape(time_stamps)[0],int((t_stop-t_start)/dt_signal))) + sig = np.zeros((np.shape(time_stamps)[0], int((t_stop - t_start) / dt_signal))) # Find the indices where spikes occured according to time_stamps time_idc = [] for x in time_stamps: curr_idc = [] if np.any(x): for y in x: - curr_idc.append((y-t_start)/ dt_signal) + curr_idc.append((y - t_start) / dt_signal) time_idc.append(curr_idc) - + # Set the spike indices to 1 try: for sig_idx, idc in enumerate(time_idc): - sig[sig_idx,np.array(idc,dtype=np.int)] = 1 + sig[sig_idx, np.array(idc, dtype=np.int)] = 1 except: - for sig_idx, idc in enumerate(time_idc): - sig[sig_idx,np.array(idc,dtype=np.int)-1] = 1 + sig[sig_idx, np.array(idc, dtype=np.int) - 1] = 1 return sig -def population_similarity_measure_ob(signal1,signal2, len_bin): - signal1 = np.reshape(signal1[:,0:int((signal1.shape[1]/len_bin)*len_bin)], - (signal1.shape[0], signal1.shape[1]/len_bin,len_bin), len_bin) + +def population_similarity_measure_ob(signal1, signal2, len_bin): + signal1 = np.reshape(signal1[:, 0 : int((signal1.shape[1] / len_bin) * len_bin)], (signal1.shape[0], signal1.shape[1] / len_bin, len_bin), len_bin) signal1 = signal1.mean(axis=2) - signal2 = np.reshape(signal2[:,0:int((signal2.shape[1]/len_bin)*len_bin)], - (signal2.shape[0], signal2.shape[1]/len_bin,len_bin), len_bin) + signal2 = np.reshape(signal2[:, 0 : int((signal2.shape[1] / len_bin) * len_bin)], (signal2.shape[0], signal2.shape[1] / len_bin, len_bin), len_bin) signal2 = signal2.mean(axis=2) - #Normalize + # Normalize signal1 = normalize(signal1, axis=0) signal2 = normalize(signal2, axis=0) - product = signal1*signal2 + product = signal1 * signal2 prod_sum = product.sum(axis=0) return prod_sum.mean() -def similarity_measure_leutgeb_BUGGY(signal1,signal2, len_bin): - """Oriented on the """ - signal1 = np.reshape(signal1[:,0:int((signal1.shape[1]/len_bin)*len_bin)], - (signal1.shape[0], signal1.shape[1]/len_bin,len_bin), len_bin) + +def similarity_measure_leutgeb_BUGGY(signal1, signal2, len_bin): + """Oriented on the""" + signal1 = np.reshape(signal1[:, 0 : int((signal1.shape[1] / len_bin) * len_bin)], (signal1.shape[0], signal1.shape[1] / len_bin, len_bin), len_bin) signal1 = signal1.sum(axis=2) - signal2 = np.reshape(signal2[:,0:int((signal2.shape[1]/len_bin)*len_bin)], - (signal2.shape[0], signal2.shape[1]/len_bin,len_bin), len_bin) + signal2 = np.reshape(signal2[:, 0 : int((signal2.shape[1] / len_bin) * len_bin)], (signal2.shape[0], signal2.shape[1] / len_bin, len_bin), len_bin) signal2 = signal2.sum(axis=2) corr_vector = [] for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:,x], signal2[:,x])[0]) + corr_vector.append(pearsonr(signal1[:, x], signal2[:, x])[0]) return np.array(corr_vector) -def similarity_measure_leutgeb(signal1,signal2, len_bin): + +def similarity_measure_leutgeb(signal1, signal2, len_bin): pdb.set_trace() - signal1 = np.reshape(signal1[:,0:int(len_bin*int(signal1.shape[1]/len_bin))], (signal1.shape[0],int(signal1.shape[1]/len_bin),len_bin)) + signal1 = np.reshape(signal1[:, 0 : int(len_bin * int(signal1.shape[1] / len_bin))], (signal1.shape[0], int(signal1.shape[1] / len_bin), len_bin)) signal1 = signal1.sum(axis=2) pdb.set_trace() - signal2 = np.reshape(signal2[:,0:int(len_bin*int(signal2.shape[1]/len_bin))], (signal2.shape[0],int(signal2.shape[1]/len_bin),len_bin)) + signal2 = np.reshape(signal2[:, 0 : int(len_bin * int(signal2.shape[1] / len_bin))], (signal2.shape[0], int(signal2.shape[1] / len_bin), len_bin)) signal2 = signal2.sum(axis=2) pdb.set_trace() corr_vector = [] for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:,x], signal2[:,x])[0]) + corr_vector.append(pearsonr(signal1[:, x], signal2[:, x])[0]) pdb.set_trace() return np.array(corr_vector) + def sqrt_diff(signal1, signal2, len_bin): - signal1 = np.reshape(signal1[:,0:int((signal1.shape[1]/len_bin)*len_bin)], - (signal1.shape[0], signal1.shape[1]/len_bin,len_bin), len_bin) - - signal2 = np.reshape(signal2[:,0:int((signal2.shape[1]/len_bin)*len_bin)], - (signal2.shape[0], signal2.shape[1]/len_bin,len_bin), len_bin) - - subtr = np.sqrt((signal1 - signal2)**2) - subtr_sum = subtr.sum(axis = 2).sum(axis=0) + signal1 = np.reshape(signal1[:, 0 : int((signal1.shape[1] / len_bin) * len_bin)], (signal1.shape[0], signal1.shape[1] / len_bin, len_bin), len_bin) + + signal2 = np.reshape(signal2[:, 0 : int((signal2.shape[1] / len_bin) * len_bin)], (signal2.shape[0], signal2.shape[1] / len_bin, len_bin), len_bin) + + subtr = np.sqrt((signal1 - signal2) ** 2) + subtr_sum = subtr.sum(axis=2).sum(axis=0) print(subtr_sum) return subtr_sum + def sqrt_diff_norm_TRESOLVED(signal1, signal2, len_bin): - signal1 = np.reshape(signal1[:,0:int((signal1.shape[1]/len_bin)*len_bin)], - (signal1.shape[0], signal1.shape[1]/len_bin,len_bin), len_bin) + signal1 = np.reshape(signal1[:, 0 : int((signal1.shape[1] / len_bin) * len_bin)], (signal1.shape[0], signal1.shape[1] / len_bin, len_bin), len_bin) - signal2 = np.reshape(signal2[:,0:int((signal2.shape[1]/len_bin)*len_bin)], - (signal2.shape[0], signal2.shape[1]/len_bin,len_bin), len_bin) + signal2 = np.reshape(signal2[:, 0 : int((signal2.shape[1] / len_bin) * len_bin)], (signal2.shape[0], signal2.shape[1] / len_bin, len_bin), len_bin) total_spikes = signal1.sum(axis=2).sum(axis=0) + signal1.sum(axis=2).sum(axis=0) - subtr = np.sqrt((signal1 - signal2)**2) - subtr_sum = subtr.sum(axis = 2).sum(axis=0) / total_spikes + subtr = np.sqrt((signal1 - signal2) ** 2) + subtr_sum = subtr.sum(axis=2).sum(axis=0) / total_spikes print(subtr_sum) return subtr_sum + def coactivity(signal1, signal2): - coactive = (np.array(signal1 >0) * np.array(signal2 > 0)).sum() - total_active = np.logical_or(np.array(signal1 >0), np.array(signal2 > 0)).sum() - return coactive/float(total_active) + coactive = (np.array(signal1 > 0) * np.array(signal2 > 0)).sum() + total_active = np.logical_or(np.array(signal1 > 0), np.array(signal2 > 0)).sum() + return coactive / float(total_active) + def overlap(signal1, signal2): - total_overlap = ((signal1 > 0) == (signal2 >0)).sum() + total_overlap = ((signal1 > 0) == (signal2 > 0)).sum() return total_overlap / float(len(signal1)) + def sqrt_diff_norm(signal1, signal2, len_bin): total_spikes = signal1.sum() + signal2.sum() - subtr = np.sqrt((signal1 - signal2)**2).sum() - return subtr/total_spikes + subtr = np.sqrt((signal1 - signal2) ** 2).sum() + return subtr / total_spikes + def inner_pearsonr_BUGGY(signal1, len_bin): - signal1 = np.reshape(signal1[:,0:int((signal1.shape[1]/len_bin)*len_bin)], - (signal1.shape[0], signal1.shape[1]/len_bin,len_bin), len_bin) + signal1 = np.reshape(signal1[:, 0 : int((signal1.shape[1] / len_bin) * len_bin)], (signal1.shape[0], signal1.shape[1] / len_bin, len_bin), len_bin) return signal1 signal1 = signal1.sum(axis=2) corr_vector = [] for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:,0], signal1[:,x])[0]) + corr_vector.append(pearsonr(signal1[:, 0], signal1[:, x])[0]) return corr_vector + def inner_pearsonr(signal1, len_bin): - signal1 = np.reshape(signal1, (signal1.shape[0],signal1.shape[1]/len_bin,len_bin)) + signal1 = np.reshape(signal1, (signal1.shape[0], signal1.shape[1] / len_bin, len_bin)) signal1 = signal1.sum(axis=2) corr_vector = [] for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:,0], signal1[:,x])[0]) + corr_vector.append(pearsonr(signal1[:, 0], signal1[:, x])[0]) return corr_vector - -if __name__ == '__main__': + +if __name__ == "__main__": temporal_patterns = inhom_poiss() - time_sig = time_stamps_to_signal(temporal_patterns, - dt_signal=0.1, - t_start=0, - t_stop=1000) + time_sig = time_stamps_to_signal(temporal_patterns, dt_signal=0.1, t_start=0, t_stop=1000) diff --git a/mechs/gskch.mod b/mechs/gskch.mod index 67a781a..a771c33 100644 --- a/mechs/gskch.mod +++ b/mechs/gskch.mod @@ -67,9 +67,7 @@ PROCEDURE state() { :Computes state variable q at current v and dt. cai = ncai + lcai + tcai rate(cai) q = q + (qinf-q) * qexp - VERBATIM - return 0; - ENDVERBATIM + } LOCAL q10 diff --git a/mechs/hyperde3.mod b/mechs/hyperde3.mod index dc0e40d..832c76e 100644 --- a/mechs/hyperde3.mod +++ b/mechs/hyperde3.mod @@ -102,9 +102,6 @@ INITIAL { hys = hysinf hyhtf = hyhtfinf hyhts = hyhtsinf - VERBATIM - return 0; - ENDVERBATIM } ? states @@ -116,9 +113,6 @@ PROCEDURE states() { :Computes state variables m, h, and n hyhtf = hyhtf + hyhtfexp*(hyhtfinf-hyhtf) hyhts = hyhts + hyhtsexp*(hyhtsinf-hyhts) - VERBATIM - return 0; - ENDVERBATIM } LOCAL q10 diff --git a/mechs/ichan2.mod b/mechs/ichan2.mod index 4d79f53..536d4f8 100644 --- a/mechs/ichan2.mod +++ b/mechs/ichan2.mod @@ -89,10 +89,7 @@ INITIAL { h = hinf nf = nfinf ns = nsinf - - VERBATIM - return 0; - ENDVERBATIM + } ? states @@ -102,9 +99,7 @@ PROCEDURE states() { :Computes state variables m, h, and n h = h + hexp*(hinf-h) nf = nf + nfexp*(nfinf-nf) ns = ns + nsexp*(nsinf-ns) - VERBATIM - return 0; - ENDVERBATIM + } LOCAL q10 diff --git a/mechs/nca.mod b/mechs/nca.mod index 701923e..070761b 100644 --- a/mechs/nca.mod +++ b/mechs/nca.mod @@ -68,9 +68,7 @@ PROCEDURE states() { :Computes state variables m, h, and n trates(v) : at the current v and dt. c = c + cexp*(cinf-c) d = d + dexp*(dinf-d) - VERBATIM - return 0; - ENDVERBATIM + } LOCAL q10 diff --git a/ouropy/gennetwork.py b/ouropy/gennetwork.py index 253a8ff..5e55be6 100644 --- a/ouropy/gennetwork.py +++ b/ouropy/gennetwork.py @@ -6,15 +6,16 @@ @author: DanielM """ -from neuron import h -import random -import numpy as np -import matplotlib.pyplot as plt import math -import time import os +import random import shelve +import time + +import matplotlib.pyplot as plt +import numpy as np import scipy.stats as stats +from neuron import h class GenNetwork(object): @@ -97,7 +98,7 @@ def mk_population(self, cell_type, n_cells): """ - if not hasattr(self, 'populations'): + if not hasattr(self, "populations"): self.populations = [] self.populations.append(Population(cell_type, n_cells, self)) @@ -117,7 +118,7 @@ def set_numpy_seed(self, seed): return np.random.seed def run_network(self, tstop=1000, dt=1): - raise NotImplemented("run_network is not implemented yet") + raise NotImplementedError("run_network is not implemented yet") h.tstop = tstop h.run() @@ -136,10 +137,9 @@ def plot_aps(self, time=200): if not np.array(cells[0]).any(): cells[0] = np.array([0], dtype=float) - plt.subplot(4, 1, idx+1) + plt.subplot(4, 1, idx + 1) plt.eventplot(cells) - plt.ylabel(str(pop) + '\n' + str(pop.perc_active_cells())[0:4] + - '% active') + plt.ylabel(str(pop) + "\n" + str(pop.perc_active_cells())[0:4] + "% active") plt.xlim((0, time)) plt.xlabel("time (ms)") return fig @@ -148,24 +148,21 @@ def save_ap_fig(self, fig, directory=None, file_name=None): if not directory: directory = os.getcwd() if not file_name: - loc_time_str = '_'.join(time.asctime(time.localtime()).split(' ')) - file_name = str(self) + '_' + loc_time_str + loc_time_str = "_".join(time.asctime(time.localtime()).split(" ")) + file_name = str(self) + "_" + loc_time_str if not os.path.isdir(directory): os.mkdir(directory) full_file_path = os.path.join(directory, file_name) if os.path.isfile(full_file_path): - raise ValueError("The file already exists.\n" + - "shelve_network does not overwrite files.") + raise ValueError("The file already exists.\n" + "shelve_network does not overwrite files.") - fig.savefig(full_file_path + ".pdf", dpi=300, format='pdf') - fig.savefig(full_file_path + ".eps", dpi=300, format='eps') + fig.savefig(full_file_path + ".pdf", dpi=300, format="pdf") + fig.savefig(full_file_path + ".eps", dpi=300, format="eps") plt.close() def get_properties(self): - properties = {'populations': [x.get_properties() - for x in self.populations], - 'init_params': self.init_params} + properties = {"populations": [x.get_properties() for x in self.populations], "init_params": self.init_params} return properties def shelve_network(self, directory=None, file_name=None): @@ -176,84 +173,72 @@ def shelve_network(self, directory=None, file_name=None): if not directory: directory = os.getcwd() if not file_name: - loc_time_str = '_'.join(time.asctime(time.localtime()).split(' ')) - file_name = str(self) + '_' + loc_time_str + loc_time_str = "_".join(time.asctime(time.localtime()).split(" ")) + file_name = str(self) + "_" + loc_time_str if not os.path.isdir(directory): os.mkdir(directory) - full_file_path = os.path.join(directory, file_name+'.pydd') + full_file_path = os.path.join(directory, file_name + ".pydd") if os.path.isfile(full_file_path): - raise ValueError("The file already exists.\n" + - "shelve_network does not overwrite files.") + raise ValueError("The file already exists.\n" + "shelve_network does not overwrite files.") - curr_shelve = shelve.open(full_file_path, flag='n') + curr_shelve = shelve.open(full_file_path, flag="n") # BUG with paradigm_frequency_inhibition at 1Hz, possibly too long sim? curr_shelve[str(self)] = self.get_properties() curr_shelve.close() - + def shelve_aps(self, directory=None, file_name=None): if not directory: directory = os.getcwd() if not file_name: - loc_time_str = '_'.join(time.asctime(time.localtime()).split(' ')) - file_name = str(self) + '_' + loc_time_str + loc_time_str = "_".join(time.asctime(time.localtime()).split(" ")) + file_name = str(self) + "_" + loc_time_str if not os.path.isdir(directory): os.mkdir(directory) - full_file_path = os.path.join(directory, file_name+'.pydd') + full_file_path = os.path.join(directory, file_name + ".pydd") if os.path.isfile(full_file_path): - raise ValueError("The file already exists.\n" + - "shelve_aps does not overwrite files.") + raise ValueError("The file already exists.\n" + "shelve_aps does not overwrite files.") - curr_shelve = shelve.open(full_file_path, flag='n') + curr_shelve = shelve.open(full_file_path, flag="n") # BUG with paradigm_frequency_inhibition at 1Hz, possibly too long sim? - curr_shelve['populations'] = [[(i, timestamps) for i, timestamps in enumerate(p.get_timestamps()) if len(timestamps) > 0] for p in self.populations] + curr_shelve["populations"] = [[(i, timestamps) for i, timestamps in enumerate(p.get_timestamps()) if len(timestamps) > 0] for p in self.populations] curr_shelve.close() - def __str__(self): return str(self.__class__).split("'")[1] - - - class GenConnection(object): def __init__(self): pass def get_description(self): """Return a descriptive string for the connection""" - name = self.pre_pop.name + ' to ' + self.post_pop.name + '\n' - pre_cell_targets = '\n'.join([str(x) for x in self.pre_cell_targets]) + name = self.pre_pop.name + " to " + self.post_pop.name + "\n" + pre_cell_targets = "\n".join([str(x) for x in self.pre_cell_targets]) return name + pre_cell_targets def get_name(self): if type(self.pre_pop) == str: - return self.pre_pop + ' to ' + str(self.post_pop) + return self.pre_pop + " to " + str(self.post_pop) else: - return str(self.pre_pop) + ' to ' + str(self.post_pop) + return str(self.pre_pop) + " to " + str(self.post_pop) def get_properties(self): """Get the and make them suitable for pickling""" - properties = {'name': self.get_name(), - 'init_parameters': self.init_parameters, - 'pre_cell_targets': self.pre_cell_targets} - properties['init_parameters']['post_pop'] = str(properties['init_parameters']['post_pop']) - properties['init_parameters']['self'] = str(properties['init_parameters']['self']) + properties = {"name": self.get_name(), "init_parameters": self.init_parameters, "pre_cell_targets": self.pre_cell_targets} + properties["init_parameters"]["post_pop"] = str(properties["init_parameters"]["post_pop"]) + properties["init_parameters"]["self"] = str(properties["init_parameters"]["self"]) try: - properties['init_parameters']['pre_pop'] = str(properties['init_parameters']['pre_pop']) + properties["init_parameters"]["pre_pop"] = str(properties["init_parameters"]["pre_pop"]) except: pass return {self.get_name(): properties} class tmgsynConnection(GenConnection): - - def __init__(self, pre_pop, post_pop, - target_pool, target_segs, divergence, - tau_1, tau_facil, U, tau_rec, e, thr, delay, weight, - rec_cond=False): + def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, tau_1, tau_facil, U, tau_rec, e, thr, delay, weight, rec_cond=False): """Create a connection with tmgsyn as published by Tsodyks, Pawelzik & Markram, 1998. The tmgsyn is a dynamic three state implicit resource synapse model. @@ -316,10 +301,8 @@ def __init__(self, pre_pop, post_pop, self.post_pop = post_pop pre_pop.add_connection(self) post_pop.add_connection(self) - pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / - pre_pop.get_cell_number()) * (2*np.pi) - post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / - post_pop.get_cell_number()) * (2*np.pi) + pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / pre_pop.get_cell_number()) * (2 * np.pi) + post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / post_pop.get_cell_number()) * (2 * np.pi) pre_pop_pos = pos(pre_pop_rad) post_pop_pos = pos(post_pop_rad) @@ -329,19 +312,15 @@ def __init__(self, pre_pop, post_pop, conductances = [] for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] for post_cell_pos in post_pop_pos: curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) sort_idc = np.argsort(curr_dist) closest_cells = sort_idc[0:target_pool] - picked_cells = np.random.choice(closest_cells, - divergence, - replace=False) + picked_cells = np.random.choice(closest_cells, divergence, replace=False) pre_cell_target.append(picked_cells) for tar_c in picked_cells: - curr_syns = [] curr_netcons = [] curr_conductances = [] @@ -356,9 +335,7 @@ def __init__(self, pre_pop, post_pop, curr_syn.e = e curr_syn.tau_rec = tau_rec curr_syns.append(curr_syn) - curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, - curr_syn, thr, delay, - weight, sec=pre_pop[idx].soma) + curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, curr_syn, thr, delay, weight, sec=pre_pop[idx].soma) curr_gvec = h.Vector() curr_gvec.record(curr_syn._ref_g) curr_conductances.append(curr_gvec) @@ -374,10 +351,7 @@ def __init__(self, pre_pop, post_pop, class tmgsynConnectionExponentialProb(GenConnection): - - def __init__(self, pre_pop, post_pop, - scale, target_segs, divergence, - tau_1, tau_facil, U, tau_rec, e, thr, delay, weight): + def __init__(self, pre_pop, post_pop, scale, target_segs, divergence, tau_1, tau_facil, U, tau_rec, e, thr, delay, weight): """Create a connection with tmgsyn as published by Tsodyks, Pawelzik & Markram, 1998. The tmgsyn is a dynamic three state implicit resource synapse model. @@ -440,10 +414,8 @@ def __init__(self, pre_pop, post_pop, self.post_pop = post_pop pre_pop.add_connection(self) post_pop.add_connection(self) - pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / - pre_pop.get_cell_number()) * (2*np.pi) - post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / - post_pop.get_cell_number()) * (2*np.pi) + pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / pre_pop.get_cell_number()) * (2 * np.pi) + post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / post_pop.get_cell_number()) * (2 * np.pi) pre_pop_pos = pos(pre_pop_rad) post_pop_pos = pos(post_pop_rad) @@ -455,20 +427,17 @@ def __init__(self, pre_pop, post_pop, loc = post_pop.get_cell_number() / 2 gauss = stats.expon(loc=0, scale=scale) pdf = gauss.pdf(np.arange(post_pop.get_cell_number())) - pdf = pdf/pdf.sum() + pdf = pdf / pdf.sum() for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] for post_cell_pos in post_pop_pos: curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) sort_idc = np.argsort(curr_dist) - picked_cells = np.random.choice(sort_idc, divergence, - replace=True, p=pdf) + picked_cells = np.random.choice(sort_idc, divergence, replace=True, p=pdf) pre_cell_target.append(picked_cells) for target_cell in picked_cells: - curr_syns = [] curr_netcons = [] @@ -482,9 +451,7 @@ def __init__(self, pre_pop, post_pop, curr_syn.e = e curr_syn.tau_rec = tau_rec curr_syns.append(curr_syn) - curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, - curr_syn, thr, delay, weight, - sec=pre_pop[idx].soma) + curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, curr_syn, thr, delay, weight, sec=pre_pop[idx].soma) curr_netcons.append(curr_netcon) netcons.append(curr_netcons) synapses.append(curr_syns) @@ -495,10 +462,7 @@ def __init__(self, pre_pop, post_pop, class tmgsynConnection_old(GenConnection): - - def __init__(self, pre_pop, post_pop, - target_pool, target_segs, divergence, - tau_1, tau_facil, U, tau_rec, e, thr, delay, weight): + def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, tau_1, tau_facil, U, tau_rec, e, thr, delay, weight): """Create a connection with tmgsyn as published by Tsodyks, Pawelzik & Markram, 1998. The tmgsyn is a dynamic three state implicit resource synapse model. @@ -561,10 +525,8 @@ def __init__(self, pre_pop, post_pop, self.post_pop = post_pop pre_pop.add_connection(self) post_pop.add_connection(self) - pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / - pre_pop.get_cell_number()) * (2*np.pi) - post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / - post_pop.get_cell_number()) * (2*np.pi) + pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / pre_pop.get_cell_number()) * (2 * np.pi) + post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / post_pop.get_cell_number()) * (2 * np.pi) pre_pop_pos = pos(pre_pop_rad) post_pop_pos = pos(post_pop_rad) @@ -579,12 +541,9 @@ def __init__(self, pre_pop, post_pop, sort_idc = np.argsort(curr_dist) closest_cells = sort_idc[0:target_pool] - picked_cells = np.random.choice(closest_cells, - divergence, - replace=False) + picked_cells = np.random.choice(closest_cells, divergence, replace=False) pre_cell_target.append(picked_cells) for tar_c in picked_cells: - curr_syns = [] curr_netcons = [] @@ -598,9 +557,7 @@ def __init__(self, pre_pop, post_pop, curr_syn.e = e curr_syn.tau_rec = tau_rec curr_syns.append(curr_syn) - curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, - curr_syn, thr, delay, weight, - sec=pre_pop[idx].soma) + curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, curr_syn, thr, delay, weight, sec=pre_pop[idx].soma) curr_netcons.append(curr_netcon) netcons.append(curr_netcons) synapses.append(curr_syns) @@ -616,21 +573,18 @@ class Exp2SynConnection(GenConnection): synapse. """ - def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, - tau1, tau2, e, thr, delay, weight): + def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, tau1, tau2, e, thr, delay, weight): """ divergence, tau1, tau2, e, g_max, thr, delay, weight, name = "GC->MC" - """ + """ self.init_parameters = locals() self.pre_pop = pre_pop self.post_pop = post_pop pre_pop.add_connection(self) post_pop.add_connection(self) - pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / - pre_pop.get_cell_number()) * (2*np.pi) - post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / - post_pop.get_cell_number()) * (2*np.pi) + pre_pop_rad = (np.arange(pre_pop.get_cell_number(), dtype=float) / pre_pop.get_cell_number()) * (2 * np.pi) + post_pop_rad = (np.arange(post_pop.get_cell_number(), dtype=float) / post_pop.get_cell_number()) * (2 * np.pi) self.pre_pop_rad = pre_pop_rad self.post_pop_rad = post_pop_rad @@ -641,16 +595,13 @@ def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, netcons = [] for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] for post_cell_pos in post_pop_pos: curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) sort_idc = np.argsort(curr_dist) closest_cells = sort_idc[0:target_pool] - picked_cells = np.random.choice(closest_cells, - divergence, - replace=False) + picked_cells = np.random.choice(closest_cells, divergence, replace=False) pre_cell_target.append(picked_cells) for tar_c in picked_cells: curr_syns = [] @@ -664,9 +615,7 @@ def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, curr_syn.tau2 = tau2 curr_syn.e = e curr_syns.append(curr_syn) - curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, - curr_syn, thr, delay, weight, - sec=pre_pop[idx].soma) + curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, curr_syn, thr, delay, weight, sec=pre_pop[idx].soma) curr_netcons.append(curr_netcon) netcons.append(curr_netcons) synapses.append(curr_syns) @@ -682,8 +631,7 @@ class PerforantPathStimulation(object): synapse. """ - def __init__(self, stim, post_pop, n_targets, target_segs, - tau1, tau2, e, thr, delay, weight): + def __init__(self, stim, post_pop, n_targets, target_segs, tau1, tau2, e, thr, delay, weight): """ divergence, tau1, tau2, e, g_max, thr, delay, weight, name = "GC->MC" @@ -697,8 +645,7 @@ def __init__(self, stim, post_pop, n_targets, target_segs, if type(n_targets) == int: # Select n_targets from post_pop - target_cells = np.random.choice(post_pop.cells, n_targets, - replace=False) + target_cells = np.random.choice(post_pop.cells, n_targets, replace=False) else: target_cells = post_pop.cells[n_targets] @@ -723,9 +670,8 @@ class PerforantPathPoissonStimulation(object): Patterned Perforant Path stimulation as in Yim et al. 2015. uses vecevent.mod -> h.VecStim """ - def __init__(self, post_pop, t_pattern, spat_pattern, target_segs, - tau1, tau2, e, weight): + def __init__(self, post_pop, t_pattern, spat_pattern, target_segs, tau1, tau2, e, weight): post_pop.add_connection(self) synapses = [] netcons = [] @@ -767,16 +713,15 @@ class PerforantPathPoissonTmgsyn(GenConnection): Patterned Perforant Path simulation as in Yim et al. 2015. uses vecevent.mod -> h.VecStim """ - def __init__(self, post_pop, t_pattern, spat_pattern, target_segs, - tau_1, tau_facil, U, tau_rec, e, weight, rec_cond=False): + def __init__(self, post_pop, t_pattern, spat_pattern, target_segs, tau_1, tau_facil, U, tau_rec, e, weight, rec_cond=False): self.init_parameters = locals() post_pop.add_connection(self) synapses = [] netcons = [] t_pattern = list(t_pattern) # nrn does not like np.ndarrays? target_cells = post_pop[spat_pattern] - self.pre_pop = 'Implicit' + self.pre_pop = "Implicit" self.post_pop = post_pop self.vecstim = h.VecStim() self.pattern_vec = h.Vector(t_pattern) @@ -808,8 +753,11 @@ def __init__(self, post_pop, t_pattern, spat_pattern, target_segs, self.pre_cell_targets = np.array(spat_pattern) self.synapses = synapses + """Population ONLY REMAINS IN gennetwork TO KEEP pyDentate RUNNING. THE NEW IMPLEMENTATION OF POPULATION IS IN genpopulation""" + + class Population(object): """This is the model of a generic population. A population is a number of cells of a specific type derived from @@ -896,13 +844,13 @@ def make_cells(self, cell_type, n_cells): Create an empty population within nw and then create 500 granule cells """ - if hasattr(self, 'cell_type'): + if hasattr(self, "cell_type"): if self.cell_type != cell_type: raise TypeError("cell_type inconsistent with population") else: self.cell_type = cell_type - if not hasattr(self, 'cells'): + if not hasattr(self, "cells"): self.cells = [] for x in range(n_cells): @@ -911,12 +859,11 @@ def make_cells(self, cell_type, n_cells): self.cells = np.array(self.cells, dtype=object) def mk_2dtopology(self, width, height): - loc_matrix = np.ndarray(self.get_cell_number(), 2) - aspect = width/height + np.ndarray(self.get_cell_number(), 2) + aspect = width / height n_cells = self.get_cell_number() - n_height = n_cells / aspect + n_cells / aspect n_width - def get_cell_number(self): """Return the number of cells""" @@ -930,7 +877,7 @@ def record_aps(self): self.ap_counters = counters return counters - def plot_aps(self, color='k'): + def plot_aps(self, color="k"): cells = [] for x in self.ap_counters: # as_numpy() doesn't work on windows 10 ??? @@ -946,20 +893,20 @@ def plot_aps(self, color='k'): plt.eventplot(cells, linewidth=2, color=color) - def write_aps(self, directory='', fname=''): + def write_aps(self, directory="", fname=""): if not fname: time_tup = time.gmtime() time_str = time.asctime(time_tup) - time_str = '_'.join(time_str.split(' ')) + time_str = "_".join(time_str.split(" ")) nw_name = self.parent_network.__class__.name pop_name = self.cell_type.name - fname = nw_name + '_' + pop_name + '_' + time_str - fname = fname.replace(':', '-') + fname = nw_name + "_" + pop_name + "_" + time_str + fname = fname.replace(":", "-") if not directory: directory = os.getcwd() if not os.path.isdir(directory): os.mkdir(directory) - path = os.path.join(directory, f'{fname}.npz') + path = os.path.join(directory, f"{fname}.npz") try: ap_list = [x[0].as_numpy() for x in self.ap_counters] except: @@ -980,17 +927,16 @@ def perc_active_cells(self): return (active_counter / float(self.get_cell_number())) * 100 def mk_current_clamp(self, cells, amp=0.3, dur=5, delays=3): - if not hasattr(cells, '__iter__'): - cells = np.random.choice(self.get_cell_number(), cells, - replace=False) + if not hasattr(cells, "__iter__"): + cells = np.random.choice(self.get_cell_number(), cells, replace=False) - if not hasattr(delays, '__iter__'): + if not hasattr(delays, "__iter__"): delays = np.array(delays) for cell in cells: for delay in delays: - self.cells[cell]._current_clamp_soma(amp=amp, dur=dur, - delay=delay) + self.cells[cell]._current_clamp_soma(amp=amp, dur=dur, delay=delay) + def get_timestamps(self): try: return [x[0].as_numpy() for x in self.ap_counters] @@ -1033,20 +979,12 @@ def get_properties(self): except: v_rec = [np.array(x) for x in self.VRecords] vclamp_i = [np.array(x) for x in self.VClamps_i] - properties = {'parent_network': str(self.parent_network), - 'cell_type': self.cell_type.name, - 'cell_number': self.get_cell_number(), - 'connections': [conn.get_properties() - for conn in self.connections], - 'ap_time_stamps': ap_time_stamps, - 'ap_number': ap_numbers, - 'v_records': v_rec, - 'VClamps_i': vclamp_i} + properties = {"parent_network": str(self.parent_network), "cell_type": self.cell_type.name, "cell_number": self.get_cell_number(), "connections": [conn.get_properties() for conn in self.connections], "ap_time_stamps": ap_time_stamps, "ap_number": ap_numbers, "v_records": v_rec, "VClamps_i": vclamp_i} return properties def __str__(self): - return self.cell_type.name + 'Population' + return self.cell_type.name + "Population" def __iter__(self): return self @@ -1066,6 +1004,7 @@ def __next__(self): def next(self): return self.__next__() + # HELPERS def pos(rad): """ @@ -1083,5 +1022,5 @@ def pos(rad): def euclidian_dist(p1, p2): - """ p1 and p2 must both be of len 2 where p1 = (x1,y1); p2 = (x2,y2)""" - return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2) + """p1 and p2 must both be of len 2 where p1 = (x1,y1); p2 = (x2,y2)""" + return math.sqrt((p1[0] - p2[0]) ** 2 + (p1[1] - p2[1]) ** 2) diff --git a/paradigm_pattern_separation_baseline.py b/paradigm_pattern_separation_baseline.py index bcd4185..b5f1ca9 100644 --- a/paradigm_pattern_separation_baseline.py +++ b/paradigm_pattern_separation_baseline.py @@ -5,48 +5,26 @@ @author: DanielM """ -from neuron import h, gui # gui necessary for some parameters to h namespace +import argparse +import os + +import matplotlib.pyplot as plt import numpy as np +import scipy.stats as stats +from neuron import gui # noqa: F401 +from scipy import interpolate + from pydentate import net_tunedrev, neuron_tools from pydentate.inputs import inhom_poiss -import os -import argparse -import scipy.stats as stats -import platform # Handle command line inputs -pr = argparse.ArgumentParser(description='Local pattern separation paradigm') -pr.add_argument('-runs', - nargs=3, - type=int, - help='start stop range for the range of runs', - default=[0, 1, 1], - dest='runs') -pr.add_argument('-savedir', - type=str, - help='complete directory where data is saved', - default=os.getcwd(), - dest='savedir') -pr.add_argument('-scale', - type=int, - help='standard deviation of gaussian distribution', - default=1000, - dest='input_scale') -pr.add_argument('-input_seed', - type=int, - help='input_seed', - default=[10000], - dest='input_seed') -pr.add_argument('-network_seed', - type=int, - help='standard deviation of gaussian distribution', - default=[10000], - dest='nw_seed') -pr.add_argument('-input_frequency', - type=int, - help='standard deviation of gaussian distribution', - default=[10], - dest='input_frequency') +pr = argparse.ArgumentParser(description="Local pattern separation paradigm") +pr.add_argument("-runs", nargs=3, type=int, help="start stop range for the range of runs", default=[0, 1, 1], dest="runs") +pr.add_argument("-savedir", type=str, help="complete directory where data is saved", default=os.getcwd(), dest="savedir") +pr.add_argument("-scale", type=int, help="standard deviation of gaussian distribution", default=1000, dest="input_scale") +pr.add_argument("-input_seed", type=int, help="input_seed", default=[10000], dest="input_seed") +pr.add_argument("-network_seed", type=int, help="standard deviation of gaussian distribution", default=[10000], dest="nw_seed") +pr.add_argument("-input_frequency", type=int, help="standard deviation of gaussian distribution", default=[10], dest="input_frequency") args = pr.parse_args() runs = range(args.runs[0], args.runs[1], args.runs[2]) @@ -65,51 +43,92 @@ dll_dir = os.path.join(dirname, 'x86_64', 'libnrnmech.so') print("DLL loaded from: " + dll_dir) # h.nrn_load_dll(dll_dir) -""" -neuron_tools.load_compiled_mechanisms(path='precompiled') +""" +neuron_tools.load_compiled_mechanisms(path="precompiled") + + +def inhomogeneous_poisson_process(t_start: float, t_stop: float, sampling_interval: float, rate_profile_frequency: int, rate_profile_amplitude: int, refractory_period: float = 0) -> np.ndarray: + """ + Generates a spike train from an inhomogeneous Poisson process. + NOTE: units are seconds. + """ + + t = np.arange(t_start, t_stop, sampling_interval) + + rate_profile = rate_profile_amplitude * (np.sin(t * rate_profile_frequency * np.pi * 2 - np.pi / 2) + 1) / 2 + + cumulative_rate = np.cumsum(rate_profile) * sampling_interval + max_cumulative_rate = cumulative_rate[-1] + n_spikes = np.round(max_cumulative_rate).astype(int) + + random_numbers = np.random.uniform(0, max_cumulative_rate, n_spikes) + + inv_cumulative_rate_func = interpolate.interp1d(cumulative_rate, t) + + spike_times: np.ndarray = inv_cumulative_rate_func(random_numbers) + spike_times.sort() + + if refractory_period is None: + return spike_times + + thinned_spike_times = np.empty(0) + previous_spike_time = t_start - refractory_period + + for spike_time in spike_times: + if spike_time - previous_spike_time > refractory_period: + thinned_spike_times = np.append(thinned_spike_times, spike_time) + previous_spike_time = spike_time + + return thinned_spike_times + # Start the runs of the model for run in runs: # Seed the numpy random number generator for replication - np.random.seed(input_seed[0]+run) + np.random.seed(input_seed[0] + run) # Randomly choose target cells for the PP lines gauss_gc = stats.norm(loc=1000, scale=input_scale) - gauss_bc = stats.norm(loc=12, scale=(input_scale/2000.0)*24) + gauss_bc = stats.norm(loc=12, scale=(input_scale / 2000.0) * 24) pdf_gc = gauss_gc.pdf(np.arange(2000)) - pdf_gc = pdf_gc/pdf_gc.sum() + pdf_gc = pdf_gc / pdf_gc.sum() pdf_bc = gauss_bc.pdf(np.arange(24)) - pdf_bc = pdf_bc/pdf_bc.sum() + pdf_bc = pdf_bc / pdf_bc.sum() GC_indices = np.arange(2000) start_idc = np.random.randint(0, 1999, size=400) PP_to_GCs = [] for x in start_idc: curr_idc = np.concatenate((GC_indices[x:2000], GC_indices[0:x])) - PP_to_GCs.append(np.random.choice(curr_idc, size=100, replace=False, - p=pdf_gc)) + PP_to_GCs.append(np.random.choice(curr_idc, size=100, replace=False, p=pdf_gc)) PP_to_GCs = np.array(PP_to_GCs) PP_to_GCs = PP_to_GCs[0:24] BC_indices = np.arange(24) - start_idc = np.array(((start_idc/2000.0)*24), dtype=int) + start_idc = np.array(((start_idc / 2000.0) * 24), dtype=int) PP_to_BCs = [] for x in start_idc: curr_idc = np.concatenate((BC_indices[x:24], BC_indices[0:x])) - PP_to_BCs.append(np.random.choice(curr_idc, size=1, replace=False, - p=pdf_bc)) + PP_to_BCs.append(np.random.choice(curr_idc, size=1, replace=False, p=pdf_bc)) PP_to_BCs = np.array(PP_to_BCs) PP_to_BCs = PP_to_BCs[0:24] # Generate temporal patterns for the 100 PP inputs - temporal_patterns = inhom_poiss(modulation_rate=input_frequency) - temporal_patterns[0:24] - nw = net_tunedrev.TunedNetwork(nw_seed[0], temporal_patterns, - PP_to_GCs, - PP_to_BCs) + + # original + temporal_patterns = inhom_poiss(modulation_rate=input_frequency, n_cells=24) + + # refactored + # temporal_patterns = np.array([(inhomogeneous_poisson_process(t_start=0, t_stop=0.5, sampling_interval=0.001, rate_profile_frequency=10, rate_profile_amplitude=110) * 1000).round(1) for _ in range(24)]) + + print(len(temporal_patterns), len(temporal_patterns[0]), temporal_patterns[0]) + plt.eventplot(temporal_patterns) + plt.show() + # raise Exception("Check the temporal patterns") + nw = net_tunedrev.TunedNetwork(nw_seed[0], temporal_patterns, PP_to_GCs, PP_to_BCs) # Attach voltage recordings to all cells nw.populations[0].voltage_recording(range(2000)) @@ -119,23 +138,16 @@ # Run the model """Initialization for -2000 to -100""" print("Running model") + + # in order to get the model view using gui + input("Press Enter to continue...") + neuron_tools.run_neuron_simulator() - tuned_save_file_name = (str(nw) + "-data-paradigm-local-pattern" + - "-separation_nw-seed_input-seed_input-frequency_scale_run_" + - str(nw_seed[0]) + '_' + - str(input_seed[0]) + '_' + - str(input_frequency[0]) + '_' + - str(input_scale).zfill(3) + '_' + - str(run).zfill(3) + '_') + tuned_save_file_name = str(nw) + "-data-paradigm-local-pattern" + "-separation_nw-seed_input-seed_input-frequency_scale_run_" + str(nw_seed[0]) + "_" + str(input_seed[0]) + "_" + str(input_frequency[0]) + "_" + str(input_scale).zfill(3) + "_" + str(run).zfill(3) + "_" nw.shelve_aps(savedir, tuned_save_file_name) fig = nw.plot_aps(time=600) - tuned_fig_file_name = (str(nw) + "_spike-plot_paradigm_local-pattern" + - "-separation_run_scale_seed_input-seed_nw-seed_" + - str(run).zfill(3) + '_' + - str(input_scale).zfill(3) + '_' + str(10000) + - str(input_seed) + str(nw_seed)) - nw.save_ap_fig(fig, savedir, tuned_fig_file_name) - + tuned_fig_file_name = str(nw) + "_spike-plot_paradigm_local-pattern" + "-separation_run_scale_seed_input-seed_nw-seed_" + str(run).zfill(3) + "_" + str(input_scale).zfill(3) + "_" + str(10000) + str(input_seed) + str(nw_seed) + nw.save_ap_fig(fig, savedir, tuned_fig_file_name) # type: ignore diff --git a/pydentate.net_tunedrev.TunedNetwork-data-paradigm-local-pattern-separation_nw-seed_input-seed_input-frequency_scale_run_10000_10000_10_1000_000_.pydd b/pydentate.net_tunedrev.TunedNetwork-data-paradigm-local-pattern-separation_nw-seed_input-seed_input-frequency_scale_run_10000_10000_10_1000_000_.pydd new file mode 100644 index 0000000000000000000000000000000000000000..80b5e452bf7beb44dfef2a859619f238ef3b948d GIT binary patch literal 32768 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 literal 0 HcmV?d00001 diff --git a/pydentate.net_tunedrev.TunedNetwork-data-paradigm-local-pattern-separation_nw-seed_input-seed_input-frequency_scale_run_10000_10000_10_1000_000_.pydd.db b/pydentate.net_tunedrev.TunedNetwork-data-paradigm-local-pattern-separation_nw-seed_input-seed_input-frequency_scale_run_10000_10000_10_1000_000_.pydd.db new file mode 100644 index 0000000000000000000000000000000000000000..f4308eeecc288e9c2951e14558396dbb5799c831 GIT binary patch literal 24576 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 literal 0 HcmV?d00001 diff --git a/pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].eps b/pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].eps new file mode 100644 index 0000000..8afe62e --- /dev/null +++ b/pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].eps @@ -0,0 +1,5713 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Title: pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].eps +%%Creator: Matplotlib v3.7.2, https://matplotlib.org/ +%%CreationDate: Fri Jul 28 12:22:37 2023 +%%Orientation: portrait +%%BoundingBox: 8 -24 604 817 +%%HiResBoundingBox: 8.280000 -24.840000 603.720000 816.840000 +%%EndComments +%%BeginProlog +/mpldict 11 dict def +mpldict begin +/_d { bind def } bind def +/m { moveto } _d +/l { lineto } _d +/r { rlineto } _d +/c { curveto } _d +/cl { closepath } _d +/ce { closepath eofill } _d +/box { + m + 1 index 0 r + 0 exch r + neg 0 r + cl + } _d +/clipbox { + box + clip + newpath + } _d +/sc { setcachedevice } _d +%!PS-Adobe-3.0 Resource-Font +%%Creator: Converted from TrueType to Type 3 by Matplotlib. +10 dict begin +/FontName /DejaVuSans def +/PaintType 0 def +/FontMatrix [0.00048828125 0 0 0.00048828125 0 0] def +/FontBBox [-2090 -948 3673 2524] def +/FontType 3 def +/Encoding [/space /percent /parenleft /parenright /period /zero /one /two /three /four /five /six /seven /eight /nine /B /C /G /H /M /P /a /c /e /i /k /l /m /n /o /p /r /s /t /u /v /y] def +/CharStrings 38 dict dup begin +/.notdef 0 def +/space{651 0 0 0 0 0 sc +ce} _d +/percent{1946 0 113 -29 1833 1520 sc +1489 657 m +1431 657 1385 632 1352 583 c +1319 534 1303 465 1303 377 c +1303 290 1319 222 1352 172 c +1385 123 1431 98 1489 98 c +1546 98 1590 123 1623 172 c +1656 222 1673 290 1673 377 c +1673 464 1656 533 1623 582 c +1590 632 1546 657 1489 657 c + +1489 784 m +1594 784 1678 747 1740 674 c +1802 601 1833 502 1833 377 c +1833 252 1802 153 1739 80 c +1677 7 1594 -29 1489 -29 c +1382 -29 1298 7 1236 80 c +1174 153 1143 252 1143 377 c +1143 502 1174 601 1236 674 c +1299 747 1383 784 1489 784 c + +457 1393 m +400 1393 354 1368 321 1318 c +288 1269 272 1201 272 1114 c +272 1026 288 957 321 908 c +354 859 399 834 457 834 c +515 834 560 859 593 908 c +626 957 643 1026 643 1114 c +643 1200 626 1268 593 1318 c +560 1368 514 1393 457 1393 c + +1360 1520 m +1520 1520 l +586 -29 l +426 -29 l +1360 1520 l + +457 1520 m +562 1520 646 1483 709 1410 c +772 1337 803 1239 803 1114 c +803 988 772 889 709 816 c +647 743 563 707 457 707 c +351 707 267 743 205 816 c +144 889 113 989 113 1114 c +113 1238 144 1337 206 1410 c +268 1483 352 1520 457 1520 c + +ce} _d +/parenleft{799 0 176 -270 635 1554 sc +635 1554 m +546 1401 479 1249 436 1099 c +393 949 371 797 371 643 c +371 489 393 336 436 185 c +480 34 546 -117 635 -270 c +475 -270 l +375 -113 300 41 250 192 c +201 343 176 494 176 643 c +176 792 201 941 250 1092 c +299 1243 374 1397 475 1554 c +635 1554 l + +ce} _d +/parenright{799 0 164 -270 623 1554 sc +164 1554 m +324 1554 l +424 1397 499 1243 548 1092 c +598 941 623 792 623 643 c +623 494 598 343 548 192 c +499 41 424 -113 324 -270 c +164 -270 l +253 -117 319 34 362 185 c +406 336 428 489 428 643 c +428 797 406 949 362 1099 c +319 1249 253 1401 164 1554 c + +ce} _d +/period{651 0 219 0 430 254 sc +219 254 m +430 254 l +430 0 l +219 0 l +219 254 l + +ce} _d +/zero{1303 0 135 -29 1167 1520 sc +651 1360 m +547 1360 469 1309 416 1206 c +364 1104 338 950 338 745 c +338 540 364 387 416 284 c +469 182 547 131 651 131 c +756 131 834 182 886 284 c +939 387 965 540 965 745 c +965 950 939 1104 886 1206 c +834 1309 756 1360 651 1360 c + +651 1520 m +818 1520 946 1454 1034 1321 c +1123 1189 1167 997 1167 745 c +1167 494 1123 302 1034 169 c +946 37 818 -29 651 -29 c +484 -29 356 37 267 169 c +179 302 135 494 135 745 c +135 997 179 1189 267 1321 c +356 1454 484 1520 651 1520 c + +ce} _d +/one{1303 0 225 0 1114 1493 sc +254 170 m +584 170 l +584 1309 l +225 1237 l +225 1421 l +582 1493 l +784 1493 l +784 170 l +1114 170 l +1114 0 l +254 0 l +254 170 l + +ce} _d +/two{1303 0 150 0 1098 1520 sc +393 170 m +1098 170 l +1098 0 l +150 0 l +150 170 l +227 249 331 356 463 489 c +596 623 679 709 713 748 c +778 821 823 882 848 932 c +874 983 887 1032 887 1081 c +887 1160 859 1225 803 1275 c +748 1325 675 1350 586 1350 c +523 1350 456 1339 385 1317 c +315 1295 240 1262 160 1217 c +160 1421 l +241 1454 317 1478 388 1495 c +459 1512 523 1520 582 1520 c +737 1520 860 1481 952 1404 c +1044 1327 1090 1223 1090 1094 c +1090 1033 1078 974 1055 919 c +1032 864 991 800 930 725 c +913 706 860 650 771 557 c +682 465 556 336 393 170 c + +ce} _d +/three{1303 0 156 -29 1139 1520 sc +831 805 m +928 784 1003 741 1057 676 c +1112 611 1139 530 1139 434 c +1139 287 1088 173 987 92 c +886 11 742 -29 555 -29 c +492 -29 428 -23 361 -10 c +295 2 227 20 156 45 c +156 240 l +212 207 273 183 340 166 c +407 149 476 141 549 141 c +676 141 772 166 838 216 c +905 266 938 339 938 434 c +938 522 907 591 845 640 c +784 690 698 715 588 715 c +414 715 l +414 881 l +596 881 l +695 881 771 901 824 940 c +877 980 903 1037 903 1112 c +903 1189 876 1247 821 1288 c +767 1329 689 1350 588 1350 c +533 1350 473 1344 410 1332 c +347 1320 277 1301 201 1276 c +201 1456 l +278 1477 349 1493 416 1504 c +483 1515 547 1520 606 1520 c +759 1520 881 1485 970 1415 c +1059 1346 1104 1252 1104 1133 c +1104 1050 1080 980 1033 923 c +986 866 918 827 831 805 c + +ce} _d +/four{1303 0 100 0 1188 1493 sc +774 1317 m +264 520 l +774 520 l +774 1317 l + +721 1493 m +975 1493 l +975 520 l +1188 520 l +1188 352 l +975 352 l +975 0 l +774 0 l +774 352 l +100 352 l +100 547 l +721 1493 l + +ce} _d +/five{1303 0 158 -29 1124 1493 sc +221 1493 m +1014 1493 l +1014 1323 l +406 1323 l +406 957 l +435 967 465 974 494 979 c +523 984 553 987 582 987 c +749 987 881 941 978 850 c +1075 759 1124 635 1124 479 c +1124 318 1074 193 974 104 c +874 15 733 -29 551 -29 c +488 -29 424 -24 359 -13 c +294 -2 227 14 158 35 c +158 238 l +218 205 280 181 344 165 c +408 149 476 141 547 141 c +662 141 754 171 821 232 c +888 293 922 375 922 479 c +922 583 888 665 821 726 c +754 787 662 817 547 817 c +493 817 439 811 385 799 c +332 787 277 768 221 743 c +221 1493 l + +ce} _d +/six{1303 0 143 -29 1174 1520 sc +676 827 m +585 827 513 796 460 734 c +407 672 381 587 381 479 c +381 372 407 287 460 224 c +513 162 585 131 676 131 c +767 131 838 162 891 224 c +944 287 971 372 971 479 c +971 587 944 672 891 734 c +838 796 767 827 676 827 c + +1077 1460 m +1077 1276 l +1026 1300 975 1318 923 1331 c +872 1344 821 1350 770 1350 c +637 1350 535 1305 464 1215 c +394 1125 354 989 344 807 c +383 865 433 909 492 940 c +551 971 617 987 688 987 c +838 987 956 941 1043 850 c +1130 759 1174 636 1174 479 c +1174 326 1129 203 1038 110 c +947 17 827 -29 676 -29 c +503 -29 371 37 280 169 c +189 302 143 494 143 745 c +143 981 199 1169 311 1309 c +423 1450 573 1520 762 1520 c +813 1520 864 1515 915 1505 c +967 1495 1021 1480 1077 1460 c + +ce} _d +/seven{1303 0 168 0 1128 1493 sc +168 1493 m +1128 1493 l +1128 1407 l +586 0 l +375 0 l +885 1323 l +168 1323 l +168 1493 l + +ce} _d +/eight{1303 0 139 -29 1163 1520 sc +651 709 m +555 709 479 683 424 632 c +369 581 342 510 342 420 c +342 330 369 259 424 208 c +479 157 555 131 651 131 c +747 131 823 157 878 208 c +933 260 961 331 961 420 c +961 510 933 581 878 632 c +823 683 748 709 651 709 c + +449 795 m +362 816 295 857 246 916 c +198 975 174 1048 174 1133 c +174 1252 216 1347 301 1416 c +386 1485 503 1520 651 1520 c +800 1520 916 1485 1001 1416 c +1086 1347 1128 1252 1128 1133 c +1128 1048 1104 975 1055 916 c +1007 857 940 816 854 795 c +951 772 1027 728 1081 662 c +1136 596 1163 515 1163 420 c +1163 275 1119 164 1030 87 c +942 10 816 -29 651 -29 c +486 -29 360 10 271 87 c +183 164 139 275 139 420 c +139 515 166 596 221 662 c +276 728 352 772 449 795 c + +375 1114 m +375 1037 399 976 447 933 c +496 890 564 868 651 868 c +738 868 805 890 854 933 c +903 976 928 1037 928 1114 c +928 1191 903 1252 854 1295 c +805 1338 738 1360 651 1360 c +564 1360 496 1338 447 1295 c +399 1252 375 1191 375 1114 c + +ce} _d +/nine{1303 0 129 -29 1159 1520 sc +225 31 m +225 215 l +276 191 327 173 379 160 c +431 147 482 141 532 141 c +665 141 767 186 837 275 c +908 365 948 501 958 684 c +919 627 870 583 811 552 c +752 521 686 506 614 506 c +465 506 346 551 259 641 c +172 732 129 855 129 1012 c +129 1165 174 1288 265 1381 c +356 1474 476 1520 627 1520 c +800 1520 931 1454 1022 1321 c +1113 1189 1159 997 1159 745 c +1159 510 1103 322 991 181 c +880 41 730 -29 541 -29 c +490 -29 439 -24 387 -14 c +335 -4 281 11 225 31 c + +627 664 m +718 664 789 695 842 757 c +895 819 922 904 922 1012 c +922 1119 895 1204 842 1266 c +789 1329 718 1360 627 1360 c +536 1360 464 1329 411 1266 c +358 1204 332 1119 332 1012 c +332 904 358 819 411 757 c +464 695 536 664 627 664 c + +ce} _d +/B{1405 0 201 0 1260 1493 sc +403 713 m +403 166 l +727 166 l +836 166 916 188 968 233 c +1021 278 1047 347 1047 440 c +1047 533 1021 602 968 646 c +916 691 836 713 727 713 c +403 713 l + +403 1327 m +403 877 l +702 877 l +801 877 874 895 922 932 c +971 969 995 1026 995 1102 c +995 1177 971 1234 922 1271 c +874 1308 801 1327 702 1327 c +403 1327 l + +201 1493 m +717 1493 l +871 1493 990 1461 1073 1397 c +1156 1333 1198 1242 1198 1124 c +1198 1033 1177 960 1134 906 c +1091 852 1029 818 946 805 c +1045 784 1122 739 1177 671 c +1232 604 1260 519 1260 418 c +1260 285 1215 182 1124 109 c +1033 36 904 0 737 0 c +201 0 l +201 1493 l + +ce} _d +/C{1430 0 115 -29 1319 1520 sc +1319 1378 m +1319 1165 l +1251 1228 1178 1276 1101 1307 c +1024 1338 943 1354 856 1354 c +685 1354 555 1302 464 1197 c +373 1093 328 942 328 745 c +328 548 373 398 464 293 c +555 189 685 137 856 137 c +943 137 1024 153 1101 184 c +1178 215 1251 263 1319 326 c +1319 115 l +1248 67 1173 31 1094 7 c +1015 -17 932 -29 844 -29 c +618 -29 440 40 310 178 c +180 317 115 506 115 745 c +115 985 180 1174 310 1312 c +440 1451 618 1520 844 1520 c +933 1520 1017 1508 1096 1484 c +1175 1461 1250 1425 1319 1378 c + +ce} _d +/G{1587 0 115 -29 1419 1520 sc +1219 213 m +1219 614 l +889 614 l +889 780 l +1419 780 l +1419 139 l +1341 84 1255 42 1161 13 c +1067 -15 967 -29 860 -29 c +627 -29 444 39 312 175 c +181 312 115 502 115 745 c +115 989 181 1179 312 1315 c +444 1452 627 1520 860 1520 c +957 1520 1050 1508 1137 1484 c +1225 1460 1306 1425 1380 1378 c +1380 1163 l +1305 1226 1226 1274 1142 1306 c +1058 1338 970 1354 877 1354 c +694 1354 557 1303 465 1201 c +374 1099 328 947 328 745 c +328 544 374 392 465 290 c +557 188 694 137 877 137 c +948 137 1012 143 1068 155 c +1124 168 1174 187 1219 213 c + +ce} _d +/H{1540 0 201 0 1339 1493 sc +201 1493 m +403 1493 l +403 881 l +1137 881 l +1137 1493 l +1339 1493 l +1339 0 l +1137 0 l +1137 711 l +403 711 l +403 0 l +201 0 l +201 1493 l + +ce} _d +/M{1767 0 201 0 1567 1493 sc +201 1493 m +502 1493 l +883 477 l +1266 1493 l +1567 1493 l +1567 0 l +1370 0 l +1370 1311 l +985 287 l +782 287 l +397 1311 l +397 0 l +201 0 l +201 1493 l + +ce} _d +/P{1235 0 201 0 1165 1493 sc +403 1327 m +403 766 l +657 766 l +751 766 824 790 875 839 c +926 888 952 957 952 1047 c +952 1136 926 1205 875 1254 c +824 1303 751 1327 657 1327 c +403 1327 l + +201 1493 m +657 1493 l +824 1493 951 1455 1036 1379 c +1122 1304 1165 1193 1165 1047 c +1165 900 1122 788 1036 713 c +951 638 824 600 657 600 c +403 600 l +403 0 l +201 0 l +201 1493 l + +ce} _d +/a{1255 0 123 -29 1069 1147 sc +702 563 m +553 563 450 546 393 512 c +336 478 307 420 307 338 c +307 273 328 221 371 182 c +414 144 473 125 547 125 c +649 125 731 161 792 233 c +854 306 885 402 885 522 c +885 563 l +702 563 l + +1069 639 m +1069 0 l +885 0 l +885 170 l +843 102 791 52 728 19 c +665 -13 589 -29 498 -29 c +383 -29 292 3 224 67 c +157 132 123 218 123 326 c +123 452 165 547 249 611 c +334 675 460 707 627 707 c +885 707 l +885 725 l +885 810 857 875 801 921 c +746 968 668 991 567 991 c +503 991 441 983 380 968 c +319 953 261 930 205 899 c +205 1069 l +272 1095 338 1114 401 1127 c +464 1140 526 1147 586 1147 c +748 1147 869 1105 949 1021 c +1029 937 1069 810 1069 639 c + +ce} _d +/c{1126 0 113 -29 999 1147 sc +999 1077 m +999 905 l +947 934 895 955 842 969 c +790 984 737 991 684 991 c +565 991 472 953 406 877 c +340 802 307 696 307 559 c +307 422 340 316 406 240 c +472 165 565 127 684 127 c +737 127 790 134 842 148 c +895 163 947 184 999 213 c +999 43 l +948 19 894 1 839 -11 c +784 -23 726 -29 664 -29 c +495 -29 361 24 262 130 c +163 236 113 379 113 559 c +113 742 163 885 263 990 c +364 1095 501 1147 676 1147 c +733 1147 788 1141 842 1129 c +896 1118 948 1100 999 1077 c + +ce} _d +/e{1260 0 113 -29 1151 1147 sc +1151 606 m +1151 516 l +305 516 l +313 389 351 293 419 226 c +488 160 583 127 705 127 c +776 127 844 136 910 153 c +977 170 1043 196 1108 231 c +1108 57 l +1042 29 974 8 905 -7 c +836 -22 765 -29 694 -29 c +515 -29 374 23 269 127 c +165 231 113 372 113 549 c +113 732 162 878 261 985 c +360 1093 494 1147 662 1147 c +813 1147 932 1098 1019 1001 c +1107 904 1151 773 1151 606 c + +967 660 m +966 761 937 841 882 901 c +827 961 755 991 664 991 c +561 991 479 962 417 904 c +356 846 320 764 311 659 c +967 660 l + +ce} _d +/i{569 0 193 0 377 1556 sc +193 1120 m +377 1120 l +377 0 l +193 0 l +193 1120 l + +193 1556 m +377 1556 l +377 1323 l +193 1323 l +193 1556 l + +ce} _d +/k{1186 0 186 0 1180 1556 sc +186 1556 m +371 1556 l +371 637 l +920 1120 l +1155 1120 l +561 596 l +1180 0 l +940 0 l +371 547 l +371 0 l +186 0 l +186 1556 l + +ce} _d +/l{569 0 193 0 377 1556 sc +193 1556 m +377 1556 l +377 0 l +193 0 l +193 1556 l + +ce} _d +/m{1995 0 186 0 1821 1147 sc +1065 905 m +1111 988 1166 1049 1230 1088 c +1294 1127 1369 1147 1456 1147 c +1573 1147 1663 1106 1726 1024 c +1789 943 1821 827 1821 676 c +1821 0 l +1636 0 l +1636 670 l +1636 777 1617 857 1579 909 c +1541 961 1483 987 1405 987 c +1310 987 1234 955 1179 892 c +1124 829 1096 742 1096 633 c +1096 0 l +911 0 l +911 670 l +911 778 892 858 854 909 c +816 961 757 987 678 987 c +584 987 509 955 454 891 c +399 828 371 742 371 633 c +371 0 l +186 0 l +186 1120 l +371 1120 l +371 946 l +413 1015 463 1065 522 1098 c +581 1131 650 1147 731 1147 c +812 1147 881 1126 938 1085 c +995 1044 1038 984 1065 905 c + +ce} _d +/n{1298 0 186 0 1124 1147 sc +1124 676 m +1124 0 l +940 0 l +940 670 l +940 776 919 855 878 908 c +837 961 775 987 692 987 c +593 987 514 955 457 892 c +400 829 371 742 371 633 c +371 0 l +186 0 l +186 1120 l +371 1120 l +371 946 l +415 1013 467 1064 526 1097 c +586 1130 655 1147 733 1147 c +862 1147 959 1107 1025 1027 c +1091 948 1124 831 1124 676 c + +ce} _d +/o{1253 0 113 -29 1141 1147 sc +627 991 m +528 991 450 952 393 875 c +336 798 307 693 307 559 c +307 425 335 319 392 242 c +449 165 528 127 627 127 c +725 127 803 166 860 243 c +917 320 946 426 946 559 c +946 692 917 797 860 874 c +803 952 725 991 627 991 c + +627 1147 m +787 1147 913 1095 1004 991 c +1095 887 1141 743 1141 559 c +1141 376 1095 232 1004 127 c +913 23 787 -29 627 -29 c +466 -29 340 23 249 127 c +158 232 113 376 113 559 c +113 743 158 887 249 991 c +340 1095 466 1147 627 1147 c + +ce} _d +/p{1300 0 186 -426 1188 1147 sc +371 168 m +371 -426 l +186 -426 l +186 1120 l +371 1120 l +371 950 l +410 1017 458 1066 517 1098 c +576 1131 647 1147 729 1147 c +865 1147 975 1093 1060 985 c +1145 877 1188 735 1188 559 c +1188 383 1145 241 1060 133 c +975 25 865 -29 729 -29 c +647 -29 576 -13 517 19 c +458 52 410 101 371 168 c + +997 559 m +997 694 969 800 913 877 c +858 954 781 993 684 993 c +587 993 510 954 454 877 c +399 800 371 694 371 559 c +371 424 399 317 454 240 c +510 163 587 125 684 125 c +781 125 858 163 913 240 c +969 317 997 424 997 559 c + +ce} _d +/r{842 0 186 0 842 1147 sc +842 948 m +821 960 799 969 774 974 c +750 980 723 983 694 983 c +590 983 510 949 454 881 c +399 814 371 717 371 590 c +371 0 l +186 0 l +186 1120 l +371 1120 l +371 946 l +410 1014 460 1064 522 1097 c +584 1130 659 1147 748 1147 c +761 1147 775 1146 790 1144 c +805 1143 822 1140 841 1137 c +842 948 l + +ce} _d +/s{1067 0 111 -29 967 1147 sc +907 1087 m +907 913 l +855 940 801 960 745 973 c +689 986 631 993 571 993 c +480 993 411 979 365 951 c +320 923 297 881 297 825 c +297 782 313 749 346 724 c +379 700 444 677 543 655 c +606 641 l +737 613 829 573 884 522 c +939 471 967 400 967 309 c +967 205 926 123 843 62 c +761 1 648 -29 504 -29 c +444 -29 381 -23 316 -11 c +251 0 183 18 111 41 c +111 231 l +179 196 246 169 312 151 c +378 134 443 125 508 125 c +595 125 661 140 708 169 c +755 199 778 241 778 295 c +778 345 761 383 727 410 c +694 437 620 462 506 487 c +442 502 l +328 526 246 563 195 612 c +144 662 119 730 119 817 c +119 922 156 1004 231 1061 c +306 1118 412 1147 549 1147 c +617 1147 681 1142 741 1132 c +801 1122 856 1107 907 1087 c + +ce} _d +/t{803 0 55 0 754 1438 sc +375 1438 m +375 1120 l +754 1120 l +754 977 l +375 977 l +375 369 l +375 278 387 219 412 193 c +437 167 488 154 565 154 c +754 154 l +754 0 l +565 0 l +423 0 325 26 271 79 c +217 132 190 229 190 369 c +190 977 l +55 977 l +55 1120 l +190 1120 l +190 1438 l +375 1438 l + +ce} _d +/u{1298 0 174 -29 1112 1147 sc +174 442 m +174 1120 l +358 1120 l +358 449 l +358 343 379 263 420 210 c +461 157 523 131 606 131 c +705 131 784 163 841 226 c +899 289 928 376 928 485 c +928 1120 l +1112 1120 l +1112 0 l +928 0 l +928 172 l +883 104 831 53 772 20 c +713 -13 645 -29 567 -29 c +438 -29 341 11 274 91 c +207 171 174 288 174 442 c + +637 1147 m +637 1147 l + +ce} _d +/v{1212 0 61 0 1151 1120 sc +61 1120 m +256 1120 l +606 180 l +956 1120 l +1151 1120 l +731 0 l +481 0 l +61 1120 l + +ce} _d +/y{1212 0 61 -426 1151 1120 sc +659 -104 m +607 -237 556 -324 507 -365 c +458 -406 392 -426 309 -426 c +162 -426 l +162 -272 l +270 -272 l +321 -272 360 -260 388 -236 c +416 -212 447 -155 481 -66 c +514 18 l +61 1120 l +256 1120 l +606 244 l +956 1120 l +1151 1120 l +659 -104 l + +ce} _d +end readonly def + +/BuildGlyph { + exch begin + CharStrings exch + 2 copy known not {pop /.notdef} if + true 3 1 roll get exec + end +} _d + +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} _d + +FontName currentdict end definefont pop +end +%%EndProlog +mpldict begin +8.28 -24.84 translate +595.44 841.68 0 0 clipbox +gsave +0 0 m +595.44 0 l +595.44 841.68 l +0 841.68 l +cl +1.000 setgray +fill +grestore +gsave +74.43 599.788487 m +535.896 599.788487 l +535.896 740.6784 l +74.43 740.6784 l +cl +1.000 setgray +fill +grestore +0.800 setlinewidth +1 setlinejoin +0 setlinecap +[] 0 setdash +0.000 setgray +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 599.788 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +71.2503 585.195 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +151.341 599.788 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +141.802 585.195 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +228.252 599.788 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +218.713 585.195 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +305.163 599.788 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +295.624 585.195 translate +0 rotate +0 0 m /three glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +382.074 599.788 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +372.535 585.195 translate +0 rotate +0 0 m /four glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +458.985 599.788 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +449.446 585.195 translate +0 rotate +0 0 m /five glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +535.896 599.788 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +526.357 585.195 translate +0 rotate +0 0 m /six glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 606.257 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +61.0706 602.46 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 638.261 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +48.3519 634.464 translate +0 rotate +0 0 m /five glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 670.265 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +41.9925 666.469 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +19.0869 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 702.27 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +41.9925 698.473 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /five glyphshow +12.7246 0 m /zero glyphshow +19.0869 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 734.274 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +41.9925 730.477 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +19.0869 0 m /zero glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +24.7237 614.804 translate +90 rotate +0 0 m /G glyphshow +7.74902 0 m /r glyphshow +11.8604 0 m /a glyphshow +17.9883 0 m /n glyphshow +24.3262 0 m /u glyphshow +30.6641 0 m /l glyphshow +33.4424 0 m /e glyphshow +39.5947 0 m /C glyphshow +46.5771 0 m /e glyphshow +52.7295 0 m /l glyphshow +55.5078 0 m /l glyphshow +58.2861 0 m /P glyphshow +63.9414 0 m /o glyphshow +70.0596 0 m /p glyphshow +76.4072 0 m /u glyphshow +82.7451 0 m /l glyphshow +85.5234 0 m /a glyphshow +91.6514 0 m /t glyphshow +95.5723 0 m /i glyphshow +98.3506 0 m /o glyphshow +104.469 0 m /n glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +35.9144 637.554 translate +90 rotate +0 0 m /six glyphshow +6.3623 0 m /period glyphshow +9.54102 0 m /one glyphshow +15.9033 0 m /five glyphshow +22.2656 0 m /percent glyphshow +31.7676 0 m /space glyphshow +34.9463 0 m /a glyphshow +41.0742 0 m /c glyphshow +46.5723 0 m /t glyphshow +50.4932 0 m /i glyphshow +53.2715 0 m /v glyphshow +59.1895 0 m /e glyphshow +grestore +1.500 setlinewidth +0.122 0.467 0.706 setrgbcolor +gsave +461.466 140.89 74.43 599.788 clipbox +74.43 606.288587 m +74.43 606.224578 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +424.990338 606.736649 m +424.990338 606.67264 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +350.771223 607.184711 m +350.771223 607.120702 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +124.037595 607.760791 m +124.037595 607.696782 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.180427 607.760791 m +194.180427 607.696782 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +122.499375 607.888809 m +122.499375 607.8248 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +304.240068 608.144844 m +304.240068 608.080835 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +114.346809 611.473305 m +114.346809 611.409296 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +193.565139 611.473305 m +193.565139 611.409296 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +193.718961 612.369429 m +193.718961 612.305421 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +425.297982 612.369429 m +425.297982 612.305421 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +352.540176 613.45758 m +352.540176 613.393571 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +126.72948 613.585598 m +126.72948 613.521589 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +269.553207 613.585598 m +269.553207 613.521589 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +354.770595 613.585598 m +354.770595 613.521589 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +128.036967 614.03366 m +128.036967 613.969651 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.488071 614.03366 m +194.488071 613.969651 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +345.002898 614.03366 m +345.002898 613.969651 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +124.960527 614.161678 m +124.960527 614.097669 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.641579 614.161678 m +196.641579 614.097669 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +271.937448 614.161678 m +271.937448 614.097669 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +351.001956 614.161678 m +351.001956 614.097669 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +198.487443 616.27397 m +198.487443 616.209961 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +350.771223 616.27397 m +350.771223 616.209961 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +283.089543 616.401988 m +283.089543 616.337979 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.257024 616.786041 m +196.257024 616.722032 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +278.24415 616.85005 m +278.24415 616.786041 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +426.990024 616.85005 m +426.990024 616.786041 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +121.730265 617.298112 m +121.730265 617.234103 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +352.617087 617.618156 m +352.617087 617.554147 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +125.268171 618.322254 m +125.268171 618.258245 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +436.834632 618.322254 m +436.834632 618.258245 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +124.499061 619.218378 m +124.499061 619.154369 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +352.155621 619.218378 m +352.155621 619.154369 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +427.297668 619.218378 m +427.297668 619.154369 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +192.334563 620.370538 m +192.334563 620.306529 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +353.232375 620.882608 m +353.232375 620.8186 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +122.653197 621.010626 m +122.653197 620.946617 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +123.960684 621.138644 m +123.960684 621.074635 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +193.795872 621.138644 m +193.795872 621.074635 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +277.244307 621.138644 m +277.244307 621.074635 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +279.243993 621.650715 m +279.243993 621.586706 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +198.487443 621.970759 m +198.487443 621.90675 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +106.73262 622.098777 m +106.73262 622.034768 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +191.257809 622.098777 m +191.257809 622.034768 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +199.179642 623.698999 m +199.179642 623.63499 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +120.038223 625.747282 m +120.038223 625.683273 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.026605 625.747282 m +194.026605 625.683273 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.386982 625.747282 m +348.386982 625.683273 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +201.871527 626.259353 m +201.871527 626.195344 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +343.695411 626.45138 m +343.695411 626.387371 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +195.718647 626.707415 m +195.718647 626.643406 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +266.169123 626.707415 m +266.169123 626.643406 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +424.221228 626.707415 m +424.221228 626.643406 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +431.066307 627.091468 m +431.066307 627.02746 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +199.564197 627.475522 m +199.564197 627.411513 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.257024 629.011734 m +196.257024 628.947725 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +122.037909 629.395788 m +122.037909 629.331779 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +120.192045 629.84385 m +120.192045 629.779841 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +349.156092 629.84385 m +349.156092 629.779841 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +428.143689 630.035876 m +428.143689 629.971867 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +116.577228 632.724249 m +116.577228 632.66024 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +272.322003 632.724249 m +272.322003 632.66024 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +422.683008 632.724249 m +422.683008 632.66024 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +122.807019 633.940417 m +122.807019 633.876408 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +195.487914 633.940417 m +195.487914 633.876408 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +431.681595 635.156585 m +431.681595 635.092577 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +116.884872 635.284603 m +116.884872 635.220594 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.564668 635.284603 m +196.564668 635.220594 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +351.463422 635.284603 m +351.463422 635.220594 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +116.807961 635.860683 m +116.807961 635.796674 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +191.180898 635.860683 m +191.180898 635.796674 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +117.961626 637.012842 m +117.961626 636.948834 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +341.541903 637.012842 m +341.541903 636.948834 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +350.463579 637.204869 m +350.463579 637.14086 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +431.989239 637.652931 m +431.989239 637.588922 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +273.475668 638.485046 m +273.475668 638.421038 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +198.564354 638.805091 m +198.564354 638.741082 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +355.078239 638.805091 m +355.078239 638.741082 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +116.654139 639.701215 m +116.654139 639.637206 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.026291 639.701215 m +196.026291 639.637206 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +342.926301 639.701215 m +342.926301 639.637206 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +118.807647 640.53333 m +118.807647 640.469321 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +195.334092 640.53333 m +195.334092 640.469321 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +278.936349 640.597339 m +278.936349 640.53333 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.71849 640.661348 m +196.71849 640.597339 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +423.144474 640.661348 m +423.144474 640.597339 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +125.498904 641.365445 m +125.498904 641.301436 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.026605 641.365445 m +194.026605 641.301436 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +278.474883 641.365445 m +278.474883 641.301436 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +423.375207 642.005534 m +423.375207 641.941525 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +120.653511 642.389587 m +120.653511 642.325578 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +118.26927 642.709631 m +118.26927 642.645623 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +346.079652 642.709631 m +346.079652 642.645623 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +423.144474 642.709631 m +423.144474 642.645623 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +124.652883 642.837649 m +124.652883 642.77364 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +349.77138 643.477738 m +349.77138 643.413729 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.771537 644.117827 m +348.771537 644.053818 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.795401 644.309853 m +196.795401 644.245844 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +199.564197 644.757915 m +199.564197 644.693906 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +422.83683 644.757915 m +422.83683 644.693906 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +278.090328 645.013951 m +278.090328 644.949942 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +430.220286 646.230119 m +430.220286 646.16611 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +120.730422 646.934217 m +120.730422 646.870208 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +280.166925 649.366553 m +280.166925 649.302545 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +120.884244 651.094793 m +120.884244 651.030784 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +119.961312 651.414837 m +119.961312 651.350828 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.872626 651.414837 m +194.872626 651.350828 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +426.759291 651.414837 m +426.759291 651.350828 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +342.464835 655.19136 m +342.464835 655.127351 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +123.268485 655.383387 m +123.268485 655.319378 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +122.730108 656.983608 m +122.730108 656.9196 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +189.7965 658.519821 m +189.7965 658.455812 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +110.885814 666.584938 m +110.885814 666.520929 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +188.181369 666.584938 m +188.181369 666.520929 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +269.01483 666.584938 m +269.01483 666.520929 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +339.542217 666.584938 m +339.542217 666.520929 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +422.683008 666.584938 m +422.683008 666.520929 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +354.001485 668.633222 m +354.001485 668.569213 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +115.577385 671.57763 m +115.577385 671.513621 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +118.346181 672.217718 m +118.346181 672.153709 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +202.10226 672.217718 m +202.10226 672.153709 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.848448 672.217718 m +348.848448 672.153709 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +429.989553 673.369878 m +429.989553 673.305869 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +110.424348 673.945958 m +110.424348 673.881949 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +121.422621 674.009967 m +121.422621 673.945958 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +197.564511 674.009967 m +197.564511 673.945958 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +273.475668 674.009967 m +273.475668 673.945958 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +121.038066 675.48217 m +121.038066 675.418162 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.41116 675.48217 m +194.41116 675.418162 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +426.836202 677.658472 m +426.836202 677.594463 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +273.244935 680.858915 m +273.244935 680.794906 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +423.60594 680.858915 m +423.60594 680.794906 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +124.191417 682.395128 m +124.191417 682.331119 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.23316 682.395128 m +348.23316 682.331119 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +425.067249 682.395128 m +425.067249 682.331119 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +356.154993 682.715172 m +356.154993 682.651163 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +192.026919 686.171651 m +192.026919 686.107642 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +349.540647 686.171651 m +349.540647 686.107642 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +350.232846 687.003766 m +350.232846 686.939757 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +355.001328 687.195793 m +355.001328 687.131784 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +115.346652 687.515837 m +115.346652 687.451828 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +190.027233 687.515837 m +190.027233 687.451828 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +270.476139 687.515837 m +270.476139 687.451828 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +347.387139 687.515837 m +347.387139 687.451828 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +428.451333 688.860023 m +428.451333 688.796014 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +430.758663 689.180068 m +430.758663 689.116059 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +352.924731 691.420378 m +352.924731 691.356369 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +196.949223 691.484387 m +196.949223 691.420378 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +423.682851 691.484387 m +423.682851 691.420378 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +200.794773 693.148617 m +200.794773 693.084608 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +352.924731 693.148617 m +352.924731 693.084608 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +191.950008 693.980732 m +191.950008 693.916724 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +273.398757 696.669105 m +273.398757 696.605096 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +428.374422 696.669105 m +428.374422 696.605096 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +106.886442 703.134 m +106.886442 703.069991 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +190.950165 703.134 m +190.950165 703.069991 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +347.387139 703.134 m +347.387139 703.069991 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +198.25671 703.71008 m +198.25671 703.646071 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.079338 703.71008 m +348.079338 703.646071 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +423.759762 703.71008 m +423.759762 703.646071 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +272.398914 707.038541 m +272.398914 706.974532 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +431.066307 707.038541 m +431.066307 706.974532 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +268.861008 708.702771 m +268.861008 708.638763 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +429.835731 708.702771 m +429.835731 708.638763 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +199.02582 710.49502 m +199.02582 710.431011 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +430.758663 710.49502 m +430.758663 710.431011 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +349.540647 710.815064 m +349.540647 710.751055 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.718804 711.647179 m +194.718804 711.58317 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +424.682694 711.647179 m +424.682694 711.58317 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +191.565453 711.711188 m +191.565453 711.647179 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.617715 711.711188 m +348.617715 711.647179 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +192.87294 712.223259 m +192.87294 712.15925 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +119.730579 713.951498 m +119.730579 713.887489 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +193.872783 713.951498 m +193.872783 713.887489 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +264.861636 713.951498 m +264.861636 713.887489 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +193.718961 714.015507 m +193.718961 713.951498 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +427.374579 714.015507 m +427.374579 713.951498 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +117.807804 714.39956 m +117.807804 714.335552 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +187.642992 714.39956 m +187.642992 714.335552 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +347.617872 714.39956 m +347.617872 714.335552 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +425.297982 714.39956 m +425.297982 714.335552 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +124.652883 714.591587 m +124.652883 714.527578 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +123.345396 714.911631 m +123.345396 714.847622 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +201.102417 715.039649 m +201.102417 714.97564 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +117.423249 717.535995 m +117.423249 717.471986 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +112.8855 717.984057 m +112.8855 717.920048 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +191.488542 717.984057 m +191.488542 717.920048 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +281.012946 717.984057 m +281.012946 717.920048 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +344.925987 717.984057 m +344.925987 717.920048 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +426.528558 717.984057 m +426.528558 717.920048 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +347.925516 720.288376 m +347.925516 720.224367 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +117.269427 726.689263 m +117.269427 726.625254 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +191.950008 726.689263 m +191.950008 726.625254 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +279.78237 726.689263 m +279.78237 726.625254 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.617715 728.353493 m +348.617715 728.289484 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +115.269741 728.801555 m +115.269741 728.737546 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.795715 728.801555 m +194.795715 728.737546 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +352.463265 728.801555 m +352.463265 728.737546 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +190.027233 729.569661 m +190.027233 729.505653 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +347.387139 729.569661 m +347.387139 729.505653 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +348.156249 731.233892 m +348.156249 731.169883 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +115.423563 731.681954 m +115.423563 731.617945 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +190.257966 731.681954 m +190.257966 731.617945 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +429.528087 731.745963 m +429.528087 731.681954 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +282.320433 732.706096 m +282.320433 732.642087 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +352.001799 732.706096 m +352.001799 732.642087 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +120.653511 732.770105 m +120.653511 732.706096 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +194.488071 732.770105 m +194.488071 732.706096 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +347.694783 732.770105 m +347.694783 732.706096 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +423.529029 732.898122 m +423.529029 732.834114 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +424.528872 734.114291 m +424.528872 734.050282 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +124.960527 734.1783 m +124.960527 734.114291 l +stroke +grestore +gsave +461.466 140.89 74.43 599.788 clipbox +350.925045 734.1783 m +350.925045 734.114291 l +stroke +grestore +0.800 setlinewidth +0 setlinejoin +2 setlinecap +0.000 setgray +gsave +74.43 599.788487 m +74.43 740.6784 l +stroke +grestore +gsave +535.896 599.788487 m +535.896 740.6784 l +stroke +grestore +gsave +74.43 599.788487 m +535.896 599.788487 l +stroke +grestore +gsave +74.43 740.6784 m +535.896 740.6784 l +stroke +grestore +gsave +74.43 430.720591 m +535.896 430.720591 l +535.896 571.610504 l +74.43 571.610504 l +cl +1.000 setgray +fill +grestore +1 setlinejoin +0 setlinecap +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 430.721 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +71.2503 416.127 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +151.341 430.721 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +141.802 416.127 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +228.252 430.721 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +218.713 416.127 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +305.163 430.721 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +295.624 416.127 translate +0 rotate +0 0 m /three glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +382.074 430.721 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +372.535 416.127 translate +0 rotate +0 0 m /four glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +458.985 430.721 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +449.446 416.127 translate +0 rotate +0 0 m /five glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +535.896 430.721 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +526.357 416.127 translate +0 rotate +0 0 m /six glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 439.224 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +61.0706 435.428 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 460.221 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 456.425 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 481.218 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 477.422 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 502.215 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 498.419 translate +0 rotate +0 0 m /three glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 523.212 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 519.416 translate +0 rotate +0 0 m /four glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 544.209 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 540.413 translate +0 rotate +0 0 m /five glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 565.206 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 561.41 translate +0 rotate +0 0 m /six glyphshow +6.3623 0 m /zero glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +37.4425 449.986 translate +90 rotate +0 0 m /M glyphshow +8.62793 0 m /o glyphshow +14.7461 0 m /s glyphshow +19.9561 0 m /s glyphshow +25.166 0 m /y glyphshow +31.084 0 m /C glyphshow +38.0664 0 m /e glyphshow +44.2188 0 m /l glyphshow +46.9971 0 m /l glyphshow +49.7754 0 m /P glyphshow +55.4307 0 m /o glyphshow +61.5488 0 m /p glyphshow +67.8965 0 m /u glyphshow +74.2344 0 m /l glyphshow +77.0127 0 m /a glyphshow +83.1406 0 m /t glyphshow +87.0615 0 m /i glyphshow +89.8398 0 m /o glyphshow +95.958 0 m /n glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +48.6331 468.486 translate +90 rotate +0 0 m /five glyphshow +6.3623 0 m /three glyphshow +12.7246 0 m /period glyphshow +15.9033 0 m /three glyphshow +22.2656 0 m /percent glyphshow +31.7676 0 m /space glyphshow +34.9463 0 m /a glyphshow +41.0742 0 m /c glyphshow +46.5723 0 m /t glyphshow +50.4932 0 m /i glyphshow +53.2715 0 m /v glyphshow +59.1895 0 m /e glyphshow +grestore +1.500 setlinewidth +0.122 0.467 0.706 setrgbcolor +gsave +461.466 140.89 74.43 430.721 clipbox +450.986256 440.274229 m +450.986256 438.174529 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +210.870114 442.37393 m +210.870114 440.274229 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +175.798698 444.473631 m +175.798698 442.37393 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +204.794145 444.473631 m +204.794145 442.37393 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +361.692585 444.473631 m +361.692585 442.37393 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +313.007922 446.573331 m +313.007922 444.473631 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +213.023622 448.673032 m +213.023622 446.573331 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +435.9117 448.673032 m +435.9117 446.573331 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +213.561999 454.972134 m +213.561999 452.872433 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +229.405665 459.171535 m +229.405665 457.071834 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +196.257024 465.470637 m +196.257024 463.370936 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +155.95566 467.570338 m +155.95566 465.470637 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +448.448193 467.570338 m +448.448193 465.470637 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +133.805292 469.670038 m +133.805292 467.570338 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +462.06144 469.670038 m +462.06144 467.570338 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +207.101475 471.769739 m +207.101475 469.670038 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +363.000072 471.769739 m +363.000072 469.670038 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +138.573774 473.869439 m +138.573774 471.769739 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +151.264089 478.068841 m +151.264089 475.96914 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +232.328283 480.168541 m +232.328283 478.068841 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +165.723357 494.866446 m +165.723357 492.766745 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +214.561842 496.966147 m +214.561842 494.866446 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +234.558702 505.364949 m +234.558702 503.265248 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +230.482419 509.56435 m +230.482419 507.46465 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +436.757721 509.56435 m +436.757721 507.46465 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +247.787394 515.863452 m +247.787394 513.763752 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +207.716763 517.963153 m +207.716763 515.863452 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +373.921434 517.963153 m +373.921434 515.863452 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +235.097079 528.461656 m +235.097079 526.361956 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +443.064423 530.561357 m +443.064423 528.461656 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +209.02425 532.661057 m +209.02425 530.561357 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +360.462009 532.661057 m +360.462009 530.561357 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +203.64048 536.860459 m +203.64048 534.760758 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +399.532797 536.860459 m +399.532797 534.760758 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +201.486972 538.960159 m +201.486972 536.860459 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +350.155935 538.960159 m +350.155935 536.860459 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +440.680182 538.960159 m +440.680182 536.860459 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +227.867445 543.159561 m +227.867445 541.05986 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +506.285265 551.558363 m +506.285265 549.458663 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +157.186236 553.658064 m +157.186236 551.558363 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +208.178229 553.658064 m +208.178229 551.558363 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +449.140392 555.757765 m +449.140392 553.658064 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +205.563255 557.857465 m +205.563255 555.757765 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +302.471115 562.056866 m +302.471115 559.957166 l +stroke +grestore +gsave +461.466 140.89 74.43 430.721 clipbox +211.716135 564.156567 m +211.716135 562.056866 l +stroke +grestore +0.800 setlinewidth +0 setlinejoin +2 setlinecap +0.000 setgray +gsave +74.43 430.720591 m +74.43 571.610504 l +stroke +grestore +gsave +535.896 430.720591 m +535.896 571.610504 l +stroke +grestore +gsave +74.43 430.720591 m +535.896 430.720591 l +stroke +grestore +gsave +74.43 571.610504 m +535.896 571.610504 l +stroke +grestore +gsave +74.43 261.652696 m +535.896 261.652696 l +535.896 402.542609 l +74.43 402.542609 l +cl +1.000 setgray +fill +grestore +1 setlinejoin +0 setlinecap +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 261.653 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +71.2503 247.059 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +151.341 261.653 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +141.802 247.059 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +228.252 261.653 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +218.713 247.059 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +305.163 261.653 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +295.624 247.059 translate +0 rotate +0 0 m /three glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +382.074 261.653 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +372.535 247.059 translate +0 rotate +0 0 m /four glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +458.985 261.653 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +449.446 247.059 translate +0 rotate +0 0 m /five glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +535.896 261.653 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +526.357 247.059 translate +0 rotate +0 0 m /six glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 273.18 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +61.0706 269.383 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 298.796 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +61.0706 295 translate +0 rotate +0 0 m /five glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 324.413 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 320.616 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 350.029 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 346.232 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /five glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 375.645 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 371.849 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 401.262 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 397.465 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /five glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +37.4425 279.621 translate +90 rotate +0 0 m /B glyphshow +6.86035 0 m /a glyphshow +12.9883 0 m /s glyphshow +18.1982 0 m /k glyphshow +23.6143 0 m /e glyphshow +29.7666 0 m /t glyphshow +33.6875 0 m /C glyphshow +40.6699 0 m /e glyphshow +46.8223 0 m /l glyphshow +49.6006 0 m /l glyphshow +52.3789 0 m /P glyphshow +58.0342 0 m /o glyphshow +64.1523 0 m /p glyphshow +70.5 0 m /u glyphshow +76.8379 0 m /l glyphshow +79.6162 0 m /a glyphshow +85.7441 0 m /t glyphshow +89.665 0 m /i glyphshow +92.4434 0 m /o glyphshow +98.5615 0 m /n glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +48.6331 299.418 translate +90 rotate +0 0 m /nine glyphshow +6.3623 0 m /one glyphshow +12.7246 0 m /period glyphshow +15.9033 0 m /six glyphshow +22.2656 0 m /percent glyphshow +31.7676 0 m /space glyphshow +34.9463 0 m /a glyphshow +41.0742 0 m /c glyphshow +46.5723 0 m /t glyphshow +50.4932 0 m /i glyphshow +53.2715 0 m /v glyphshow +59.1895 0 m /e glyphshow +grestore +1.500 setlinewidth +0.122 0.467 0.706 setrgbcolor +gsave +461.466 140.89 74.43 261.653 clipbox +130.959585 275.741687 m +130.959585 270.618417 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +199.02582 275.741687 m +199.02582 270.618417 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +208.408962 280.864957 m +208.408962 275.741687 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +356.078082 280.864957 m +356.078082 275.741687 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +125.268171 285.988226 m +125.268171 280.864957 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +198.102888 285.988226 m +198.102888 280.864957 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +364.692114 285.988226 m +364.692114 280.864957 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +206.255454 291.111496 m +206.255454 285.988226 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +355.15515 291.111496 m +355.15515 285.988226 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +196.410846 296.234765 m +196.410846 291.111496 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +204.486501 296.234765 m +204.486501 291.111496 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +287.242737 296.234765 m +287.242737 291.111496 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +360.231276 296.234765 m +360.231276 291.111496 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +426.220914 296.234765 m +426.220914 291.111496 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +440.449449 296.234765 m +440.449449 291.111496 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +353.847663 301.358035 m +353.847663 296.234765 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +126.883302 306.481304 m +126.883302 301.358035 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +347.156406 306.481304 m +347.156406 301.358035 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +360.000543 306.481304 m +360.000543 301.358035 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +438.142119 306.481304 m +438.142119 301.358035 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +122.499375 311.604574 m +122.499375 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +133.959114 311.604574 m +133.959114 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +197.949066 311.604574 m +197.949066 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +205.563255 311.604574 m +205.563255 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +270.014673 311.604574 m +270.014673 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +282.0897 311.604574 m +282.0897 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +355.616616 311.604574 m +355.616616 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +430.989396 311.604574 m +430.989396 306.481304 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +112.577856 316.727843 m +112.577856 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +147.956916 316.727843 m +147.956916 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +190.796343 316.727843 m +190.796343 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +216.869172 316.727843 m +216.869172 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +265.015458 316.727843 m +265.015458 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +349.233003 316.727843 m +349.233003 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +417.914526 316.727843 m +417.914526 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +430.835574 316.727843 m +430.835574 311.604574 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +124.499061 321.851113 m +124.499061 316.727843 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +135.266601 321.851113 m +135.266601 316.727843 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +197.718333 321.851113 m +197.718333 316.727843 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +210.101004 321.851113 m +210.101004 316.727843 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +279.01326 321.851113 m +279.01326 316.727843 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +354.693684 321.851113 m +354.693684 316.727843 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +121.34571 326.974383 m +121.34571 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +130.267386 326.974383 m +130.267386 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +158.109168 326.974383 m +158.109168 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +194.41116 326.974383 m +194.41116 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +203.409747 326.974383 m +203.409747 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +213.792732 326.974383 m +213.792732 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +255.324672 326.974383 m +255.324672 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +289.7808 326.974383 m +289.7808 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +334.696824 326.974383 m +334.696824 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +350.54049 326.974383 m +350.54049 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +359.692899 326.974383 m +359.692899 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +405.685677 326.974383 m +405.685677 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +423.529029 326.974383 m +423.529029 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +431.220129 326.974383 m +431.220129 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +442.06458 326.974383 m +442.06458 321.851113 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +127.883145 337.220922 m +127.883145 332.097652 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +121.807176 347.467461 m +121.807176 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +191.719275 347.467461 m +191.719275 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +204.255768 347.467461 m +204.255768 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +273.014202 347.467461 m +273.014202 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +346.848762 347.467461 m +346.848762 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +355.385883 347.467461 m +355.385883 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +425.605626 347.467461 m +425.605626 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +437.065365 347.467461 m +437.065365 342.344191 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +107.655552 352.59073 m +107.655552 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +117.038694 352.59073 m +117.038694 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +126.037281 352.59073 m +126.037281 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +138.035397 352.59073 m +138.035397 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +186.027861 352.59073 m +186.027861 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +196.257024 352.59073 m +196.257024 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +219.330324 352.59073 m +219.330324 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +263.400327 352.59073 m +263.400327 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +274.3986 352.59073 m +274.3986 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +297.702633 352.59073 m +297.702633 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +334.850646 352.59073 m +334.850646 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +348.463893 352.59073 m +348.463893 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +364.538292 352.59073 m +364.538292 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +404.839656 352.59073 m +404.839656 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +418.606725 352.59073 m +418.606725 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +426.528558 352.59073 m +426.528558 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +436.450077 352.59073 m +436.450077 347.467461 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +105.655866 357.714 m +105.655866 352.59073 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +115.577385 357.714 m +115.577385 352.59073 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +126.114192 357.714 m +126.114192 352.59073 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +185.566395 357.714 m +185.566395 352.59073 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +198.948909 357.714 m +198.948909 352.59073 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +208.716606 357.714 m +208.716606 352.59073 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +96.580368 362.83727 m +96.580368 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +119.499846 362.83727 m +119.499846 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +183.259065 362.83727 m +183.259065 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +192.642207 362.83727 m +192.642207 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +200.871684 362.83727 m +200.871684 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +214.40802 362.83727 m +214.40802 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +250.402368 362.83727 m +250.402368 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +262.86195 362.83727 m +262.86195 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +274.244778 362.83727 m +274.244778 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +281.935878 362.83727 m +281.935878 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +330.54363 362.83727 m +330.54363 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +342.618657 362.83727 m +342.618657 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +360.846564 362.83727 m +360.846564 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +414.914997 362.83727 m +414.914997 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +431.29704 362.83727 m +431.29704 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +436.911543 362.83727 m +436.911543 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +449.909502 362.83727 m +449.909502 357.714 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +130.267386 367.960539 m +130.267386 362.83727 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +192.488385 367.960539 m +192.488385 362.83727 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +273.244935 367.960539 m +273.244935 362.83727 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +349.848291 367.960539 m +349.848291 362.83727 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +428.451333 367.960539 m +428.451333 362.83727 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +128.2677 373.083809 m +128.2677 367.960539 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +197.179956 373.083809 m +197.179956 367.960539 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +269.091741 373.083809 m +269.091741 367.960539 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +117.50016 378.207078 m +117.50016 373.083809 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +194.872626 378.207078 m +194.872626 373.083809 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +285.089229 378.207078 m +285.089229 373.083809 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +347.310228 378.207078 m +347.310228 373.083809 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +363.999915 378.207078 m +363.999915 373.083809 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +436.757721 378.207078 m +436.757721 373.083809 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +118.807647 383.330348 m +118.807647 378.207078 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +133.343826 383.330348 m +133.343826 378.207078 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +193.488228 383.330348 m +193.488228 378.207078 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +204.40959 383.330348 m +204.40959 378.207078 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +350.002113 383.330348 m +350.002113 378.207078 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +361.231119 383.330348 m +361.231119 378.207078 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +428.2206 383.330348 m +428.2206 378.207078 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +127.114035 388.453617 m +127.114035 383.330348 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +195.103359 388.453617 m +195.103359 383.330348 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +275.475354 388.453617 m +275.475354 383.330348 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +285.627606 388.453617 m +285.627606 383.330348 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +355.847349 388.453617 m +355.847349 383.330348 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +423.221385 388.453617 m +423.221385 383.330348 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +198.641265 393.576887 m +198.641265 388.453617 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +352.770909 393.576887 m +352.770909 388.453617 l +stroke +grestore +gsave +461.466 140.89 74.43 261.653 clipbox +430.451019 393.576887 m +430.451019 388.453617 l +stroke +grestore +0.800 setlinewidth +0 setlinejoin +2 setlinecap +0.000 setgray +gsave +74.43 261.652696 m +74.43 402.542609 l +stroke +grestore +gsave +535.896 261.652696 m +535.896 402.542609 l +stroke +grestore +gsave +74.43 261.652696 m +535.896 261.652696 l +stroke +grestore +gsave +74.43 402.542609 m +535.896 402.542609 l +stroke +grestore +gsave +74.43 92.5848 m +535.896 92.5848 l +535.896 233.474713 l +74.43 233.474713 l +cl +1.000 setgray +fill +grestore +1 setlinejoin +0 setlinecap +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 92.5848 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +71.2503 77.991 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +151.341 92.5848 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +141.802 77.991 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +228.252 92.5848 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +218.713 77.991 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +305.163 92.5848 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +295.624 77.991 translate +0 rotate +0 0 m /three glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +382.074 92.5848 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +372.535 77.991 translate +0 rotate +0 0 m /four glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +458.985 92.5848 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +449.446 77.991 translate +0 rotate +0 0 m /five glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +0 0 m +0 -3.5 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +535.896 92.5848 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +526.357 77.991 translate +0 rotate +0 0 m /six glyphshow +6.3623 0 m /zero glyphshow +12.7246 0 m /zero glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +280.874 64.3192 translate +0 rotate +0 0 m /t glyphshow +3.9209 0 m /i glyphshow +6.69922 0 m /m glyphshow +16.4404 0 m /e glyphshow +22.5928 0 m /space glyphshow +25.7715 0 m /parenleft glyphshow +29.6729 0 m /m glyphshow +39.4141 0 m /s glyphshow +44.624 0 m /parenright glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 104.112 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +61.0706 100.315 translate +0 rotate +0 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 129.729 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +61.0706 125.932 translate +0 rotate +0 0 m /five glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 155.345 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 151.548 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 180.961 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 177.164 translate +0 rotate +0 0 m /one glyphshow +6.3623 0 m /five glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 206.578 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 202.781 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /zero glyphshow +grestore +gsave +/o { +gsave +newpath +translate +0.8 setlinewidth +1 setlinejoin + +0 setlinecap + +-0 0 m +-3.5 0 l + +gsave +0.000 setgray +fill +grestore +stroke +grestore +} bind def +74.43 232.194 o +grestore +/DejaVuSans 10.000 selectfont +gsave + +54.7112 228.397 translate +0 rotate +0 0 m /two glyphshow +6.3623 0 m /five glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +37.4425 115.913 translate +90 rotate +0 0 m /H glyphshow +7.51953 0 m /i glyphshow +10.2979 0 m /p glyphshow +16.6455 0 m /p glyphshow +22.9932 0 m /C glyphshow +29.9756 0 m /e glyphshow +36.1279 0 m /l glyphshow +38.9062 0 m /l glyphshow +41.6846 0 m /P glyphshow +47.3398 0 m /o glyphshow +53.458 0 m /p glyphshow +59.8057 0 m /u glyphshow +66.1436 0 m /l glyphshow +68.9219 0 m /a glyphshow +75.0498 0 m /t glyphshow +78.9707 0 m /i glyphshow +81.749 0 m /o glyphshow +87.8672 0 m /n glyphshow +grestore +/DejaVuSans 10.000 selectfont +gsave + +48.6331 130.35 translate +90 rotate +0 0 m /eight glyphshow +6.3623 0 m /seven glyphshow +12.7246 0 m /period glyphshow +15.9033 0 m /five glyphshow +22.2656 0 m /percent glyphshow +31.7676 0 m /space glyphshow +34.9463 0 m /a glyphshow +41.0742 0 m /c glyphshow +46.5723 0 m /t glyphshow +50.4932 0 m /i glyphshow +53.2715 0 m /v glyphshow +59.1895 0 m /e glyphshow +grestore +1.500 setlinewidth +0.122 0.467 0.706 setrgbcolor +gsave +461.466 140.89 74.43 92.585 clipbox +74.43 106.673791 m +74.43 101.550522 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +282.320433 111.797061 m +282.320433 106.673791 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +433.296726 111.797061 m +433.296726 106.673791 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +126.72948 116.92033 m +126.72948 111.797061 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +358.923789 116.92033 m +358.923789 111.797061 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +432.83526 116.92033 m +432.83526 111.797061 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +119.884401 122.0436 m +119.884401 116.92033 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +126.883302 122.0436 m +126.883302 116.92033 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +200.102574 122.0436 m +200.102574 116.92033 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +355.078239 122.0436 m +355.078239 116.92033 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +434.450391 122.0436 m +434.450391 116.92033 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +123.883773 137.413409 m +123.883773 132.290139 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +203.64048 137.413409 m +203.64048 132.290139 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +352.84782 137.413409 m +352.84782 132.290139 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +359.0007 137.413409 m +359.0007 132.290139 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +428.758977 137.413409 m +428.758977 132.290139 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +434.911857 137.413409 m +434.911857 132.290139 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +130.036653 142.536678 m +130.036653 137.413409 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +200.640951 142.536678 m +200.640951 137.413409 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +286.089072 142.536678 m +286.089072 137.413409 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +355.308972 142.536678 m +355.308972 137.413409 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +203.255925 147.659948 m +203.255925 142.536678 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +366.614889 147.659948 m +366.614889 142.536678 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +123.883773 152.783217 m +123.883773 147.659948 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +209.254983 152.783217 m +209.254983 147.659948 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +358.154679 152.783217 m +358.154679 147.659948 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +124.652883 157.906487 m +124.652883 152.783217 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +199.256553 157.906487 m +199.256553 152.783217 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +350.079024 157.906487 m +350.079024 152.783217 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +357.923946 157.906487 m +357.923946 152.783217 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +202.10226 163.029757 m +202.10226 157.906487 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +430.912485 163.029757 m +430.912485 157.906487 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +126.652569 168.153026 m +126.652569 163.029757 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +129.190632 173.276296 m +129.190632 168.153026 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +196.872312 173.276296 m +196.872312 168.153026 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +205.486344 173.276296 m +205.486344 168.153026 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +354.078396 173.276296 m +354.078396 168.153026 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +117.653982 178.399565 m +117.653982 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +195.94938 178.399565 m +195.94938 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +203.025192 178.399565 m +203.025192 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +278.397972 178.399565 m +278.397972 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +289.473156 178.399565 m +289.473156 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +350.617401 178.399565 m +350.617401 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +427.836045 178.399565 m +427.836045 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +433.988925 178.399565 m +433.988925 173.276296 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +125.96037 183.522835 m +125.96037 178.399565 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +196.410846 183.522835 m +196.410846 178.399565 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +289.165512 183.522835 m +289.165512 178.399565 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +358.539234 183.522835 m +358.539234 178.399565 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +130.805763 188.646104 m +130.805763 183.522835 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +201.640794 188.646104 m +201.640794 183.522835 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +281.012946 188.646104 m +281.012946 183.522835 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +354.001485 188.646104 m +354.001485 183.522835 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +361.615674 188.646104 m +361.615674 183.522835 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +132.574716 193.769374 m +132.574716 188.646104 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +197.256867 193.769374 m +197.256867 188.646104 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +351.463422 193.769374 m +351.463422 188.646104 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +435.296412 193.769374 m +435.296412 188.646104 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +431.835417 198.892643 m +431.835417 193.769374 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +121.422621 204.015913 m +121.422621 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +132.88236 204.015913 m +132.88236 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +195.872469 204.015913 m +195.872469 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +203.486658 204.015913 m +203.486658 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +274.475511 204.015913 m +274.475511 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +283.320276 204.015913 m +283.320276 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +345.848919 204.015913 m +345.848919 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +358.000857 204.015913 m +358.000857 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +428.528244 204.015913 m +428.528244 198.892643 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +199.179642 209.139183 m +199.179642 204.015913 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +217.48446 209.139183 m +217.48446 204.015913 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +281.858967 209.139183 m +281.858967 204.015913 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +356.847192 209.139183 m +356.847192 204.015913 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +437.526831 209.139183 m +437.526831 204.015913 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +127.114035 214.262452 m +127.114035 209.139183 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +198.410532 214.262452 m +198.410532 209.139183 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +353.770752 214.262452 m +353.770752 209.139183 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +364.153737 214.262452 m +364.153737 209.139183 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +433.065993 214.262452 m +433.065993 209.139183 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +124.499061 219.385722 m +124.499061 214.262452 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +198.410532 219.385722 m +198.410532 214.262452 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +272.783469 219.385722 m +272.783469 214.262452 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +434.911857 219.385722 m +434.911857 214.262452 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +121.960998 224.508991 m +121.960998 219.385722 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +197.179956 224.508991 m +197.179956 219.385722 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +206.71692 224.508991 m +206.71692 219.385722 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +277.859595 224.508991 m +277.859595 219.385722 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +352.770909 224.508991 m +352.770909 219.385722 l +stroke +grestore +gsave +461.466 140.89 74.43 92.585 clipbox +434.450391 224.508991 m +434.450391 219.385722 l +stroke +grestore +0.800 setlinewidth +0 setlinejoin +2 setlinecap +0.000 setgray +gsave +74.43 92.5848 m +74.43 233.474713 l +stroke +grestore +gsave +535.896 92.5848 m +535.896 233.474713 l +stroke +grestore +gsave +74.43 92.5848 m +535.896 92.5848 l +stroke +grestore +gsave +74.43 233.474713 m +535.896 233.474713 l +stroke +grestore + +end +showpage diff --git a/pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].pdf b/pydentate.net_tunedrev.TunedNetwork_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_000_1000_10000[10000][10000].pdf new file mode 100644 index 0000000000000000000000000000000000000000..99df381b2563a740edca1267767fa4c2102e4473 GIT binary patch literal 22953 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 v@s`Su&EGZRi%NgAEd@qqkuSSVt2i+7oz0F~ literal 0 HcmV?d00001 diff --git a/pydentate/__init__.py b/pydentate/__init__.py index a4f139b..efc1005 100644 --- a/pydentate/__init__.py +++ b/pydentate/__init__.py @@ -1,8 +1,6 @@ import os -from . import net_tunedrev, inputs, input_generator - dirname = os.path.dirname(__file__) -linux_precompiled = os.path.join(dirname, 'x86_64', 'libnrnmech.so') -windows_precompiled = os.path.join(dirname, 'win64', 'nrnmech.dll') +linux_precompiled = os.path.join(dirname, "x86_64", ".libs", "libnrnmech.so") +windows_precompiled = os.path.join(dirname, "win64", "./libs", "nrnmech.dll") diff --git a/pydentate/inputs.py b/pydentate/inputs.py index 70896dd..18b0ed5 100644 --- a/pydentate/inputs.py +++ b/pydentate/inputs.py @@ -5,7 +5,6 @@ @author: Daniel & barisckuru """ -import pdb import numpy as np import quantities as pq @@ -13,7 +12,6 @@ from neo.core import AnalogSignal from scipy import stats from scipy.stats import skewnorm -from skimage.measure import profile_line def inhom_poiss(modulation_rate=10, max_rate=100, n_cells=400): diff --git a/pydentate/net_tunedrev.py b/pydentate/net_tunedrev.py index 697fd9f..04a8521 100644 --- a/pydentate/net_tunedrev.py +++ b/pydentate/net_tunedrev.py @@ -9,37 +9,33 @@ @author: DanielM """ -from ouropy import gennetwork import numpy as np + +from ouropy import gennetwork + # from granulecell import GranuleCell # from mossycell_cat import MossyCell # from basketcell import BasketCell # from hippcell import HippCell - -from . import granulecell -from . import mossycell_cat -from . import basketcell -from . import hippcell +from . import basketcell, granulecell, hippcell, mossycell_cat GranuleCell = granulecell.GranuleCell MossyCell = mossycell_cat.MossyCell BasketCell = basketcell.BasketCell HippCell = hippcell.HippCell + class TunedNetwork(gennetwork.GenNetwork): - """ This model implements the ring model from Santhakumar et al. 2005. + """This model implements the ring model from Santhakumar et al. 2005. with some changes as in Yim et al. 2015. It features inhibition but omits the MC->GC connection. """ + name = "TunedNetwork" - def __init__(self, seed=None, temporal_patterns=np.array([]), - spatial_patterns_gcs=np.array([]), - spatial_patterns_bcs=np.array([]), - network_type='full', - pp_weight=1e-3): + def __init__(self, seed=None, temporal_patterns=np.array([]), spatial_patterns_gcs=np.array([]), spatial_patterns_bcs=np.array([]), network_type="full", pp_weight=1e-3): self.init_params = locals() - self.init_params['self'] = str(self.init_params['self']) + self.init_params["self"] = str(self.init_params["self"]) # Setup cells self.mk_population(GranuleCell, 2000) self.mk_population(MossyCell, 60) @@ -86,92 +82,61 @@ def __init__(self, seed=None, temporal_patterns=np.array([]), 'no-feedback', 'no-feedforward' or 'disinhibited'""" ) - if (type(spatial_patterns_gcs) == np.ndarray and - type(temporal_patterns) == np.ndarray): + if type(spatial_patterns_gcs) == np.ndarray and type(temporal_patterns) == np.ndarray: + print(len(spatial_patterns_gcs)) for pa in range(len(spatial_patterns_gcs)): # PP -> GC - gennetwork.PerforantPathPoissonTmgsyn(self.populations[0], - temporal_patterns[pa], - spatial_patterns_gcs[pa], - 'midd', 10, 0, 1, 0, 0, - pp_weight) - - if (type(spatial_patterns_bcs) == np.ndarray and - type(temporal_patterns) == np.ndarray): + gennetwork.PerforantPathPoissonTmgsyn(self.populations[0], temporal_patterns[pa], spatial_patterns_gcs[pa], "midd", 10, 0, 1, 0, 0, pp_weight) + + if type(spatial_patterns_bcs) == np.ndarray and type(temporal_patterns) == np.ndarray: + print(len(spatial_patterns_bcs)) for pa in range(len(spatial_patterns_bcs)): # PP -> BC - gennetwork.PerforantPathPoissonTmgsyn(self.populations[2], - temporal_patterns[pa], - spatial_patterns_bcs[pa], - 'ddend', 6.3, 0, 1, 0, 0, - pp_bc) + gennetwork.PerforantPathPoissonTmgsyn(self.populations[2], temporal_patterns[pa], spatial_patterns_bcs[pa], "ddend", 6.3, 0, 1, 0, 0, pp_bc) # GC -> MC - gennetwork.tmgsynConnection(self.populations[0], self.populations[1], - 12, 'proxd', 1, 7.6, 500, 0.1, 0, 0, 10, - 1.5, gc_mc) + gennetwork.tmgsynConnection(self.populations[0], self.populations[1], 12, "proxd", 1, 7.6, 500, 0.1, 0, 0, 10, 1.5, gc_mc) # GC -> BC # Weight x4, target_pool = 2 - gennetwork.tmgsynConnection(self.populations[0], self.populations[2], - 8, 'proxd', 1, 8.7, 500, 0.1, 0, 0, 10, - 0.8, gc_bc) + gennetwork.tmgsynConnection(self.populations[0], self.populations[2], 8, "proxd", 1, 8.7, 500, 0.1, 0, 0, 10, 0.8, gc_bc) # GC -> HC # Divergence x4; Weight doubled; Connected randomly. - gennetwork.tmgsynConnection(self.populations[0], self.populations[3], - 24, 'proxd', 1, 8.7, 500, 0.1, 0, 0, 10, - 1.5, gc_hc) + gennetwork.tmgsynConnection(self.populations[0], self.populations[3], 24, "proxd", 1, 8.7, 500, 0.1, 0, 0, 10, 1.5, gc_hc) # MC -> MC - gennetwork.tmgsynConnection(self.populations[1], self. populations[1], - 24, 'proxd', 3, 2.2, 0, 1, 0, 0, 10, - 2, 5e-4) + # pre_pop, post_pop, target_pool, target_segs, divergence, tau_1, tau_facil, U, tau_rec, e, thr, delay, weight + gennetwork.tmgsynConnection(self.populations[1], self.populations[1], 24, "proxd", 3, 2.2, 0, 1, 0, 0, 10, 2, 5e-4) # MC -> BC - gennetwork.tmgsynConnection(self.populations[1], self.populations[2], - 12, 'proxd', 1, 2, 0, 1, 0, 0, 10, - 3, 3e-4) + gennetwork.tmgsynConnection(self.populations[1], self.populations[2], 12, "proxd", 1, 2, 0, 1, 0, 0, 10, 3, 3e-4) # MC -> HC - gennetwork.tmgsynConnection(self.populations[1], self.populations[3], - 20, 'midd', 2, 6.2, 0, 1, 0, 0, 10, - 3, 2e-4) + gennetwork.tmgsynConnection(self.populations[1], self.populations[3], 20, "midd", 2, 6.2, 0, 1, 0, 0, 10, 3, 2e-4) # BC -> GC # # synapses x3; Weight *1/4; tau from 5.5 to 20 (Hefft & Jonas, 2005) - gennetwork.tmgsynConnection(self.populations[2], self.populations[0], - 560, 'soma', 400, 20, 0, 1, 0, -70, 10, - 0.85, bc_gc) + gennetwork.tmgsynConnection(self.populations[2], self.populations[0], 560, "soma", 400, 20, 0, 1, 0, -70, 10, 0.85, bc_gc) # We reseed here to make sure that those connections are consistent # between this and net_global which has a global target pool for # BC->GC. if seed: - self.set_numpy_seed(seed+1) + self.set_numpy_seed(seed + 1) # BC -> MC - gennetwork.tmgsynConnection(self.populations[2], self.populations[1], - 28, 'proxd', 3, 3.3, 0, 1, 0, -70, 10, - 1.5, 1.5e-3) + gennetwork.tmgsynConnection(self.populations[2], self.populations[1], 28, "proxd", 3, 3.3, 0, 1, 0, -70, 10, 1.5, 1.5e-3) # BC -> BC - gennetwork.tmgsynConnection(self.populations[2], self.populations[2], - 12, 'proxd', 2, 1.8, 0, 1, 0, -70, 10, - 0.8, 7.6e-3) + gennetwork.tmgsynConnection(self.populations[2], self.populations[2], 12, "proxd", 2, 1.8, 0, 1, 0, -70, 10, 0.8, 7.6e-3) # HC -> GC # Weight x10; Nr synapses x4; tau from 6 to 20 (Hefft & Jonas, 2005) - gennetwork.tmgsynConnection(self.populations[3], self.populations[0], - 2000, 'dd', 640, 20, 0, 1, 0, -70, 10, - 3.8, hc_gc) + gennetwork.tmgsynConnection(self.populations[3], self.populations[0], 2000, "dd", 640, 20, 0, 1, 0, -70, 10, 3.8, hc_gc) # HC -> MC - gennetwork.tmgsynConnection(self.populations[3], self.populations[1], - 60, ['mid1d', 'mid2d'], 4, 6, 0, 1, 0, -70, - 10, 1, 1.5e-3) + gennetwork.tmgsynConnection(self.populations[3], self.populations[1], 60, ["mid1d", "mid2d"], 4, 6, 0, 1, 0, -70, 10, 1, 1.5e-3) # HC -> BC - gennetwork.tmgsynConnection(self.populations[3], self.populations[2], - 24, 'ddend', 4, 5.8, 0, 1, 0, -70, 10, - 1.6, 5e-4) + gennetwork.tmgsynConnection(self.populations[3], self.populations[2], 24, "ddend", 4, 5.8, 0, 1, 0, -70, 10, 1.6, 5e-4) diff --git a/pydentate/neuron_tools.py b/pydentate/neuron_tools.py index 9d96893..25d77db 100644 --- a/pydentate/neuron_tools.py +++ b/pydentate/neuron_tools.py @@ -1,24 +1,32 @@ -from neuron import h, gui -from pydentate import windows_precompiled, linux_precompiled import platform -def load_compiled_mechanisms(path='precompiled'): +from neuron import h + +from pydentate import linux_precompiled, windows_precompiled + + +def load_compiled_mechanisms(path="precompiled"): """Loads precompiled mechanisms in pyDentate unless path defines the full path to a compiled mechanism file.""" - if path != 'precompiled': + if path != "precompiled": h.nrn_load_dll(path) else: - if platform.system() == 'Windows': + if platform.system() == "Windows": h.nrn_load_dll(windows_precompiled) else: + print("DLL loaded from: " + linux_precompiled) h.nrn_load_dll(linux_precompiled) -def run_neuron_simulator(warmup=2000, dt_warmup=10, dt_sim=0.1, t_start=0, - t_stop=600, v_init=-60): + +def run_neuron_simulator(warmup=2000, dt_warmup=10, dt_sim=0.1, t_start=0, t_stop=600, v_init=-60): + h.load_file("stdrun.hoc") + h.cvode.active(0) dt = 0.1 - h.steps_per_ms = 1.0/dt + h.steps_per_ms = 1.0 / dt + h.finitialize(v_init) + h.t = -warmup h.secondorder = 0 h.dt = dt_warmup diff --git a/pydentate/win64/gskch.mod b/pydentate/win64/gskch.mod index 67a781a..a771c33 100644 --- a/pydentate/win64/gskch.mod +++ b/pydentate/win64/gskch.mod @@ -67,9 +67,7 @@ PROCEDURE state() { :Computes state variable q at current v and dt. cai = ncai + lcai + tcai rate(cai) q = q + (qinf-q) * qexp - VERBATIM - return 0; - ENDVERBATIM + } LOCAL q10 diff --git a/pydentate/win64/hyperde3.mod b/pydentate/win64/hyperde3.mod index dc0e40d..6240ce0 100644 --- a/pydentate/win64/hyperde3.mod +++ b/pydentate/win64/hyperde3.mod @@ -102,9 +102,7 @@ INITIAL { hys = hysinf hyhtf = hyhtfinf hyhts = hyhtsinf - VERBATIM - return 0; - ENDVERBATIM + } ? states @@ -116,9 +114,6 @@ PROCEDURE states() { :Computes state variables m, h, and n hyhtf = hyhtf + hyhtfexp*(hyhtfinf-hyhtf) hyhts = hyhts + hyhtsexp*(hyhtsinf-hyhts) - VERBATIM - return 0; - ENDVERBATIM } LOCAL q10 diff --git a/pydentate/win64/ichan2.mod b/pydentate/win64/ichan2.mod index 4d79f53..3c6a147 100644 --- a/pydentate/win64/ichan2.mod +++ b/pydentate/win64/ichan2.mod @@ -90,9 +90,7 @@ INITIAL { nf = nfinf ns = nsinf - VERBATIM - return 0; - ENDVERBATIM + } ? states @@ -102,9 +100,7 @@ PROCEDURE states() { :Computes state variables m, h, and n h = h + hexp*(hinf-h) nf = nf + nfexp*(nfinf-nf) ns = ns + nsexp*(nsinf-ns) - VERBATIM - return 0; - ENDVERBATIM + } LOCAL q10 diff --git a/pydentate/win64/nca.mod b/pydentate/win64/nca.mod index 701923e..070761b 100644 --- a/pydentate/win64/nca.mod +++ b/pydentate/win64/nca.mod @@ -68,9 +68,7 @@ PROCEDURE states() { :Computes state variables m, h, and n trates(v) : at the current v and dt. c = c + cexp*(cinf-c) d = d + dexp*(dinf-d) - VERBATIM - return 0; - ENDVERBATIM + } LOCAL q10 diff --git a/pydentate/x86_64/.libs/libnrnmech.so b/pydentate/x86_64/.libs/libnrnmech.so old mode 100644 new mode 100755 index 7922274bd959b26ab1858abb264d46c73a2685ab..4c1bcb8fe96879e0093df1607409db85b969e52c GIT binary patch literal 168696 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 RF3abG^(`!GV)w)He*>h)+EV}k literal 191064 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 #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -46,15 +46,25 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define gkbar _p[0] +#define gkbar_columnindex 0 #define ik _p[1] +#define ik_columnindex 1 #define gkca _p[2] +#define gkca_columnindex 2 #define o _p[3] +#define o_columnindex 3 #define ek _p[4] +#define ek_columnindex 4 #define lcai _p[5] +#define lcai_columnindex 5 #define ncai _p[6] +#define ncai_columnindex 6 #define tcai _p[7] +#define tcai_columnindex 7 #define Do _p[8] +#define Do_columnindex 8 #define _g _p[9] +#define _g_columnindex 9 #define _ion_ncai *_ppvar[0]._pval #define _ion_lcai *_ppvar[1]._pval #define _ion_tcai *_ppvar[2]._pval @@ -183,15 +193,15 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); static void _ode_map(int, double**, double**, double*, Datum*, double*, int); -static void _ode_spec(_NrnThread*, _Memb_list*, int); -static void _ode_matsol(_NrnThread*, _Memb_list*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); #define _cvode_ieq _ppvar[6]._i static void _ode_matsol_instance1(_threadargsproto_); @@ -250,7 +260,7 @@ static void nrn_alloc(Prop* _prop) { static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -284,7 +294,7 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 cagk /home/danielmk/repos/pyDentate/mechs/CaBK.mod\n"); + ivoc_help("help ?1 cagk /Users/temma/ghq/pydentate/mechs/CaBK.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -383,7 +393,7 @@ static void _hoc_rate(void) { static int _ode_count(int _type){ return 1;} -static void _ode_spec(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -412,7 +422,7 @@ static void _ode_matsol_instance1(_threadargsproto_) { _ode_matsol1 (); } -static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -453,7 +463,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -487,7 +497,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -527,7 +537,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -547,7 +557,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -582,12 +592,12 @@ static void terminal(){} static void _initlists() { int _i; static int _first = 1; if (!_first) return; - _slist1[0] = &(o) - _p; _dlist1[0] = &(Do) - _p; + _slist1[0] = o_columnindex; _dlist1[0] = Do_columnindex; _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/CaBK.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/CaBK.mod"; static const char* nmodl_file_text = "TITLE CaGk\n" ": Calcium activated K channel.\n" diff --git a/pydentate/x86_64/CaBK.o b/pydentate/x86_64/CaBK.o index d50cbea6cdb0f4dd888e668b62a132519735530b..e21d7d629a61f4a37fb98f2520112da0179c2cf7 100644 GIT binary patch literal 16664 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 diff --git a/pydentate/x86_64/Gfluct2.c b/pydentate/x86_64/Gfluct2.c index 00bb19a..5a0d17b 100644 --- a/pydentate/x86_64/Gfluct2.c +++ b/pydentate/x86_64/Gfluct2.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -46,25 +46,45 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define E_e _p[0] +#define E_e_columnindex 0 #define E_i _p[1] +#define E_i_columnindex 1 #define g_e0 _p[2] +#define g_e0_columnindex 2 #define g_i0 _p[3] +#define g_i0_columnindex 3 #define std_e _p[4] +#define std_e_columnindex 4 #define std_i _p[5] +#define std_i_columnindex 5 #define tau_e _p[6] +#define tau_e_columnindex 6 #define tau_i _p[7] +#define tau_i_columnindex 7 #define i _p[8] +#define i_columnindex 8 #define g_e _p[9] +#define g_e_columnindex 9 #define g_i _p[10] +#define g_i_columnindex 10 #define g_e1 _p[11] +#define g_e1_columnindex 11 #define g_i1 _p[12] +#define g_i1_columnindex 12 #define D_e _p[13] +#define D_e_columnindex 13 #define D_i _p[14] +#define D_i_columnindex 14 #define exp_e _p[15] +#define exp_e_columnindex 15 #define exp_i _p[16] +#define exp_i_columnindex 16 #define amp_e _p[17] +#define amp_e_columnindex 17 #define amp_i _p[18] +#define amp_i_columnindex 18 #define _g _p[19] +#define _g_columnindex 19 #define _nd_area *_ppvar[0]._pval #if MAC @@ -82,8 +102,8 @@ extern "C" { static int hoc_nrnpointerindex = -1; /* external NEURON variables */ /* declaration of user functions */ - static double _hoc_new_seed(); - static double _hoc_oup(); + static double _hoc_new_seed(void*); + static double _hoc_oup(void*); static int _mechtype; extern void _nrn_cacheloop_reg(int, int); extern void hoc_register_prop_size(int, int, int); @@ -102,18 +122,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern Prop* nrn_point_prop_; static int _pointtype; - static void* _hoc_create_pnt(_ho) Object* _ho; { void* create_point_process(); + static void* _hoc_create_pnt(Object* _ho) { void* create_point_process(int, Object*); return create_point_process(_pointtype, _ho); } - static void _hoc_destroy_pnt(); - static double _hoc_loc_pnt(_vptr) void* _vptr; {double loc_point_process(); + static void _hoc_destroy_pnt(void*); + static double _hoc_loc_pnt(void* _vptr) {double loc_point_process(int, void*); return loc_point_process(_pointtype, _vptr); } - static double _hoc_has_loc(_vptr) void* _vptr; {double has_loc_point(); + static double _hoc_has_loc(void* _vptr) {double has_loc_point(void*); return has_loc_point(_vptr); } - static double _hoc_get_loc_pnt(_vptr)void* _vptr; { - double get_loc_point_process(); return (get_loc_point_process(_vptr)); + static double _hoc_get_loc_pnt(void* _vptr) { + double get_loc_point_process(void*); return (get_loc_point_process(_vptr)); } extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { @@ -169,11 +189,11 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); - static void _hoc_destroy_pnt(_vptr) void* _vptr; { +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + static void _hoc_destroy_pnt(void* _vptr) { destroy_point_process(_vptr); } @@ -235,7 +255,7 @@ static void nrn_alloc(Prop* _prop) { static void _initlists(); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -257,7 +277,7 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_dparam_semantics(_mechtype, 1, "pntproc"); hoc_register_cvode(_mechtype, _ode_count, 0, 0, 0); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 Gfluct2 /home/danielmk/repos/pyDentate/mechs/Gfluct2.mod\n"); + ivoc_help("help ?1 Gfluct2 /Users/temma/ghq/pydentate/mechs/Gfluct2.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -329,7 +349,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -372,7 +392,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -406,7 +426,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -426,7 +446,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -461,7 +481,7 @@ _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/Gfluct2.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/Gfluct2.mod"; static const char* nmodl_file_text = "TITLE Fluctuating conductances\n" "\n" diff --git a/pydentate/x86_64/Gfluct2.o b/pydentate/x86_64/Gfluct2.o index 3c117704a936130181fa6d1c7d8720fbdf33bd9f..87dd1b3861c25711aa29cde424c10a75ed997693 100644 GIT binary patch literal 14136 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 diff --git a/pydentate/x86_64/LcaMig.c b/pydentate/x86_64/LcaMig.c index a18a738..2510c25 100644 --- a/pydentate/x86_64/LcaMig.c +++ b/pydentate/x86_64/LcaMig.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -46,14 +46,23 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define glcabar _p[0] +#define glcabar_columnindex 0 #define ilca _p[1] +#define ilca_columnindex 1 #define m _p[2] +#define m_columnindex 2 #define cai _p[3] +#define cai_columnindex 3 #define cao _p[4] +#define cao_columnindex 4 #define Dm _p[5] +#define Dm_columnindex 5 #define glca _p[6] +#define glca_columnindex 6 #define elca _p[7] +#define elca_columnindex 7 #define _g _p[8] +#define _g_columnindex 8 #define _ion_elca *_ppvar[0]._pval #define _ion_ilca *_ppvar[1]._pval #define _ion_dilcadv *_ppvar[2]._pval @@ -177,15 +186,15 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); static void _ode_map(int, double**, double**, double*, Datum*, double*, int); -static void _ode_spec(_NrnThread*, _Memb_list*, int); -static void _ode_matsol(_NrnThread*, _Memb_list*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); #define _cvode_ieq _ppvar[5]._i static void _ode_matsol_instance1(_threadargsproto_); @@ -236,7 +245,7 @@ static void nrn_alloc(Prop* _prop) { static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -265,7 +274,7 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 lca /home/danielmk/repos/pyDentate/mechs/LcaMig.mod\n"); + ivoc_help("help ?1 lca /Users/temma/ghq/pydentate/mechs/LcaMig.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -490,7 +499,7 @@ static void _hoc_rate(void) { static int _ode_count(int _type){ return 1;} -static void _ode_spec(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -518,7 +527,7 @@ static void _ode_matsol_instance1(_threadargsproto_) { _ode_matsol1 (); } -static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -559,7 +568,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -592,7 +601,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -631,7 +640,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -651,7 +660,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -687,12 +696,12 @@ static void _initlists() { if (!_first) return; _t_alp = makevector(201*sizeof(double)); _t_bet = makevector(201*sizeof(double)); - _slist1[0] = &(m) - _p; _dlist1[0] = &(Dm) - _p; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/LcaMig.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/LcaMig.mod"; static const char* nmodl_file_text = "TITLE l-calcium channel\n" ": l-type calcium channel\n" diff --git a/pydentate/x86_64/LcaMig.o b/pydentate/x86_64/LcaMig.o index d89c23890eac48d736a96ef86a12378008210948..2b547a2c227e01c6234a0775dcb34bfe173f9406 100644 GIT binary patch literal 17408 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 OO?Br5KPnvU`u`5aly{8) diff --git a/pydentate/x86_64/bgka.c b/pydentate/x86_64/bgka.c index 3effd27..0db07e6 100644 --- a/pydentate/x86_64/bgka.c +++ b/pydentate/x86_64/bgka.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -46,14 +46,23 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define gkabar _p[0] +#define gkabar_columnindex 0 #define ik _p[1] +#define ik_columnindex 1 #define gka _p[2] +#define gka_columnindex 2 #define n _p[3] +#define n_columnindex 3 #define l _p[4] +#define l_columnindex 4 #define ek _p[5] +#define ek_columnindex 5 #define Dn _p[6] +#define Dn_columnindex 6 #define Dl _p[7] +#define Dl_columnindex 7 #define _g _p[8] +#define _g_columnindex 8 #define _ion_ek *_ppvar[0]._pval #define _ion_ik *_ppvar[1]._pval #define _ion_dikdv *_ppvar[2]._pval @@ -190,15 +199,15 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); static void _ode_map(int, double**, double**, double*, Datum*, double*, int); -static void _ode_spec(_NrnThread*, _Memb_list*, int); -static void _ode_matsol(_NrnThread*, _Memb_list*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); #define _cvode_ieq _ppvar[3]._i static void _ode_matsol_instance1(_threadargsproto_); @@ -246,7 +255,7 @@ static void nrn_alloc(Prop* _prop) { static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -271,7 +280,7 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 borgka /home/danielmk/repos/pyDentate/mechs/bgka.mod\n"); + ivoc_help("help ?1 borgka /Users/temma/ghq/pydentate/mechs/bgka.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -386,7 +395,7 @@ static void _hoc_rates(void) { static int _ode_count(int _type){ return 2;} -static void _ode_spec(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -412,7 +421,7 @@ static void _ode_matsol_instance1(_threadargsproto_) { _ode_matsol1 (); } -static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -448,7 +457,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -479,7 +488,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -516,7 +525,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -536,7 +545,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -568,13 +577,13 @@ static void terminal(){} static void _initlists() { int _i; static int _first = 1; if (!_first) return; - _slist1[0] = &(n) - _p; _dlist1[0] = &(Dn) - _p; - _slist1[1] = &(l) - _p; _dlist1[1] = &(Dl) - _p; + _slist1[0] = n_columnindex; _dlist1[0] = Dn_columnindex; + _slist1[1] = l_columnindex; _dlist1[1] = Dl_columnindex; _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/bgka.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/bgka.mod"; static const char* nmodl_file_text = "TITLE Borg-Graham type generic K-A channel\n" "UNITS {\n" diff --git a/pydentate/x86_64/bgka.o b/pydentate/x86_64/bgka.o index ca3ce3f2e49edcd5a35e7e87ae2e145897afa312..0123815c3a5bc37bfdaf3cd6c5c49c6e9d4a4e23 100644 GIT binary patch literal 14872 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 ZFxkcF=+UhWo?$uAy`7PS>ha;e6Ss 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 diff --git a/pydentate/x86_64/ccanl.c b/pydentate/x86_64/ccanl.c index 2b41684..0db80cc 100644 --- a/pydentate/x86_64/ccanl.c +++ b/pydentate/x86_64/ccanl.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -45,22 +45,39 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define catau _p[0] +#define catau_columnindex 0 #define caiinf _p[1] +#define caiinf_columnindex 1 #define cai _p[2] +#define cai_columnindex 2 #define eca _p[3] +#define eca_columnindex 3 #define inca _p[4] +#define inca_columnindex 4 #define ilca _p[5] +#define ilca_columnindex 5 #define itca _p[6] +#define itca_columnindex 6 #define enca _p[7] +#define enca_columnindex 7 #define elca _p[8] +#define elca_columnindex 8 #define etca _p[9] +#define etca_columnindex 9 #define ncai _p[10] +#define ncai_columnindex 10 #define Dncai _p[11] +#define Dncai_columnindex 11 #define lcai _p[12] +#define lcai_columnindex 12 #define Dlcai _p[13] +#define Dlcai_columnindex 13 #define tcai _p[14] +#define tcai_columnindex 14 #define Dtcai _p[15] +#define Dtcai_columnindex 15 #define _g _p[16] +#define _g_columnindex 16 #define _ion_ncai *_ppvar[0]._pval #define _ion_inca *_ppvar[1]._pval #define _ion_enca *_ppvar[2]._pval @@ -163,15 +180,15 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); static void _ode_map(int, double**, double**, double*, Datum*, double*, int); -static void _ode_spec(_NrnThread*, _Memb_list*, int); -static void _ode_matsol(_NrnThread*, _Memb_list*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); #define _cvode_ieq _ppvar[12]._i static void _ode_matsol_instance1(_threadargsproto_); @@ -238,7 +255,7 @@ static void nrn_alloc(Prop* _prop) { static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -277,7 +294,7 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 ccanl /home/danielmk/repos/pyDentate/mechs/ccanl.mod\n"); + ivoc_help("help ?1 ccanl /Users/temma/ghq/pydentate/mechs/ccanl.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -351,7 +368,7 @@ static void _hoc_ktf(void) { static int _ode_count(int _type){ return 3;} -static void _ode_spec(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -397,7 +414,7 @@ static void _ode_matsol_instance1(_threadargsproto_) { _ode_matsol1 (); } -static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -458,7 +475,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -504,7 +521,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -524,7 +541,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -544,7 +561,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; double _dtsav = dt; if (secondorder) { dt *= 0.5; } @@ -609,17 +626,17 @@ static void terminal(){} static void _initlists() { int _i; static int _first = 1; if (!_first) return; - _slist1[0] = &(ncai) - _p; _dlist1[0] = &(Dncai) - _p; - _slist1[1] = &(lcai) - _p; _dlist1[1] = &(Dlcai) - _p; - _slist1[2] = &(tcai) - _p; _dlist1[2] = &(Dtcai) - _p; - _slist2[0] = &(lcai) - _p; - _slist2[1] = &(ncai) - _p; - _slist2[2] = &(tcai) - _p; + _slist1[0] = ncai_columnindex; _dlist1[0] = Dncai_columnindex; + _slist1[1] = lcai_columnindex; _dlist1[1] = Dlcai_columnindex; + _slist1[2] = tcai_columnindex; _dlist1[2] = Dtcai_columnindex; + _slist2[0] = lcai_columnindex; + _slist2[1] = ncai_columnindex; + _slist2[2] = tcai_columnindex; _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/ccanl.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/ccanl.mod"; static const char* nmodl_file_text = "COMMENT\n" " calcium accumulation into a volume of area*depth next to the\n" diff --git a/pydentate/x86_64/ccanl.o b/pydentate/x86_64/ccanl.o index 2c0aa384c380b1ebfd5b75eb41d3dd9c7f4803e3..7e4f535ebc5679ac3b7da3e37ff9aa8ae24a1aae 100644 GIT binary patch literal 14776 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 RF3abG^(`!GV)w)He*>h)+EV}k literal 0 HcmV?d00001 diff --git a/pydentate/x86_64/libnrnmech.so b/pydentate/x86_64/libnrnmech.so deleted file mode 100644 index 7922274bd959b26ab1858abb264d46c73a2685ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 191064 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 $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "CaBK.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") -./bgka.c: ../mechs/bgka.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) bgka.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./CaBK.o: ./CaBK.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./bgka.o: ./bgka.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ +./Gfluct2.c: ../Gfluct2.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "Gfluct2.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") -./CaBK.c: ../mechs/CaBK.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) CaBK.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./Gfluct2.o: ./Gfluct2.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./CaBK.o: ./CaBK.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ +./LcaMig.c: ../LcaMig.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "LcaMig.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") -./ccanl.c: ../mechs/ccanl.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) ccanl.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./LcaMig.o: ./LcaMig.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./ccanl.o: ./ccanl.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ +./bgka.c: ../bgka.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "bgka.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") -./Gfluct2.c: ../mechs/Gfluct2.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) Gfluct2.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./bgka.o: ./bgka.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./Gfluct2.o: ./Gfluct2.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ +./ccanl.c: ../ccanl.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "ccanl.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") + +./ccanl.o: ./ccanl.c + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./gskch.c: ../mechs/gskch.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) gskch.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./gskch.c: ../gskch.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "gskch.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./gskch.o: ./gskch.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./hyperde3.c: ../mechs/hyperde3.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) hyperde3.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./hyperde3.c: ../hyperde3.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "hyperde3.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./hyperde3.o: ./hyperde3.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./ichan2.c: ../mechs/ichan2.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) ichan2.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./ichan2.c: ../ichan2.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "ichan2.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./ichan2.o: ./ichan2.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ - -./LcaMig.c: ../mechs/LcaMig.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) LcaMig.mod -o "/home/danielmk/repos/pyDentate/x86_64") - -./LcaMig.o: ./LcaMig.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./nca.c: ../mechs/nca.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) nca.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./nca.c: ../nca.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "nca.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./nca.o: ./nca.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./netstim125.c: ../mechs/netstim125.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) netstim125.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./netstim125.c: ../netstim125.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "netstim125.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./netstim125.o: ./netstim125.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./netstimbox.c: ../mechs/netstimbox.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) netstimbox.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./netstimbox.c: ../netstimbox.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "netstimbox.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./netstimbox.o: ./netstimbox.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./tca.c: ../mechs/tca.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) tca.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./tca.c: ../tca.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "tca.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./tca.o: ./tca.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./tmgexp2syn.c: ../mechs/tmgexp2syn.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) tmgexp2syn.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./tmgexp2syn.c: ../tmgexp2syn.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "tmgexp2syn.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./tmgexp2syn.o: ./tmgexp2syn.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./tmgsyn.c: ../mechs/tmgsyn.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) tmgsyn.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./tmgsyn.c: ../tmgsyn.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "tmgsyn.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./tmgsyn.o: ./tmgsyn.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ -./vecevent.c: ../mechs/vecevent.mod - @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\n" - (cd "../mechs"; MODLUNIT=$(NRNUNITS) $(NOCMODL) vecevent.mod -o "/home/danielmk/repos/pyDentate/x86_64") +./vecevent.c: ../vecevent.mod + @printf " -> $(C_GREEN)NMODL$(C_RESET) $<\\n" + (cd ".."; MODLUNIT=$(NRNUNITS) $(NOCMODL) "vecevent.mod" -o "/Users/temma/ghq/pydentate/mechs/x86_64") ./vecevent.o: ./vecevent.c - @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\n" - $(COMPILE) -I"../mechs" $(INCLUDES) -fPIC -c $< -o $@ + @printf " -> $(C_GREEN)Compiling$(C_RESET) $<\\n" + $(COMPILE) -I".." $(INCLUDES) -fPIC -c $< -o $@ diff --git a/pydentate/x86_64/mod_func.c b/pydentate/x86_64/mod_func.cpp similarity index 57% rename from pydentate/x86_64/mod_func.c rename to pydentate/x86_64/mod_func.cpp index 2af39f7..7b9ee80 100644 --- a/pydentate/x86_64/mod_func.c +++ b/pydentate/x86_64/mod_func.cpp @@ -2,15 +2,18 @@ #include "hocdec.h" extern int nrnmpi_myid; extern int nrn_nobanner_; +#if defined(__cplusplus) +extern "C" { +#endif -extern void _bgka_reg(void); extern void _CaBK_reg(void); -extern void _ccanl_reg(void); extern void _Gfluct2_reg(void); +extern void _LcaMig_reg(void); +extern void _bgka_reg(void); +extern void _ccanl_reg(void); extern void _gskch_reg(void); extern void _hyperde3_reg(void); extern void _ichan2_reg(void); -extern void _LcaMig_reg(void); extern void _nca_reg(void); extern void _netstim125_reg(void); extern void _netstimbox_reg(void); @@ -19,35 +22,34 @@ extern void _tmgexp2syn_reg(void); extern void _tmgsyn_reg(void); extern void _vecevent_reg(void); -void modl_reg(){ +void modl_reg() { if (!nrn_nobanner_) if (nrnmpi_myid < 1) { fprintf(stderr, "Additional mechanisms from files\n"); - - fprintf(stderr," \"mechs/bgka.mod\""); - fprintf(stderr," \"mechs/CaBK.mod\""); - fprintf(stderr," \"mechs/ccanl.mod\""); - fprintf(stderr," \"mechs/Gfluct2.mod\""); - fprintf(stderr," \"mechs/gskch.mod\""); - fprintf(stderr," \"mechs/hyperde3.mod\""); - fprintf(stderr," \"mechs/ichan2.mod\""); - fprintf(stderr," \"mechs/LcaMig.mod\""); - fprintf(stderr," \"mechs/nca.mod\""); - fprintf(stderr," \"mechs/netstim125.mod\""); - fprintf(stderr," \"mechs/netstimbox.mod\""); - fprintf(stderr," \"mechs/tca.mod\""); - fprintf(stderr," \"mechs/tmgexp2syn.mod\""); - fprintf(stderr," \"mechs/tmgsyn.mod\""); - fprintf(stderr," \"mechs/vecevent.mod\""); + fprintf(stderr, " \"CaBK.mod\""); + fprintf(stderr, " \"Gfluct2.mod\""); + fprintf(stderr, " \"LcaMig.mod\""); + fprintf(stderr, " \"bgka.mod\""); + fprintf(stderr, " \"ccanl.mod\""); + fprintf(stderr, " \"gskch.mod\""); + fprintf(stderr, " \"hyperde3.mod\""); + fprintf(stderr, " \"ichan2.mod\""); + fprintf(stderr, " \"nca.mod\""); + fprintf(stderr, " \"netstim125.mod\""); + fprintf(stderr, " \"netstimbox.mod\""); + fprintf(stderr, " \"tca.mod\""); + fprintf(stderr, " \"tmgexp2syn.mod\""); + fprintf(stderr, " \"tmgsyn.mod\""); + fprintf(stderr, " \"vecevent.mod\""); fprintf(stderr, "\n"); } - _bgka_reg(); _CaBK_reg(); - _ccanl_reg(); _Gfluct2_reg(); + _LcaMig_reg(); + _bgka_reg(); + _ccanl_reg(); _gskch_reg(); _hyperde3_reg(); _ichan2_reg(); - _LcaMig_reg(); _nca_reg(); _netstim125_reg(); _netstimbox_reg(); @@ -56,3 +58,7 @@ void modl_reg(){ _tmgsyn_reg(); _vecevent_reg(); } + +#if defined(__cplusplus) +} +#endif diff --git a/pydentate/x86_64/mod_func.o b/pydentate/x86_64/mod_func.o index 76577750fed89345490c333294084386996b5b9b..98e094814899418fdaf8cd7aa6685af143a3c815 100644 GIT binary patch literal 2456 zcmb`IO=uHA6vrpEwzamlexag5{J03NXp2zMg4VB~6^d37M8@rAlPqR8VY6*hK@sXF z;^###f}n_a66r+`dQb%MpdJ+Qpdu=IP!KPE>;G-uBymi@gF|ND`@R3po7tVr+xuVN z|Ew1xGD_frUW+bj(4*uCF%A6?2~}F22BJl244Pu(6x73fuu=wgK7hkb%HGvmdli-J zbk0NhXzZEMLbQ`yEB2C6O-d^l_>Pz4fSym~`NH~AwGd{WMy130tc;sAtw8pBgN_%M zvU^oggfmq=CkH#QE($HAmsg1Wky1)KB@@2s+67TxUkB$~UXaCB&c`Um3XxJi*}3Sg ziY18lYn#7$}63aAOwmIvnw~B)lhq7N`p^NElZ^cuYcb1>s(`R5wUysxabe zHQ^!&Efq$bC85&fr%1py{Pi6BNEly1*j-H+sFo^KZG=ferB!VqL4S_+o3zew5B|?3 zHhjBb+xB-zDpthfPT*ubGaYqpD`k34&do&=e#VU^oV1;56w%o$&93ze+)R8n{I!X6 zzZJA8?6%AePEt`{a;K?$%QC&Rf@E%|l~Rxz%G!S1ZddHkw8e~`RZQX8K`wCIMQw}K ztsLpg@iE`&CF|~UUuT0iixl=^q%Ur zz_!3q?F^hU6t^@^YfSf+-#?`BI*oT|JfiVKjgM)3USlee<@4{;c!|dIHKuxBKK_%& z&out3@f(ft0hYNSZu@=~Zt1W}-%cW+4j?1WD^6z#`0#STqWV$rQF_>uVIko=3bluU zN)Njz3GAVkutz0K1&dXM1F9Y|a)o0m6sH0t27M>6h4g&S%{tN@a^gZJvi*S-#-x|& NGd<7tC0QC3U9RN=4u081t4g=}O6S#U*Qf*AS1eYOYAtl9GlB0_ z+^`x4ai$d2f=sD8?Z;gr(}#h0TcJGVIzg@2*C3s~U@49oG9 zS7}C-xfwqy`h(51iX|D&InO;*EjQ~z&sbaNCvj2@vI9E|q2z_yY%@>H36h}f&&~|Q zbD<#&$_v;D-}6uSVIq}cd~|eAX4A1kJxuDE-OixXzcst7o_4b*2l}1!1R|0f)7{a9Fg>_O`8EzIe$y^t-x?7z%6+If-0%@2lu(Zuw2UlR3$Lb0P82I$XdUUNX~jDiLLwbviG?qpbU~P)kDwmgp(WXN0mi2fNBucc2ql1?L@T;)ex%PsIt-}^~t7A+0-kW zx@C9Z1=IP+FN^$mZgON_Ec7NR*zBs);X3Gxfx4{1Op|a3lNYnl#)FVBqViFwamMhKRm_3Ue9XB+qDE z#y80~YFx%Q$@?@e8NL1V{$H zi3;<>fMnpCsW5*MkPIB3k-3a}l0Tqvm)bDsAEd(i7?2EeI8>Ow21tgK-9?4@89*}3 zgFR&a5w&5^Bd;?@e1n<#FCmRb{CpA5CKkE_SVCH%%njTkf)&~~- zDNT>N8|z=U=-<=y_-(TOLyP{brpFzI^`Bex-)egNEn)rl7X6Q!ezm6m*`mLy>DOrb z4t(Kc=6?2Syr0H-J>^s_^;zBNu@B<-;NFV89%g}h4k5^peS<+V#00#DZ`}BfVTh&R z=1u?UrcH-Zn)=$go5nuO`G5VhA$pyXuJ?gR^S-HjY(D`VOK diff --git a/pydentate/x86_64/nca.c b/pydentate/x86_64/nca.c index 6e4ed3a..8ba1f7a 100644 --- a/pydentate/x86_64/nca.c +++ b/pydentate/x86_64/nca.c @@ -1,10 +1,10 @@ /* Created by Language version: 7.7.0 */ -/* NOT VECTORIZED */ -#define NRN_VECTORIZED 0 +/* VECTORIZED */ +#define NRN_VECTORIZED 1 #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -34,34 +34,51 @@ extern double hoc_Exp(double); #define states states__nca #define trates trates__nca -#define _threadargscomma_ /**/ -#define _threadargsprotocomma_ /**/ -#define _threadargs_ /**/ -#define _threadargsproto_ /**/ +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt /*SUPPRESS 761*/ /*SUPPRESS 762*/ /*SUPPRESS 763*/ /*SUPPRESS 765*/ extern double *getarg(); - static double *_p; static Datum *_ppvar; + /* Thread safe. No static _p or _ppvar. */ -#define t nrn_threads->_t -#define dt nrn_threads->_dt +#define t _nt->_t +#define dt _nt->_dt #define gncabar _p[0] +#define gncabar_columnindex 0 #define gnca _p[1] +#define gnca_columnindex 1 #define inca _p[2] +#define inca_columnindex 2 #define cinf _p[3] +#define cinf_columnindex 3 #define dinf _p[4] +#define dinf_columnindex 4 #define ctau _p[5] +#define ctau_columnindex 5 #define dtau _p[6] +#define dtau_columnindex 6 #define c _p[7] +#define c_columnindex 7 #define d _p[8] +#define d_columnindex 8 #define Dc _p[9] +#define Dc_columnindex 9 #define Dd _p[10] +#define Dd_columnindex 10 #define enca _p[11] +#define enca_columnindex 11 #define cexp _p[12] +#define cexp_columnindex 12 #define dexp _p[13] -#define _g _p[14] +#define dexp_columnindex 13 +#define v _p[14] +#define v_columnindex 14 +#define _g _p[15] +#define _g_columnindex 15 #define _ion_enca *_ppvar[0]._pval #define _ion_inca *_ppvar[1]._pval #define _ion_dincadv *_ppvar[2]._pval @@ -79,6 +96,8 @@ extern double hoc_Exp(double); extern "C" { #endif static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; /* external NEURON variables */ extern double celsius; /* declaration of user functions */ @@ -104,7 +123,7 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { - _p = _prop->param; _ppvar = _prop->dparam; + _extcall_prop = _prop; } static void _hoc_setdata() { Prop *_prop, *hoc_getdata_range(int); @@ -122,7 +141,13 @@ extern void hoc_reg_nmodl_filename(int, const char*); 0, 0 }; #define vtrap vtrap_nca - extern double vtrap( double , double ); + extern double vtrap( _threadargsprotocomma_ double , double ); + +static void _check_trates(double*, Datum*, Datum*, NrnThread*); +static void _check_table_thread(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, int _type) { + _check_trates(_p, _ppvar, _thread, _nt); + } + #define _zq10 _thread[0]._pval[0] /* declare global and static user variables */ #define usetable usetable_nca double usetable = 1; @@ -142,7 +167,6 @@ extern void hoc_reg_nmodl_filename(int, const char*); static double c0 = 0; static double delta_t = 1; static double d0 = 0; - static double v = 0; /* connect global user variables to hoc */ static DoubScal hoc_scdoub[] = { "usetable_nca", &usetable_nca, @@ -153,10 +177,10 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); /* connect range variables in _p that hoc is supposed to know about */ @@ -183,11 +207,11 @@ extern Prop* need_memb(Symbol*); static void nrn_alloc(Prop* _prop) { Prop *prop_ion; double *_p; Datum *_ppvar; - _p = nrn_prop_data_alloc(_mechtype, 15, _prop); + _p = nrn_prop_data_alloc(_mechtype, 16, _prop); /*initialize range parameters*/ gncabar = 0; _prop->param = _p; - _prop->param_size = 15; + _prop->param_size = 16; _ppvar = nrn_prop_datum_alloc(_mechtype, 3, _prop); _prop->dparam = _ppvar; /*connect ionic variables to this model*/ @@ -199,39 +223,46 @@ static void nrn_alloc(Prop* _prop) { } static void _initlists(); + static void _thread_mem_init(Datum*); + static void _thread_cleanup(Datum*); static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); void _nca_reg() { - int _vectorized = 0; + int _vectorized = 1; _initlists(); ion_reg("nca", 2.0); _nca_sym = hoc_lookup("nca_ion"); - register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 0); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 2); + _extcall_thread = (Datum*)ecalloc(1, sizeof(Datum)); + _thread_mem_init(_extcall_thread); _mechtype = nrn_get_mechtype(_mechanism[1]); _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 1, _thread_mem_init); + _nrn_thread_reg(_mechtype, 0, _thread_cleanup); _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + _nrn_thread_table_reg(_mechtype, _check_table_thread); #if NMODL_TEXT hoc_reg_nmodl_text(_mechtype, nmodl_file_text); hoc_reg_nmodl_filename(_mechtype, nmodl_filename); #endif - hoc_register_prop_size(_mechtype, 15, 3); + hoc_register_prop_size(_mechtype, 16, 3); hoc_register_dparam_semantics(_mechtype, 0, "nca_ion"); hoc_register_dparam_semantics(_mechtype, 1, "nca_ion"); hoc_register_dparam_semantics(_mechtype, 2, "nca_ion"); hoc_register_cvode(_mechtype, _ode_count, 0, 0, 0); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 nca /home/danielmk/repos/pyDentate/mechs/nca.mod\n"); + ivoc_help("help ?1 nca /Users/temma/ghq/pydentate/mechs/nca.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } static double FARADAY = 96520.0; static double R = 8.3134; - static double _zq10 ; + /*Top LOCAL _zq10 */ static double *_t_cinf; static double *_t_cexp; static double *_t_dinf; @@ -245,29 +276,30 @@ static int error; static int _ninits = 0; static int _match_recurse=1; static void _modl_cleanup(){ _match_recurse=1;} -static int _f_trates(double); -static int rates(double); -static int states(); -static int trates(double); - static void _n_trates(double); +static int _f_trates(_threadargsprotocomma_ double); +static int rates(_threadargsprotocomma_ double); +static int states(_threadargsproto_); +static int trates(_threadargsprotocomma_ double); + static void _n_trates(_threadargsprotocomma_ double _lv); -static int states ( ) { +static int states ( _threadargsproto_ ) { trates ( _threadargscomma_ v ) ; c = c + cexp * ( cinf - c ) ; d = d + dexp * ( dinf - d ) ; - -/*VERBATIM*/ - return 0; - return 0; } + return 0; } static void _hoc_states(void) { double _r; - _r = 1.; - states ( ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + states ( _p, _ppvar, _thread, _nt ); hoc_retpushx(_r); } -static int rates ( double _lv ) { +static int rates ( _threadargsprotocomma_ double _lv ) { double _lalpha , _lbeta , _lsum ; _zq10 = pow( 3.0 , ( ( celsius - 6.3 ) / 10.0 ) ) ; _lalpha = - 0.19 * vtrap ( _threadargscomma_ _lv - 19.88 , - 10.0 ) ; @@ -284,13 +316,16 @@ static int rates ( double _lv ) { static void _hoc_rates(void) { double _r; - _r = 1.; - rates ( *getarg(1) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt, *getarg(1) ); hoc_retpushx(_r); } static double _mfac_trates, _tmin_trates; - static void _check_trates(); - static void _check_trates() { + static void _check_trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { static int _maktable=1; int _i, _j, _ix = 0; double _xi, _tmax; static double _sav_dt; @@ -303,7 +338,7 @@ static void _hoc_rates(void) { _tmax = 100.0 ; _dx = (_tmax - _tmin_trates)/200.; _mfac_trates = 1./_dx; for (_i=0, _x=_tmin_trates; _i < 201; _x += _dx, _i++) { - _f_trates(_x); + _f_trates(_p, _ppvar, _thread, _nt, _x); _t_cinf[_i] = cinf; _t_cexp[_i] = cexp; _t_dinf[_i] = dinf; @@ -316,15 +351,18 @@ static void _hoc_rates(void) { } } - static int trates(double _lv){ _check_trates(); - _n_trates(_lv); + static int trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _lv) { +#if 0 +_check_trates(_p, _ppvar, _thread, _nt); +#endif + _n_trates(_p, _ppvar, _thread, _nt, _lv); return 0; } - static void _n_trates(double _lv){ int _i, _j; + static void _n_trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _lv){ int _i, _j; double _xi, _theta; if (!usetable) { - _f_trates(_lv); return; + _f_trates(_p, _ppvar, _thread, _nt, _lv); return; } _xi = _mfac_trates * (_lv - _tmin_trates); if (isnan(_xi)) { @@ -363,7 +401,7 @@ static void _hoc_rates(void) { } -static int _f_trates ( double _lv ) { +static int _f_trates ( _threadargsprotocomma_ double _lv ) { double _ltinc ; rates ( _threadargscomma_ _lv ) ; _ltinc = - dt * _zq10 ; @@ -373,12 +411,20 @@ static int _f_trates ( double _lv ) { static void _hoc_trates(void) { double _r; - _r = 1.; - trates ( *getarg(1) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + +#if 1 + _check_trates(_p, _ppvar, _thread, _nt); +#endif + _r = 1.; + trates ( _p, _ppvar, _thread, _nt, *getarg(1) ); hoc_retpushx(_r); } -double vtrap ( double _lx , double _ly ) { +double vtrap ( _threadargsprotocomma_ double _lx , double _ly ) { double _lvtrap; if ( fabs ( _lx / _ly ) < 1e-6 ) { _lvtrap = _ly * ( 1.0 - _lx / _ly / 2.0 ) ; @@ -392,11 +438,23 @@ return _lvtrap; static void _hoc_vtrap(void) { double _r; - _r = vtrap ( *getarg(1) , *getarg(2) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = vtrap ( _p, _ppvar, _thread, _nt, *getarg(1) , *getarg(2) ); hoc_retpushx(_r); } static int _ode_count(int _type){ hoc_execerror("nca", "cannot be used with CVODE"); return 0;} + +static void _thread_mem_init(Datum* _thread) { + _thread[0]._pval = (double*)ecalloc(1, sizeof(double)); + } + +static void _thread_cleanup(Datum* _thread) { + free((void*)(_thread[0]._pval)); + } extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); static void _update_ion_pointer(Datum* _ppvar) { nrn_update_ion_pointer(_nca_sym, _ppvar, 0, 0); @@ -404,11 +462,8 @@ static int _ode_count(int _type){ hoc_execerror("nca", "cannot be used with CVOD nrn_update_ion_pointer(_nca_sym, _ppvar, 2, 4); } -static void initmodel() { - int _i; double _save;_ninits++; - _save = t; - t = 0.0; -{ +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ c = c0; d = d0; { @@ -416,19 +471,24 @@ static void initmodel() { c = cinf ; d = dinf ; } - _sav_indep = t; t = _save; - + } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + +#if 0 + _check_trates(_p, _ppvar, _thread, _nt); +#endif #if CACHEVEC if (use_cachevec) { _v = VEC_V(_ni[_iml]); @@ -440,10 +500,11 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } v = _v; enca = _ion_enca; - initmodel(); - }} + initmodel(_p, _ppvar, _thread, _nt); + } +} -static double _nrn_current(double _v){double _current=0.;v=_v;{ { +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { gnca = gncabar * c * c * d ; inca = gnca * ( v - enca ) ; } @@ -452,12 +513,14 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; #if CACHEVEC @@ -470,10 +533,10 @@ for (_iml = 0; _iml < _cntml; ++_iml) { _v = NODEV(_nd); } enca = _ion_enca; - _g = _nrn_current(_v + .001); + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); { double _dinca; _dinca = inca; - _rhs = _nrn_current(_v); + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); _ion_dincadv += (_dinca - inca)/.001 ; } _g = (_g - _rhs)/.001; @@ -487,14 +550,18 @@ for (_iml = 0; _iml < _cntml; ++_iml) { NODERHS(_nd) -= _rhs; } -}} +} + +} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; #if CACHEVEC @@ -507,14 +574,18 @@ for (_iml = 0; _iml < _cntml; ++_iml) { NODED(_nd) += _g; } -}} +} + +} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; _nd = _ml->_nodelist[_iml]; @@ -530,15 +601,15 @@ for (_iml = 0; _iml < _cntml; ++_iml) { v=_v; { enca = _ion_enca; - { error = states(); - if(error){fprintf(stderr,"at line 53 in file nca.mod:\n SOLVE states\n"); nrn_complain(_p); abort_run(error);} - } }} + { { states(_p, _ppvar, _thread, _nt); } + } }} } static void terminal(){} -static void _initlists() { +static void _initlists(){ + double _x; double* _p = &_x; int _i; static int _first = 1; if (!_first) return; _t_cinf = makevector(201*sizeof(double)); @@ -550,8 +621,12 @@ static void _initlists() { _first = 0; } +#if defined(__cplusplus) +} /* extern "C" */ +#endif + #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/nca.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/nca.mod"; static const char* nmodl_file_text = "TITLE nca.mod \n" " \n" @@ -623,9 +698,7 @@ static const char* nmodl_file_text = " trates(v) : at the current v and dt.\n" " c = c + cexp*(cinf-c)\n" " d = d + dexp*(dinf-d)\n" - " VERBATIM\n" - " return 0;\n" - " ENDVERBATIM\n" + "\n" "}\n" " \n" "LOCAL q10\n" diff --git a/pydentate/x86_64/nca.o b/pydentate/x86_64/nca.o index b8aef7adc9095a610355beba6ffb6bfdd8fb92c7..262158877ed8ebcf8938a1e5cb3f907afb2a31a8 100644 GIT binary patch literal 14560 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 literal 19512 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 UqwQrOeov3&cvLZRZTJ6w0RJPJ7XSbN diff --git a/pydentate/x86_64/netstim125.c b/pydentate/x86_64/netstim125.c index c8db4bc..09bc455 100644 --- a/pydentate/x86_64/netstim125.c +++ b/pydentate/x86_64/netstim125.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -35,9 +35,9 @@ extern double hoc_Exp(double); #define seed seed__NetStim125 #define _threadargscomma_ _p, _ppvar, _thread, _nt, -#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, #define _threadargs_ _p, _ppvar, _thread, _nt -#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt /*SUPPRESS 761*/ /*SUPPRESS 762*/ /*SUPPRESS 763*/ @@ -48,15 +48,25 @@ extern double hoc_Exp(double); #define t _nt->_t #define dt _nt->_dt #define interval _p[0] +#define interval_columnindex 0 #define number _p[1] +#define number_columnindex 1 #define start _p[2] +#define start_columnindex 2 #define forcestop _p[3] +#define forcestop_columnindex 3 #define noise _p[4] +#define noise_columnindex 4 #define event _p[5] +#define event_columnindex 5 #define on _p[6] +#define on_columnindex 6 #define ispike _p[7] +#define ispike_columnindex 7 #define v _p[8] +#define v_columnindex 8 #define _tsav _p[9] +#define _tsav_columnindex 9 #define _nd_area *_ppvar[0]._pval #define donotuse *_ppvar[2]._pval #define _p_donotuse _ppvar[2]._pval @@ -78,12 +88,12 @@ extern "C" { static Prop* _extcall_prop; /* external NEURON variables */ /* declaration of user functions */ - static double _hoc_erand(); - static double _hoc_init_sequence(); - static double _hoc_invl(); - static double _hoc_next_invl(); - static double _hoc_noiseFromRandom(); - static double _hoc_seed(); + static double _hoc_erand(void*); + static double _hoc_init_sequence(void*); + static double _hoc_invl(void*); + static double _hoc_next_invl(void*); + static double _hoc_noiseFromRandom(void*); + static double _hoc_seed(void*); static int _mechtype; extern void _nrn_cacheloop_reg(int, int); extern void hoc_register_prop_size(int, int, int); @@ -102,18 +112,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern Prop* nrn_point_prop_; static int _pointtype; - static void* _hoc_create_pnt(_ho) Object* _ho; { void* create_point_process(); + static void* _hoc_create_pnt(Object* _ho) { void* create_point_process(int, Object*); return create_point_process(_pointtype, _ho); } - static void _hoc_destroy_pnt(); - static double _hoc_loc_pnt(_vptr) void* _vptr; {double loc_point_process(); + static void _hoc_destroy_pnt(void*); + static double _hoc_loc_pnt(void* _vptr) {double loc_point_process(int, void*); return loc_point_process(_pointtype, _vptr); } - static double _hoc_has_loc(_vptr) void* _vptr; {double has_loc_point(); + static double _hoc_has_loc(void* _vptr) {double has_loc_point(void*); return has_loc_point(_vptr); } - static double _hoc_get_loc_pnt(_vptr)void* _vptr; { - double get_loc_point_process(); return (get_loc_point_process(_vptr)); + static double _hoc_get_loc_pnt(void* _vptr) { + double get_loc_point_process(void*); return (get_loc_point_process(_vptr)); } extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { @@ -166,9 +176,9 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void _hoc_destroy_pnt(_vptr) void* _vptr; { +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void _hoc_destroy_pnt(void* _vptr) { destroy_point_process(_vptr); } /* connect range variables in _p that hoc is supposed to know about */ @@ -219,7 +229,7 @@ static void nrn_alloc(Prop* _prop) { static void _net_receive(Point_process*, double*, double); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -246,7 +256,7 @@ extern void _cvode_abstol( Symbol**, double*, int); pnt_receive[_mechtype] = _net_receive; pnt_receive_size[_mechtype] = 1; hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 NetStim125 /home/danielmk/repos/pyDentate/mechs/netstim125.mod\n"); + ivoc_help("help ?1 NetStim125 /Users/temma/ghq/pydentate/mechs/netstim125.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -268,11 +278,11 @@ static int seed ( _threadargsprotocomma_ double _lx ) { static double _hoc_seed(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = 1.; seed ( _p, _ppvar, _thread, _nt, *getarg(1) ); return(_r); @@ -288,11 +298,11 @@ static int init_sequence ( _threadargsprotocomma_ double _lt ) { static double _hoc_init_sequence(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = 1.; init_sequence ( _p, _ppvar, _thread, _nt, *getarg(1) ); return(_r); @@ -315,11 +325,11 @@ return _linvl; static double _hoc_invl(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = invl ( _p, _ppvar, _thread, _nt, *getarg(1) ); return(_r); } @@ -354,11 +364,11 @@ return _lerand; static double _hoc_erand(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = erand ( _p, _ppvar, _thread, _nt ); return(_r); } @@ -378,11 +388,11 @@ static int noiseFromRandom ( _threadargsproto_ ) { static double _hoc_noiseFromRandom(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = 1.; noiseFromRandom ( _p, _ppvar, _thread, _nt ); return(_r); @@ -399,19 +409,19 @@ static int next_invl ( _threadargsproto_ ) { static double _hoc_next_invl(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = 1.; next_invl ( _p, _ppvar, _thread, _nt ); return(_r); } -static void _net_receive (_pnt, _args, _lflag) Point_process* _pnt; double* _args; double _lflag; -{ double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; - _thread = (Datum*)0; _nt = (_NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; +static void _net_receive (Point_process* _pnt, double* _args, double _lflag) +{ double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + _thread = (Datum*)0; _nt = (NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; if (_tsav > t){ extern char* hoc_object_name(); hoc_execerror(hoc_object_name(_pnt->ob), ":Event arrived out of order. Must call ParallelContext.set_maxstep AFTER assigning minimum NetCon.delay");} _tsav = t; if (_lflag == 1. ) {*(_tqitem) = 0;} { @@ -444,7 +454,7 @@ static void _net_receive (_pnt, _args, _lflag) Point_process* _pnt; double* _arg } } } -static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { int _i; double _save;{ { on = 0.0 ; @@ -470,7 +480,7 @@ static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -485,11 +495,11 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } } -static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, double _v){double _current=0.;v=_v;{ +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ } return _current; } -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -520,7 +530,7 @@ _first = 0; #endif #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/netstim125.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/netstim125.mod"; static const char* nmodl_file_text = ": $Id: netstim.mod 2212 2008-09-08 14:32:26Z hines $\n" ": adapted by A. Hanuschkin 2011\n" diff --git a/pydentate/x86_64/netstim125.o b/pydentate/x86_64/netstim125.o index b4ecb06ef4775444f241f9d66fabc9a73a9d5644..05d9c81a2db40b8c6ca1ba98942f05fedee39dac 100644 GIT binary patch literal 15320 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 literal 17800 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 #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -32,9 +32,9 @@ extern double hoc_Exp(double); #define noiseFromRandom noiseFromRandom__NetStimBox #define _threadargscomma_ _p, _ppvar, _thread, _nt, -#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, #define _threadargs_ _p, _ppvar, _thread, _nt -#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt /*SUPPRESS 761*/ /*SUPPRESS 762*/ /*SUPPRESS 763*/ @@ -45,14 +45,23 @@ extern double hoc_Exp(double); #define t _nt->_t #define dt _nt->_dt #define start _p[0] +#define start_columnindex 0 #define forcestop _p[1] +#define forcestop_columnindex 1 #define status _p[2] +#define status_columnindex 2 #define nspk _p[3] +#define nspk_columnindex 3 #define event _p[4] +#define event_columnindex 4 #define on _p[5] +#define on_columnindex 5 #define ispike _p[6] +#define ispike_columnindex 6 #define v _p[7] +#define v_columnindex 7 #define _tsav _p[8] +#define _tsav_columnindex 8 #define _nd_area *_ppvar[0]._pval #define donotuse *_ppvar[2]._pval #define _p_donotuse _ppvar[2]._pval @@ -74,9 +83,9 @@ extern "C" { static Prop* _extcall_prop; /* external NEURON variables */ /* declaration of user functions */ - static double _hoc_erand(); - static double _hoc_invl(); - static double _hoc_noiseFromRandom(); + static double _hoc_erand(void*); + static double _hoc_invl(void*); + static double _hoc_noiseFromRandom(void*); static int _mechtype; extern void _nrn_cacheloop_reg(int, int); extern void hoc_register_prop_size(int, int, int); @@ -95,18 +104,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern Prop* nrn_point_prop_; static int _pointtype; - static void* _hoc_create_pnt(_ho) Object* _ho; { void* create_point_process(); + static void* _hoc_create_pnt(Object* _ho) { void* create_point_process(int, Object*); return create_point_process(_pointtype, _ho); } - static void _hoc_destroy_pnt(); - static double _hoc_loc_pnt(_vptr) void* _vptr; {double loc_point_process(); + static void _hoc_destroy_pnt(void*); + static double _hoc_loc_pnt(void* _vptr) {double loc_point_process(int, void*); return loc_point_process(_pointtype, _vptr); } - static double _hoc_has_loc(_vptr) void* _vptr; {double has_loc_point(); + static double _hoc_has_loc(void* _vptr) {double has_loc_point(void*); return has_loc_point(_vptr); } - static double _hoc_get_loc_pnt(_vptr)void* _vptr; { - double get_loc_point_process(); return (get_loc_point_process(_vptr)); + static double _hoc_get_loc_pnt(void* _vptr) { + double get_loc_point_process(void*); return (get_loc_point_process(_vptr)); } extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { @@ -152,9 +161,9 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void _hoc_destroy_pnt(_vptr) void* _vptr; { +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void _hoc_destroy_pnt(void* _vptr) { destroy_point_process(_vptr); } /* connect range variables in _p that hoc is supposed to know about */ @@ -201,7 +210,7 @@ static void nrn_alloc(Prop* _prop) { static void _net_receive(Point_process*, double*, double); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -227,7 +236,7 @@ extern void _cvode_abstol( Symbol**, double*, int); pnt_receive[_mechtype] = _net_receive; pnt_receive_size[_mechtype] = 1; hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 NetStimBox /home/danielmk/repos/pyDentate/mechs/netstimbox.mod\n"); + ivoc_help("help ?1 NetStimBox /Users/temma/ghq/pydentate/mechs/netstimbox.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -248,11 +257,11 @@ return _linvl; static double _hoc_invl(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = invl ( _p, _ppvar, _thread, _nt, *getarg(1) ); return(_r); } @@ -288,11 +297,11 @@ return _lerand; static double _hoc_erand(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = erand ( _p, _ppvar, _thread, _nt ); return(_r); } @@ -312,19 +321,19 @@ static int noiseFromRandom ( _threadargsproto_ ) { static double _hoc_noiseFromRandom(void* _vptr) { double _r; - double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; _p = ((Point_process*)_vptr)->_prop->param; _ppvar = ((Point_process*)_vptr)->_prop->dparam; _thread = _extcall_thread; - _nt = (_NrnThread*)((Point_process*)_vptr)->_vnt; + _nt = (NrnThread*)((Point_process*)_vptr)->_vnt; _r = 1.; noiseFromRandom ( _p, _ppvar, _thread, _nt ); return(_r); } -static void _net_receive (_pnt, _args, _lflag) Point_process* _pnt; double* _args; double _lflag; -{ double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; - _thread = (Datum*)0; _nt = (_NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; +static void _net_receive (Point_process* _pnt, double* _args, double _lflag) +{ double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + _thread = (Datum*)0; _nt = (NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; if (_tsav > t){ extern char* hoc_object_name(); hoc_execerror(hoc_object_name(_pnt->ob), ":Event arrived out of order. Must call ParallelContext.set_maxstep AFTER assigning minimum NetCon.delay");} _tsav = t; { if ( status == 1.0 ) { @@ -340,7 +349,7 @@ static void _net_receive (_pnt, _args, _lflag) Point_process* _pnt; double* _arg } } } -static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { int _i; double _save;{ { on = 0.0 ; @@ -349,7 +358,7 @@ static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -364,11 +373,11 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } } -static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, double _v){double _current=0.;v=_v;{ +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ } return _current; } -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -399,7 +408,7 @@ _first = 0; #endif #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/netstimbox.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/netstimbox.mod"; static const char* nmodl_file_text = ": $Id: netstim.mod 2212 2008-09-08 14:32:26Z hines $\n" ": adapted by A. Hanuschkin 2011 -> output of a 'nspk' spikes in a given interval, if activated!\n" diff --git a/pydentate/x86_64/netstimbox.o b/pydentate/x86_64/netstimbox.o index 07eb8bb6b3ded6550870d573fd29ad50300c72df..2cdd022f98282fa46b4fe8ffe27477ad9f4eb596 100644 GIT binary patch literal 9640 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 SbK=^MlpNGAor;E~M)`ld^8woc literal 12656 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 literal 0 HcmV?d00001 diff --git a/pydentate/x86_64/tca.c b/pydentate/x86_64/tca.c index cbbeae4..892a2ad 100644 --- a/pydentate/x86_64/tca.c +++ b/pydentate/x86_64/tca.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -45,16 +45,27 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define gcatbar _p[0] +#define gcatbar_columnindex 0 #define itca _p[1] +#define itca_columnindex 1 #define m _p[2] +#define m_columnindex 2 #define h _p[3] +#define h_columnindex 3 #define cai _p[4] +#define cai_columnindex 4 #define cao _p[5] +#define cao_columnindex 5 #define Dm _p[6] +#define Dm_columnindex 6 #define Dh _p[7] +#define Dh_columnindex 7 #define gcat _p[8] +#define gcat_columnindex 8 #define etca _p[9] +#define etca_columnindex 9 #define _g _p[10] +#define _g_columnindex 10 #define _ion_etca *_ppvar[0]._pval #define _ion_itca *_ppvar[1]._pval #define _ion_ditcadv *_ppvar[2]._pval @@ -171,15 +182,15 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); static void _ode_map(int, double**, double**, double*, Datum*, double*, int); -static void _ode_spec(_NrnThread*, _Memb_list*, int); -static void _ode_matsol(_NrnThread*, _Memb_list*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); #define _cvode_ieq _ppvar[5]._i static void _ode_matsol_instance1(_threadargsproto_); @@ -231,7 +242,7 @@ static void nrn_alloc(Prop* _prop) { static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -260,7 +271,7 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_cvode(_mechtype, _ode_count, _ode_map, _ode_spec, _ode_matsol); hoc_register_tolerance(_mechtype, _hoc_state_tol, &_atollist); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 cat /home/danielmk/repos/pyDentate/mechs/tca.mod\n"); + ivoc_help("help ?1 cat /Users/temma/ghq/pydentate/mechs/tca.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -575,7 +586,7 @@ static void _hoc_h_tau(void) { static int _ode_count(int _type){ return 2;} -static void _ode_spec(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -603,7 +614,7 @@ static void _ode_matsol_instance1(_threadargsproto_) { _ode_matsol1 (); } -static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -645,7 +656,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -678,7 +689,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -717,7 +728,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -737,7 +748,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -771,8 +782,8 @@ static void terminal(){} static void _initlists() { int _i; static int _first = 1; if (!_first) return; - _slist1[0] = &(m) - _p; _dlist1[0] = &(Dm) - _p; - _slist1[1] = &(h) - _p; _dlist1[1] = &(Dh) - _p; + _slist1[0] = m_columnindex; _dlist1[0] = Dm_columnindex; + _slist1[1] = h_columnindex; _dlist1[1] = Dh_columnindex; _t_hinf = makevector(201*sizeof(double)); _t_minf = makevector(201*sizeof(double)); _t_m_tau = makevector(201*sizeof(double)); @@ -781,7 +792,7 @@ _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/tca.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/tca.mod"; static const char* nmodl_file_text = "TITLE T-calcium channel From Migliore CA3\n" ": T-type calcium channel\n" diff --git a/pydentate/x86_64/tca.o b/pydentate/x86_64/tca.o index b84b258d65a6ee4650e4ca117ba4d39d5321d574..e2d27d8c02e0bc17d4e202705cc07276593cf485 100644 GIT binary patch literal 20888 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 z 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 #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -32,9 +32,9 @@ extern double hoc_Exp(double); #define state state__tmgexp2syn #define _threadargscomma_ _p, _ppvar, _thread, _nt, -#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, #define _threadargs_ _p, _ppvar, _thread, _nt -#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt /*SUPPRESS 761*/ /*SUPPRESS 762*/ /*SUPPRESS 763*/ @@ -45,23 +45,41 @@ extern double hoc_Exp(double); #define t _nt->_t #define dt _nt->_dt #define e _p[0] +#define e_columnindex 0 #define tau_1 _p[1] +#define tau_1_columnindex 1 #define tau_2 _p[2] +#define tau_2_columnindex 2 #define tau_rec _p[3] +#define tau_rec_columnindex 3 #define tau_facil _p[4] +#define tau_facil_columnindex 4 #define U _p[5] +#define U_columnindex 5 #define u0 _p[6] +#define u0_columnindex 6 #define i _p[7] +#define i_columnindex 7 #define g _p[8] +#define g_columnindex 8 #define A _p[9] +#define A_columnindex 9 #define B _p[10] +#define B_columnindex 10 #define x _p[11] +#define x_columnindex 11 #define factor _p[12] +#define factor_columnindex 12 #define DA _p[13] +#define DA_columnindex 13 #define DB _p[14] +#define DB_columnindex 14 #define v _p[15] +#define v_columnindex 15 #define _g _p[16] +#define _g_columnindex 16 #define _tsav _p[17] +#define _tsav_columnindex 17 #define _nd_area *_ppvar[0]._pval #if MAC @@ -99,18 +117,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern Prop* nrn_point_prop_; static int _pointtype; - static void* _hoc_create_pnt(_ho) Object* _ho; { void* create_point_process(); + static void* _hoc_create_pnt(Object* _ho) { void* create_point_process(int, Object*); return create_point_process(_pointtype, _ho); } - static void _hoc_destroy_pnt(); - static double _hoc_loc_pnt(_vptr) void* _vptr; {double loc_point_process(); + static void _hoc_destroy_pnt(void*); + static double _hoc_loc_pnt(void* _vptr) {double loc_point_process(int, void*); return loc_point_process(_pointtype, _vptr); } - static double _hoc_has_loc(_vptr) void* _vptr; {double has_loc_point(); + static double _hoc_has_loc(void* _vptr) {double has_loc_point(void*); return has_loc_point(_vptr); } - static double _hoc_get_loc_pnt(_vptr)void* _vptr; { - double get_loc_point_process(); return (get_loc_point_process(_vptr)); + static double _hoc_get_loc_pnt(void* _vptr) { + double get_loc_point_process(void*); return (get_loc_point_process(_vptr)); } extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { @@ -165,18 +183,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); - static void _hoc_destroy_pnt(_vptr) void* _vptr; { +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + static void _hoc_destroy_pnt(void* _vptr) { destroy_point_process(_vptr); } static int _ode_count(int); static void _ode_map(int, double**, double**, double*, Datum*, double*, int); -static void _ode_spec(_NrnThread*, _Memb_list*, int); -static void _ode_matsol(_NrnThread*, _Memb_list*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); #define _cvode_ieq _ppvar[2]._i static void _ode_matsol_instance1(_threadargsproto_); @@ -239,7 +257,7 @@ static void nrn_alloc(Prop* _prop) { static void _net_init(Point_process*, double*, double); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -266,7 +284,7 @@ extern void _cvode_abstol( Symbol**, double*, int); pnt_receive_init[_mechtype] = _net_init; pnt_receive_size[_mechtype] = 5; hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 tmgexp2syn /home/danielmk/repos/pyDentate/mechs/tmgexp2syn.mod\n"); + ivoc_help("help ?1 tmgexp2syn /Users/temma/ghq/pydentate/mechs/tmgexp2syn.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -284,28 +302,28 @@ static int _ode_spec1(_threadargsproto_); static int state(_threadargsproto_); /*CVODE*/ - static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) {int _reset = 0; { + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { DA = - A / tau_1 ; DB = - B / tau_2 ; } return _reset; } - static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { DA = DA / (1. - dt*( ( - 1.0 ) / tau_1 )) ; DB = DB / (1. - dt*( ( - 1.0 ) / tau_2 )) ; return 0; } /*END CVODE*/ - static int state (double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { { + static int state (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { A = A + (1. - exp(dt*(( - 1.0 ) / tau_1)))*(- ( 0.0 ) / ( ( - 1.0 ) / tau_1 ) - A) ; B = B + (1. - exp(dt*(( - 1.0 ) / tau_2)))*(- ( 0.0 ) / ( ( - 1.0 ) / tau_2 ) - B) ; } return 0; } -static void _net_receive (_pnt, _args, _lflag) Point_process* _pnt; double* _args; double _lflag; -{ double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; - _thread = (Datum*)0; _nt = (_NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; +static void _net_receive (Point_process* _pnt, double* _args, double _lflag) +{ double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + _thread = (Datum*)0; _nt = (NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; if (_tsav > t){ extern char* hoc_object_name(); hoc_execerror(hoc_object_name(_pnt->ob), ":Event arrived out of order. Must call ParallelContext.set_maxstep AFTER assigning minimum NetCon.delay");} _tsav = t; { _args[2] = _args[2] * exp ( - ( t - _args[4] ) / tau_rec ) ; @@ -348,7 +366,7 @@ static void _net_init(Point_process* _pnt, double* _args, double _lflag) { double* _p = _pnt->_prop->param; Datum* _ppvar = _pnt->_prop->dparam; Datum* _thread = (Datum*)0; - _NrnThread* _nt = (_NrnThread*)_pnt->_vnt; + NrnThread* _nt = (NrnThread*)_pnt->_vnt; _args[1] = 0.0 ; _args[2] = 0.0 ; _args[3] = u0 ; @@ -357,7 +375,7 @@ static void _net_init(Point_process* _pnt, double* _args, double _lflag) { static int _ode_count(int _type){ return 2;} -static void _ode_spec(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -383,7 +401,7 @@ static void _ode_matsol_instance1(_threadargsproto_) { _ode_matsol1 (_p, _ppvar, _thread, _nt); } -static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -395,7 +413,7 @@ static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { _ode_matsol_instance1(_threadargs_); }} -static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { int _i; double _save;{ A = A0; B = B0; @@ -418,7 +436,7 @@ static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -443,7 +461,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } } -static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, double _v){double _current=0.;v=_v;{ { +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { g = B - A ; i = g * ( v - e ) ; } @@ -452,7 +470,7 @@ static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC @@ -490,7 +508,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -514,7 +532,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -547,8 +565,8 @@ static void _initlists(){ double _x; double* _p = &_x; int _i; static int _first = 1; if (!_first) return; - _slist1[0] = &(A) - _p; _dlist1[0] = &(DA) - _p; - _slist1[1] = &(B) - _p; _dlist1[1] = &(DB) - _p; + _slist1[0] = A_columnindex; _dlist1[0] = DA_columnindex; + _slist1[1] = B_columnindex; _dlist1[1] = DB_columnindex; _first = 0; } @@ -557,7 +575,7 @@ _first = 0; #endif #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/tmgexp2syn.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/tmgexp2syn.mod"; static const char* nmodl_file_text = "COMMENT\n" "Revised 12/15/2000 in light of a personal communication \n" diff --git a/pydentate/x86_64/tmgexp2syn.o b/pydentate/x86_64/tmgexp2syn.o index b78b3e0bb2e3550d650d0219f0c0e773eb771a59..dc44f13498328fd3bc07e3a644bc4f91351ab581 100644 GIT binary patch literal 17456 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 G|NjGn?Q%8% diff --git a/pydentate/x86_64/tmgsyn.c b/pydentate/x86_64/tmgsyn.c index 23589fa..b28d5bc 100644 --- a/pydentate/x86_64/tmgsyn.c +++ b/pydentate/x86_64/tmgsyn.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -32,9 +32,9 @@ extern double hoc_Exp(double); #define state state__tmgsyn #define _threadargscomma_ _p, _ppvar, _thread, _nt, -#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, #define _threadargs_ _p, _ppvar, _thread, _nt -#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt /*SUPPRESS 761*/ /*SUPPRESS 762*/ /*SUPPRESS 763*/ @@ -45,18 +45,31 @@ extern double hoc_Exp(double); #define t _nt->_t #define dt _nt->_dt #define e _p[0] +#define e_columnindex 0 #define tau_1 _p[1] +#define tau_1_columnindex 1 #define tau_rec _p[2] +#define tau_rec_columnindex 2 #define tau_facil _p[3] +#define tau_facil_columnindex 3 #define U _p[4] +#define U_columnindex 4 #define u0 _p[5] +#define u0_columnindex 5 #define i _p[6] +#define i_columnindex 6 #define g _p[7] +#define g_columnindex 7 #define x _p[8] +#define x_columnindex 8 #define Dg _p[9] +#define Dg_columnindex 9 #define v _p[10] +#define v_columnindex 10 #define _g _p[11] +#define _g_columnindex 11 #define _tsav _p[12] +#define _tsav_columnindex 12 #define _nd_area *_ppvar[0]._pval #if MAC @@ -94,18 +107,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern Prop* nrn_point_prop_; static int _pointtype; - static void* _hoc_create_pnt(_ho) Object* _ho; { void* create_point_process(); + static void* _hoc_create_pnt(Object* _ho) { void* create_point_process(int, Object*); return create_point_process(_pointtype, _ho); } - static void _hoc_destroy_pnt(); - static double _hoc_loc_pnt(_vptr) void* _vptr; {double loc_point_process(); + static void _hoc_destroy_pnt(void*); + static double _hoc_loc_pnt(void* _vptr) {double loc_point_process(int, void*); return loc_point_process(_pointtype, _vptr); } - static double _hoc_has_loc(_vptr) void* _vptr; {double has_loc_point(); + static double _hoc_has_loc(void* _vptr) {double has_loc_point(void*); return has_loc_point(_vptr); } - static double _hoc_get_loc_pnt(_vptr)void* _vptr; { - double get_loc_point_process(); return (get_loc_point_process(_vptr)); + static double _hoc_get_loc_pnt(void* _vptr) { + double get_loc_point_process(void*); return (get_loc_point_process(_vptr)); } extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { @@ -157,18 +170,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); - static void _hoc_destroy_pnt(_vptr) void* _vptr; { +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); + static void _hoc_destroy_pnt(void* _vptr) { destroy_point_process(_vptr); } static int _ode_count(int); static void _ode_map(int, double**, double**, double*, Datum*, double*, int); -static void _ode_spec(_NrnThread*, _Memb_list*, int); -static void _ode_matsol(_NrnThread*, _Memb_list*, int); +static void _ode_spec(NrnThread*, _Memb_list*, int); +static void _ode_matsol(NrnThread*, _Memb_list*, int); #define _cvode_ieq _ppvar[2]._i static void _ode_matsol_instance1(_threadargsproto_); @@ -227,7 +240,7 @@ static void nrn_alloc(Prop* _prop) { static void _net_init(Point_process*, double*, double); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -254,7 +267,7 @@ extern void _cvode_abstol( Symbol**, double*, int); pnt_receive_init[_mechtype] = _net_init; pnt_receive_size[_mechtype] = 5; hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 tmgsyn /home/danielmk/repos/pyDentate/mechs/tmgsyn.mod\n"); + ivoc_help("help ?1 tmgsyn /Users/temma/ghq/pydentate/mechs/tmgsyn.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -272,25 +285,25 @@ static int _ode_spec1(_threadargsproto_); static int state(_threadargsproto_); /*CVODE*/ - static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) {int _reset = 0; { + static int _ode_spec1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) {int _reset = 0; { Dg = - g / tau_1 ; } return _reset; } - static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { + static int _ode_matsol1 (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { Dg = Dg / (1. - dt*( ( - 1.0 ) / tau_1 )) ; return 0; } /*END CVODE*/ - static int state (double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { { + static int state (double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { { g = g + (1. - exp(dt*(( - 1.0 ) / tau_1)))*(- ( 0.0 ) / ( ( - 1.0 ) / tau_1 ) - g) ; } return 0; } -static void _net_receive (_pnt, _args, _lflag) Point_process* _pnt; double* _args; double _lflag; -{ double* _p; Datum* _ppvar; Datum* _thread; _NrnThread* _nt; - _thread = (Datum*)0; _nt = (_NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; +static void _net_receive (Point_process* _pnt, double* _args, double _lflag) +{ double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + _thread = (Datum*)0; _nt = (NrnThread*)_pnt->_vnt; _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; if (_tsav > t){ extern char* hoc_object_name(); hoc_execerror(hoc_object_name(_pnt->ob), ":Event arrived out of order. Must call ParallelContext.set_maxstep AFTER assigning minimum NetCon.delay");} _tsav = t; { _args[2] = _args[2] * exp ( - ( t - _args[4] ) / tau_rec ) ; @@ -323,7 +336,7 @@ static void _net_init(Point_process* _pnt, double* _args, double _lflag) { double* _p = _pnt->_prop->param; Datum* _ppvar = _pnt->_prop->dparam; Datum* _thread = (Datum*)0; - _NrnThread* _nt = (_NrnThread*)_pnt->_vnt; + NrnThread* _nt = (NrnThread*)_pnt->_vnt; _args[1] = 0.0 ; _args[2] = 0.0 ; _args[3] = u0 ; @@ -332,7 +345,7 @@ static void _net_init(Point_process* _pnt, double* _args, double _lflag) { static int _ode_count(int _type){ return 1;} -static void _ode_spec(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_spec(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -358,7 +371,7 @@ static void _ode_matsol_instance1(_threadargsproto_) { _ode_matsol1 (_p, _ppvar, _thread, _nt); } -static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void _ode_matsol(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node* _nd; double _v; int _iml, _cntml; _cntml = _ml->_nodecount; @@ -370,7 +383,7 @@ static void _ode_matsol(_NrnThread* _nt, _Memb_list* _ml, int _type) { _ode_matsol_instance1(_threadargs_); }} -static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt) { +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { int _i; double _save;{ g = g0; { @@ -380,7 +393,7 @@ static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -405,7 +418,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } } -static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread* _nt, double _v){double _current=0.;v=_v;{ { +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { i = g * ( v - e ) ; } _current += i; @@ -413,7 +426,7 @@ static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, _NrnThread } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC @@ -451,7 +464,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -475,7 +488,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { } -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type) { +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC @@ -508,7 +521,7 @@ static void _initlists(){ double _x; double* _p = &_x; int _i; static int _first = 1; if (!_first) return; - _slist1[0] = &(g) - _p; _dlist1[0] = &(Dg) - _p; + _slist1[0] = g_columnindex; _dlist1[0] = Dg_columnindex; _first = 0; } @@ -517,7 +530,7 @@ _first = 0; #endif #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/tmgsyn.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/tmgsyn.mod"; static const char* nmodl_file_text = "COMMENT\n" "Revised 12/15/2000 in light of a personal communication \n" diff --git a/pydentate/x86_64/tmgsyn.o b/pydentate/x86_64/tmgsyn.o index 938df83be1fbe192bf84a87e3186ad64804f7c04..573a916087eca75dd59d58aa4c4b799734471f23 100644 GIT binary patch literal 13808 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 VP;ZZc8ZK39CqDkde@5~z{}(_Ity};A literal 17928 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 #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -46,9 +46,13 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define index _p[0] +#define index_columnindex 0 #define etime _p[1] +#define etime_columnindex 1 #define space _p[2] +#define space_columnindex 2 #define _tsav _p[3] +#define _tsav_columnindex 3 #define _nd_area *_ppvar[0]._pval #if MAC @@ -66,8 +70,8 @@ extern "C" { static int hoc_nrnpointerindex = -1; /* external NEURON variables */ /* declaration of user functions */ - static double _hoc_element(); - static double _hoc_play(); + static double _hoc_element(void*); + static double _hoc_play(void*); static int _mechtype; extern void _nrn_cacheloop_reg(int, int); extern void hoc_register_prop_size(int, int, int); @@ -86,18 +90,18 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern Prop* nrn_point_prop_; static int _pointtype; - static void* _hoc_create_pnt(_ho) Object* _ho; { void* create_point_process(); + static void* _hoc_create_pnt(Object* _ho) { void* create_point_process(int, Object*); return create_point_process(_pointtype, _ho); } - static void _hoc_destroy_pnt(); - static double _hoc_loc_pnt(_vptr) void* _vptr; {double loc_point_process(); + static void _hoc_destroy_pnt(void*); + static double _hoc_loc_pnt(void* _vptr) {double loc_point_process(int, void*); return loc_point_process(_pointtype, _vptr); } - static double _hoc_has_loc(_vptr) void* _vptr; {double has_loc_point(); + static double _hoc_has_loc(void* _vptr) {double has_loc_point(void*); return has_loc_point(_vptr); } - static double _hoc_get_loc_pnt(_vptr)void* _vptr; { - double get_loc_point_process(); return (get_loc_point_process(_vptr)); + static double _hoc_get_loc_pnt(void* _vptr) { + double get_loc_point_process(void*); return (get_loc_point_process(_vptr)); } extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { @@ -137,9 +141,9 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void _hoc_destroy_pnt(_vptr) void* _vptr; { +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void _hoc_destroy_pnt(void* _vptr) { destroy_point_process(_vptr); } /* connect range variables in _p that hoc is supposed to know about */ @@ -179,7 +183,7 @@ static void nrn_alloc(Prop* _prop) { static void _net_receive(Point_process*, double*, double); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -205,7 +209,7 @@ extern void _cvode_abstol( Symbol**, double*, int); pnt_receive[_mechtype] = _net_receive; pnt_receive_size[_mechtype] = 1; hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 VecStim /home/danielmk/repos/pyDentate/mechs/vecevent.mod\n"); + ivoc_help("help ?1 VecStim /Users/temma/ghq/pydentate/mechs/vecevent.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -219,7 +223,7 @@ static void _modl_cleanup(){ _match_recurse=1;} static int element(); static int play(); -static void _net_receive (_pnt, _args, _lflag) Point_process* _pnt; double* _args; double _lflag; +static void _net_receive (Point_process* _pnt, double* _args, double _lflag) { _p = _pnt->_prop->param; _ppvar = _pnt->_prop->dparam; if (_tsav > t){ extern char* hoc_object_name(); hoc_execerror(hoc_object_name(_pnt->ob), ":Event arrived out of order. Must call ParallelContext.set_maxstep AFTER assigning minimum NetCon.delay");} _tsav = t; if (_lflag == 1. ) {*(_tqitem) = 0;} @@ -303,7 +307,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -319,7 +323,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ } return _current; } -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -343,7 +347,7 @@ _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/vecevent.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/vecevent.mod"; static const char* nmodl_file_text = ": Vector stream of events\n" "\n" diff --git a/pydentate/x86_64/vecevent.o b/pydentate/x86_64/vecevent.o index 0bb1e15cf9e062d6a91e93a53fb7c087e10f6d09..c5e007039ffe87f7db7ae26717ef9cde9b8b4ca3 100644 GIT binary patch literal 7568 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 LPQYF+Sxx*0)V8s- literal 10840 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 Date: Fri, 28 Jul 2023 16:07:30 +0900 Subject: [PATCH 3/4] intirinsic_properties --- intrinsic_properties.png | Bin 0 -> 86861 bytes intrinsic_properties.py | 80 ++++++++++++++++++++------------------- pydentate/__init__.py | 6 +++ 3 files changed, 47 insertions(+), 39 deletions(-) create mode 100644 intrinsic_properties.png diff --git a/intrinsic_properties.png b/intrinsic_properties.png new file mode 100644 index 0000000000000000000000000000000000000000..e5d8135d0877a60d4245f7a5033813fd8f5954df GIT binary patch literal 86861 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 z zm$tB(((}${uX64Xu*02-gh9<1e;$x#>WQC-hIn`0O#KHc^9>dKI+_fFpJ@(9JM)8- zjF~ycnQ2&33e}GgAK=}tx1pS#dF`!B6`|y$U?D(}q8QO|3YU$$jfyvX;|InJt@Zz_ zTjcu-RQ;bF0KyRU9_00}{emROhZATRnz|yTeGT*l+%082d~Z6|{gME5rIpp#}33 zQWtOv2loAiP~f1Px%IfDQozw$6NyzY%Y^6xRR3jeuNoMb(Ct?uJNHEhNWX^Y!7oDi zL_EN9Ekf-}Cy6b5yCv3K^ROItA+9KeUKUs0_qtkJl!OYVjf##GZ1kD>fTsOSv-8qv zaUR8qL%4!X)CoezfWGqSe(5zCicNWKedS(ar!Hw9(Y|=CYKi7=c2ar>0!e5lEqe2l zqLjt1PL)Q}^F5`?3%PuSNusb^Q_3D6gUPdiC&YA}*HY89aP-vTqxg*~*r`aYm4NSW z;rVW1xUG%5X=hHwx2+_MS1;4n4F4PDo!uXCm{brPUuGC!e8)!GOJ#&&h(oXg*I(PbbfDY4%5GNc}w|rg;b#L174iZ78T% zD#2iIt)Kb9E>XtGofF*HOhB=|;kb@=FUW;~?~g{&gu$CU(+uhYem z>;KMX^N|R+lh#1^5Z?Kwwy?)e1{Ms2M3|ZLapRQ=hp1j@X1>ZNtb+*8yoxMSOayU- zRCtT?gPc;!P3q{ag~T4VMikq>=hg0s3my~5TGS9u=%EE~7Av@FQ*2PZHXt+T+mMqZ})$g zSwugi{`n#ECK@Mxqf#`|Jrd}L(^;aid1<41rKOfC?oxu4Tyc4DJ5(cwVDUMESgumJ zqRILpr+4|;!1&J}J9jAl{#_XU&Y`2D9U$r_6SA=K_mYWd@+kkjh3?Tn&w-PlKuo5h zq{Ki+3mLr-F<7zEk7m99vw^-&Yxdus*O2L}&MwI?n`B^nZ_hLMX%ds5JX z%@d1?vzamR3+){cunR5UQzJLrNg*3bnXP%j2nNxk=g*&qOef^(5&7_caz=OXe>78( zS zTAUZ}+~J4hPR5k4^KYID(b%Zi#S1DL?kJ152<^tZGS6_eSbzTQEP`%Uf)Qy$Z3#H2 zNHn&zSOC5n5-HS+0Lc3lbS#dD+&h1j)*W-B{!)i&ePRNGg|$K z@vooLsU;=HKq=sNwIMJ1BaC2Ht55Y;nJ^zG3)jj0(!~GKUInheTK?W48fW`CeFEAf z>Yg31_l!ibr6-o|>y`-g1H?=G=|>Q-Mi!&ezqb5L3&FNe zpYxJ$)wdlB2}ec&s)UO2rNLk$n`X<51JIC!iSX@1k%LP8Qi?{_shF$ecbyjhdyB$n zhcj;^2UcNMeG#=J+LZcuI4R9@;-?Vry_Zu#ouBXZY;Yfvzkf9idB7UY8|L#T+OHpM zH0Os_wQEd7nE3f8ngV1psz2+jZB5|Qq)8d*(=27O%8DOndTu-*Km*14-})wP8^DTL zaPQY$;J5J-$LtQlR|Rx_s$BL=JONj#pSG1zS>x7!^`|qlof>tz!RxqRP-J)6B|LP<_RUZIQdwxyLXzji)D#i$gw@3n1~BFg&86@1 zG+Jgv4ndz0TE@`I#D+@iTkB14?|gmo{JH&X*9Bx*y$IUub|fIDgcMnU(QUpzqQv2I#UYFsmbAl=WqVKP$Sr z3O7Gu3jg#;!!ZerW6a*`^L5}ip#+^EH~CQ-XD5NnV>Y>mbD-!v4l08}l8leb&@ZXsIH=&r zC#%`)K~)Fq9obprbDo>K5qc4C+`JhCmuI?i2onx`Jshs!CA^}{^ScB4q8X^7X;xG&`pNsUFmVcElwUD zA`G;u5n$kIp!4PZlnU_o@5<6Vi<=&-aCh?X^t9bV`4H|@GF7fQLnr5NTNrF;|IQ+u z0kD4P=zI0^3ud=$kU0(N9?;+f#p31&I>9GVQ3vjK7D*3*uO8XY!LwQSx97@lZ_9LH z|7qS|XLuGD2aU^lKUoAY@P(%(C5N%<>dw8=z;!L4y%YAEYrdg@L49v;Oy^J_c-fKJ z8u`A@oFSB3C@v~34K6M&zCJdbWbM;gu}DwX4;ILYnHgf3Pt=%P;kKXvI%LvK$r9*k zJ9Fj?+RR@4o3Np`=#jq!kT`iX_V?6`(YBAT@W8k|+J-qFS!lckgkbX2g@dpG~m|ZHE z>BEq)KqbE50t%k}UbSkH42o3H*SrGSay_^@0;9S|x@?4y(-qw2q?nnp8d*?QR=&rX znnSxY$D@2`{2e;w?(Pm9%rn|7@87?Fpu!=juGM4Y+L>KAeJ=X_>ci_jJw2~py}I8y zgr(&%3PnA_Pznuv^X5&d@qel)J5GKt*QA%q?JbS^`ub+T>r-D}UjWH`bz%5Kj!xcW zv4b_NjHu_&!@IiFpoUWa=@T_P(k3h*Xc;{M4Hq(_|%A&EKIT`lz9sZ_#i!-4yXTd`9XS%=M%7d1RWu*mIAnG=o()Eb;c&i z0=&wwAHk~jX2E&9_5di60Q6dC_}wl2Pnm(d2;27rvckY8adY6;g+9+uo-YBkf%Blt z^QCp?%ido}>(H`3{_WfAjfVRXs;S+tii)1Xilq~_JBGRwp{Lq*FEAv;0#@o!&Gb)) z8W8Pn|Mv(kkCHP>=`FgXkFP@%B>cf_lhNTWvkh=mwVkCu-Q?IEi z%`PS>Ij6;P`m<)1Ry|ZNf<72w!`z-N=IOf)swKJ_k`(&8>x*u-sX*KV8c^0jNnk!iecbktQc z9hPpXxM-o)kBlUP zJX0K$6i$!?5olzsE(TOwRDAy#$_*>)!%k%%PDZ}(=xEN?&RHI^e>2j%CF(RvMoLNw z+P2)10k{W1Ck3auY>AKxd>v|XP?vo2^5rAg>x^QzF)Y5Dr_pu;Zvr%irHt~HU1KLE z04;WPC?`AHfI44Y&(KhjBU=6pHJuBiuC6Yqp#hH$U{LGsV%3Jp=GN9&?-t}!!^-V{ z+6F2;1vxo6SMxhxN;AMd@>Fg(!)m7s43P?duv6+M84M9%KK`2@j=3z2GF5r4)q}(E z_V(r-4E{*eJ^X@OQEG`_%6EWW(G zgSij2zAs=-fE5@BREgPpp8wnT@3u>__cm`!feX+B$m7K9ED6}8%0|7Ey`=$wV$cZ_ zfEpI&B(t`-(UBRURBW&^A45=@1jaTbv-YtOeIM-UAV8qd1-1Oexih(>M9aIXsE8U; zeh?5xh%{YzdtGEyyR53(0@uJ`pq>R#5wzUWb-~f{h&=EDLaVhHw0)!NZ!OiZWMyRy z&4F(&q_|iR+1S8CSr11#L`6lxo{03FLQXzT&Z`-Di|?R~no=X{*y7@%$Ja>FQ^fw) zYhbf)!lTQ zDlaZ}E?)Zef$PmUs?YdsJQ!PG)Oy%~gmDCbVL@zy|cr$T6NcV`Ql4UcwrcY|rP z4wg`^^BYvC1q0&V_D_JR;|KS9qR^=fm|DPw7!2410~C_Gs&8fYn|PBWn<50bAUOHJ z0uBaP>%bnUg&U-#qYFE)nT{+JsQvyCqqu(%=?S|nWamN)2%Q^&PM1I@FfcMPO-xUR z?6;~xw1GNgfn9I5S4#pY<#1vOYNbaB4Z!qB>rQuMy563tB zEp*I|WI!r{4x4&Yznxw)MyS$WLNxg*Mxr5@oCa)nXNdhzK?O`6Zcf@u%Uhb4R~2k;G{_DH z$?pchTmsAl)S-rC;I3$)azMX5e^&M7F$^&s9i5lO#{8frfS#dJm_QQf76Bt`POpDb zQqp>YNsX^D3c)<4)w!amJtzovSx%i8)C0*8FB}q^C}mg9ORlC1grI}#&rnTj26PAj zFms3I*fBzkgmUt%Rq!k%_HR>DrB`2+jT-XA9h3{$03s&T_r~-M%@PnG2%MaFWbCUA@fIA-i;Tfoh@!M%U* zkZ`_X*)7=Gm#<&HRg$DSuI3&1$~uY!Av<4l(hGDb;=)k?eV}(J^)#2R%JJ zgzR%+rO*Q7g?ajnq!TFQ5pn6{cI|o}=;4X8U)%``9TG$*RN(KRBZi=%02pLm@nH4! z5u%-P-omn5fi-wNdFPed717zXBS#7Txqp^E?d_3Kk&Vw?FEOP|t6A>+fQdhNc@ zSBM$kT=_cFm&X8yz&uGxdJG$c4$xQ~is^pWUrL36pJ*E#OhX&mT3X|<%mGjB8Mj=4 z3hjQhIt+JD4yWM&0zrq>09IhIlLOAFn5DvgF2amyHWg-kX^A50av%ce;QY9B? z%o~Xj>LWgKqz;4-^nhTS))`&`CZY(&LqrcCGgkiWkaU+$2R#Lf{IJj?!3&V$zBG!w z=m2qDW0gkUqmw<5RlBpZ^HnhknEmC!p9}Te`;d22AW$J4U}9k*Z=u+2!2r%8I*#(U zzrX)7Jhh#58vw2X^Cl9cnnG~=lr`y=<2u)O8kD}h-~BZJbPvEeH&9djalzO=AD(p# z3=rX?0#)#}j1Z+xirqd1)c^j)aM}q_FbLGPD(60UjopG4g@G#XvQn*0I12?Fk7RJR zR@u4hP*%X6IcYx41xoIN1z>y7PA&^bqeQuDNKl@V4~VoBB&B#6ABp=z&Tii{>{P=sMQgDPXITZ@jrNNfkRQVS zihuuqYS=yk{eSkR%!7u1P8I{qwZ9VK&;Wp!0OTf2_kPEXu7NS--tQk7h}}XjG6cwO zKobaWoZvCCahV6;W7|@_)5-Q&>Tb&bSUzVXvra=+st4>rfyk|)VFPFh;5gy~s@L_+ z8ysj`=C-pKkO5cWYK3qx4jf5?&5(xunvjqHhdy zLJD*kEII_^FPxp7y(qShi2Q+rL^CCa2nkDOetx+M=l`rU(&)hxp)MqL?I&_{(AlPi#WMx@EhWlI!2Q%G(f1oE_`@IJ-bQ72eKQseW zK?Mxp<1%=J>4c`zfn~OU)t?HE4SFo|`|{cDte*oGk8h0EKET{Z`E*pqwQUF5KJkvO zZ8Hco0*)CN9GpNJ+~v!}&;yk0P605~-mwPGg8)%vZbY^i5ETX=rl6dq#R(w#$9A`k(1mJV41&UtiqK;K zpYP_}sMLmtmadxg2sWu%Z?^VK{~H$Qc?<@8&L$~o$QuhPBhK%os_c%CiPsNy@MfL_ z!J-~=7-A!4fZGAC-CFYq3zeYffi1?0sRfDt;mx+#VaTa)(N zmBPG&2zG&aBkb(UE_=xO_Ax$^d34r3aHdu$qAv`h*N3MT79vH*?$HdFIU$ySUx17q z1m_lk28MYh@(Up;^z}3CFC*a?3;^7)LJX^l!KBvXg3kYfyMRAO{PWLUU^Be1;Wt6m zq2Dgb)8agUp$>c9^cAGR=jaTh4weL!zR4|uJO*nYf`bRq5o9x?Rgx(3rrbz0S0xQ!0A%Rb@JiEhgUi| z4BU($j}X3cJCX>vJ-ivho+t?6#!L9gNpk=-_NJgzHT3r4-)~e4Usoh1Bg-xG87i^$ zSnJij1NQ9A&CPM}jJ1CJ*aYUd5+AVKArqvkYNyu{C`R^A;$iHmQTxK{HRu?eL}xXD zoCj=tmxv|-&K1Mdf=M&3szvTr*7%})&^q8Oh3&a7Kw)%BnU@~zD zS*nUL{b&Wi6yAVV7?f)ex&+G%^atB*fk@=x_w2Ax zvOr{Ix!eZS3(!xKp;J{*W@aYQ78pTJfkg{ZTvUswnu9%z4oov-R0Ww5ojJBcLrdG2 zyMc~IgT7}mSe&SJNS<=_x5JmWR8a85*wIj8fPNILdm*pjyoTmA@Z_NOQPjqT&ii9` zkXv9r52?9q%-3+KN?2I<94DvUI`oCSMwMsmYYWIg*Jd{$+FHyH6e7c3N=gbJ94IFy zCU#0#_&7kT2MWnHG}a51tDls`+!q;Tb~i16c~C;|3R2-vgtLpI+@TpFi}z6xpzPcxUugkg+~RtoL$EIzgTZ@PX$^q1h|g z+-cGD4ja6W72HeWEBOC&-A4?|XF84%*WBaBiu_)^RN^KN>Y4?qDQHYR`u)oXkrEr( z?|01&u0<)F{4GFa)eLLSpr^!03Bdah#TS7eqU=NuP6?{Y%OTW5UUv6T|J>Z%2g3V6 zgLR6)(hLm^y?sf`1Uo$06QAHeOR-7N($XHr+Tq;c<&t&A58@(i;bz&p*aJ!L?v?AJ zK@&Z>b>uO?k8LceRp2N3ko6z56pr&hV2J>EWXhetoGtG^!jIkQ1F$4R!KHg_cx3lKgd?Gycz16p`G+frkOW%v!{td~*Tcy( zM((JKxk31MF}m&17Gb`7+I7756P8$5UGtys4s z2^ty`E1%v7p^Tz49;dB$`N#2R_Y99+x^nwz_%!v?+pC4fwWz*mWuBS~QzbI8Cp2cP zt@U&hzivkC__vL0D!fDV&pr06VqX`ZAa!)l5vF}d**~ay3x2?RN~SV?YH>{5)w;@h z`df_9j!F(1YVtZ9`aWV~?h412{mVjj+mJYdyO|3egm$wUE2r|~MxjDeQ&R(9-=F*6 z9MXK%_R+%LgI#Tll7XFlC2y}y=!`RIm}YgvCy3E$!o@tJ?4Yk87WA{sJ|=;6%|@qe z@$v1OV1ifK0zDu2aeuz?H{eJJ(&F6J=fkm{e23)oTaNA=-*!~xjQQvmfl7`(s!g1% zz31=qN3r&(X+vW`m+%4LgmY7ZlJf(Nx~~RxFOUW`1TgrKhAQZ^j%fY+f$WOh2lj~v zb~!e4Uop&>c=x)eg}>UzOJH6-aBW;i;q&hh>Z?yrs-CiDJ};ITKd4()wb;*1X9E~) zyL+K#S)QVd#AAnvEPa~dlYvdwV_qp0d;|It#eXoprD}i`O%2J) z%vf%$ED>MV{P2XIL*T_V;}`t=US+R%n~|mF)%WbJ=crwsPc^)231{hoKSv76m?wd}4tf(=TYhfD=3Us3@VqgijbwLRHmF;rwL^wG)Y zG&D%9D!FHk71fvzff>A&~{(PN0IkEbltB?eJs1Z1>U8vi-&AZ{G#OewQoax z>vlsuak=0sXVc5BBpbFu`o%TYd|&$DWjP{?mlZh-mmGzV(Qwrm;mk<%lZmyS{(7?2 zP-3K~o(@Z3n+O<9P?mgKAs$b)S2Dr+MJHYTy0Bewk+$QV$sU1=+fSkCU;T)Ahe6xS zEt=Kt9p&pFLYBB`esiZ)_^_*pY|^Z32(Hw2*IGafkD(;cm$#6e!Cbu1tlQ zod5GedjV<#HAhF@=cv7`XT*fWvjEEKQy!1Y3XTrj{FRlx&yu)!=BAZdlw$(#_NF>8+hI*=qgPaoLim<{MRAPrJu-D@ea+JG?Gl;qt!wGr0x%N~a6C zhkhIx93HYCz7)p&2SM18_95R<*p}V#^+UOyB1{dxE;)pW_sTzq7rL6uKCoO zt+YXSyKf;Q#9AT>&7TV!YzKhieFE+CsSfYy!Lz_6QIycsCw&5vGN8Xp3LiKtX%OWe z2!g|=x$nIW*WfX=PqJD{Z6dN8LQ)Yc|ZC0a{;qoen}^5ZU{BqQtf`roj$d1pEtUk9M|!;8M-O=wJ$d{ZDa zKc!o|CeZe>p@g~9bG&JI);Z}N>tw+36Iy2)yv2X@fl$@vB#-z}Qu^gJGXONteLs@#nf!4HY1rDG9GlNfwJzgs5kC!Q*Nu!Urv|K`S zJjkrY{huZ0fi^FR=1FRS{3hwYirT-8Ph}K<2L>~@>Q57N6mh6uvVt>&tETH9_)4$@ z?K{HWvT8-Ken5~|@P=&tk?FjAR>8`b{23*;JElXhQUZ|=)*GE0AU125r zTru=#SyIj|DUb~~zx<+#Jv&Ybw7plSKBiKp?O}0dN=;Qw4ZXEBz&{&5IwOaQ9f8~a zCv|&Z%@PCL+(Z|P_&jost}2oSjv*v#?rym*9;%6V*D^Y*t-`5xbFiKl}j>nmJc?k;;G zU!n}$Q_7TS>He^eM_X?_6_9>NJ93nzGE87UlmKIw2!O3&5x|yd311>&l)P`M>M?Vh z`CFL2hIpRMzN(g0TP6AC^JXlg=J$jyc5PHQVR73_PlSIV?tYxmrV2`)>`bRE`xWUC zeuzj5y;D^9RDd4bdAI7kQ}Z2YHWBuv#EMU30{gW!i_>+8uJB0G+hw}OcglLyg)?{d z?RwF}_4tNiQo5PHB6H<)`(`(Hj&^}O(%gx= z{vJ51Rxp0^JR9RY=9fUMBSe;NsGiztWE4FH?P;dtw%j821em=41dI_$8;>OYoRd3d z=d>?vwUC@?cxMA+$vabrWlMq>iiMt|5sw%=ekv`v*+JOK5UEeQ<3;n1N>?K%{!S?}=cMCpRr zD1yxBzUgwkv;ZlEW<&Z2ft6!VG+fUGe zXad+w=#iw1iebOC?RxA+N$}7hVqB?#ERGzv?wT(*(wOUI*CNE}5Or8$v@|*MUgMC> z##PC27ujj%k1bx!%C1IrA9F{$;2(rS*`O5j!zI5k@L~ZUV0&wE<##8R$VPN5k_K?N zWh|d&IPg;mzg{d>*wC~hha+{aNZ*0EbrtS!X=VCte1ywh(g-^Zd6jh< zSdAULWSKN4Z@ayGdT;0JLG!Oy-W^s-%JTRuqA7Crw%S)_JzM;Z#%{MIGwTOFln4Iw z_J~*Te%}pkOB=2?PkgEq z&>kJI>9r5*cwBnk38y(QOHXfPq{%=Xj?2QRcEsTOuXh~tvpEeq!xI}Fepua9<=Y)l zMsrW%DYndh6Fs?kvqQ>>9n9n-+qSaTeEL3cd?2DXpx+ zF#;eKX%#KC@u}D5V~&o6O_6k0QK2h#`?M5gnBKm=v!oA-0!>konJ6G2+5OWkLicu_ zTH+IvFZjOBmY%-U`q$(p&h9Q1Q`<^#FY(HTP5rfx5>}lhLA00D|I{_r}vJ3h# zvU!gU`Q$5wbF%AVUtrs)<=oaj1OXDx*R4J?PN)>nAZwIwgYSzd&Pa%a3N^~sO#I%1 zf+`_MqK*;=_pF&rD}QNFLECvMN~|>-kTa2|t4ouxbvMoyEZ?R#!dSYsAO_^L^N!L; zO|*I0^dz91U~+17Dj_`<)bDhL6VT)gyPD46@>>_P>eYB&yGO6MaP z5Rg{eq#LOSx~RBh>ftf0+gvccoPMpR>ESJj;61XALLPxbv-F2&DyUrCb7fqERQX~w zg_T+2X`gLg4JQCu3(NEJ=(*+GgbnW*C%0J`8;3=&)#(1_+v78_6WxDti*n;mLp{B- zq(lDlB~w&X6rsKV`akZy9J}!jm|0+?`2M3=8c;fx!q19~2xn%}dX zr$25Gg9pB5WTp3q2_tpu`fKALu4s#E8vac9!M4mUpC^go^VAVB1Mqv$waG zLP2RnSzG&sdDmC8lD-dT<-9>JK5>RgI1Fs#}}z!efd}qdcXYzMFzAj9>JPr zabz1<2g}q?sX0b1HSNEjl43$b8652kz%A^p^4pbLw5?-eG;EMLkem$yslTp#M+h68 zm>7u;8p99>2Bk)O_ADV|Lx`^0#nrX32$hw7)WB;%(+$Km5<(*f-TZ1I3`INY;p9q` z_mBN!0z&B;3~OS%aN6!chpcA$+tm*Z@mAlz{;=}e{{CV(vmVdM0wK6_92FwwVldBO zEt&uXP9H!;`_}F-Lfqpm=LGs-JL-E08t=6_U};Cqpcr7zzB$rC|U&7ihg=$ zd_K>0TxtHn;VnWcwyXu)w&^7_cQwFDamh$Oy!^5jj%wPD_$p7B{5vFlJC3;@KxfiVAQ%dN{ygEgmFU%bEBC9~ZunD@ zFtwH>l7Xu75f3eMhH|8 zO=TVW?@XlDqLvS)C2mJ5=-3fXeadX%CS(G5+i?(umFXkr%@ld8Xw>2bshG10mN8PO z?K!&EASK|t*_PX`mylo@A20pgwEthA!!t1xE744O|K1F6ti`G`te6o{UQh!7rv@1+ z6iKI!dSXR`%ga_WA_I-Re?VDeTnrg^O;ge6gPs$;qN<&&N2ycvlcfDPj?UM$pnSQ~uXI6`n@jgp6} z+CS(Z+Y4bGyT~3~i#-^RUPAK;6oYk!*GFqkUtY_=z))OL;?RkIbpidPN^rcO0`>w^ z4C%sIJScZhS79v37Wb=-$M^5ZzaU1KaNvX06kAA|m0Gw-mF(H9s=hnEyW+o;VmN!x zZ{m;owraI8KS#vkX@07fqsy&Au0RX!Cq!$TKBj};Jbxli`&Dm!)WJ-jz;P_pzof|A zt%?iN2cZ8Yrq+LFwl=vKwDV%O&DBPrBAn&u6vVcke}3%L{R^r}`{QG9cq1Zl%P^0r z{l{_KF5J#{GzJupp^uI%*mFfQr8Qq~R$I-Yft-o&hGubvTfo^p!YjyF321?3KIgu? z^FJX8wl2i(Hs_zwa>E@{3Q%AS9zF@5R z-aUVWPWlCB&%?+f0%htDQFE1pZ6a48}^SDen5zrwp!^>GJ<7sYVXr~*@h<~ZtXvkoPMvg+h-A_Mu(Kx)Oym^ zZg#v&K1Z6HX=b8_u(lIt82G&^-y}mxq3}|I#{8gR@OLp;lqq5kMTi!v-@OPVhw?%q z+xWzJQaxy^=ZcakRAd&CFS8SHdseG{$qr*`^>NQDOhy2j!ak2-rp;YE2b89ksXE32lX$5Z>*^JS**}8c;m!d*vG{#g#7L~ zBRhb)ZkJ=_?}hM@Os&x~pDlts+_t)JZ&r_2J4+p@4o5871gQwqS37CFQ7B$X0fpo+ z>Ht3m@F^!f3qm!Ur`xanfeaGr%s2s^mjs(|Om9x}4q>q?cbJ3axBo8?Oue#8S&loi$D z^~_VF>3Va|vzqQoQna+ZXeye|^<&;!h>t$8eUFyb6R5tY0Qc@k>r@T55-J5Iw8Gd| ztrEg8rgiJqVb0MC!gzoSqw`W9?&=}bycAy#9Cm)O?#7D^r8fStXGKzq?)}LgNijv^ z(31G()@DIq9w!~0+#xM<`B=whR^mnntpaqZ8jv+@h4!Mjw5VcD>pgV(Yjv|*dr>6$ zF8O)Irq8X0`UOSo{e3Q$)01vb5)|8FhjMb3PlKp%FA5mF*1`SOE?bdQeqLS~#((n; zb7+S^L3*v>`W-uX5uOp?W4ewQxc#y3vc7-LX{amJ3sb^4i)TXfTkTu~b_f@$(eDs$ z^*)kxM4U!Pbxa92@wGS8$gVAJQ=-mGhTzYjG_1E=WOJ^jVw30R~q{$V$ywyD|{ z4U6WRms$im7SbE8qL-l7KDe2@7ro1{BO9X5FvZJmx<>RO0ET>KnFvhodM~(QYrUY* z*Uux?3>rLpui)_c@=f3Qi;Ar_zyQ#dML_M!Lm*%0bdLqm&%Q>f=&}CS+?hA)c*}0& z_`ZI3c=HRMZo1?|Gi?qTw&=!iRUt4DSp9Fa*0*bkDA=yR%anSIohSU}@%JUyI>Fa8X0H(_pDJR9E8NH4lG@4&{u365-@j^8;j8W-Qd6AH*q*#7*IA?`;2r7&s z`)@{||J;X0B5?prK@5qK6$_E1vM&wJQvm`&H`3%>_IgQJvRgD*1HxX7ySV1c=-cAs zS$gJl#3$bSuoMqT!glWAun3Dt38XQkafo<|8iy!p8D3NH+$1R_l?Oo(>Fc2ZTFZO^ zJs(||MGtVPk)BU6x*o;)VNIf_7AIhzK(S-kKFz~$(zS@dez7NQ+481^Jb^Y~Lt}wqF?KSZ<7ATASJ)wXXF#!Fa3egnW~5>CE!1DT(W0QL-E3$8TBV#nfrZ`of96|z2=9P zB#FomX{n%Htwa|+3@(Ngqa2HCivGJ0bQ%$iAo@@+L;h#;tbYXG6vlh9DV87 zxBxuS6p|k6;pU9V$;nEDJ6qg`4^ouSEhFr2G?n{q`iwg?Eua%vXpS}q!Z`Z}_5p># zoYri*dZ}geFFN!i{2skRC+0!Sva}gP9qxxEQgC0=n$_u9jouCI!_=386Oq9!lw0duIbD zlPbQfRD+CTF@IxD`?$2=@0wON4z5Q1e`Xo9rtCz>&Zm=v@`bo6%Hq3^TA_R~25+Og z0Ja`zkTEzSy={DA;$lQZ#L=FK(e?r~MM)zA3ga|v^2b0E zS=XHBco}srEFvev;B{=*nxOTe9wEgXF>HTl)QtIo%kk>Da>V_cD{dHVh`y1H-nIIX z2PZvX&2s(xf~#WY?cM#=FSCDG@{%43^Z|VkXOgiSWQ+;O(OvFm!0uOZbXIw4qIS?;5-qDhv?d`$ zQBjBu5n_=YU+UJrd~~a@P#XL0QVQd;Wz|rKL%c0Yc1j2;pmu1A@A~77IyUJCn+618 z4j#O!wqDYXOn!2yl^rT^moA?iaNI?X(B`7);^@&_As(&-6ltKD;6WNolwaZ!$3k1| zw|PNXO6I2&egDNBNsrhW?|2Rx0utdtY)+v-Jr0=z0o1R$sG?eXz~Xjo(f6$HbCXAG zSH;p$crg;@E5H9K56?<5h1b;SkL5eiARoUC75&=duSOwICAc!e!i2i#0{}R+5P4bs z8Oc-K)AP7})}+XZi#S5JXJI))ukN~{o|HxiNd6JHz*R8$lq^uusA6gSSlN>0Jm{Io%Aax8k=yvsaBIyF-$ zma7$Z_*&Wlw|;lFI=ZD1p*6$i^*q}Fx{xRHSqLyW^{yOq zWPH8xedb%sLm7T6?pC!`2bXGczX=tNJH7v#Z>q;5%t-y~(UpsZp_}^ZYIZpPOc&Ts z;shFMweYNM3`4RKfOQDF5*1Okt+qTa8JYZYC6;-rQ?Gj2j7 z=eGon|BZk8LN{!1)5h}+sCuxXzd-_nujlV9R6aM5z6lXa^bZ@{4uW?4|AIc%No!=( zd?`@{8Hlsn$?Wv``{SR0bo?}k>Pkfh0>{N%yW@PKYKV2SiduDbwd>rp!(!6E9)dGe zx|+bsbLWh_diJ;`D5iEf96g%H9qmqBA$`@SLV&)q|J7Ig@_TiyeCCAhYNO`Aba}p8 z1VZUA%ka)598YA`)p`9>GriCGCB^aS{TIHi{`KqU320xfVmay09iFtC-h6INSfbyyFBX&p5>iXM36=JOvAU5aT)Z>FmcZ<|V+CkwR zDW>&BB)BTMERNPr@m(C=2 zjz-rYb+?(fpuXF5n|7Iki4EQWS{Y>4bUQ!o%gtw%l|TA-K-D_qeD4+F1UTf4h>5HO z{}aE?2vlPSl!9@EaM#IjB`S(gG$Yb2(m@0n`~=v0FHCHXB#m^m^69iWOpJ~POj6=_ z>LbOd-;YiV_xAirMXy(!0^eRfR-j}hg>2{q4oGHEB0E%pz7DGHNyrg}AaR2k0*0Uh za7QJNL0jZ0PQyg$SF!arlYuy0*tN2)ceI3>Dyq#~~d0ivuCb%}3WA z**JCN#kzSnk!9C;4oIUs)K4~M(Ylo%ypK8<(*sM|kzXoAht3aUpo@_PKdW?beS;+| z%6~Dhg&R>_#k9p^Hky=iw^$ZPL4rgoov^7Ae5Uht^|gon-8PX7Gbloc5@1ZLJ=l-7hJ0$= z!{!H6P-+xXV+ax8C%sMI^cS17m#R1=+D{XCsKo_UA<~luAMX#1l0JG*y0miY-sh;( zj_$e|yxC@xAo{|T!_FIPK_B!Qe)MY6^W+wTK@=|O*@QhIBVpHCJ~D1K>{6$VYY*Xc zwnq*L-%w$MWr*~Ah+~pW4}ecMw1}`N{+}|I9K#Fe(l>(3dSrC=h`_BSu9TkCM5jAj~Q?K193T zRIHx?QX5-Ulr&#SwF}bVx%)Rumb-$Vk1zYHH_|jvdQ{Jx*+BsC?0-89Bmr>ys7a|r zg7=2ZY5=i<%xd_mNYRtZ_%ril*5!3+QIn|jyxHiM6JD#qau3eF8oX5nR2a#4G!*09 z_M-k`e^FP!k+1`ayNIMirKKii??<7}$<57GvbRq!>gl?|Fa8Ij(0X$zwDJEl;C}*V z%&?9Js5*Lw4rTaeAIu+DDAfLo(7$)%J&#JMYqlg(AMstUJX{{+sX{i07_6~tul4Yy zy5+df;Q*JY3RS^F2~{#woJoyvKojMQS6}ez@!>}ZM=z}2T#I9!ZN&;|3V4noh>D2| zXU=<(rcl=XlZc(+>?+RU3>%KgDm@9fFQ}vRQ9(G##@H^X4UT^zOZv}}-OcIzXc8=f zTG#~&L18W~F78eA>~_$TEph5KS+u@%CM5b^|GJg602-&k{E&hb;C0X0U zj>kcasqk1>y5sLWSL}?13R_9cwe`1o+ltssp`QZFH8dH2oW zwc;&DI|`Qpey?=+aMG)9unHplu|ka5Q3QL4t*xy96dVS-SoD0iaZ@3@3}P@^qvm*g zqi|8-rJ{wKIv7-4~!v>a2MX4&m*OPR9`7Vrr;|y{2yvoTRtTQgW=)fjw%TW z;=nkAUfj!4(ug9~ka-x~E@=vP_-;oQjgtb81}STR+CmN6Gc+W9fRRHQPAirdU1iI0 zwLf^x{{DBL&QK}`Z(4ZyYn`~Ex%rKPorXvMjl??El8h%H1WK0h%gzj8JY#5n%5{y+ zx>+li1nOEIF*~bB_bZD| zvvIOk-tOWHCphB;UA%4ytwL73+-tFdDS)_y^G`3{6@g~kSv^b;EE(VDnOR08rP9X6fiK6yZy-TbAE zb*GI^REX_^BTi(}5sWff2ZXpO*lI$+P(@UfvWmb#QzY)XY|5H>xSu8T=ZBZ+7A_CA z&YjmqO`t&6C|Y8jsk>1pPZ+n&gA?{(^TKg;R;?YHwHW|Q3* z%bx81*nRH~;A+jvi92}@9}x`9%%^WV|GaM`<+pG2;BhYJmoNX4dyiS-jQKaUHwbZ! zV-e8rpCMW$NHx4*h{wri-8Hj|sA5Mt!&TO&rd((#cvP=Mn#6%zOib6Lrv{z``o~Y; z){ekal$?}A0op_whv3UE&q|!i^S_ECts^H@)+|HcR2U`fkPJ@b^cIW<05(@}oklQ5 zgP;ukA`HRTe`e##`K#=6CNS^rU+b2b?lYsKOkYv3YFWGRW}&vv4hLVeci_i;l^NnU z?9^l&kErkQ$jr)OgTEVaq7^w6GuO9<2$vpPFST@PzV!fFQ0Fvhceq>HiF3W>lZjn* zhZ!KdI`MCZu}iR~3M)XvPq-UfLxf6?p$1^Mrab61OPX>vTdzc6%`=wSeyb#M)*2f5 z&AC}@1gn3ZZfzlVD#wOvn2<{Zl*n$H1^!3NUcC~L`Htz9t!L&2=)mzxne*4sc#ai2&4@#&d*-?0a(aW<78b1l7tcAJG+s6 zC;l=$-7qy@ohCeTU3WZtAOz6boa@lGekQac{EdppZaj`qHBEnsy^g4GCDt`KF>Ku2 zODV-JeSxo}`T5mqF{PVib*#saZQhhaPr*RMr*m>N#yvS(>YH9hp*icf@^Tm;}0 z`nEGAxw`2o6&HMnkyaJa}n%lvaofDYQBP;WDbMq7z4*An*4u`$zr-Z zx3{qn9~ml__<05*n3Prn&sg*OnJegS8;C@Oya;XtBR&4S$=cpq4L@{-M>gh3yKKWf zI=BX9{8Mh(U9t%`Ufyz19)EA>b&N+-{VXKX#SKwO9QB2pD^ zAhgpx^n%FZau2Oq#*R8aEJ*Oe(o?{{I(z!}tqO&U7pFRYQ+~zQOSa2KYbz_;i?a!@ z5K`k1jF!o6(vLIk%rvYg=?O&y^eiu=bz`=+wpqTcGFV67q|C)-MY(u!am&ZqMTv7orc4)5WEoMlt-gM z9j;)I4@Wx)m=A6@#w5aV7w_~BQrZ;PYNY1fu4&tdUfE=9kS-X`@tM}lDY zCeGp8Pp8tfZ9j5U*Oyukaoe53hI%R|U#PQY`b>IrpuggQbJFd1QdA=|9+*Xb^4a_$ zOC?T__RamPbh~)^&smJm7<6#gA7LDQr^TR$SXs}x<6(Z#6XU29Nsh}>%li84e@tEo zbA%6I+QQnK|LE~3wfQccy4vq$R#w+m-(#PDjj;@xw>ayM41RQqERc1(bSbvMHk2FV zboQKBBAELtC(CQ@LUq{wm%$amOIjmlt2JKF9ws%#w7Y5Noy7H(Op@a2U%`FM3fc#b zTrh_aC8+e5vr=Q?4ahOeUc7us{E_I`cG2#Q6k7X`b7kAj$`6*Wlhe#1*UJ~y-aNEl z;HhcG$Qyk1bgI(a`E3r-79t8TE)KRAtT)UyF&O(nQcZ%>hD*r>3MrD2Y~Ria`$kLA z`h^v2aUs30Sp>g)kk}CM$@q)5?7dsfJo{wcvtGfM>v1nJjg}BhtY?fPomPhI(^tS-wS_I zs1R&#V;7~fdA0`4y~B=9F28?ZVX%!$9O?g@(yV*Nr2H5-*`R|&`w0YcBwQVcUIU~ocwXuO18ytqHI zZ6o{A4eaM@nJ@Au=`Z8m|6EnwV(X22FW)??rgG!Tm6oU5>rs=Mdywv!l#MuFU!pZNA4hbthDBjL-vH6CN!IvBNI9&3itA|G9C;^Z7cqfPK*F4C>NFkW= zRGXhlF4Ll-Ol6c@E0J48>9zjndCmCrT;o8O)E=9eyIH$Tg(}QyVce zTC6-g7mzh$H51+#q)0Uc#ZS~=x8p1VK@lg`-M7UIB$ zf0nMg>~O#0oFtiD;J91pgZ@Sb_VV~F zJ1}pf#IWxZ$(98Qcdk9iZ<;U0FY4~RpY7#CMe}d%m+OOA=M(R#V_X$n-qA5JG?1m6 zhuY|-Z0f0ccOq)ngRVPqKZSDFULg49LUwmw^)0f|)yCbE{so(jvh)t#IiCM(_^sVu zFJ{N{1J37s>_V?Ujwt^SDx0aHfV(NV+qLGJm*L5f%UYsYkO`Or)_DViSR;iBAj zR{NnwR+ikH*Y?Vq*5wXzH7$?c>i>wCjM&eUUEVhG`S96`v%=dB`MZz3Z8SM6S1sSy zTqv$;`SQutPC8A^*DA{1{4)G|>2>u=UOuj%@qYL))L((&l%Yx6#@blJ@#_<#%>fgm z_D1{kxK@paRp;D2K~34gD{<*m8LOmHKa2OLHHDK?6~-PYY^Bp>-aAOY?WL6Rf!Wy& zzTK}j@1AZUZ}l|%*rDy7YZ*SVuy4tgkqWUaE0ax-){95@^y7Ho9u0@g;i!{iag^gWxQ|(wb{rJNrqQBvKymHhhj>*}-`K3?;!CmXU(Vmq zB+vMs#GD+n`<`Ciy&}HMHuP|K4`MBKP2=^j6%Ilv?4S z%5V3C$cI~LRNyjbO@G{0vAoIrKwR0;A%`Y3`6}nqvy6*=QfoD|xa4lD30+%eV=R07 zz6#lD9l@03de1A~i(437(P3>j%Jkwr@6R_Q%UwHJL~w8qmDG5R3`lK1HHF8#{#EwW z)YqNH%48O=X6W#o_|dS}0DNnT34LhFJ>1D<%MrWVO8nX5o5SZZCpzz!0={c>R7+vn zL&4)e1>4*yX+2-|KA)O-eRpa&B&JSO{G2Bb&-_H>ukSvGeK5?IT=;-!GjjM-#tkg9 z4*odpdM$4Es&JHbFOGgJ6c4)peWht?j*1A)ot^D$otQOlv#+(3gwB}!v+~1OAl6CJ zgBG*QI}fC#1{au0A|i*gwQtw1{<*oYVIf?1SrV3c?8Wi$0A?MdigV=8hSxvsq*JN5 zBH>8B@xje|9xj{w9Bcgajx7!4=2z!)>t1`Di;NFHPD8F&N~q-JhU*W?AKZsuPM%Hq za6>qI`K;-VrF#u>w@TGE4V3oB-@O0#1Erhb(&)e4^vLte-Yx!}hY$=gP-s2ugZFF9 z24y9dM6DIUOA2KIenw4EeR|uv{=Qe*=l7l3&+(A0^(m~1UD@WU@R(LaU9z0xJ=gES z9x68)i%vq?RSkhxPf%zR$6J{jnfjhPrSEcPF`FS`b}M=^U~{JLljGZIQsZM|+es~= zAaO%WBG=aFOd*f9LH;)BCo^qxRr*!G&B)i+^mn|4waF;V}D^Oqb8z`&J^g z$4?sH{N1@#qB|dQHX0S=eo}Qy?6CXTLV6SUk(Sl=Frf(2Zt8jdEIjMbc30_@_^nGf z4jJe8Y(JE+vwZQl^rW8H-i^=9Sboa<%9Siu&$X)?jig*ZIIh}f(V%K*6|c?{zkD$B z!C6ZMg;Dv$^P?&GjuY!>k{)CaBId`ZyTy4bzu+&Gip&@WOAU@}%OsE}OPNQK9Ytv> zw!c`0h|i#7fc=yX&|I_DZT>V|=|M#~FB}R#KE6KjYo% zT)mOxa>gx^%1>h*(!3|g&f1~cy-IXvt5sOAZp+^OTQ%)-K-XulP9am*#zE?;^R*8MJc*$Ed4(vF= z^HH)0xZ4{$POn(DO8in({U?H~08THn;~1I%y88M;zOP=sbe`V6=3t!U8&RsdBLSW~ zrr#fCX&#^N=sb2ifINqlQQ6#Q){qaI^0`tVCJ`hFmD~DN?d^y9i-BtcAV+sh8m$E) z{JAbv&fQX2{xvk!`|yLurfW42|0=otv?7Zo$+wONV(WgB_=&tKSF!gMtf2oRhBU|JW! zNwonbf(+zI+Y@t&&m>#9+?;jSqt#c6uJ7%*QgoDYP0xiRNrZtPHe4qVmq%3z(vZtY zs|0D!Iyg8?PEBF%pX${Vx|e!k50`~_Z#+cG{UqXE?r|$Iq^Si-2KkZLP43F5B-Cm6 zacuv`TEAQJou>zPrklIv@#FWS{#+8t9amqsNB%Hmib>=KcZ7-pG}0+vj3mQu+V>nR z^z3Zs)b|N=OC3SRaQ*sOXAw*IR)^yOq|b<51=p<$R$H;0^6agPi#XG=XK!;|c94I# z9F&b!X2dI!IlXSD`^(L%;}f}o8hhZ}Y1n2(AqbZ54DSQ*+YHZ|{{9j9$Fp-b?Z#5_ zSB?KNu9vS^^dKWX(bV?1z7@4Ih^bVPbqD3yo2aAi_VpTbuZp^B)#pY2(f6jsIRCFd zpG)|UKc6jn_diGh`hSoDT*4v>FW-UP_~wzX&$ak?K|B|Pf#I$>9YAK?K!gvn7slv- zNEljsT96hXH(Dt5uO%d`#c-nV@NjNt=&s06DKI&Kp<%{I*xfLItn^z(9Y9zri1bJc zDJEtmnGy~8d!!6f9l}X6DRiWRON3ODAf@1T24Q}x`M`dHg&;a;0Iqc{EV{2)22(&` zC6nHo{Fs5(AatfvH*GQ=@0y=f`4iOcm9L#@UIT2}Cb(H^_hX28+E?Da3n%+)nMn07 z+oUkCq(qL$6o6?ND!+d#_}b{U17yR242FOl30newS5IHQ=OhJLwO1?@$J`+g(gU2rT}Wue195Dp#{TuN{eg(3Yzczr{#%Uj30+eh>8O2357x$J^A^PkyE3P z4ZrW|lCA}?XdL-$YzLOaT3K16>v~Cd?&@dcp8k3iXgGl_TQ1pT+$Ek<+*mCeV6fYp zHSpZHxVx)`GV^W0`Vn5go~GA$IF&fOF&vq+Z3uS<`13PBpf&yYJSh%@J6EaiPnmMFVxCbI5Bl~)LEAv_fA(6p6qGZd*ez1Gd>uxo~ zu1z?8_CI^Q3}w5o4x~FI?(|uOk|&U#gxEt!RG@3Sihp|pBopD&iJKPPdoCAs*KY~% zbSPjW2007p6XaS};6&CnH1rz}C!>-f01+`L_U{VpSkPJvk?r=Pfry6T&5oPF5j=!} zO(O+w@6(zZhkI++FTBOnJ!Gar>(?_V{+^ct7%2b`ig~Eow<{1^;Mexk zN`N`V`E_B89d1yPd6@^{b)pF4&dEina!kZ){j&#XneTIRLQsVsYrR(m?anD)b2@VG z;ikg#oT=|CymKcX2;~}>L}L(T;M@-~N)~$}h*ui$13xp-AV#Dfzn@H``Gcn9?S6Em zuyD{SYqkIVuj>_m{rU$uq|X7nisvE(&{QIfP9%D33}kEA*!$7G(ob0UIjfRwh_MDq^)|)8)Lo962eup4C?c4721swe%-rT!_p?L!+gW?eO8b3Uq zh#h7%#C{y;@Nl>I+#WkO{>#xx*=5JKdi-$Ae?i0va7B;LWdcQ3+TmwsO* zg#kolB})1iDfrR^Rn_Wi;J#amL3|L@Jq2}2RarT(b|>`XYcW|t3~)$)yU@55quNQ=mWZzX<$SG+Xc4d%!Ay4FJy!#in9(}<{>SfwGI%?SUpJJ6g zMGJB9s4akk6fOt}+;{jXE)a2!^sAA%Lz*H%tW38Sqge!C7T;gNU5XzPb}U9{wwL}D zll?zqlmGpfhHgW7p)3-Ei2!AKKTiXq3pwdM^|90@Ldbx|H@im`##xMIMTl?mSe8xi zBmqol?oYdYyAK{)4Q#+5`u2YQ974$RsLr(|w`hsPSb_d&a?EH5cV5HM5lVgMH9L!c zHecC+ay%2Es~XOw>wwV-Pv=?B?$ZO&_j>?MgRmA1gK5zLWo6~V*4BZMJhC!iUJF$` zA@9jzR^iQo!06p$f5lxtKCZlh%@_s26$@ z(snez*H~d2jCX`^O#&_8x0KP5*#f67=ppP%YRbYf^(YXEna3q2GJ#Kx3rbxq>yrlx zA7M2n>-K^r?nSOFP?)5Ch=tC`%uG+gc5d~3vM)D3KM+~TFSt1S5h64#z$vh&e5#hm z3q)!hMU>n6;jj`I$@d_@q*MZ{$PlkB;_G+q`9wYtUSvEI<_41DIN)MwGA&?U?>fUt zL%%!#5gVbC*7BUdm;xnvOCTyvfBjqqlPtQq7kAEZg4U%#F6udYCTa>Ooq&W}eRvw) zUz4 z1;9;_$S*cF*5FlVdwa{zoA|?LL^F?n{ux>f{c3e{GdoEBRcHiUf;AR9N_AV?YT&Ms z$|!*VN zLgdmyc-I*C0@+6(*!6vcca0&i#GlC}byU-tTp+S`NHc<$r5ElL1~ zY;a-eHDLWM@IcL+O3A6SD7)1Ip&NAoPLb#+DAblvKEU*XKoS&C0ZJHJ9`}l?kI03|fPJ2m^lHz0~k2B|TjewFyQF30GQXe)lejGVyNL zeQ`tX0Hfejq-Jy!j5=i-njh|O^yl%(T0j_*85mkOW_vm@@tWdT zJ_{jv-tjK^NUw9}&f(3YvDVQ&;N;>W@Xw39udz0)oSY&80w_bq5F5Wi07v3?`J+}= zXORv$KDFqa*aK!erSip#d(TU7F&)d}*f}}F&?iHrMX4m&kFIV2CWKG|V9^L+<~vVz z(dQKi<@DeyY0KHGnl>BZ&WDkTEw5mffZPWR*!03gGmEJSquKQuvzxO^E!`XX_;--r z1~%(6;D8!*7>e*yu+^rx?h}b|$bO3H#P`qi<_vZJ`0<0#>B;7CP;Ov+JPKV8hjn*K z)5mAiiqcxZTU4s~se~(f-^h~eqDWz_&`#hxkkvvIn~>ZHEqGEL6pzcA0ONX^i%`U` z%fV}e7~cj4DeldkMww@JKmH;(^J{hA#AZWXOEO9TICPRn@0fXK!>!n|Zm%>Zp+p}Q zspBk5m6pN`+(1hh#{+@8@m9-F_Q4F34#@IO_~j)D!Y}HsSzUb%gx{t zKS2X}YHG^hRaehy3fZ_3ZX>dNf?z2ZE=;HHaxPe&n)U;rjO99seL}O118O&fSm?v} ze%y{P!9>ajJBa}T_XMkhfsD;119^YVpC9&J~Bwz$zK|)Z#?W3<<3&V%h zqFdVW@We$-ygCe)0BQ*gNbp=Hdv`l^m2yzt+&5Q1oHdU`uh@NL)t9edv!=;(W|G@N z$012JETX3cPuKqK9VX1mYuAV}hov7Ch)|X__uV$Zb%}nKIxd-vb4L)7WFmy5rOeMh z{;h@;y9Mw95UBPlk{lnZJoV&2Y{JUPx|+W$V9s2mM@}mt7;r(>Lyja!#m<6VO%^H$ z)q+S$9SH|B6<}B#;n$>(tpeO*uFki#w3P6-fobKGapEKe2IO31l8B8%b2YI%yesqE zj8lx;-7pztfUt-NvNLQwTuBlZ>&6r{WPw*ZP~PY#6S9xxRD|GB?ZxIBd$a*1vU9M7 zAO1D}gS1Q2KX^RG8X?X(g0uzkRWOK*2eUXbWa7Kfzvedq>1K()^&zvw4jv2wx}IRk zi8AHRzQmPuITbv_1J3(;0KGkl4=g*_jR{ohC_k|A@iC#rDWQtzc+GY)gw%UI zQZCFU2)cXs?rvduB{jBlI66veeS^3^kWoh!-qLVWJGvT2qK`1W&)$9ma)Vs&Z;s}n z(Ae$Tg&JSuobSTILY9Q=K2_U6ND)YdFKqdWxI7X;{-n@BaS@J@u9$ijv2o zja;*S{d%%w$~-6T&s+zLgp6l~sP1fVFrB!B1Q{NIAQ@9u%36PQ`_6WWE*Sg*>itgZ zF>DHCA_xJpyU!g*0QViEoLT>jtwbp<8Hp2lihuw!z6-W>^e@R)cMAHzJIGKpk`S^| zqi%*Yi%(faB@Y2OK`iT+p$H>@QPS7~0dwDhu^|)+LW=L84!aJ%5hVP3ma)yq*pc~j zKSMwN!Hnq2J`} zY}_saf&i-w(BPOWqa-0M8Mt{aI+_hGtT(s!u8#B}6XMBei{a)TAV63&G&IJ1&oU5` zCK(fjRkRgE*~pVv$-59q^JPyTu&`i8YJcFsf$aAef#wY*F!OZqGCa1(%7*4mRrs&| z30R2>ihJUgkIJLShOoS5;_CWwkVEKj) zvY4s#;6#tb+?n5!r5L5ei*O-GIavuiXGCNqCVgHOoz>LT4A2&-MsHvvUjs(l;C3NJ zphv}(Y~O2qr`ehv-K!sMXJd0%B)L;jK(}!DIpfSINE}|+ew0lz4Tst+{c-Tik${1I z7ExiwRC`?=Bh-XUk2dSFt*6XmKuFv31^x$!;UG=6LD>+c7_d;P5YFU*UrQ=msbeTL z9JaL$B2FKQF8DDhetoEo0fJM%pp2ZM`X5*w@e0%KcO?F~p zS)x}v9S_8-!ikT){r+xO!)Mjisn54!ErTyl3)yT9{J|_q)`rgzH)*Y+A`)o3S2r>) ziyJ>mR#fRs;v;db8;jesq%qBrpg_M9hSvrj(u<3WPXY#=HJAf~4x28nwBMkw@}Z zMK7#Jf>^X~?1)@bF;#qxyK$EDi@rPMvWb`F=M493V6p#crY|xy`IFY{+(IR#r zGR6oGu*TJ|$b%t%zCT?8cP_Mw)F@@I<5R$#3rrHw&+!`@9cAU^jX(rvjYxTmv~&$7 zA8qRZ%ZD39WmF>fUmd~7zuUAi(DX);_?VXR4pRovJ)4t$+^1U^7)~YaudK z1NYP6^m|lL@-VWL1c?|UfiSxgsofilcgT3R+dPs>ik_r6WHvD`ui2->WKi{&5z^94 zzc~l8A>vY!rWi_ZQ`jo|@r#kA?I7grB?W{q3I%O|%YM#BkCGsP)LhA2HuW-`&B(?3 zh+!QpB}EeR1e}NQqx1e4sIv^n~z8EHAv|iU4XGJ5l^`P~10^x+FcjniGZ@cddg?=D#ywm2 z;>A-EZ`s(;pvgc0J2;|s=5-do#r4%!O$3I&@DZJ7dV?qAQ0Ae{>DRjy{*ew6gAAxx zjyJ?G)Re4D*cH(ASP5hl3Gr_JAI{!8p6h@A|9@$zjM63=iZV+wA}S;iWoM>rLbhnz zGNL3a*(-^x%#6q=5kizzW=2Sn`raON&gXMJpL02%-{sdo=Y8Jqyu4n|*YkOQ+{f*9 zy7Ns%akRbc>!2_9*T(Z!6Q+&3TA;gERpeHa)nVZEHYO|jG z``nxg2KHxG?piN#@Pi#{DY7tP3*QAPKMREj;hRV$iGL6jk}5nf-Jn$=#~@1&DP$sm zs!qG)8VkmR_CumVLYvVzfgtbv%_Zc5HJUS6CqKyP-mvY;cse&7ro8HR_Z*g=DC``$ zpV6$Ypg<2T40_`f3LaZ@X6}OgjdtoSZC+9c*=>N98L3`Ef~Hc!fu<7Xi79=09sH49 z6qj=gcIvpT#okS;@p&=V{0m$7(7>> zbTkB$8$?EHC^PQj=xO7pLgFlg0I%RhH5K?)%c|Pvmt>c1k=5egYw;SIz!mXnhkRsf zCtgRLTvOCi-Trv=oYd(7olND>0US7_QDV|8Yn#FY8FyP-8<~tPWQbs4d1|IfA3b{1 zZ$@?R2C@Z?i3o`pvM+k>>rAmf$w=u7xz`(_ER@2W`)vQs#xJ_-dTq`r_2M@gZ{
zSbA{X!y2=Tx62Flc893iW?wURh)-Oz?XVX%y{aA(N8`N^o)o0lN#FC4=X7D#x$I0v z@&H<9PmyC|a8LTEXqmYM2dhT*>J6Hbum8Se{3hXt_q=@zF9>U>*V#19bRS92qfJz{ zS$j9a{lUG96}ydhram1B>}i{_IhVGX#>8@NkCG4i%O z-*S0+*oUA4Iwn5-UyalkMG8qAP|aR3G0ciNkbQ69@E3#S=Y&K}PlhGl-RSGr7trLm zDAx#o9dtl)k;(0)>DzN)V~=Iu4t(N2qAt%A-k;jq%8*V!vQq1Iieco|G8x`?&J0T$ z|3+TgptVb?L){%~#nn}0ZkL4Kwy~f8*y9wVY@W79r0L+|G(qv%a`p-%k7q9CDm%=Gq$i_hX0G51ohWp#8vs;4gJ?aWV~vb7Q9 zHR@BRKEoR6ClqzyP$V zU^m{C9@bcI@%1&=>Xmt_y9ITh2&&2+QGahNm+qTD!!4Euc_DeE!_;(SkA14|s8}i1 zc`?4PvZ|9_p~WbmLx?L@fam^05~o;QLmq1RKIr5AHFnA@a$RKge0%TZBSLmI*QOfl z*IY0>SpN5_gq^YuUEOc_MP{rGH(Iw5i?I#ov|Z}ihtg9x5Xo;#QVYnhkXw24UL9*i zoWV(N`736;H7a3Nimwch8pqRVf315ucBN8sY%WQzIqCD?!%rZkzIN^>+h^gsN{Zi} zXUeumn#mmrS1UB`wWK~L+%Zj=T9!0nshz8I^S^d!n2y$Kr5ajo!G?DFqo26`QnX&V@O~&P*gKqPdPyNc@sE*#_6*JO z-d?-p{WG6SLzaeFq9!JD3{(lpyY z(JVcz)mt~s%<`sefq`-h$$U=p~$NyG0e>|SJ9)Fq6iF&wzC zc$mA{>8>P_q26$-;$xssl0`w7=3|yBOC&smXQq!+39W5HHNj|$3gR4=D+>xtk3$dd z{d`+v^4U=+&pKPc)k<`(pxRF?|9MNv)Z{$SZc`cvWU#0aJ1thbGlC=W*yi_Nk0`KG z&cxZ=UFMF_ku==6b#Je6SGv9peq@MFB&AG$}=nK%7GN7gvw`(r@NCp2Al<4$CqQ1bwS% ztlx;=L>C{Gwy|>jd4ZyFeU8J~r}NyFpM&u&DvAxL{!gO>G)Jz$+E!lH*Vl&O`qo1~x3Paw#WuK~gdMXdW?W0>hdh+Gboct)QrdVS=ovJzaW&H$ z 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 literal 0 HcmV?d00001 diff --git a/intrinsic_properties.py b/intrinsic_properties.py index 2cb4fe9..ebdf294 100644 --- a/intrinsic_properties.py +++ b/intrinsic_properties.py @@ -5,23 +5,22 @@ @author: daniel """ -from neuron import h, gui -import os -import numpy as np -from granulecell import GranuleCell -from mossycell import MossyCell -from basketcell import BasketCell -from hippcell import HippCell import matplotlib.pyplot as plt +import numpy as np +from neuron import h + +h.load_file("stdrun.hoc") -dll_files = ["C:\\Users\\DanielM\\Repos\\models_dentate\\dentate_gyrus_Santhakumar2005_and_Yim_patterns\\dentategyrusnet2005\\nrnmech.dll", - "C:\\Users\\daniel\\repos\\nrnmech.dll", - "C:\\Users\\Daniel\\repos\\dentate_gyrus_Santhakumar2005_and_Yim_patterns\\dentategyrusnet2005\\nrnmech.dll"] -for x in dll_files: - if os.path.isfile(x): - dll_dir = x -print("DLL loaded from: " + str(dll_dir)) -h.nrn_load_dll(dll_dir) +from pydentate import BasketCell, GranuleCell, HippCell, MossyCell + +# dll_files = ["C:\\Users\\DanielM\\Repos\\models_dentate\\dentate_gyrus_Santhakumar2005_and_Yim_patterns\\dentategyrusnet2005\\nrnmech.dll", +# "C:\\Users\\daniel\\repos\\nrnmech.dll", +# "C:\\Users\\Daniel\\repos\\dentate_gyrus_Santhakumar2005_and_Yim_patterns\\dentategyrusnet2005\\nrnmech.dll"] +# for x in dll_files: +# if os.path.isfile(x): +# dll_dir = x +# print("DLL loaded from: " + str(dll_dir)) +h.nrn_load_dll("./pydentate/x86_64/.libs/libnrnmech.so") current_steps = np.arange(0, 0.6, 0.025) gc_voltages = [] @@ -35,7 +34,6 @@ hc_apcs = [] for x in current_steps: - gc = GranuleCell() mc = MossyCell() bc = BasketCell() @@ -61,7 +59,7 @@ h.cvode.active(0) dt = 0.1 - h.steps_per_ms = 1.0/dt + h.steps_per_ms = 1.0 / dt h.tstop = 1500 h.finitialize(-60) h.t = -2000 @@ -69,7 +67,7 @@ h.dt = 10 while h.t < -100: h.fadvance() - print(h.t) + # print(h.t) h.secondorder = 2 h.t = 0 @@ -85,29 +83,33 @@ mc_voltages.append(np.array(mc_rec)) bc_voltages.append(np.array(bc_rec)) hc_voltages.append(np.array(hc_rec)) - + gc_apcs.append(gc_apc_curr.n / 0.5) mc_apcs.append(mc_apc_curr.n / 0.5) bc_apcs.append(bc_apc_curr.n / 0.5) hc_apcs.append(hc_apc_curr.n / 0.5) -plt.figure() -plt.plot(current_steps*1000, gc_apcs, marker = 'o') -plt.title("GC F-I Curve") -plt.xlabel("Current Injection (pA)") -plt.ylabel("Frequency (Hz)") -plt.figure() -plt.plot(current_steps*1000, mc_apcs, marker = 'o') -plt.title("MC F-I Curve") -plt.xlabel("Current Injection (pA)") -plt.ylabel("Frequency (Hz)") -plt.figure() -plt.plot(current_steps*1000, bc_apcs, marker = 'o') -plt.title("BC F-I Curve") -plt.xlabel("Current Injection (pA)") -plt.ylabel("Frequency (Hz)") -plt.figure() -plt.plot(current_steps*1000, hc_apcs, marker = 'o') -plt.title("HC F-I Curve") -plt.xlabel("Current Injection (pA)") -plt.ylabel("Frequency (Hz)") +fig, axes = plt.subplots(nrows=4, ncols=1, figsize=(8.27, 11.69)) + +axes[0].plot(current_steps * 1000, gc_apcs, marker="o") +axes[0].set_title("GC F-I Curve") +axes[0].set_xlabel("Current Injection (pA)") +axes[0].set_ylabel("Frequency (Hz)") + +axes[1].plot(current_steps * 1000, mc_apcs, marker="o") +axes[1].set_title("MC F-I Curve") +axes[1].set_xlabel("Current Injection (pA)") +axes[1].set_ylabel("Frequency (Hz)") + +axes[2].plot(current_steps * 1000, bc_apcs, marker="o") +axes[2].set_title("BC F-I Curve") +axes[2].set_xlabel("Current Injection (pA)") +axes[2].set_ylabel("Frequency (Hz)") + +axes[3].plot(current_steps * 1000, hc_apcs, marker="o") +axes[3].set_title("HC F-I Curve") +axes[3].set_xlabel("Current Injection (pA)") +axes[3].set_ylabel("Frequency (Hz)") + +fig.tight_layout() +fig.savefig("intrinsic_properties.png") diff --git a/pydentate/__init__.py b/pydentate/__init__.py index efc1005..1044842 100644 --- a/pydentate/__init__.py +++ b/pydentate/__init__.py @@ -1,6 +1,12 @@ +# ruff: noqa: F401 import os dirname = os.path.dirname(__file__) linux_precompiled = os.path.join(dirname, "x86_64", ".libs", "libnrnmech.so") windows_precompiled = os.path.join(dirname, "win64", "./libs", "nrnmech.dll") + +from .basketcell import BasketCell +from .granulecell import GranuleCell +from .hippcell import HippCell +from .mossycell_cat import MossyCell From 62ed73ac7d961ea0059f9005ab4ce722f4d8fef8 Mon Sep 17 00:00:00 2001 From: Sourcery AI <> Date: Fri, 28 Jul 2023 07:09:15 +0000 Subject: [PATCH 4/4] 'Refactored by Sourcery' --- analysis_main.py | 61 +++++---------- intrinsic_properties.py | 3 +- ouropy/genconnection.py | 35 ++++----- ouropy/gennetwork.py | 98 +++++++++++++------------ ouropy/genpopulation.py | 11 +-- paradigm_pattern_separation_baseline.py | 12 +-- pydentate/inputs.py | 4 +- pydentate/neuron_tools.py | 9 +-- pydentate/x86_64/special | 29 ++++---- 9 files changed, 118 insertions(+), 144 deletions(-) diff --git a/analysis_main.py b/analysis_main.py index 3250ccc..7a2593c 100644 --- a/analysis_main.py +++ b/analysis_main.py @@ -32,13 +32,8 @@ def tri_filter(signal, kernel_delta): width of kernel in datapoints """ kernel = np.append(np.arange(kernel_delta / 2), np.arange(kernel_delta / 2, -1, -1)) - # convolve2d has proven PAINFULLY slow for some reason - # signal_conv = convolve2d(signal,kernel,'same') - new_signal = [] - for x in signal: - new_signal.append(convolve(x, kernel, "same")) - signal_conv = np.array(new_signal) - return signal_conv + new_signal = [convolve(x, kernel, "same") for x in signal] + return np.array(new_signal) def correlate_signals(signal1, signal2): @@ -66,8 +61,7 @@ def avg_dotprod_signals(signal1, signal2): non_silent_sigs.sort() product = signal1[non_silent_sigs] * signal2[non_silent_sigs] prod_sum = product.sum(axis=1) - avg_dot_product = prod_sum.mean() - return avg_dot_product + return prod_sum.mean() def ndp_signals(signal1, signal2): @@ -103,14 +97,10 @@ def avg_dotprod_signals_tbinned(signal1, signal2, len_bin=1000): signal2 = np.reshape(signal2[:, 0 : int((signal2.shape[1] / len_bin) * len_bin)], (signal2.shape[0], signal2.shape[1] / len_bin, len_bin), len_bin) signal2 = signal2[:, 0:5, :] - sig1 = [] - for x in signal1: - sig1.append(normalize(x, axis=1)) + sig1 = [normalize(x, axis=1) for x in signal1] signal1 = np.array(sig1) - sig2 = [] - for x in signal2: - sig2.append(normalize(x, axis=1)) + sig2 = [normalize(x, axis=1) for x in signal2] signal2 = np.array(sig2) product = signal1 * signal2 @@ -120,8 +110,7 @@ def avg_dotprod_signals_tbinned(signal1, signal2, len_bin=1000): for x in silent_sigs: prod_sum[x[0], x[1]] = np.NaN - avg_dot_product = np.nanmean(prod_sum, axis=0) - return avg_dot_product + return np.nanmean(prod_sum, axis=0) def time_stamps_to_signal(time_stamps, dt_signal, t_start, t_stop): @@ -135,8 +124,7 @@ def time_stamps_to_signal(time_stamps, dt_signal, t_start, t_stop): for x in time_stamps: curr_idc = [] if np.any(x): - for y in x: - curr_idc.append((y - t_start) / dt_signal) + curr_idc.extend((y - t_start) / dt_signal for y in x) time_idc.append(curr_idc) # Set the spike indices to 1 @@ -173,11 +161,10 @@ def similarity_measure_leutgeb_BUGGY(signal1, signal2, len_bin): signal2 = np.reshape(signal2[:, 0 : int((signal2.shape[1] / len_bin) * len_bin)], (signal2.shape[0], signal2.shape[1] / len_bin, len_bin), len_bin) signal2 = signal2.sum(axis=2) - corr_vector = [] - - for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:, x], signal2[:, x])[0]) - + corr_vector = [ + pearsonr(signal1[:, x], signal2[:, x])[0] + for x in range(signal1.shape[1]) + ] return np.array(corr_vector) @@ -189,10 +176,10 @@ def similarity_measure_leutgeb(signal1, signal2, len_bin): signal2 = np.reshape(signal2[:, 0 : int(len_bin * int(signal2.shape[1] / len_bin))], (signal2.shape[0], int(signal2.shape[1] / len_bin), len_bin)) signal2 = signal2.sum(axis=2) pdb.set_trace() - corr_vector = [] - - for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:, x], signal2[:, x])[0]) + corr_vector = [ + pearsonr(signal1[:, x], signal2[:, x])[0] + for x in range(signal1.shape[1]) + ] pdb.set_trace() return np.array(corr_vector) @@ -239,14 +226,6 @@ def sqrt_diff_norm(signal1, signal2, len_bin): def inner_pearsonr_BUGGY(signal1, len_bin): signal1 = np.reshape(signal1[:, 0 : int((signal1.shape[1] / len_bin) * len_bin)], (signal1.shape[0], signal1.shape[1] / len_bin, len_bin), len_bin) return signal1 - signal1 = signal1.sum(axis=2) - - corr_vector = [] - - for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:, 0], signal1[:, x])[0]) - - return corr_vector def inner_pearsonr(signal1, len_bin): @@ -254,12 +233,10 @@ def inner_pearsonr(signal1, len_bin): signal1 = signal1.sum(axis=2) - corr_vector = [] - - for x in range(signal1.shape[1]): - corr_vector.append(pearsonr(signal1[:, 0], signal1[:, x])[0]) - - return corr_vector + return [ + pearsonr(signal1[:, 0], signal1[:, x])[0] + for x in range(signal1.shape[1]) + ] if __name__ == "__main__": diff --git a/intrinsic_properties.py b/intrinsic_properties.py index ebdf294..58ec151 100644 --- a/intrinsic_properties.py +++ b/intrinsic_properties.py @@ -5,6 +5,7 @@ @author: daniel """ + import matplotlib.pyplot as plt import numpy as np from neuron import h @@ -33,6 +34,7 @@ bc_apcs = [] hc_apcs = [] +dt = 0.1 for x in current_steps: gc = GranuleCell() mc = MossyCell() @@ -58,7 +60,6 @@ time_vec.record(h._ref_t) h.cvode.active(0) - dt = 0.1 h.steps_per_ms = 1.0 / dt h.tstop = 1500 h.finitialize(-60) diff --git a/ouropy/genconnection.py b/ouropy/genconnection.py index ee5df69..deea348 100644 --- a/ouropy/genconnection.py +++ b/ouropy/genconnection.py @@ -23,15 +23,15 @@ def __init__(self): def get_description(self): """Return a descriptive string for the connection""" - name = self.pre_pop.name + ' to ' + self.post_pop.name + '\n' + name = f'{self.pre_pop.name} to {self.post_pop.name}' + '\n' pre_cell_targets = '\n'.join([str(x) for x in self.pre_cell_targets]) return name + pre_cell_targets def get_name(self): if type(self.pre_pop) == str: - return self.pre_pop + ' to ' + str(self.post_pop) + return f'{self.pre_pop} to {str(self.post_pop)}' else: - return str(self.pre_pop) + ' to ' + str(self.post_pop) + return f'{str(self.pre_pop)} to {str(self.post_pop)}' def get_properties(self): """Get the and make them suitable for pickling""" @@ -128,12 +128,12 @@ def __init__(self, pre_pop, post_pop, for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] - for post_cell_pos in post_pop_pos: - curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) - + curr_dist = [ + euclidian_dist(curr_cell_pos, post_cell_pos) + for post_cell_pos in post_pop_pos + ] sort_idc = np.argsort(curr_dist) - closest_cells = sort_idc[0:target_pool] + closest_cells = sort_idc[:target_pool] picked_cells = np.random.choice(closest_cells, divergence, replace=False) @@ -248,20 +248,18 @@ def __init__(self, pre_pop, post_pop, for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] - for post_cell_pos in post_pop_pos: - curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) - + curr_dist = [ + euclidian_dist(curr_cell_pos, post_cell_pos) + for post_cell_pos in post_pop_pos + ] sort_idc = np.argsort(curr_dist) - closest_cells = sort_idc[0:target_pool] + closest_cells = sort_idc[:target_pool] picked_cells = np.random.choice(closest_cells, divergence, replace=False) pre_cell_target.append(picked_cells) for tar_c in picked_cells: - curr_syns = [] - curr_netcons = [] curr_conductances = [] curr_syn = h.pyr2pyr(post_pop[tar_c].soma(0.5)) @@ -293,14 +291,11 @@ def __init__(self, pre_pop, post_pop, curr_syn.Cdur_nmda = Cdur_nmda curr_syn.gbar_nmda = gbar_nmda - curr_syns.append(curr_syn) + curr_syns = [curr_syn] curr_netcon = h.NetCon(pre_pop[idx].soma(0.5)._ref_v, curr_syn, thr, Delay, weight, sec=pre_pop[idx].soma) - #curr_gvec = h.Vector() - #curr_gvec.record(curr_syn._ref_g) - #curr_conductances.append(curr_gvec) - curr_netcons.append(curr_netcon) + curr_netcons = [curr_netcon] netcons.append(curr_netcons) synapses.append(curr_syns) conductances.append(curr_conductances) diff --git a/ouropy/gennetwork.py b/ouropy/gennetwork.py index 5e55be6..765b9d2 100644 --- a/ouropy/gennetwork.py +++ b/ouropy/gennetwork.py @@ -78,8 +78,10 @@ def __init__(self, celltypes=None, cellnums=None): if cellnums is None: return - for idx, cell_type in enumerate(celltypes): - self.populations.append(Population(cell_type, cellnums[idx], self)) + self.populations.extend( + Population(cell_type, cellnums[idx], self) + for idx, cell_type in enumerate(celltypes) + ) def mk_population(self, cell_type, n_cells): """Initialize instance empty or with cell populations. @@ -119,8 +121,6 @@ def set_numpy_seed(self, seed): def run_network(self, tstop=1000, dt=1): raise NotImplementedError("run_network is not implemented yet") - h.tstop = tstop - h.run() def plot_aps(self, time=200): fig = plt.figure(figsize=(8.27, 11.69)) @@ -139,7 +139,7 @@ def plot_aps(self, time=200): plt.subplot(4, 1, idx + 1) plt.eventplot(cells) - plt.ylabel(str(pop) + "\n" + str(pop.perc_active_cells())[0:4] + "% active") + plt.ylabel(str(pop) + "\n" + str(pop.perc_active_cells())[:4] + "% active") plt.xlim((0, time)) plt.xlabel("time (ms)") return fig @@ -149,7 +149,7 @@ def save_ap_fig(self, fig, directory=None, file_name=None): directory = os.getcwd() if not file_name: loc_time_str = "_".join(time.asctime(time.localtime()).split(" ")) - file_name = str(self) + "_" + loc_time_str + file_name = f"{str(self)}_{loc_time_str}" if not os.path.isdir(directory): os.mkdir(directory) @@ -157,13 +157,15 @@ def save_ap_fig(self, fig, directory=None, file_name=None): if os.path.isfile(full_file_path): raise ValueError("The file already exists.\n" + "shelve_network does not overwrite files.") - fig.savefig(full_file_path + ".pdf", dpi=300, format="pdf") - fig.savefig(full_file_path + ".eps", dpi=300, format="eps") + fig.savefig(f"{full_file_path}.pdf", dpi=300, format="pdf") + fig.savefig(f"{full_file_path}.eps", dpi=300, format="eps") plt.close() def get_properties(self): - properties = {"populations": [x.get_properties() for x in self.populations], "init_params": self.init_params} - return properties + return { + "populations": [x.get_properties() for x in self.populations], + "init_params": self.init_params, + } def shelve_network(self, directory=None, file_name=None): """Saves the complete network information to a python shelve file. @@ -174,11 +176,11 @@ def shelve_network(self, directory=None, file_name=None): directory = os.getcwd() if not file_name: loc_time_str = "_".join(time.asctime(time.localtime()).split(" ")) - file_name = str(self) + "_" + loc_time_str + file_name = f"{str(self)}_{loc_time_str}" if not os.path.isdir(directory): os.mkdir(directory) - full_file_path = os.path.join(directory, file_name + ".pydd") + full_file_path = os.path.join(directory, f"{file_name}.pydd") if os.path.isfile(full_file_path): raise ValueError("The file already exists.\n" + "shelve_network does not overwrite files.") @@ -192,11 +194,11 @@ def shelve_aps(self, directory=None, file_name=None): directory = os.getcwd() if not file_name: loc_time_str = "_".join(time.asctime(time.localtime()).split(" ")) - file_name = str(self) + "_" + loc_time_str + file_name = f"{str(self)}_{loc_time_str}" if not os.path.isdir(directory): os.mkdir(directory) - full_file_path = os.path.join(directory, file_name + ".pydd") + full_file_path = os.path.join(directory, f"{file_name}.pydd") if os.path.isfile(full_file_path): raise ValueError("The file already exists.\n" + "shelve_aps does not overwrite files.") @@ -215,15 +217,15 @@ def __init__(self): def get_description(self): """Return a descriptive string for the connection""" - name = self.pre_pop.name + " to " + self.post_pop.name + "\n" + name = f"{self.pre_pop.name} to {self.post_pop.name}" + "\n" pre_cell_targets = "\n".join([str(x) for x in self.pre_cell_targets]) return name + pre_cell_targets def get_name(self): if type(self.pre_pop) == str: - return self.pre_pop + " to " + str(self.post_pop) + return f"{self.pre_pop} to {str(self.post_pop)}" else: - return str(self.pre_pop) + " to " + str(self.post_pop) + return f"{str(self.pre_pop)} to {str(self.post_pop)}" def get_properties(self): """Get the and make them suitable for pickling""" @@ -312,12 +314,12 @@ def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, tau_ conductances = [] for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] - for post_cell_pos in post_pop_pos: - curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) - + curr_dist = [ + euclidian_dist(curr_cell_pos, post_cell_pos) + for post_cell_pos in post_pop_pos + ] sort_idc = np.argsort(curr_dist) - closest_cells = sort_idc[0:target_pool] + closest_cells = sort_idc[:target_pool] picked_cells = np.random.choice(closest_cells, divergence, replace=False) pre_cell_target.append(picked_cells) for tar_c in picked_cells: @@ -430,10 +432,10 @@ def __init__(self, pre_pop, post_pop, scale, target_segs, divergence, tau_1, tau pdf = pdf / pdf.sum() for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] - for post_cell_pos in post_pop_pos: - curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) - + curr_dist = [ + euclidian_dist(curr_cell_pos, post_cell_pos) + for post_cell_pos in post_pop_pos + ] sort_idc = np.argsort(curr_dist) picked_cells = np.random.choice(sort_idc, divergence, replace=True, p=pdf) pre_cell_target.append(picked_cells) @@ -535,12 +537,12 @@ def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, tau_ netcons = [] for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] - for post_cell_pos in post_pop_pos: - curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) - + curr_dist = [ + euclidian_dist(curr_cell_pos, post_cell_pos) + for post_cell_pos in post_pop_pos + ] sort_idc = np.argsort(curr_dist) - closest_cells = sort_idc[0:target_pool] + closest_cells = sort_idc[:target_pool] picked_cells = np.random.choice(closest_cells, divergence, replace=False) pre_cell_target.append(picked_cells) for tar_c in picked_cells: @@ -595,12 +597,12 @@ def __init__(self, pre_pop, post_pop, target_pool, target_segs, divergence, tau1 netcons = [] for idx, curr_cell_pos in enumerate(pre_pop_pos): - curr_dist = [] - for post_cell_pos in post_pop_pos: - curr_dist.append(euclidian_dist(curr_cell_pos, post_cell_pos)) - + curr_dist = [ + euclidian_dist(curr_cell_pos, post_cell_pos) + for post_cell_pos in post_pop_pos + ] sort_idc = np.argsort(curr_dist) - closest_cells = sort_idc[0:target_pool] + closest_cells = sort_idc[:target_pool] picked_cells = np.random.choice(closest_cells, divergence, replace=False) pre_cell_target.append(picked_cells) for tar_c in picked_cells: @@ -853,7 +855,7 @@ def make_cells(self, cell_type, n_cells): if not hasattr(self, "cells"): self.cells = [] - for x in range(n_cells): + for _ in range(n_cells): self.cells.append(cell_type()) self.cells = np.array(self.cells, dtype=object) @@ -870,10 +872,7 @@ def get_cell_number(self): return len(self.cells) def record_aps(self): - counters = [] - for cell in self.cells: - counters.append(cell._AP_counter()) - + counters = [cell._AP_counter() for cell in self.cells] self.ap_counters = counters return counters @@ -900,7 +899,7 @@ def write_aps(self, directory="", fname=""): time_str = "_".join(time_str.split(" ")) nw_name = self.parent_network.__class__.name pop_name = self.cell_type.name - fname = nw_name + "_" + pop_name + "_" + time_str + fname = f"{nw_name}_{pop_name}_{time_str}" fname = fname.replace(":", "-") if not directory: directory = os.getcwd() @@ -979,12 +978,19 @@ def get_properties(self): except: v_rec = [np.array(x) for x in self.VRecords] vclamp_i = [np.array(x) for x in self.VClamps_i] - properties = {"parent_network": str(self.parent_network), "cell_type": self.cell_type.name, "cell_number": self.get_cell_number(), "connections": [conn.get_properties() for conn in self.connections], "ap_time_stamps": ap_time_stamps, "ap_number": ap_numbers, "v_records": v_rec, "VClamps_i": vclamp_i} - - return properties + return { + "parent_network": str(self.parent_network), + "cell_type": self.cell_type.name, + "cell_number": self.get_cell_number(), + "connections": [conn.get_properties() for conn in self.connections], + "ap_time_stamps": ap_time_stamps, + "ap_number": ap_numbers, + "v_records": v_rec, + "VClamps_i": vclamp_i, + } def __str__(self): - return self.cell_type.name + "Population" + return f"{self.cell_type.name}Population" def __iter__(self): return self diff --git a/ouropy/genpopulation.py b/ouropy/genpopulation.py index 9fc5078..d08eeb0 100644 --- a/ouropy/genpopulation.py +++ b/ouropy/genpopulation.py @@ -112,7 +112,7 @@ def make_cells(self, cell_type, n_cells): if not hasattr(self, 'cells'): self.cells = [] - for x in range(n_cells): + for _ in range(n_cells): self.cells.append(cell_type()) self.cells = np.array(self.cells, dtype=object) @@ -122,10 +122,7 @@ def get_cell_number(self): return len(self.cells) def record_aps(self): - counters = [] - for cell in self.cells: - counters.append(cell._AP_counter()) - + counters = [cell._AP_counter() for cell in self.cells] self.ap_counters = counters return counters @@ -152,7 +149,7 @@ def write_aps(self, directory='', fname=''): time_str = '_'.join(time_str.split(' ')) nw_name = self.parent_network.__class__.name pop_name = self.cell_type.name - fname = nw_name + '_' + pop_name + '_' + time_str + fname = f'{nw_name}_{pop_name}_{time_str}' fname = fname.replace(':', '-') if not directory: directory = os.getcwd() @@ -247,7 +244,7 @@ def get_properties(self): return properties def __str__(self): - return self.cell_type.name + 'Population' + return f'{self.cell_type.name}Population' def __iter__(self): return self diff --git a/paradigm_pattern_separation_baseline.py b/paradigm_pattern_separation_baseline.py index b5f1ca9..296529d 100644 --- a/paradigm_pattern_separation_baseline.py +++ b/paradigm_pattern_separation_baseline.py @@ -99,22 +99,22 @@ def inhomogeneous_poisson_process(t_start: float, t_stop: float, sampling_interv PP_to_GCs = [] for x in start_idc: - curr_idc = np.concatenate((GC_indices[x:2000], GC_indices[0:x])) + curr_idc = np.concatenate((GC_indices[x:2000], GC_indices[:x])) PP_to_GCs.append(np.random.choice(curr_idc, size=100, replace=False, p=pdf_gc)) PP_to_GCs = np.array(PP_to_GCs) - PP_to_GCs = PP_to_GCs[0:24] + PP_to_GCs = PP_to_GCs[:24] BC_indices = np.arange(24) start_idc = np.array(((start_idc / 2000.0) * 24), dtype=int) PP_to_BCs = [] for x in start_idc: - curr_idc = np.concatenate((BC_indices[x:24], BC_indices[0:x])) + curr_idc = np.concatenate((BC_indices[x:24], BC_indices[:x])) PP_to_BCs.append(np.random.choice(curr_idc, size=1, replace=False, p=pdf_bc)) PP_to_BCs = np.array(PP_to_BCs) - PP_to_BCs = PP_to_BCs[0:24] + PP_to_BCs = PP_to_BCs[:24] # Generate temporal patterns for the 100 PP inputs @@ -144,10 +144,10 @@ def inhomogeneous_poisson_process(t_start: float, t_stop: float, sampling_interv neuron_tools.run_neuron_simulator() - tuned_save_file_name = str(nw) + "-data-paradigm-local-pattern" + "-separation_nw-seed_input-seed_input-frequency_scale_run_" + str(nw_seed[0]) + "_" + str(input_seed[0]) + "_" + str(input_frequency[0]) + "_" + str(input_scale).zfill(3) + "_" + str(run).zfill(3) + "_" + tuned_save_file_name = f"{str(nw)}-data-paradigm-local-pattern-separation_nw-seed_input-seed_input-frequency_scale_run_{str(nw_seed[0])}_{str(input_seed[0])}_{str(input_frequency[0])}_{str(input_scale).zfill(3)}_{str(run).zfill(3)}_" nw.shelve_aps(savedir, tuned_save_file_name) fig = nw.plot_aps(time=600) - tuned_fig_file_name = str(nw) + "_spike-plot_paradigm_local-pattern" + "-separation_run_scale_seed_input-seed_nw-seed_" + str(run).zfill(3) + "_" + str(input_scale).zfill(3) + "_" + str(10000) + str(input_seed) + str(nw_seed) + tuned_fig_file_name = f"{str(nw)}_spike-plot_paradigm_local-pattern-separation_run_scale_seed_input-seed_nw-seed_{str(run).zfill(3)}_{str(input_scale).zfill(3)}_10000{str(input_seed)}{str(nw_seed)}" nw.save_ap_fig(fig, savedir, tuned_fig_file_name) # type: ignore diff --git a/pydentate/inputs.py b/pydentate/inputs.py index 18b0ed5..a6aedde 100644 --- a/pydentate/inputs.py +++ b/pydentate/inputs.py @@ -30,7 +30,7 @@ def inhom_poiss(modulation_rate=10, max_rate=100, n_cells=400): rate_profile_as_asig = AnalogSignal(rate_profile, units=1 * pq.Hz, t_start=0 * pq.s, t_stop=0.5 * pq.s, sampling_period=sampling_interval) spike_trains = [] - for x in range(n_cells): + for _ in range(n_cells): curr_train = stg.inhomogeneous_poisson_process(rate_profile_as_asig) # We have to make sure that there is sufficient space between spikes. # If there is not, we move the next spike by 0.1ms @@ -96,7 +96,7 @@ def gaussian_connectivity( pre_to_post = [] # pdb.set_trace() for x in start_idc: - curr_idc = np.concatenate((post_idc[x:n_post_pop], post_idc[0:x])) + curr_idc = np.concatenate((post_idc[x:n_post_pop], post_idc[:x])) # pdb.set_trace() pre_to_post.append(np.random.choice(curr_idc, size=n_syn[idx], replace=False, p=pdf)) out_list.append(pre_to_post) diff --git a/pydentate/neuron_tools.py b/pydentate/neuron_tools.py index 25d77db..4828c56 100644 --- a/pydentate/neuron_tools.py +++ b/pydentate/neuron_tools.py @@ -10,12 +10,11 @@ def load_compiled_mechanisms(path="precompiled"): path defines the full path to a compiled mechanism file.""" if path != "precompiled": h.nrn_load_dll(path) + elif platform.system() == "Windows": + h.nrn_load_dll(windows_precompiled) else: - if platform.system() == "Windows": - h.nrn_load_dll(windows_precompiled) - else: - print("DLL loaded from: " + linux_precompiled) - h.nrn_load_dll(linux_precompiled) + print(f"DLL loaded from: {linux_precompiled}") + h.nrn_load_dll(linux_precompiled) def run_neuron_simulator(warmup=2000, dt_warmup=10, dt_sim=0.1, t_start=0, t_stop=600, v_init=-60): diff --git a/pydentate/x86_64/special b/pydentate/x86_64/special index a97bdd2..265501c 100755 --- a/pydentate/x86_64/special +++ b/pydentate/x86_64/special @@ -15,17 +15,18 @@ from sysconfig import get_config_vars, get_config_var # This replaces the now depricated distutils.sysutils.customize_compiler def _customize_compiler(compiler): """Do platform-sepcific customizations of compilers on unix platforms.""" - if compiler.compiler_type == "unix": - (cc, cxx, cflags) = get_config_vars("CC", "CXX", "CFLAGS") - if "CC" in os.environ: - cc = os.environ["CC"] - if "CXX" in os.environ: - cxx = os.environ["CXX"] - if "CFLAGS" in os.environ: - cflags = cflags + " " + os.environ["CFLAGS"] - cc_cmd = cc + " " + cflags - # We update executables in compiler to take advantage of distutils arg splitting - compiler.set_executables(compiler=cc_cmd, compiler_cxx=cxx) + if compiler.compiler_type != "unix": + return + (cc, cxx, cflags) = get_config_vars("CC", "CXX", "CFLAGS") + if "CC" in os.environ: + cc = os.environ["CC"] + if "CXX" in os.environ: + cxx = os.environ["CXX"] + if "CFLAGS" in os.environ: + cflags = f"{cflags} " + os.environ["CFLAGS"] + cc_cmd = f"{cc} {cflags}" + # We update executables in compiler to take advantage of distutils arg splitting + compiler.set_executables(compiler=cc_cmd, compiler_cxx=cxx) def _set_default_compiler(): @@ -82,7 +83,7 @@ def _wrap_executable(output_name): release_dir = os.path.join(os.environ["NEURONHOME"], "demo/release") arch_name = next(os.walk(release_dir))[1][0] # first dir file_path = os.path.join(arch_name, output_name) - shutil.move(file_path, file_path + ".nrn") + shutil.move(file_path, f"{file_path}.nrn") shutil.copy(__file__, file_path) @@ -96,8 +97,6 @@ if __name__ == "__main__": sys.exit(0) if exe.endswith("special"): - exe = os.path.join( - sys.argv[0] + ".nrn" - ) # original special is renamed special.nrn + exe = os.path.join(f"{sys.argv[0]}.nrn") os.execv(exe, sys.argv)

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 b@eh%4T5|f2j;mA3)0a=AhwQBO>6HIZ32d24 diff --git a/pydentate/x86_64/gskch.c b/pydentate/x86_64/gskch.c index c343fc0..1e19a39 100644 --- a/pydentate/x86_64/gskch.c +++ b/pydentate/x86_64/gskch.c @@ -4,7 +4,7 @@ #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -46,18 +46,31 @@ extern double hoc_Exp(double); #define t nrn_threads->_t #define dt nrn_threads->_dt #define gskbar _p[0] +#define gskbar_columnindex 0 #define isk _p[1] +#define isk_columnindex 1 #define gsk _p[2] +#define gsk_columnindex 2 #define qinf _p[3] +#define qinf_columnindex 3 #define qtau _p[4] +#define qtau_columnindex 4 #define q _p[5] +#define q_columnindex 5 #define esk _p[6] +#define esk_columnindex 6 #define ncai _p[7] +#define ncai_columnindex 7 #define lcai _p[8] +#define lcai_columnindex 8 #define tcai _p[9] +#define tcai_columnindex 9 #define Dq _p[10] +#define Dq_columnindex 10 #define qexp _p[11] +#define qexp_columnindex 11 #define _g _p[12] +#define _g_columnindex 12 #define _ion_esk *_ppvar[0]._pval #define _ion_isk *_ppvar[1]._pval #define _ion_diskdv *_ppvar[2]._pval @@ -144,10 +157,10 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); /* connect range variables in _p that hoc is supposed to know about */ @@ -202,7 +215,7 @@ static void nrn_alloc(Prop* _prop) { static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); @@ -234,7 +247,7 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_dparam_semantics(_mechtype, 5, "tca_ion"); hoc_register_cvode(_mechtype, _ode_count, 0, 0, 0); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 gskch /home/danielmk/repos/pyDentate/mechs/gskch.mod\n"); + ivoc_help("help ?1 gskch /Users/temma/ghq/pydentate/mechs/gskch.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } @@ -253,10 +266,7 @@ static int state ( ) { cai = ncai + lcai + tcai ; rate ( _threadargscomma_ cai ) ; q = q + ( qinf - q ) * qexp ; - -/*VERBATIM*/ - return 0; - return 0; } + return 0; } static void _hoc_state(void) { double _r; @@ -315,7 +325,7 @@ static void initmodel() { } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -349,7 +359,7 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -389,7 +399,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -409,7 +419,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { }} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type){ Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; @@ -448,7 +458,7 @@ _first = 0; } #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/gskch.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/gskch.mod"; static const char* nmodl_file_text = "TITLE gskch.mod calcium-activated potassium channel (non-voltage-dependent)\n" "\n" @@ -519,9 +529,7 @@ static const char* nmodl_file_text = " cai = ncai + lcai + tcai\n" " rate(cai)\n" " q = q + (qinf-q) * qexp\n" - " VERBATIM\n" - " return 0;\n" - " ENDVERBATIM\n" + "\n" "}\n" "\n" "LOCAL q10\n" diff --git a/pydentate/x86_64/gskch.o b/pydentate/x86_64/gskch.o index 51435d4f889ecfdfc728397efeaadfce5c071dc3..8301c21376c20434eb3857a014cfec29a79cf92b 100644 GIT binary patch literal 10944 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×MCpYb5$5tH6?CfXSPcemgh z^6#4DKQPg!O|&u2K*Rn8)-(KnhiSwApE7O4VaSa*{`3EsrxmZhl?zMpCRp4$!KYRM z$vw)vS@NCqe+60yl3>aFS@LuA?*&>?!YsL4yc{dammoRcUp7mAj*iyQ-oAzWrE)39 z*CNzrk7xPc2w}-Ad6K`7p|fbAA~FAYgyr;j3_b6-uu6K*<4S%c^|*eDV(7_H!p~Fa zzruP{N6`$uFO1*z^nycqPbscn;i~>v+NHXRX6UyS>ysZf&^dcu>T{iE`9XSq=uNO5 z)mt>f?nC1uQ>2%H-uhokdtCQ9?L7}YC+l(j=hQm|y_>8@>)=-NehAs*l$@8>!z_ER zW4+Yj?^Pg5UiC5%YsCIdAdbZB&jIg+{8=FW>`&r@^t*v1Zw1o0&jaxlj(rVKh5UXX z5>T}ih-04SPqA)EZ;J7!jPC$x+>d|{VBA^ePcXj1_#NQgu=5QdYGTgUkxYbncVcZQ|2YxrO6n6bgZvetCdlS?50O5yy8PnxJl+j+o^vAfr5Pbzm z_WpzE(?F`*4}cWcJ|M;UF!R?kemrc+`U@cWu^&i&gn;Dd2Bxo|NDqR31xWIj zfu#QooFV%Mfh2DQHe%jJpc7aJr1~ynemV2!1Mz3Sj=`k=9+32Z0>q#FADI8Q%%^iB zs`Fvs8t8oqh^=Ig0I`?rwlVDnt^(ZzydCn@%)bv<3;sR8KLLLk^X~vQfNup-sO3Q1 zBkSe^E1~y0Olkvu0>oGL_Fn++hx{@S-?7^-0m+YdfDZ7_GJS$+I`|>^-!uJnrs>{B z`d?)_%k-Z!J<4>H=>gzM=+hSiWbYB+3ea@VCBMDQ-w3=9{0+=+VtyU)Pr<(zh*uH& zUCjRs5NBs~R^TFZ%b8Da8ZPjEuL%40DIk8@PkRP~3yS zdf43s#JH+2GQXSo?abfA{Ef_~@5D(TYfsq0nh|!8JHbb;1Rr~eS`0Z8Ncq9M3&(apcDmEQoFVyPSt% zjA-Nc96Ol4f}p7lF-^appw`3mO{P;sW1*?I`B3{Iins(k<30H~lH=Nm#YK(I!HG8B zgTKSH8%3i=`%cK=6SXwiqdxolXRt$Z<30B#L_(huiS{{ML>uq1calE*8)N^L5Dj}a zw)a0|AM&Ftr}a*9C(FY`Lq5s!#pEC48p}5`?PgkI`<+aWu)Th!`#3+wd-NBW9>XT4 z=H&Q{_v9O}Pxk_&9UvMT*!X?W?HFGmR_2-L%@|lHzaK;)ecmMhnMwYv$)3|BKVXtm znhNc|Xp(>5BtKxHSD5rWP4X(!{4`hLd>@(QpEuDfkl#Z6plQBl6HU*-LjAKQ`WvSC zCrvb-QAOh~nEaueZlQf8Fq8-dQhFvik{;Tt1d@q825T@7$0==8{!lIuh{PkAXe6CU z*9Qh7sdNTE*-C_U{H$ywjy@luxQDYi?$Kd?Fdj)m z6Ng89>>d!FQd$B<9GtQhGsIC`G3&8lD6uQgO6iS>luRX(fpp|?T_zV~ERg{riYdI~KAq4>9n2pfZ!-Imq&U-M!@SZ4 zB2hg~KZz5jFi3n`fusFFX5~W*jbiOd+relw5z4!g3}DPiEHDQ*XfSC~tb&1&IL6`o s3{)XBq>t*LNHiKwjO>!#bV&B&x*mqtF|cKn(lt<=CiEW1(U_wAFJ||Xy#N3J literal 15496 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 diff --git a/pydentate/x86_64/hyperde3.c b/pydentate/x86_64/hyperde3.c index bf24787..2ebadab 100644 --- a/pydentate/x86_64/hyperde3.c +++ b/pydentate/x86_64/hyperde3.c @@ -1,10 +1,10 @@ /* Created by Language version: 7.7.0 */ -/* NOT VECTORIZED */ -#define NRN_VECTORIZED 0 +/* VECTORIZED */ +#define NRN_VECTORIZED 1 #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -34,56 +34,95 @@ extern double hoc_Exp(double); #define states states__hyperde3 #define trates trates__hyperde3 -#define _threadargscomma_ /**/ -#define _threadargsprotocomma_ /**/ -#define _threadargs_ /**/ -#define _threadargsproto_ /**/ +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt /*SUPPRESS 761*/ /*SUPPRESS 762*/ /*SUPPRESS 763*/ /*SUPPRESS 765*/ extern double *getarg(); - static double *_p; static Datum *_ppvar; + /* Thread safe. No static _p or _ppvar. */ -#define t nrn_threads->_t -#define dt nrn_threads->_dt +#define t _nt->_t +#define dt _nt->_dt #define ghyfbar _p[0] +#define ghyfbar_columnindex 0 #define ghysbar _p[1] +#define ghysbar_columnindex 1 #define ghyhtfbar _p[2] +#define ghyhtfbar_columnindex 2 #define ghyhtsbar _p[3] +#define ghyhtsbar_columnindex 3 #define ghyf _p[4] +#define ghyf_columnindex 4 #define ghys _p[5] +#define ghys_columnindex 5 #define ghyhtf _p[6] +#define ghyhtf_columnindex 6 #define ghyhts _p[7] +#define ghyhts_columnindex 7 #define ihyf _p[8] +#define ihyf_columnindex 8 #define ihys _p[9] +#define ihys_columnindex 9 #define hyfinf _p[10] +#define hyfinf_columnindex 10 #define hysinf _p[11] +#define hysinf_columnindex 11 #define hyhtfinf _p[12] +#define hyhtfinf_columnindex 12 #define hyhtsinf _p[13] +#define hyhtsinf_columnindex 13 #define hyftau _p[14] +#define hyftau_columnindex 14 #define hystau _p[15] +#define hystau_columnindex 15 #define hyhtftau _p[16] +#define hyhtftau_columnindex 16 #define hyhtstau _p[17] +#define hyhtstau_columnindex 17 #define hyf _p[18] +#define hyf_columnindex 18 #define hys _p[19] +#define hys_columnindex 19 #define hyhtf _p[20] +#define hyhtf_columnindex 20 #define hyhts _p[21] +#define hyhts_columnindex 21 #define ehyf _p[22] +#define ehyf_columnindex 22 #define ehys _p[23] +#define ehys_columnindex 23 #define ehyhtf _p[24] +#define ehyhtf_columnindex 24 #define ehyhts _p[25] +#define ehyhts_columnindex 25 #define Dhyf _p[26] +#define Dhyf_columnindex 26 #define Dhys _p[27] +#define Dhys_columnindex 27 #define Dhyhtf _p[28] +#define Dhyhtf_columnindex 28 #define Dhyhts _p[29] +#define Dhyhts_columnindex 29 #define ihyhtf _p[30] +#define ihyhtf_columnindex 30 #define ihyhts _p[31] +#define ihyhts_columnindex 31 #define hyfexp _p[32] +#define hyfexp_columnindex 32 #define hysexp _p[33] +#define hysexp_columnindex 33 #define hyhtfexp _p[34] +#define hyhtfexp_columnindex 34 #define hyhtsexp _p[35] -#define _g _p[36] +#define hyhtsexp_columnindex 35 +#define v _p[36] +#define v_columnindex 36 +#define _g _p[37] +#define _g_columnindex 37 #define _ion_ehyf *_ppvar[0]._pval #define _ion_ihyf *_ppvar[1]._pval #define _ion_dihyfdv *_ppvar[2]._pval @@ -110,6 +149,8 @@ extern double hoc_Exp(double); extern "C" { #endif static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; /* external NEURON variables */ extern double celsius; /* declaration of user functions */ @@ -135,7 +176,7 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { - _p = _prop->param; _ppvar = _prop->dparam; + _extcall_prop = _prop; } static void _hoc_setdata() { Prop *_prop, *hoc_getdata_range(int); @@ -153,7 +194,13 @@ extern void hoc_reg_nmodl_filename(int, const char*); 0, 0 }; #define vtrap vtrap_hyperde3 - extern double vtrap( double , double ); + extern double vtrap( _threadargsprotocomma_ double , double ); + +static void _check_trates(double*, Datum*, Datum*, NrnThread*); +static void _check_table_thread(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, int _type) { + _check_trates(_p, _ppvar, _thread, _nt); + } + #define _zq10 _thread[0]._pval[0] /* declare global and static user variables */ #define usetable usetable_hyperde3 double usetable = 1; @@ -184,7 +231,6 @@ extern void hoc_reg_nmodl_filename(int, const char*); static double hyhtf0 = 0; static double hys0 = 0; static double hyf0 = 0; - static double v = 0; /* connect global user variables to hoc */ static DoubScal hoc_scdoub[] = { "usetable_hyperde3", &usetable_hyperde3, @@ -195,10 +241,10 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); /* connect range variables in _p that hoc is supposed to know about */ @@ -241,14 +287,14 @@ extern Prop* need_memb(Symbol*); static void nrn_alloc(Prop* _prop) { Prop *prop_ion; double *_p; Datum *_ppvar; - _p = nrn_prop_data_alloc(_mechtype, 37, _prop); + _p = nrn_prop_data_alloc(_mechtype, 38, _prop); /*initialize range parameters*/ ghyfbar = 0; ghysbar = 0; ghyhtfbar = 0; ghyhtsbar = 0; _prop->param = _p; - _prop->param_size = 37; + _prop->param_size = 38; _ppvar = nrn_prop_datum_alloc(_mechtype, 12, _prop); _prop->dparam = _ppvar; /*connect ionic variables to this model*/ @@ -275,15 +321,17 @@ static void nrn_alloc(Prop* _prop) { } static void _initlists(); + static void _thread_mem_init(Datum*); + static void _thread_cleanup(Datum*); static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); void _hyperde3_reg() { - int _vectorized = 0; + int _vectorized = 1; _initlists(); ion_reg("hyf", 1.0); ion_reg("hys", 1.0); @@ -293,15 +341,20 @@ extern void _cvode_abstol( Symbol**, double*, int); _hys_sym = hoc_lookup("hys_ion"); _hyhtf_sym = hoc_lookup("hyhtf_ion"); _hyhts_sym = hoc_lookup("hyhts_ion"); - register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 0); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 2); + _extcall_thread = (Datum*)ecalloc(1, sizeof(Datum)); + _thread_mem_init(_extcall_thread); _mechtype = nrn_get_mechtype(_mechanism[1]); _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 1, _thread_mem_init); + _nrn_thread_reg(_mechtype, 0, _thread_cleanup); _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + _nrn_thread_table_reg(_mechtype, _check_table_thread); #if NMODL_TEXT hoc_reg_nmodl_text(_mechtype, nmodl_file_text); hoc_reg_nmodl_filename(_mechtype, nmodl_filename); #endif - hoc_register_prop_size(_mechtype, 37, 12); + hoc_register_prop_size(_mechtype, 38, 12); hoc_register_dparam_semantics(_mechtype, 0, "hyf_ion"); hoc_register_dparam_semantics(_mechtype, 1, "hyf_ion"); hoc_register_dparam_semantics(_mechtype, 2, "hyf_ion"); @@ -316,13 +369,13 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_dparam_semantics(_mechtype, 11, "hyhts_ion"); hoc_register_cvode(_mechtype, _ode_count, 0, 0, 0); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 hyperde3 /home/danielmk/repos/pyDentate/mechs/hyperde3.mod\n"); + ivoc_help("help ?1 hyperde3 /Users/temma/ghq/pydentate/mechs/hyperde3.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } static double FARADAY = 96520.0; static double R = 8.3134; - static double _zq10 ; + /*Top LOCAL _zq10 */ static double *_t_hyfinf; static double *_t_hyhtfinf; static double *_t_hyfexp; @@ -342,31 +395,32 @@ static int error; static int _ninits = 0; static int _match_recurse=1; static void _modl_cleanup(){ _match_recurse=1;} -static int _f_trates(double); -static int rates(double); -static int states(); -static int trates(double); - static void _n_trates(double); +static int _f_trates(_threadargsprotocomma_ double); +static int rates(_threadargsprotocomma_ double); +static int states(_threadargsproto_); +static int trates(_threadargsprotocomma_ double); + static void _n_trates(_threadargsprotocomma_ double _lv); -static int states ( ) { +static int states ( _threadargsproto_ ) { trates ( _threadargscomma_ v ) ; hyf = hyf + hyfexp * ( hyfinf - hyf ) ; hys = hys + hysexp * ( hysinf - hys ) ; hyhtf = hyhtf + hyhtfexp * ( hyhtfinf - hyhtf ) ; hyhts = hyhts + hyhtsexp * ( hyhtsinf - hyhts ) ; - -/*VERBATIM*/ - return 0; - return 0; } + return 0; } static void _hoc_states(void) { double _r; - _r = 1.; - states ( ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + states ( _p, _ppvar, _thread, _nt ); hoc_retpushx(_r); } -static int rates ( double _lv ) { +static int rates ( _threadargsprotocomma_ double _lv ) { double _lalpha , _lbeta , _lsum ; _zq10 = pow( 3.0 , ( ( celsius - 6.3 ) / 10.0 ) ) ; hyfinf = 1.0 / ( 1.0 + exp ( ( _lv + 91.0 ) / 10.0 ) ) ; @@ -381,13 +435,16 @@ static int rates ( double _lv ) { static void _hoc_rates(void) { double _r; - _r = 1.; - rates ( *getarg(1) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt, *getarg(1) ); hoc_retpushx(_r); } static double _mfac_trates, _tmin_trates; - static void _check_trates(); - static void _check_trates() { + static void _check_trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { static int _maktable=1; int _i, _j, _ix = 0; double _xi, _tmax; static double _sav_dt; @@ -400,7 +457,7 @@ static void _hoc_rates(void) { _tmax = 100.0 ; _dx = (_tmax - _tmin_trates)/220.; _mfac_trates = 1./_dx; for (_i=0, _x=_tmin_trates; _i < 221; _x += _dx, _i++) { - _f_trates(_x); + _f_trates(_p, _ppvar, _thread, _nt, _x); _t_hyfinf[_i] = hyfinf; _t_hyhtfinf[_i] = hyhtfinf; _t_hyfexp[_i] = hyfexp; @@ -419,15 +476,18 @@ static void _hoc_rates(void) { } } - static int trates(double _lv){ _check_trates(); - _n_trates(_lv); + static int trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _lv) { +#if 0 +_check_trates(_p, _ppvar, _thread, _nt); +#endif + _n_trates(_p, _ppvar, _thread, _nt, _lv); return 0; } - static void _n_trates(double _lv){ int _i, _j; + static void _n_trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _lv){ int _i, _j; double _xi, _theta; if (!usetable) { - _f_trates(_lv); return; + _f_trates(_p, _ppvar, _thread, _nt, _lv); return; } _xi = _mfac_trates * (_lv - _tmin_trates); if (isnan(_xi)) { @@ -490,7 +550,7 @@ static void _hoc_rates(void) { } -static int _f_trates ( double _lv ) { +static int _f_trates ( _threadargsprotocomma_ double _lv ) { double _ltinc ; rates ( _threadargscomma_ _lv ) ; _ltinc = - dt * _zq10 ; @@ -502,12 +562,20 @@ static int _f_trates ( double _lv ) { static void _hoc_trates(void) { double _r; - _r = 1.; - trates ( *getarg(1) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + +#if 1 + _check_trates(_p, _ppvar, _thread, _nt); +#endif + _r = 1.; + trates ( _p, _ppvar, _thread, _nt, *getarg(1) ); hoc_retpushx(_r); } -double vtrap ( double _lx , double _ly ) { +double vtrap ( _threadargsprotocomma_ double _lx , double _ly ) { double _lvtrap; if ( fabs ( _lx / _ly ) < 1e-6 ) { _lvtrap = _ly * ( 1.0 - _lx / _ly / 2.0 ) ; @@ -521,11 +589,23 @@ return _lvtrap; static void _hoc_vtrap(void) { double _r; - _r = vtrap ( *getarg(1) , *getarg(2) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = vtrap ( _p, _ppvar, _thread, _nt, *getarg(1) , *getarg(2) ); hoc_retpushx(_r); } static int _ode_count(int _type){ hoc_execerror("hyperde3", "cannot be used with CVODE"); return 0;} + +static void _thread_mem_init(Datum* _thread) { + _thread[0]._pval = (double*)ecalloc(1, sizeof(double)); + } + +static void _thread_cleanup(Datum* _thread) { + free((void*)(_thread[0]._pval)); + } extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); static void _update_ion_pointer(Datum* _ppvar) { nrn_update_ion_pointer(_hyf_sym, _ppvar, 0, 0); @@ -542,11 +622,8 @@ static int _ode_count(int _type){ hoc_execerror("hyperde3", "cannot be used with nrn_update_ion_pointer(_hyhts_sym, _ppvar, 11, 4); } -static void initmodel() { - int _i; double _save;_ninits++; - _save = t; - t = 0.0; -{ +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ hyhts = hyhts0; hyhtf = hyhtf0; hys = hys0; @@ -557,23 +634,25 @@ static void initmodel() { hys = hysinf ; hyhtf = hyhtfinf ; hyhts = hyhtsinf ; - -/*VERBATIM*/ - return 0; - } - _sav_indep = t; t = _save; - + } + } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + +#if 0 + _check_trates(_p, _ppvar, _thread, _nt); +#endif #if CACHEVEC if (use_cachevec) { _v = VEC_V(_ni[_iml]); @@ -588,10 +667,11 @@ for (_iml = 0; _iml < _cntml; ++_iml) { ehys = _ion_ehys; ehyhtf = _ion_ehyhtf; ehyhts = _ion_ehyhts; - initmodel(); - }} + initmodel(_p, _ppvar, _thread, _nt); + } +} -static double _nrn_current(double _v){double _current=0.;v=_v;{ { +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { ghyf = ghyfbar * hyf * hyf ; ihyf = ghyf * ( v - ehyf ) ; ghys = ghysbar * hys * hys ; @@ -609,12 +689,14 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; #if CACHEVEC @@ -630,7 +712,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { ehys = _ion_ehys; ehyhtf = _ion_ehyhtf; ehyhts = _ion_ehyhts; - _g = _nrn_current(_v + .001); + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); { double _dihyhts; double _dihyhtf; double _dihys; @@ -639,7 +721,7 @@ for (_iml = 0; _iml < _cntml; ++_iml) { _dihys = ihys; _dihyhtf = ihyhtf; _dihyhts = ihyhts; - _rhs = _nrn_current(_v); + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); _ion_dihyfdv += (_dihyf - ihyf)/.001 ; _ion_dihysdv += (_dihys - ihys)/.001 ; _ion_dihyhtfdv += (_dihyhtf - ihyhtf)/.001 ; @@ -659,14 +741,18 @@ for (_iml = 0; _iml < _cntml; ++_iml) { NODERHS(_nd) -= _rhs; } -}} +} + +} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; #if CACHEVEC @@ -679,14 +765,18 @@ for (_iml = 0; _iml < _cntml; ++_iml) { NODED(_nd) += _g; } -}} +} + +} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; _nd = _ml->_nodelist[_iml]; @@ -705,15 +795,15 @@ for (_iml = 0; _iml < _cntml; ++_iml) { ehys = _ion_ehys; ehyhtf = _ion_ehyhtf; ehyhts = _ion_ehyhts; - { error = states(); - if(error){fprintf(stderr,"at line 83 in file hyperde3.mod:\n\n"); nrn_complain(_p); abort_run(error);} - } }} + { { states(_p, _ppvar, _thread, _nt); } + } }} } static void terminal(){} -static void _initlists() { +static void _initlists(){ + double _x; double* _p = &_x; int _i; static int _first = 1; if (!_first) return; _t_hyfinf = makevector(221*sizeof(double)); @@ -731,8 +821,12 @@ static void _initlists() { _first = 0; } +#if defined(__cplusplus) +} /* extern "C" */ +#endif + #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/hyperde3.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/hyperde3.mod"; static const char* nmodl_file_text = "TITLE hyperde3.mod \n" " \n" @@ -838,9 +932,6 @@ static const char* nmodl_file_text = " hys = hysinf\n" " hyhtf = hyhtfinf\n" " hyhts = hyhtsinf\n" - " VERBATIM\n" - " return 0;\n" - " ENDVERBATIM\n" "}\n" "\n" "? states\n" @@ -852,9 +943,6 @@ static const char* nmodl_file_text = " hyhtf = hyhtf + hyhtfexp*(hyhtfinf-hyhtf)\n" " hyhts = hyhts + hyhtsexp*(hyhtsinf-hyhts)\n" "\n" - " VERBATIM\n" - " return 0;\n" - " ENDVERBATIM\n" "}\n" " \n" "LOCAL q10\n" diff --git a/pydentate/x86_64/hyperde3.o b/pydentate/x86_64/hyperde3.o index 347665f40f4859ff7a21ad74dd8e6e20f5fc397c..24da16e150643a8b91cb1ec56ee166b33788591d 100644 GIT binary patch literal 20656 zcmdU13v?URnVvix91|nC#neDmE+K#%{8B=mCD_82k%(ivv6DEPG_oR(A`v}|BpZh; ztyvQqAreCAw$R6}TlN&_>tx&0ZrY{b1PTdl!B7hH1x_DqLfR72HiWj2{r-FZ8I8uK zq37(`Jv%4TcmK!z?|=XM-^XaidHT=4d;2U+n>Itk7d|ubX(B@4gX?^J4o;WFDZiF2 zR_tD?gR6IuLfF*kQ>sWU7|iNJStbC%V7ITQyFeSIN@@@n*&|=ZmTKBM<=8OsjVl<8 z$Fh1l6o;HHyS*y5{)hlY09T{Dq z#$(v0X_ZP;Cq8t+MfoASl-3vH^Y>nB{JGzF*Ll}^*Lb_TI)_)B#-%xS z{0Md)IWkMrj*vlr4lVz`W;|X(9h>Igwc-j)v=a_z$%Tln>fEjs7c%cG3-4^^{o#ED zy|*q@bze4kZM$k;1FtRjnl(;syDmK}x&KwnUGXEyJzdOQ^n~QTVdcV48TVaswes(h z8R*|tPRzDlaxmHyb^Y|~+1|)w&POQgA1=ig8++6kIlEwnKfl7%Q={uwjpd$@b@S|i zZ24iTKAG(~Ihpq`C2kR0cA=OPz+zC$nO)3z_%c}e&YWUXo|A34S1r|~S2h;4Ze!8x zXv_W5T9FnC8;fFUV15Vy$vR=Jh)Io#MJ$@h#Vj5H&$FIGKF^q} zK4l^pl6$a+SQ_E#lR5s8$4WPNH+nzp-Q*2^_$b=dB94o0CDi2nU)$x+{Y8zqjJ!Yh zQ)$JqZp=}kIVzf*{#>*3iRL*pEUZU^W9S8Pk3*pfIYlOwdpYFZ6P}abF;mB%Z*~T9 zvk3enV^x7%Yblon%FcIFxfM;AwS}d&`(4#;u+&~^sonIhYWppw50^xIS^Y8!V4F8OEy~oP@`E%Ox z@82KDzc-M7|5zYDXFqDs_2(-h4(A6WFrRUv^o>0j7ozSSMFASqVR~dQ%KrR^s>q8A z@Ky1deTvfn;yu5GS{c;xV~Xh~wYj8r-$8I7xldql;b_m{h-3ZR>f?Uygk$6Q3CH>u zB3{S2kK)Vyr-))i=zd-jCh*!zbkrR%d*AR>KC)5{e zzXTJNFG1lk7~W4cehoXBCY07cj=H}>6{-ezE57W8L+EBjrh!`j0g4-slBM4h^UKHK zHVi#QEggil=i$dm5SyMs6r8Z}9(-Ph9pJ|8ev-Ti3C5#mIo0_SM9U!>AwwkH4`~ym z)6qud?;u53H{N%OrH3Kyfs|s_^Lt3=BBIUEcjn1Y7})qjvT_I_$$@?;SyP6b&B(Y9 z2@6BE3*J&Ik6QER1D)VaL&a&x5y!3Hdh7J*KzI)F_0UH?j1)zhuEkvB6s_`%9lNqf-=9CvpFj72KfhWa*$$vHx5&=0+cI1CXW#4F z@w4o6$kbuZRR6JOXpS_g^~N}F_(y(Qm2YkE=X?iuj5&6nho}T{e+=Z__QMfy$J_EB zar->KJNkkgxr=aO3*=|cyDmTTh(C{F+dO9=-#xGDy8Qc(UYDQqD!ie*9HG4Q=MfGk z;#rYbdG4(;XqDyO27?}xA@uqUn$p{!d$}$5wy{2A3XRb12XJL4zPftx^_e}=E9ZTq z5;uMyIeswW=mA#bSvKO7wKhHn**Ijt3ONS@r@z;>EO9V;h7rY=<qemeJ49~h?#7M&M{Nkq0@}?M@3a0GK~4|&pq$YJ*h%S%U_CEXxM=2X3iUM+*EGfRJmcsxDlZ>2-l`DKB4=WalDZkWbS@M z)$_BW^%woavY2}fixV__`FTQ?`hqHVW3}TBq z2zJFTwV=6KX~qSc>lZ8S7>3KHUWHXpt#gLnPK#dUQ6vpw|D@S)6>P!-rw_*{ z8EbTEW|idh+BrMO%SlXX&Cc}o+d0x*JJZ)Qi4(PRc2KV;G0AN^(>G-2?4Z6EF=?2P zj0gN9kCysx`3v1uJ9b?8_UY5q<5t?CR1iSToM%w>72mpF<8(<=gi_&1Aa@dro7o<1 zcs=DG#pFfCGdfF%mctgv&q6Jksu`)%<2wSylC_ek@J*P5yHSa8n%r~{RaSOVK6Vu9 ztS`9^1grOy)Jlo7e1$}+(o?=nmMd2FQ=%3uPnYZ-(=v`o&XP*SRNgp2n3jK3N_}yb z&yX6*@@dJdSUE&h|11ga$Sx(ZGDk|BkWjthRi=^VkfZ=cGT6yJq|>gS<5CI&n++2KFRw##vH>X2|4G(k$#>7IXf5 zkMr1c&(HjM^>0-IQP^WGKAK%_<1N;3vI^bB zQfS`)(|ZHTS(lzdf+3zpOdB?k+)=)4~m-B$C0=`6V&Rn@TC{ipLFtq@gc zY8NyR+bxU)gGgy%2&pXIXiSYVa$L(LinFE?*pbj`j9)uoBl{IM1F*1Nt$_Yo! zfr#Uk1AlP5G6oCd{=EEI%6|`Ubo7&mhLyPWjzS-=Cy0l?Cda{C!w*YU=`KKS~xt2TEw?)u#~N8fmS@72tIMBxPE@kT{&8e@6mLV2Cf^t>j; zFI70Umg(b-Kl}k*>zLNYRK1!e#jkCWyVDm}HQjmOPwtI(zS=11PwK4S&Gy!?{#rxt zkx$=?>->f$Wp7E7qFGzej7(?4fC%6Q7AXXu}Gkx`l&&$r3v+vsIBI$)#M+h}_$#qAF_ z+T}*Pqin~ByFnZAH)vxV4B8k6gEq#)pp9`cXk&Z~+8C#PZr>O$gEq$HMwT1nW6;Jp z8MHB825s+ebX!D=Zp+{k%~C0vrE(+~OC^cV2$@-8o*wTPjUEx*)~~1g^o62+O-4^= z>a%(x5vt!3y`jE;Tc4iHhO&BnLJvnX^@e6$BGp%>EvZ{l*MJsOZEXwM+#E^=t&EJF z0WT)ACTT^AjTBMT4{HM#JsrqnYftK(p z$Y|kEGMUPX&ALG2ed5MgHY%FecC`4kzbjR=?m%~&&&)H*9wEv^S#!s#RlfG_vgW9s z6f0|lHy!GWi9n6$j;4~Ly+-)9L^p@xwccog1gmPqH6gstAiDpdMs%g(=-W*quv~N^ zX=9lzGBv)f47OvDnBG?wtqn)vz8=qrPz0~J2zt39t`CWbzBwI>>msAaZW>7I83>Yt zdO9nzQIlDV*DnUbu%ahnB&;W3T%;mpv1By1IhMuD64{jMkUkWSVO(N(mu6d?Xb)v! zQ>@baV&Pa)uMtb!3#&zcf1Oyk&{Ml`;gTA$prOH2SLTMJdK@pKh|SwXAl?_-no|9* z5ixYKFV-{=j@9XX1Jz}H=v*i+FctgKXge$dQNeu^ThRzu84*dP#pV>o$KNeN$v)AX zN@mlkILh%@A{5V*`Py5Ic#E<%?SbwtvAs<2V(s&2)SHcHXFT)htiVosh4jT5i?1~g*zEarlfJGt>U_9PgQ~1K%!tUiF&Qx z)!r8GdQ@Guc+r9e;SQ$;;^40aXKCF+&%!HbyRQdJukX{hG*_41jFf5=u_OjN5(?|0 ztlhU}bw|6{F3P&rw6+F%%nU>Tx_kkMuqKGrK5vWAskCl&pxY;C4H0X-ZNBzqpYRkk zGp1&ypqZIU6SLUVrLt+4h$$>%3A5;1tdpRizuMb=txpJAXKUy?BfnvjF;k{Acp+9g zSZxipLXj3+R)#UGc{PXxt#pL6en}c=Dxnn?!zZ(3sDdXeQRtAruq6j0(B9(fMBZVJ zi|tv_y1HYPXb{~U!qdLy!6}YzD*J5@Qy+9|G^A9Q+eVqDc6Rq56jj=- zpfJdBk~0LoL)-W!7Di5aD$(R94Y)v@n`s0%#+|D>ntd&6RvSTgSBvelmp5ZO9l#JM zEio8M$LMsD5eY0FHF6J18dFyY)4|!xr9&d5_FEogF(@naW$VnH$1I>D()WnCf;xqC zneSGes|6G`B(slFkFtsMs5j7~5DGP7(ijDR%mG;uC8dgjscgoCl?|&ZO0bIp@`DDZ zt)m%Zaf7FUA}0@8Wre^=8pDIVNE9MRT-k5z+wy>tM8uKt6dW@!g@~xY8Q;sBL-Dvs z;cy}%=~P1aJDTZC5=-KU5Q@ic(ou|%B^+_Gbj}zoSW>=HXzyO#(I))384!4bH8vQMholVF z1wCP|CM$&ShL92bo6?D;ODti4o(jZ*g>?(ak;Rh&;ZcDocEbq98QpltSlHa)Xe?N; z1Y0fzq@ixfd^s2xgZXZZ$kK+oE8)4PdK2~;xs98vg*oT{kF$QZN_R|xFlTtT_ZoRW zQaIBXC0Y&W@PiTH5{(3NWC`oAT2&O2B1t7$8JNQ*iXC%M!n&*uL!vKRBaC?^k3_W| z9B!?rq6G^YjHzhMb}N?6HkK1CrgVRX8yNEj2=hu0V_oi3s{+;)ECdm{f8(3Ss91ps zhF&ZenUv^DB`?p?T-3vAL58bX%i{xB$g!H>&JUv)#$Co1tQIMJ(>DF?}^<*HQUr$-HkhBb#v8#-qJl-DiKSDvbftyMdUIs z^c#|y!qSRZyCb2^8TU{AdhKGEGJ9==LAHa=Z<~+RuvS339uvrr-i))Zj=jQU z7y_f(P`w+$Q;pOLkEN!ZgzA*gUPkZ2nAaP481YOG{Zwze@MMH8KO`4x(>wkn zsm5oN9+BZ%h0j#-<18PAe5(HK;lFpe0rIKF*NK;Z>AGFPr2dVveBL|A$64+}9!+Kc zTvbn-cGGHY+K_XabIw_%d(cV^`1lJ4O?yiH@=p0HFYh_d+om^{&$@2ptUG4yD%m~r zPAQ@G+wd8GM(I;N%gfMj9+|ltnxsd6Ms@00rAK)!FGJ5aB5ji1XYm>SvC@kxE&Op2 zx6d^B`4~P2S&#BuUWVSPVn0d$kN6yUUfHF*m)AS!lOOY-^WqCipXPzQ4E<|H3jK%P z1ncp9nB=eQKlBd13%$=mZ!hc7{CKB!AA@Y)i^@NqCsVfjTj-6l9?zF4_0GkZ+{1c2 zZzkzc9It}j1nbfKDe})2cj|W>I=w$re$sp@(!aKlAD@7p`xi=&=2elNC66A0UMK5~ zvYMG6mT~zt^bWEf%`cO|@setn=i8)yQ$MbR-cHsdT3&`dCW*fhdV5%p z=AXO_y?|3=m7MYXcBVv#S+|CEVo!;w2K-`9M7Cbj<|9r0ci% zQ=^%{=YVL=^#~B%b$tnl5W7ANB>Ooa*&hIs{Sc7scLK?NBarN00VMku0LlI=AlW~0 zp0a-!NcP8pWdA=EUHJ{*2Q{tsZl?20Z)G~nbSu+WGkrM_epj9kL{8QI5^tK2zYhb+ z-%kO_-+mzZ+Xf_m-9Ykp8j$?`1r{>$_gg^n_f817jEC)r^aQ zq&JW0Dn=(`Da&UteG&^7wR4#9CqSzIG}8wdzsdL@?zma&S_$?{oDzln1J`THuc3+?`f>0dDZnDG#BDMI@RU^U`-8}M@AdLZR_ z3y|`B0g&?C1*AML1(pI&;tz8v&wmZ1JbxNUdH!7><@p0Z%JaK{@W*uvkn%jN=*kU1 zipvL?UdZ%&nLeB8-($m~{=5Q|aR*Yq?gvtSe2(S+45WE;E0E?*8tB%vgwD7INd0XG zQh$BSUks#vR{|FTUqa`pz2||{-s4O^%($2F-+<)D2=FTCeFTX9SKi1N2h#lL0j>r% z0Wn0bWlUerv|ze|=`yBIA@~Tj>vbU2f0^kQnLfny0jBo?5i-|MKex|Qtx*E6~?Y|F5^X`vGhGn211g=3mM}Rc1Z$)wtJr_uH6_P~C5fqB& z0Fda5fbEc%1KWV5K#I#@Bn|PO1`_{CAoc$~=HJEqJAl;B2=lv{-vOllc!8a$es4eFk_90dDY0@F`2{TS2#!Suf~P3I@7|9PMf_CC(^9l$2g z9|KZchM9j8&8;S1|u# zApX?fbpi9~Y`6$^%7OUvQr9fzQ}V3>|1Vg4u%x?Q2U7n25=i^Wi%fqH*bV+eKy3N0 zZvrcUUjt$*cHIxe*611qV(W6<3nY6V2U7m#fsLp?0;G8SBarfUfcXjLM}U;SLFUu{ z!9e<*K+4|$^S#Vp4h+EVA|Sd_S(5ylBd$}iFzXFSL_#<-7h zFXID@lxI}$9>zV4{fs@p2BcCa({x{354wrzrNBDS4NSX%wV(ylRX`7DC)1}8JnVnx z90yXnFEWlZ9%LM2+{^d?<0vDIKh@vExRY_1afq>>G0ND>*u&V#=x1EY*udy!6pU4j zPR3!354tAvfRM(Ukj9me#*c6UUxZ_fqm09hy^Kwaf>C3fKzk_88e<$~9A@lgY+@9Q z09lXvdk!YXQY?aWRbl-m`b8{ebkRCb^aRsypfRG4Fg+dpAo@7dHK;@MDWD$@I%?zl!NsnHEfAEtK}$Ow;RX)LsMAH?Tjw-2MipqfBpSx}RyC=^>_R zKRE{r!CwAixpkt+}~ktZwu2q znI2|+e zvHW)K|6Zm?Sw6;eCDn)iL8cp-9%uSFZr}Jlauv5Xip`O(Ql^dH8y7Hb{Jz-1@icx< zOtU@X_rupAcc6}OeHwBHKF0s^b34(H8^5Q%41J5b_LPmL^Nm&h4H&l4ClL=T{Vf|! ze}7_?-vz=-)9;2>`aWCzYMVT5legIXp>wCz9-SYo^kJKRgH8V-oBW5i`ee&$?`t;y zT5R+VTm3DFzqS4vTl;<+Eo}N_HhR6y{-}+{nX0J0yKVkmW3#6P@dPTE*0cQsndp!f z>`&c@|5GW87aZw14;R%#A13HglgU?vGO;C?#QS-1^&f5pgY-~6j<@hKb-_q1oynpO z-rmE1*EEo%ayFXQLw&)7o{*a0grjK z-r)_({`7~^34_7TDJ8r)XVWU;pwDG=j2lqmWU`9{i#Ra^Fs09O64H_Pqi>!r3m(? zQy^o5kVWxkG$f=ZAGlE&uM%grC1eQ=o8^dE!ZSxM)63GKWGn;iw9Z3HJk{_PJc&(j zK}!e$#IRThZ%{p?oy0CMjCXz&$9UD54aorEp)71t5q=g3dctk;6;Tvo>V7bT_eRt> zflQ>bOu%JicQ~5GyA7~WD6$2fEfKs{o2374%%17U3E43-0P?lvbSSw6x{Bq zgP2~hVhoMSy@FZ!8nnUGY4lQI<+i0LJA{S?62U3BA%jT`BM&13NtnQ6@?bcGX^IS1 zJ`MJz1~#i=CalUyU6+#`Z0R-+2`IB9v!?K7HQD9I@5bBmYSd|Aq1@tE=y~#4Ir34z al_9eQZwF1{$q7G+dwnRJ+HB!sP5p0mtOAJu literal 29592 zcmeHveRN#KmFJUWuq+&@1tzO}@Mav^+V8~0e#{TP45kA zRv;EY;+vrN#z6luWk5Xv>hz4F?jC%#WGj|-KxEXdLJuBp^?s0_mGFGIzOZH=$p<{UsBPU z;IT8&n%*Z*9sJ$dvn0kvLmEZ{no%AknA%EM_wY=i|BA$7*mY+lHnjwe z1gcbvHMLdkQ{819>y8zA+b2)NiaP?aVrSjv;*uvf7Z*Pfn^a>In|v2+;vAl-IlLEk zi51W7EH0jD$I!rdb+7aSOHH>I{~$Pz+|i>~?ZE_yIP>~PTWDL19AxIELQFeH%T(lS z2h<49v=pm;xxD049f|it|E}2Psl{;lUbsbVS!^m+*1m405Q zCswSEQ6Gx!u-h#D=n3xFRmV#5V~75st~5s%EQKsHQ85U+l?Be!>{an8G6x8Y!Rnn= z0O4jr7|0#HzDa$r79 zRtrsxHK4%hSsH0Gcv_A08?BV_K%HfZ6GAt#p6Sf^INF*|hYdmpwEf1cwoBI7g<;rb zgdG@U9W+w1j3JCqKx%jwSXgYt0w%__DQ8LVwMel+3z(o`vN1BY!bsx-C1ur^ zd0xNxy(pfb0rV_XySOfP=vZa!=6^nQE_U0)ufhgw^9WqcJD9YRcx@VE<2W4~lt4sA6m+N@&fYJD>>KQHs0YNzGLdL7s)@c;Rcp`A38sArWtF=Ct!o!*c*3YX7$oW40iyd=S4>qZYO^`mP`h<3yz>@Esq4G;@0dOJG?|Vx8oKo#iM0j2i*3YR<2aUjz@2b*u zb4mwQ=?PW3)-GkY3oQA8Qf=d$a_xd-JW_qG;jkc4(^Tj+jqReBj*V)8q^TR-6Wtr_ z!{K0@2BYTi<5(PDdGXD&XZ1XV_P3pcpQ1`c4a8xSQ+B^~DQCxN;X`|-c%1Ee$k3G? zO-?U>kbR3OR(87CF^U#nv!+KS<8i#W(`$~q#aS`YSv=R3OW76&^D}P4XAa1G%kqI zrfLodFGt);Z3Hc7>Bpwk{SWrI$1xh-K7>sH3|eo0^; zA3;#4SL@+YtvgZ6Tgd_w(@M7hJcFih%`WaiFVf~_s&?Fv&;d=-`fJh=C82iwK9&SK zXp;6HO*+aXO%A~5Owx8HQtddA%#QEf1F=0S!!xHobaqyUD^-W7Ji0TwBf6b8MVvm{ zDr1wdP_Zq9v-VwA!jdt)_O(yG-9GtxYZw+#i(Jc8|JhgGMziAlS}ZKBY%gx<-<-JY zF&JUNZ(~Iq^39@NtG3ofhm?KEDJC95^;mIp9k`1qukWWehfID(m2Zt9Ull7}K$K?) zdK$|sMXKAJJVG%7P%#t#p zbsqI*peR^C1vGNH#^kTV&pt|Irpzmc>evNJ4)s#V!6N-H%30{qwXsN1C8yFWQ2H!- z2RT(9-IKFN3px)aYF3rz!#mHfcdPlO=2QFRTkVtoG&Oh@Q>;S|$SXHNChQ(79;A8I zu@n<))#DiA1+UJUSbBvOlZhtRxR^{TKLcU0qMA&!jH?GNm=+7MsOdv0&a_*|x7*kK zW6iAx!B+m=3jf|-S3J+(z4u^k!K}vwDEaqpVADLu9=#Z{9wU$FnEXwwsBcH*pbP)y z_D65E=7!pj$)4~(%&@l~`v}C*IlfXp&))2)k1 z&TI#3#iTi=pz!O;k7JYHh)q7tq*hETHBDku-5^%P4$Zi+$!%CQn*+aZrDmLgRV~zP z4*uS?LR@PtYDH8nrC#`TTfxcZn9@!+(hYhq%vp)2AhRBj>F0%HLbYUIy}$MQu*Tzb zGFReNikFUmXTUsnV7xGjMUMS5rlC}a($_cU}1_>{L@1HvN*K)o;B;k@h}4Wm(Iq5vGTKVS+ zp#^^)cIEuATK4A(q1ApKA+*%bh4Dz4wnL1-gBV3+6(-HIzw$5&+c8NZI36&nHWqb0 zz(b@H*a2wS!e+ns3FKc&)%2(>1b3W28@m{#YFuz4C8nC&I5OhCXV(+_9sp-#>;OI9 zlRqXt;-X^Y2Drf|EXW~I4Jre_{$C~6R^&L9ks~_p^IHxxz z;+agg;O<4vUJlE%m1CX}?RGtgXVWnmZnU$mFWfM@cluwhoUMX^-3`OaTC`F-_ zhv+$o%}EvFqoo!g!^%U(9K`0#Rzgaf)j2f)rBV!AA--=YSwe;fvnvzBjm~gXM|lU7 zfp{TaqU7R*q_6=rnUybC%caTjf?YcWv3y+SyapJebV5SJb=FTznwyw%5BogV~JRS?{*)AKVuoS`i%_ zrh+Z??xuJyKJ4~fS?_Mk4nf=N-S+ivcQThx=L^Y9Vd%OlG@DMPlLJ+QD-wfn>*P@0 zji(C9oSVoFj|?RbxT)m69BGC`j?ti_TMkfc-k^=kCj5-o|>|cxJ$D&Sna^>=4pJ>EZZLzN)pe#n{`e z+TPjTv(3Gs%HO>uB`lK65tt$2ZZH$iWR-Bxws2jvr>lTAI$RQ%LA|!<)@Vy~7pktiWOZZ64JNXq zL%_EJS=-PQZd$b{cr~Ep%7Ntm=4Dkk!lgFC5z%TYo=Cb?ovquqc6GWpxK-P>x3#tR zdL9S^Y-?>t5$3(SwKdw}CMmUZYkNHLtFa$#K3)GkCGp9IU8@R!Y*M%47(`x>gTM z&}v38tx+nE*dw78E{0BC%20u+N@P0tFJ!5~Xzy%k?S|iBj=MJ$+_tSI}p0n9v@ zRg1Xu$m<0V{z9fghb5$jn}k;_LNc$~QAG69qM|msXMw0hW9dntfl?Xj$hMv++~|g? zMX(0h6+a>?Im#~4ZQI%}?`&=HI*MMPlUjM9rmIvJfKgFEMA5CA{whhzi7~5b@kb|V zNKi>+wfeIF!BDzmm`Qydfo~FoRJqhU3_7I3@Suq_xU+IznG%~kFhYDCfoc*8q4BJ` z5d*o=O^oJpSa$POn=nJK=+0Ci>Ov;ge;#o7gc_4jWk9)3f)_~np<18Z#BabT;|@e zXniv_+))gYX1QbWT$;`(d3PAgOTF5qGG=nSuGfV{>y^qb4i~f|vm3Z$s=`2_!P}d> z1iGqvmvTQ&-G)Og59;o(KvdeYJS!+3`5W=5zu=LPT|K5s7@3H~A!Z^{nu>%+_N>Na zBURfGa*==s=`OjhXFdaztZR_jMs}+@x|%V_pA3h{;Ob0PRkF9rW8AUHxg~=Ws?3E0 zfjaqQFi@CEWK++cB}1B)b-cbgJ~ZTJaq4kXx$LkT>uRRMPCA3LM|>!KeG*X8Xt2g-Ncv z3_}HZv>bzBfr3cWKThNoL|)y{xNK#pVKwMlgZ#zrwvMiyzlR3oK#=_o8mL7O z2bU1FzoxNajndasVD&n(!-`PD+9sufvH~29?SNAqnP9LmzY(-+&a1@QHNp(wX+tzN zH8heUm&`FlSQ}!t8pas!sD`gCEH&5~jg4!tmyMv*QYFZpiu9cd8N);E5bN6%i~sKW5`U!*>hg!u-4P2isb}rFg*~! zosoBEg?W`sU^ySqs{+;)ECeZfV8C~tgYE`QF!W-*o6ouf+04fZG#8Tzy^cdwYym@~ zSpTt_;86ocF@f8c{a7usxY9!hRhbrjno&%~jpblAfl0|4leOXKD{$spu2x0U6R&5O z?P!-~ySqZI22^FGUITdDR%eYl1Tw6*u+J|;PauypzZ@+2N)mZ(+xE`p9=g>~x6i=? z_1EdOx(7GY`mQa6-qOuob~v4h7jPSwO{rzxO@1Ku8*efxCOzDj{L?^LVcz`J|)efu-!g#uo6>eD6RFhC2KRWrw ze&t|x7=6okC5nzfPNg{3?_$0+>K#) zw=Q!3)q?oJ0?YgV(SKwMjBosZwfAp*@zv+I?Cajxq{4e5TF<2%SL%3X2j@?3{MK_6 zc1AS6KBDt0A}I=A*b=$>$$tv&zWWy&RsM5HuGhnIwljZ6QKoR4z7 zlaDJoJCeFQJ;eCl8Hd97HIb=b{q>RGJoV5gRNgsh+j(5$j)QlM6h3A0&gIR`>)qh? zeWRJesEd zztt%_5GZ@!;)Rvdc!*7P-p^(4R{pc< zN^0}#jQ@Zhy6>zG+*uy2uDh)wTJ0WM&{7>LZ>y?yfkdkVo2o0L=T*eZM85ghQ_rCq zwYz}oBh)Owa~X!R{TX-btqaL+*Ivu zs;=9lB*!4>Ti^apHodBYD;GGUX5OO7L9#%tZK0^`fpiP;omL82O3?CI4H> zlO;#|@{VeEkGB0~jH^kEvHGNvN~F1gR9WD>dUkFJsX(Q3LxoY!Dyo1aJA4r$%7q*= zXX&+O8Tco;0`;3h4Ss~bq;ig9@OL9ma$Ls$o@4s>llaeY-tbo!N}i(w9@BX1?%^1NPd#>0KEi7P-_5US|~}52}aJR z88>+oKcMiEMNQ2wGoSpHg5f`kG|8v6kb=RVMw;+(0uc=UU8D&=pwJTjKNuge@Sih2 zXyLCh-f!V=Gu~_Ai!dJ4ZnuSBzBV%6ofX5k+Fs{};;5o(v)w%&!N6t-*hZtAu9?Cugoa|tDW_<5w{tQh7 z1huvy{xil;Gp^P);9o>Vl5>K{2u2R2E7a~vsZ#g~%LxTEb}<*7hToGN`WaViA{SR39apsR(_%|7!u<#R%Ph0r+8NbiMf6Vw13;!wOM=ksm;}2Q*uNi;D!v8np zGZy})!qo>hvrE+eeU9_q*{E}_!so6ti<$pni+?`jAG7c}#y@W1A7ngi;rfhrjx9)&Nq z#W+_o|AZlmxWa6j0_z9gYEqSs`QV3q@S+cXw-5e#AN)^&*J35BWF1ZX*FO9iAN*TB z_)mQBU-{q*urbYNpYwe1^L_A(eDGyH_y!+*s}H{02Ok7}K6bni-IyV$`xeAwKKz?~ z@JS#1ULX8VeDJ^W!H@gkFZkd;_rZVXgI|axX})o6^1<7DaQdsz`Q*fX@KGOp0yvG! z$^WE=#ZmW)lr#@w8xl_62>y-WWv$bf$z}TZbzxuW!>=)~K!A#Sbv%*XC&BCS!q4eT z_30NjvLrE>OkBgb)0dBr_3@jFhD%nhxkMv)*Ne<*r*AlZje5s`>?P}v#n(Mv)dHTH zmom_jUbr}Y1*G&#F`cHT`5x+}=@pEJdTDy|V$f2W9`$>um!=2(9;(tMZSdN{Xa*Wy ztVjb;p+>bi>Gi5C&k&Gz`iQ6A%IGA2#OL(k>#;t350xnZ$9IkS>xLNcsmO{#8_s@tUMHmSNzs_rV?LnUEVqtkbJN7trkM<2f1*w)(9r`{6wIe2x}mxyB~ zj3pBeyT3D%y;fPb72ZaJQy9!8;{$mjTVHt6$m|E0+pj9%LxPdf{NMqV0j|FF%*8YN zlM11?cgb8Xn^RIpM^K!kPj&l7vg(UDCtnyqxs$pU-xwwpNqsOGPiLI?zHF}0mmAF} zcqEq{=~L3R;rpj;@QsJTcg->5Dx!=LGrmo|amqUsWM12~{ zX0I6?age2tI&;bwl@xSJWeO0YCyn`}m8z;0NL$Mj1-vhV*G@xyh2(((o5?`*xoRdp ztj*)Krh1acR}O})l^B3S$A|m!$zgm)f$uG6mnOzA9cM$dfTqXL9eUR_yNKtBn%Sn4 zda9^d;u)!Q2SvwQY%$J{X{|<}=U)^I{({arALiKLhHuWN20zZcTLixaY5ZA(3g&)) zIj~O(yov8$NlvT4e?S0&k#E}lpB8TPY{t2Vf-V0c#%(!I3qI{xM$Z=nzfIsL1x{yY z!#^ePn84{AMuBXc$ItNJ6#RC9mlF|z^ptX{1Ww6YiG=VT#wjY`XXJl~agwuH;B-Et zVB=wdUx9KXXRW{~Y3$!F@D9PhigAjhJ_*5>`iuyil1BbPfo~D=Cj{Op@Xs+$k!<$? z!I$lR!3Y1cz$t0;c}(D4qTQzi-YxJGj8i1_c}ei4K0gsSB~81(6gb_JnQ?hb;9CX0 z0Ov3Yw*Q=J zAxG+YgTSRew+no`X!jn0?-2NdjN9#gN$_R6U-iNNM&MGP=LAmg0L-|&AaHt?WAKv# z-zD&0FmCI4M)0o`{ND;(>Qly#F35kb68w6`mjfFW_+^4G$G1h`B>z_YC|qIT#?P-} z+}1xK_|nc-3tZ}dn~$8k1YgSetiYw5ulmUOy5LJW#{@3r{M1LzF9cu8c~#(2&ISBv zb~$V~hM)0=kig}*tP!}}*ETXv<4f|5ob47)Wfb-coVP56-ym?Q{~>|z2Ghtd3Y_E^ z{Br`QHkT;rj`M(pnh7Z{cQKKFqIfY&p9aCx4LV`Lw|0y7Y%aj%@d+g`4;HEBQU7@hhXxqz^uA z;V-COInK8kx9#&2!I$=VQ{YtRIhJ!)$hi)fvHwDTh-Ta8-2x{$M*k03xY6@cf$tUa zHwnB?;FmK_vac6-M)0ZZLHsCOEBH4cZ}h*(hd=GZ|GW?Xi$45EE&d-VZSX%4`0$_d z;lJd=|A`O(RUdwNtyaMJ)xE6GLdMBv(mvHbeAkEnF(3XqAO2>Ge<$nH<-_0M!yokF zXMOlzW89v<&k24%bTNK%M&M+l zd85Gp(voB3e^u~r68uLkzKb#nj|)D1Lu1ILR^V-fKe6gy6p^_#}twP&h02lgJzS)%<|o`2TZ??Kl@OPWA5) z{P+0qmkWMT@IyZQH3Cly{$)ZA_0{OPN$^Q0qi4IouNM4HA!kb9J%TUgBn1C1!B6|} za{`xsd##Xjw~%wA;LCO=1uo^>ps;YZ<51Wwch_n{aPJa(U;XWOC@{^1ovG8jdf5^fo8GppWKgalth5sqz z&saG99Rr1v>RReoob#tF{CmtlZQ;gG-mq}PR~jX|o^LIn8z=?kj=Ys;Lr1^WLkidz5A?Mc$TqSv5 zi3ptdAK`pV;FRpI!$kz6zp+Clmk~ZDcrK?&28&e4DhqcxAG7cP+sCYvMvnQrKe{KP zU~u}ro5E2YdANJ724*bW{C!^~w`1g(zazWX!p$e~U$SuXcVx#c+>DDk?-=>!@5szJ z8r+P#85e^a|LG+F!QkfazeX&)KcIPcTDbW;td}g@{Jqrzwx1_|iIx+zaPu8<#KJv4 zX~1`_`0UYX$QN=t9yF<3awy)QKI?0sj}e`Qefhl8kjqkr=-~!@gDJE4JX6(C1f&}9 z)oXmn0=+7Ue1R%xamdgYruZO|{v$}I0sl8jvH^dnz5<`qCa&T9{>*3teLaZ(O7c3E znjGv);j_V{?)|_0>Ous$2D_mrFv6(^tog;m=keZ$6rIH)9-vK^@a$b85%T zM$gwRi44m|8w0NfeD)vWH%+pBKAuNL5 zeD#B57=(jXgGPTNrw1HL+xpLZoN7Bxztz60(9)#~$@%PmfIZ~YIhsrMUx=S+-`Jm? z>CD%@+o0>YI`Xb|egGx&wck%SWe6c1;co;S_1A=U`+4BhK9$Q5;r3sWAkwD3iN}G> zSKnQ!E4n)Ju4Xt)d>2ZnzR}YVBV3<{!N7`38LC6!^Z1#x0{C(b*OwTjZSJ1~qj9l@ z*%|TC-}IYgQFt6bl4;kU=K9^1W7+i|Mcw(vZ<@#N4OW=Ohiqo*8~>TFZP1*PjdU&T u{}&)Vf}dS~5imd3p=_WwWg(C)GT diff --git a/pydentate/x86_64/ichan2.c b/pydentate/x86_64/ichan2.c index 0d9079d..8787b28 100644 --- a/pydentate/x86_64/ichan2.c +++ b/pydentate/x86_64/ichan2.c @@ -1,10 +1,10 @@ /* Created by Language version: 7.7.0 */ -/* NOT VECTORIZED */ -#define NRN_VECTORIZED 0 +/* VECTORIZED */ +#define NRN_VECTORIZED 1 #include #include #include -#include "scoplib_ansi.h" +#include "mech_api.h" #undef PI #define nil 0 #include "md1redef.h" @@ -34,55 +34,93 @@ extern double hoc_Exp(double); #define states states__ichan2 #define trates trates__ichan2 -#define _threadargscomma_ /**/ -#define _threadargsprotocomma_ /**/ -#define _threadargs_ /**/ -#define _threadargsproto_ /**/ +#define _threadargscomma_ _p, _ppvar, _thread, _nt, +#define _threadargsprotocomma_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, +#define _threadargs_ _p, _ppvar, _thread, _nt +#define _threadargsproto_ double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt /*SUPPRESS 761*/ /*SUPPRESS 762*/ /*SUPPRESS 763*/ /*SUPPRESS 765*/ extern double *getarg(); - static double *_p; static Datum *_ppvar; + /* Thread safe. No static _p or _ppvar. */ -#define t nrn_threads->_t -#define dt nrn_threads->_dt +#define t _nt->_t +#define dt _nt->_dt #define gnatbar _p[0] +#define gnatbar_columnindex 0 #define gkfbar _p[1] +#define gkfbar_columnindex 1 #define gksbar _p[2] +#define gksbar_columnindex 2 #define gl _p[3] +#define gl_columnindex 3 #define el _p[4] +#define el_columnindex 4 #define gnat _p[5] +#define gnat_columnindex 5 #define gkf _p[6] +#define gkf_columnindex 6 #define gks _p[7] +#define gks_columnindex 7 #define inat _p[8] +#define inat_columnindex 8 #define ikf _p[9] +#define ikf_columnindex 9 #define iks _p[10] +#define iks_columnindex 10 #define il _p[11] +#define il_columnindex 11 #define minf _p[12] +#define minf_columnindex 12 #define hinf _p[13] +#define hinf_columnindex 13 #define nfinf _p[14] +#define nfinf_columnindex 14 #define nsinf _p[15] +#define nsinf_columnindex 15 #define mtau _p[16] +#define mtau_columnindex 16 #define htau _p[17] +#define htau_columnindex 17 #define nftau _p[18] +#define nftau_columnindex 18 #define nstau _p[19] +#define nstau_columnindex 19 #define m _p[20] +#define m_columnindex 20 #define h _p[21] +#define h_columnindex 21 #define nf _p[22] +#define nf_columnindex 22 #define ns _p[23] +#define ns_columnindex 23 #define enat _p[24] +#define enat_columnindex 24 #define ekf _p[25] +#define ekf_columnindex 25 #define eks _p[26] +#define eks_columnindex 26 #define Dm _p[27] +#define Dm_columnindex 27 #define Dh _p[28] +#define Dh_columnindex 28 #define Dnf _p[29] +#define Dnf_columnindex 29 #define Dns _p[30] +#define Dns_columnindex 30 #define mexp _p[31] +#define mexp_columnindex 31 #define hexp _p[32] +#define hexp_columnindex 32 #define nfexp _p[33] +#define nfexp_columnindex 33 #define nsexp _p[34] -#define _g _p[35] +#define nsexp_columnindex 34 +#define v _p[35] +#define v_columnindex 35 +#define _g _p[36] +#define _g_columnindex 36 #define _ion_enat *_ppvar[0]._pval #define _ion_inat *_ppvar[1]._pval #define _ion_dinatdv *_ppvar[2]._pval @@ -106,6 +144,8 @@ extern double hoc_Exp(double); extern "C" { #endif static int hoc_nrnpointerindex = -1; + static Datum* _extcall_thread; + static Prop* _extcall_prop; /* external NEURON variables */ extern double celsius; /* declaration of user functions */ @@ -131,7 +171,7 @@ extern void hoc_reg_nmodl_filename(int, const char*); extern void _nrn_setdata_reg(int, void(*)(Prop*)); static void _setdata(Prop* _prop) { - _p = _prop->param; _ppvar = _prop->dparam; + _extcall_prop = _prop; } static void _hoc_setdata() { Prop *_prop, *hoc_getdata_range(int); @@ -149,7 +189,13 @@ extern void hoc_reg_nmodl_filename(int, const char*); 0, 0 }; #define vtrap vtrap_ichan2 - extern double vtrap( double , double ); + extern double vtrap( _threadargsprotocomma_ double , double ); + +static void _check_trates(double*, Datum*, Datum*, NrnThread*); +static void _check_table_thread(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, int _type) { + _check_trates(_p, _ppvar, _thread, _nt); + } + #define _zq10 _thread[0]._pval[0] /* declare global and static user variables */ #define usetable usetable_ichan2 double usetable = 1; @@ -182,7 +228,6 @@ extern void hoc_reg_nmodl_filename(int, const char*); static double m0 = 0; static double ns0 = 0; static double nf0 = 0; - static double v = 0; /* connect global user variables to hoc */ static DoubScal hoc_scdoub[] = { "usetable_ichan2", &usetable_ichan2, @@ -193,10 +238,10 @@ extern void hoc_reg_nmodl_filename(int, const char*); }; static double _sav_indep; static void nrn_alloc(Prop*); -static void nrn_init(_NrnThread*, _Memb_list*, int); -static void nrn_state(_NrnThread*, _Memb_list*, int); - static void nrn_cur(_NrnThread*, _Memb_list*, int); -static void nrn_jacob(_NrnThread*, _Memb_list*, int); +static void nrn_init(NrnThread*, _Memb_list*, int); +static void nrn_state(NrnThread*, _Memb_list*, int); + static void nrn_cur(NrnThread*, _Memb_list*, int); +static void nrn_jacob(NrnThread*, _Memb_list*, int); static int _ode_count(int); /* connect range variables in _p that hoc is supposed to know about */ @@ -240,7 +285,7 @@ extern Prop* need_memb(Symbol*); static void nrn_alloc(Prop* _prop) { Prop *prop_ion; double *_p; Datum *_ppvar; - _p = nrn_prop_data_alloc(_mechtype, 36, _prop); + _p = nrn_prop_data_alloc(_mechtype, 37, _prop); /*initialize range parameters*/ gnatbar = 0; gkfbar = 0; @@ -248,7 +293,7 @@ static void nrn_alloc(Prop* _prop) { gl = 0; el = 0; _prop->param = _p; - _prop->param_size = 36; + _prop->param_size = 37; _ppvar = nrn_prop_datum_alloc(_mechtype, 9, _prop); _prop->dparam = _ppvar; /*connect ionic variables to this model*/ @@ -270,15 +315,17 @@ static void nrn_alloc(Prop* _prop) { } static void _initlists(); + static void _thread_mem_init(Datum*); + static void _thread_cleanup(Datum*); static void _update_ion_pointer(Datum*); extern Symbol* hoc_lookup(const char*); extern void _nrn_thread_reg(int, int, void(*)(Datum*)); -extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, _NrnThread*, int)); +extern void _nrn_thread_table_reg(int, void(*)(double*, Datum*, Datum*, NrnThread*, int)); extern void hoc_register_tolerance(int, HocStateTolerance*, Symbol***); extern void _cvode_abstol( Symbol**, double*, int); void _ichan2_reg() { - int _vectorized = 0; + int _vectorized = 1; _initlists(); ion_reg("nat", 1.0); ion_reg("kf", 1.0); @@ -286,15 +333,20 @@ extern void _cvode_abstol( Symbol**, double*, int); _nat_sym = hoc_lookup("nat_ion"); _kf_sym = hoc_lookup("kf_ion"); _ks_sym = hoc_lookup("ks_ion"); - register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 0); + register_mech(_mechanism, nrn_alloc,nrn_cur, nrn_jacob, nrn_state, nrn_init, hoc_nrnpointerindex, 2); + _extcall_thread = (Datum*)ecalloc(1, sizeof(Datum)); + _thread_mem_init(_extcall_thread); _mechtype = nrn_get_mechtype(_mechanism[1]); _nrn_setdata_reg(_mechtype, _setdata); + _nrn_thread_reg(_mechtype, 1, _thread_mem_init); + _nrn_thread_reg(_mechtype, 0, _thread_cleanup); _nrn_thread_reg(_mechtype, 2, _update_ion_pointer); + _nrn_thread_table_reg(_mechtype, _check_table_thread); #if NMODL_TEXT hoc_reg_nmodl_text(_mechtype, nmodl_file_text); hoc_reg_nmodl_filename(_mechtype, nmodl_filename); #endif - hoc_register_prop_size(_mechtype, 36, 9); + hoc_register_prop_size(_mechtype, 37, 9); hoc_register_dparam_semantics(_mechtype, 0, "nat_ion"); hoc_register_dparam_semantics(_mechtype, 1, "nat_ion"); hoc_register_dparam_semantics(_mechtype, 2, "nat_ion"); @@ -306,13 +358,13 @@ extern void _cvode_abstol( Symbol**, double*, int); hoc_register_dparam_semantics(_mechtype, 8, "ks_ion"); hoc_register_cvode(_mechtype, _ode_count, 0, 0, 0); hoc_register_var(hoc_scdoub, hoc_vdoub, hoc_intfunc); - ivoc_help("help ?1 ichan2 /home/danielmk/repos/pyDentate/mechs/ichan2.mod\n"); + ivoc_help("help ?1 ichan2 /Users/temma/ghq/pydentate/mechs/ichan2.mod\n"); hoc_register_limits(_mechtype, _hoc_parm_limits); hoc_register_units(_mechtype, _hoc_parm_units); } static double FARADAY = 96520.0; static double R = 8.3134; - static double _zq10 ; + /*Top LOCAL _zq10 */ static double *_t_minf; static double *_t_mexp; static double *_t_hinf; @@ -332,31 +384,32 @@ static int error; static int _ninits = 0; static int _match_recurse=1; static void _modl_cleanup(){ _match_recurse=1;} -static int _f_trates(double); -static int rates(double); -static int states(); -static int trates(double); - static void _n_trates(double); +static int _f_trates(_threadargsprotocomma_ double); +static int rates(_threadargsprotocomma_ double); +static int states(_threadargsproto_); +static int trates(_threadargsprotocomma_ double); + static void _n_trates(_threadargsprotocomma_ double _lv); -static int states ( ) { +static int states ( _threadargsproto_ ) { trates ( _threadargscomma_ v ) ; m = m + mexp * ( minf - m ) ; h = h + hexp * ( hinf - h ) ; nf = nf + nfexp * ( nfinf - nf ) ; ns = ns + nsexp * ( nsinf - ns ) ; - -/*VERBATIM*/ - return 0; - return 0; } + return 0; } static void _hoc_states(void) { double _r; - _r = 1.; - states ( ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + states ( _p, _ppvar, _thread, _nt ); hoc_retpushx(_r); } -static int rates ( double _lv ) { +static int rates ( _threadargsprotocomma_ double _lv ) { double _lalpha , _lbeta , _lsum ; _zq10 = pow( 3.0 , ( ( celsius - 6.3 ) / 10.0 ) ) ; _lalpha = - 0.3 * vtrap ( _threadargscomma_ ( _lv + 60.0 - 17.0 ) , - 5.0 ) ; @@ -383,13 +436,16 @@ static int rates ( double _lv ) { static void _hoc_rates(void) { double _r; - _r = 1.; - rates ( *getarg(1) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = 1.; + rates ( _p, _ppvar, _thread, _nt, *getarg(1) ); hoc_retpushx(_r); } static double _mfac_trates, _tmin_trates; - static void _check_trates(); - static void _check_trates() { + static void _check_trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { static int _maktable=1; int _i, _j, _ix = 0; double _xi, _tmax; static double _sav_dt; @@ -402,7 +458,7 @@ static void _hoc_rates(void) { _tmax = 100.0 ; _dx = (_tmax - _tmin_trates)/200.; _mfac_trates = 1./_dx; for (_i=0, _x=_tmin_trates; _i < 201; _x += _dx, _i++) { - _f_trates(_x); + _f_trates(_p, _ppvar, _thread, _nt, _x); _t_minf[_i] = minf; _t_mexp[_i] = mexp; _t_hinf[_i] = hinf; @@ -421,15 +477,18 @@ static void _hoc_rates(void) { } } - static int trates(double _lv){ _check_trates(); - _n_trates(_lv); + static int trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _lv) { +#if 0 +_check_trates(_p, _ppvar, _thread, _nt); +#endif + _n_trates(_p, _ppvar, _thread, _nt, _lv); return 0; } - static void _n_trates(double _lv){ int _i, _j; + static void _n_trates(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _lv){ int _i, _j; double _xi, _theta; if (!usetable) { - _f_trates(_lv); return; + _f_trates(_p, _ppvar, _thread, _nt, _lv); return; } _xi = _mfac_trates * (_lv - _tmin_trates); if (isnan(_xi)) { @@ -492,7 +551,7 @@ static void _hoc_rates(void) { } -static int _f_trates ( double _lv ) { +static int _f_trates ( _threadargsprotocomma_ double _lv ) { double _ltinc ; rates ( _threadargscomma_ _lv ) ; _ltinc = - dt * _zq10 ; @@ -504,12 +563,20 @@ static int _f_trates ( double _lv ) { static void _hoc_trates(void) { double _r; - _r = 1.; - trates ( *getarg(1) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + +#if 1 + _check_trates(_p, _ppvar, _thread, _nt); +#endif + _r = 1.; + trates ( _p, _ppvar, _thread, _nt, *getarg(1) ); hoc_retpushx(_r); } -double vtrap ( double _lx , double _ly ) { +double vtrap ( _threadargsprotocomma_ double _lx , double _ly ) { double _lvtrap; if ( fabs ( _lx / _ly ) < 1e-6 ) { _lvtrap = _ly * ( 1.0 - _lx / _ly / 2.0 ) ; @@ -523,11 +590,23 @@ return _lvtrap; static void _hoc_vtrap(void) { double _r; - _r = vtrap ( *getarg(1) , *getarg(2) ); + double* _p; Datum* _ppvar; Datum* _thread; NrnThread* _nt; + if (_extcall_prop) {_p = _extcall_prop->param; _ppvar = _extcall_prop->dparam;}else{ _p = (double*)0; _ppvar = (Datum*)0; } + _thread = _extcall_thread; + _nt = nrn_threads; + _r = vtrap ( _p, _ppvar, _thread, _nt, *getarg(1) , *getarg(2) ); hoc_retpushx(_r); } static int _ode_count(int _type){ hoc_execerror("ichan2", "cannot be used with CVODE"); return 0;} + +static void _thread_mem_init(Datum* _thread) { + _thread[0]._pval = (double*)ecalloc(1, sizeof(double)); + } + +static void _thread_cleanup(Datum* _thread) { + free((void*)(_thread[0]._pval)); + } extern void nrn_update_ion_pointer(Symbol*, Datum*, int, int); static void _update_ion_pointer(Datum* _ppvar) { nrn_update_ion_pointer(_nat_sym, _ppvar, 0, 0); @@ -541,11 +620,8 @@ static int _ode_count(int _type){ hoc_execerror("ichan2", "cannot be used with C nrn_update_ion_pointer(_ks_sym, _ppvar, 8, 4); } -static void initmodel() { - int _i; double _save;_ninits++; - _save = t; - t = 0.0; -{ +static void initmodel(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt) { + int _i; double _save;{ h = h0; m = m0; ns = ns0; @@ -556,23 +632,25 @@ static void initmodel() { h = hinf ; nf = nfinf ; ns = nsinf ; - -/*VERBATIM*/ - return 0; - } - _sav_indep = t; t = _save; - + } + } } -static void nrn_init(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_init(NrnThread* _nt, _Memb_list* _ml, int _type){ +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; + +#if 0 + _check_trates(_p, _ppvar, _thread, _nt); +#endif #if CACHEVEC if (use_cachevec) { _v = VEC_V(_ni[_iml]); @@ -586,10 +664,11 @@ for (_iml = 0; _iml < _cntml; ++_iml) { enat = _ion_enat; ekf = _ion_ekf; eks = _ion_eks; - initmodel(); - }} + initmodel(_p, _ppvar, _thread, _nt); + } +} -static double _nrn_current(double _v){double _current=0.;v=_v;{ { +static double _nrn_current(double* _p, Datum* _ppvar, Datum* _thread, NrnThread* _nt, double _v){double _current=0.;v=_v;{ { gnat = gnatbar * m * m * m * h ; inat = gnat * ( v - enat ) ; gkf = gkfbar * nf * nf * nf * nf ; @@ -606,12 +685,14 @@ static double _nrn_current(double _v){double _current=0.;v=_v;{ { } return _current; } -static void nrn_cur(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_cur(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; double _rhs, _v; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; #if CACHEVEC @@ -626,14 +707,14 @@ for (_iml = 0; _iml < _cntml; ++_iml) { enat = _ion_enat; ekf = _ion_ekf; eks = _ion_eks; - _g = _nrn_current(_v + .001); + _g = _nrn_current(_p, _ppvar, _thread, _nt, _v + .001); { double _diks; double _dikf; double _dinat; _dinat = inat; _dikf = ikf; _diks = iks; - _rhs = _nrn_current(_v); + _rhs = _nrn_current(_p, _ppvar, _thread, _nt, _v); _ion_dinatdv += (_dinat - inat)/.001 ; _ion_dikfdv += (_dikf - ikf)/.001 ; _ion_diksdv += (_diks - iks)/.001 ; @@ -651,14 +732,18 @@ for (_iml = 0; _iml < _cntml; ++_iml) { NODERHS(_nd) -= _rhs; } -}} +} + +} -static void nrn_jacob(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_jacob(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; #if CACHEVEC @@ -671,14 +756,18 @@ for (_iml = 0; _iml < _cntml; ++_iml) { NODED(_nd) += _g; } -}} +} + +} -static void nrn_state(_NrnThread* _nt, _Memb_list* _ml, int _type){ +static void nrn_state(NrnThread* _nt, _Memb_list* _ml, int _type) { +double* _p; Datum* _ppvar; Datum* _thread; Node *_nd; double _v = 0.0; int* _ni; int _iml, _cntml; #if CACHEVEC _ni = _ml->_nodeindices; #endif _cntml = _ml->_nodecount; +_thread = _ml->_thread; for (_iml = 0; _iml < _cntml; ++_iml) { _p = _ml->_data[_iml]; _ppvar = _ml->_pdata[_iml]; _nd = _ml->_nodelist[_iml]; @@ -696,15 +785,15 @@ for (_iml = 0; _iml < _cntml; ++_iml) { enat = _ion_enat; ekf = _ion_ekf; eks = _ion_eks; - { error = states(); - if(error){fprintf(stderr,"at line 72 in file ichan2.mod:\n SOLVE states\n"); nrn_complain(_p); abort_run(error);} - } }} + { { states(_p, _ppvar, _thread, _nt); } + } }} } static void terminal(){} -static void _initlists() { +static void _initlists(){ + double _x; double* _p = &_x; int _i; static int _first = 1; if (!_first) return; _t_minf = makevector(201*sizeof(double)); @@ -722,8 +811,12 @@ static void _initlists() { _first = 0; } +#if defined(__cplusplus) +} /* extern "C" */ +#endif + #if NMODL_TEXT -static const char* nmodl_filename = "/home/danielmk/repos/pyDentate/mechs/ichan2.mod"; +static const char* nmodl_filename = "/Users/temma/ghq/pydentate/mechs/ichan2.mod"; static const char* nmodl_file_text = "TITLE ichan2.mod \n" " \n" @@ -816,10 +909,7 @@ static const char* nmodl_file_text = " h = hinf\n" " nf = nfinf\n" " ns = nsinf\n" - " \n" - " VERBATIM\n" - " return 0;\n" - " ENDVERBATIM\n" + "\n" "}\n" "\n" "? states\n" @@ -829,9 +919,7 @@ static const char* nmodl_file_text = " h = h + hexp*(hinf-h)\n" " nf = nf + nfexp*(nfinf-nf)\n" " ns = ns + nsexp*(nsinf-ns)\n" - " VERBATIM\n" - " return 0;\n" - " ENDVERBATIM\n" + "\n" "}\n" " \n" "LOCAL q10\n" diff --git a/pydentate/x86_64/ichan2.o b/pydentate/x86_64/ichan2.o index 04c4b82cac0bc7a0eb30375d3615596defa02902..2b8f6d0fb657c00095ec2872ba7c72a1e6028990 100644 GIT binary patch literal 20560 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 literal 28312 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 diff --git a/pydentate/x86_64/libnrnmech.dylib b/pydentate/x86_64/libnrnmech.dylib new file mode 100755 index 0000000000000000000000000000000000000000..4c1bcb8fe96879e0093df1607409db85b969e52c GIT binary patch literal 168696 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