예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
    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)
예제 #4
0
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()
예제 #5
0
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
예제 #6
0
 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)