Neuron Optimization Pipeline

The main code for the optimization procedure is in the pyneuronautofit directory for local usage. For permanent installation, use the pip(3) command.

pip3 install pyneuronautofit (--user)

The flag --user is needed if you don’t have root/sudo privileges and what to install pyneuronautofit in the user directory.

Before launching optimization, you have to compile NEURON modules

nrnivmodl mods

To run NSGA2 optimization procedure for the given example of the recorded neuron, use the command

python -m pyneuronautofit -A NSGA2  -m OV -G 1536 -P 240 -E 0  -U 0 -c 3 -t -10 -k ../experimentaldata/P07-04.20205021-mask.json ../experimentaldata/P07-04.20205021.abf

To run KAMOGA optimization procedure for the same example, use the command

python -m pyneuronautofit -A K      -m OV -G 1536 -P 240 -E 30 -U 0 -c 3 -t -10 -k ../experimentaldata/P07-04.20205021-mask.json ../experimentaldata/P07-04.20205021.abf

The complete list of command line flags is given below.

python -m pyneuronautofit --help
Usage: -m pyneuronautofit [flags] input_file_with_currents_and_target_stats (abf,npz,or json)

Options:
  -h, --help            show this help message and exit

  Fitting:
    Parameters related to Evolutionary Optimization

    -A ALGOR, --algorithm=ALGOR
                        Algorithm for multiobjective evaluation. It can be:
                        Krayzman - for Krayzman's fitness weighting; NSGA2 -
                        for Pareto nondominate selection; Max - for max scaled
                        summation; PositiveCor - positive correlation (the same
                        as Krayzman's procedure, but with the goal of making all
                        correlations positive). An algorithm can be given by first
                        letter K, N, M or P correspondingly. (Default is K)
    -P PSZ, --population-size=PSZ
                        population size (default 256). If it is a negative
                        number: the population size is the length of the
                        fitness vector multiple by the absolute value of this
                        option.
    -G NGN, --number-generation=NGN
                        number of generations (default 256)
    -E ELITES, --number-elites=ELITES
                        number of elites in the replacement (default 32)
    -L, --off-log-scale
                        enable log scaling
    -I INITPOP, --init-population=INITPOP
                        file with a set of an initial population
    -N KRTHR, --Krayzman-threshould=KRTHR
                        The threshold for Krayzman's iteration procedure of
                        weights adaptation (default 0.05)
    -U UPDATE, --scales-update=UPDATE
                        vector length * this scale is the number of fitness
                        vectors before updating Krayzman's weights or max
                        scalers (default 10)
    -y, --norm-space    normalize space under the curve
    -H, --hold-weights-normalization
                        hold weights without normalization in iteration
                        procedure (default disable)
    -b BOUNDKGA, --bound-Krayzman-weights=BOUNDKGA
                        bound weights by [1/x,x] (default disable)
    -M MRATE, --mutation-rate=MRATE
                        Basic mutation rate (default 10%%)
    -S AMSLOPE, --adaptive-mutation-slope=AMSLOPE
                        Adaptive mutation slope
    -Q VPVSIZE, --v-dvdt-hist-size=VPVSIZE
                        v dv/dt histogram size (default 12)
    -J, --inJect-elits  enable dynamic elits

  Model:
    Conditions for model running and evaluation

    -m EMODE, --eval-mode=EMODE
                        mode for evaluation T-spike time, S-spike shape,
                        U-subthreshold voltage dynamics, W-spike width, R -
                        resting potential, L - post-stimulus tail, M - voltage
                        stimulus statistics, A - average spike shape, N -
                        number of spikes (default RAMN)
    -k EMASK, --eval-mask=EMASK
                        mask to limit analysis
    -c ESPC, --spike-count=ESPC
                        number of spikes for evaluation (2)
    -t ETHSH, --spike-threshold=ETHSH
                        spike threshold (default 0.)
    -l ELEFT, --left-spike-samples=ELEFT
                        left window of a spike (default 70)
    -r ERGHT, --right-spike-samples=ERGHT
                        right window of a spike (default 140)
    -q TEMP, --temperature=TEMP
                        temperature (default 35)
    -z SPWTGH, --spike-Zoom=SPWTGH
                        if positive -- the absolute weight of voltage diff during
                        spike; if negative -- related scaler
    -e, --collapse-diff
                        Collapse difference between a model and data in a
                        vector with size = number of tests (i.e. for  -m RAMNT
                        the diff vector will be length 5)

  Run:
    Options for entire EC running and logging

    -n NTH, --number-threads=NTH
                        number of threads (default None - autodetection)
    --dt=SIMDT          if positive absolute simulation dt; if negative scaler
                        for recorded dt
    -v LL, --log-level=LL
                        Level of logging.[CRITICAL, ERROR, WARNING, INFO, or
                        DEBUG] (default INFO)
    -u, --log-to-screen
                        log to screen
    -Z, --Krayzman-debug
                        enable debug dump for adaptation weight
    -p NCH, --printed-checkpoints=NCH
                        print out checkpoints every # generation (do not print
                        out if negative)
    -d DCH, --dump-checkpoints=DCH
                        dump out checkpoints into checkpoint file every #
                        generation (do not dump out if negative, default 8)
    -i RITER, --iteration=RITER
                        adds iteration number to the runs stamp
    -a RSTEMP, --run-stamp=RSTEMP
                        Use this run stamp instead of generated
    --slurm-id=SLURMID  Add SLURM ID into timestamp
    --log-population    record population into log file
    --log-archive       record archive into log file
    --dry-run           exit after init everything

Files and directories here

File or directory Description
CheckSelection.py validates models in the database
FinalCheck.py plots current-clamp models vs neuron for human evaluation
search-init.py searches initial steady-states for all models in the database
python search-init.py <input database> <output database>
search-synmin-v2.py searches for minimal synaptic conductance for all models in the database
python search-synmin-v2.py -A 'linspace(1.,0.,41).tolist()' -N 'linspace(0.,1.,41).tolist()' -G 0.4 -a 1e-4 <database>
plot-parmdist.py plots parameters kde (Figure 1B) and PCA (Figure 1 – Figure Supplement 1) for the database
python plot-parmdist.py ../P07-selected-checked-gmin-20220921.json
mods directory with NEURON mod file for ion channels and calcium dynamics