def test_ASTIM_hybrid(self, is_profiled=False): logger.info('Test: running ASTIM hybrid simulation') pp = PulsedProtocol(0.6e-3, 0.1e-3) pneuron = getPointNeuron('RS') nbls = NeuronalBilayerSonophore(self.a, pneuron) self.execute(lambda: nbls.simulate(self.USdrive, pp, method='hybrid'), is_profiled)
def test_ASTIM_full(self, is_profiled=False): logger.info('Test: running ASTIM detailed simulation') pp = PulsedProtocol(1e-6, 1e-6) pneuron = getPointNeuron('RS') nbls = NeuronalBilayerSonophore(self.a, pneuron) self.execute(lambda: nbls.simulate(self.USdrive, pp, method='full'), is_profiled)
def test_ASTIM_sonic(self, is_profiled=False): logger.info('Test: ASTIM sonic simulation') pp = PulsedProtocol(50e-3, 10e-3) pneuron = getPointNeuron('RS') nbls = NeuronalBilayerSonophore(self.a, pneuron) # test error 1: sonophore radius outside of lookup range try: nbls = NeuronalBilayerSonophore(100e-9, pneuron) nbls.simulate(self.USdrive, pp, method='sonic') except ValueError: logger.debug('Out of range radius: OK') # test error 2: frequency outside of lookups range try: nbls = NeuronalBilayerSonophore(self.a, pneuron) nbls.simulate(AcousticDrive(10e3, self.USdrive.A), pp, method='sonic') except ValueError: logger.debug('Out of range frequency: OK') # test error 3: amplitude outside of lookups range try: nbls = NeuronalBilayerSonophore(self.a, pneuron) nbls.simulate(AcousticDrive(self.USdrive.f, 1e6), pp, method='sonic') except ValueError: logger.debug('Out of range amplitude: OK') # Run simulation on all neurons for name, neuron_class in getNeuronsDict().items(): if name not in ('template', 'LeechP', 'LeechT', 'LeechR', 'SWnode'): pneuron = neuron_class() nbls = NeuronalBilayerSonophore(self.a, pneuron) self.execute( lambda: nbls.simulate(self.USdrive, pp, method='sonic'), is_profiled)
def main(): ''' The code must be wrappped inside a main function in order to allow MPI usage. ''' # Parameters root = selectDirDialog() pneuron = getPointNeuron('TC') a = 32e-9 # m coverages = [0.8, 1.0] f = 500e3 # Hz tstim = 100e-3 # s PRF = 100 # Hz amps = np.logspace(np.log10(10.), np.log10(600.), 5) * 1e3 # Pa DCs = np.linspace(5, 100, 5) * 1e-2 # (-) # Define variable-dependent z-bounds and colormaps zbounds = { 'FR': (1e0, 1e3), # Hz 'Cai': (1e0, 1e2) # uM } cmap = {'FR': 'viridis', 'Cai': 'cividis'} # For each coevrage fraction for fs in coverages: # For each map class for zkey in ['FR', 'Cai']: # Create activation map object actmap = getActivationMap(zkey, root, pneuron, a, fs, f, tstim, PRF, amps, DCs) # Run simulations for populate the 2D map actmap.run(mpi=True) # Render the 2D map actmap.render(interactive=True, zbounds=zbounds[zkey], cmap=cmap[zkey]) plt.show()
import itertools import logging import numpy as np from PySONIC.core import NeuronalBilayerSonophore, AcousticDrive, Batch from PySONIC.neurons import getPointNeuron from PySONIC.utils import logger from PySONIC.constants import * logger.setLevel(logging.DEBUG) # Model a = 32e-9 fs = 1. pneuron = getPointNeuron('RS') nbls = NeuronalBilayerSonophore(a, pneuron) # Stimulus Fdrive = 500e3 Adrive = 100e3 drive = AcousticDrive(Fdrive, Adrive) # Charge range Qmin, Qmax = pneuron.Qbounds Q_ref = np.arange(Qmin, Qmax + DQ_LOOKUP, DQ_LOOKUP) # C/m2 # Charge oscillations AQ_ref = np.linspace(0, 100e-5, 5) # C/m2 phiQ_ref = np.linspace(0, 2 * np.pi, 5, endpoint=False) # rad NFS = 2
def test_ESTIM(self, is_profiled=False): logger.info('Test: running ESTIM simulation') ELdrive = ElectricDrive(10.0) # mA/m2 pp = PulsedProtocol(100e-3, 50e-3) pneuron = getPointNeuron('RS') self.execute(lambda: pneuron.simulate(ELdrive, pp), is_profiled)