add argparse for easier using
This commit is contained in:
parent
59153c860e
commit
2665e166f9
@ -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__":
|
||||||
|
Loading…
Reference in New Issue
Block a user