add argparse for easier using

This commit is contained in:
Jan Grewe 2020-09-30 10:16:34 +02:00
parent 59153c860e
commit 2665e166f9

View File

@ -1,5 +1,6 @@
import numpy as np import numpy as np
import nixio as nix import nixio as nix
import argparse
import os import os
from numpy.core.fromnumeric import repeat from numpy.core.fromnumeric import repeat
from traitlets.traitlets import Instance from traitlets.traitlets import Instance
@ -183,11 +184,11 @@ def simulate_responses(stimulus_params, model_params, repeats=10, deltaf=20):
print("\n") print("\n")
def simulate_cell(cell_id, models): def simulate_cell(cell_id, models, args):
deltafs = [-200, -100, -50, -20, -10, -5, 5, 10, 20, 50, 100, 200] # Hz, difference frequency between self and other deltafs = args.deltafs # Hz, difference frequency between self and other
chirp_sizes = [40, 60, 100] chirp_sizes = args.chirpsizes # Hz, the chirp size, i.e. the frequency excursion
stimulus_params = { "eodfs": {"self": 0.0, "other": 0.0}, # eod frequency in Hz, to be overwritten stimulus_params = { "eodfs": {"self": 0.0, "other": 0.0}, # eod frequency in Hz, to be overwritten
"contrasts": [20, 10, 5, 2.5, 1.25, 0.625, 0.3125], "contrasts": args.contrasts,
"chirp_size": 100, # Hz, frequency excursion "chirp_size": 100, # Hz, frequency excursion
"chirp_duration": 0.015, # s, chirp duration "chirp_duration": 0.015, # s, chirp duration
"chirp_amplitude_dip": 0.05, # %, amplitude drop during chirp "chirp_amplitude_dip": 0.05, # %, amplitude drop during chirp
@ -212,14 +213,32 @@ def simulate_cell(cell_id, models):
stimulus_params["duration"] - stimulus_params["chirp_duration"], stimulus_params["duration"] - stimulus_params["chirp_duration"],
1./stimulus_params["chirp_frequency"]) 1./stimulus_params["chirp_frequency"])
stimulus_params["chirp_times"] = chirp_times stimulus_params["chirp_times"] = chirp_times
simulate_responses(stimulus_params, model_params, repeats=25, deltaf=deltaf) simulate_responses(stimulus_params, model_params, repeats=args.trials, deltaf=deltaf)
def main(): def main():
parser = argparse.ArgumentParser(description="Simulate P-unit responses using the model parameters from the models.csv file. Calling it without any arguments works with the defaults, may need some time.")
parser.add_argument("-n", "--number", type=int, default=20, help="Number of simulated neurons. Randomly chosen from model list. Defaults to 20")
parser.add_argument("-t", "--trials", type=int, default=25, help="Number of stimulus repetitions, trials. Defaults to 25")
parser.add_argument("-dfs", "--deltafs", type=float, nargs="+", default=[-200, -100, -50, -20, -10, -5, 5, 10, 20, 50, 100, 200],
help="List of difference frequencies. Defaults to [-200, -100, -50, -20, -10, -5, 5, 10, 20, 50, 100, 200]")
parser.add_argument("-cs", "--chirpsizes", type=float, nargs="+", default=[40, 60, 100],
help="List of chirp sizes. Defaults to [40, 60, 100]")
parser.add_argument("-ct", "--contrasts", type=float, nargs="+", default=[20, 10, 5, 2.5, 1.25, 0.625, 0.3125],
help="List of foreign fish contrasts. Defaults to [20, 10, 5, 2.5, 1.25, 0.625, 0.3125].")
parser.add_argument("-o", "--output_folder", type=str, default=data_folder, help="Where to store the data. Defaults to %s"%os.path.join(".", data_folder))
parser.add_argument("-j", "--jobs", type=int, default=max(1, int(np.floor(multiprocessing.cpu_count() * 0.5))), help="Number of parallel processes (simulations) defaults to half of the available cores.")
args = parser.parse_args()
models = load_models("models.csv") models = load_models("models.csv")
num_cores = multiprocessing.cpu_count() - 6 num_models = args.number
if args.number > len(models):
print("INFO: number of cells larger than number of available models. Reset to max number of models.")
num_models = len(models)
indices = list(range(len(models)))
np.random.shuffle(indices)
Parallel(n_jobs=num_cores)(delayed(simulate_cell)(cell_id, models) for cell_id in range(len(models[:20]))) Parallel(n_jobs=args.jobs)(delayed(simulate_cell)(cell_id, models, args) for cell_id in indices)
if __name__ == "__main__": if __name__ == "__main__":