#!/usr/bin/python from lib import NeuronDirectory from lib import NEURONInterface from lib import ParameterSets from lib.Paths import Paths from optparse import OptionParser import os import sys # Computes the attenuation values L_out and L_in for the neuron named in its # argument. It assumes that the environment variable SIMULATION_PROJECT is # defined, pointing to the paper project directory, which includes the Scripts/, # EmpiricalData/ and NumericalResults/ directories. ###### Begin standard bootstrap code with spine support ####### # TODO(pcoskren): If this is consistent enough, you should be able to factor it # out over all the Python computation commands that need run with or without spines parser = OptionParser() parser.add_option("--spines", action="store_true", dest="hasSpines", default=True, help=("Simulation will incorporate surface area of spines " + "(but not simulate them explicitly)")) parser.add_option("--nospines", action="store_false", dest="hasSpines", help="If specified, any spines associated with the neuron " + "will be ignored") parser.add_option("--params", action="store", type="string", default="Christina-standard-testing", help=("Name of the set of parameters that will be used in " + "NEURON simulations supporting this computation, as " + "specified in Scripts/ParameterSets.csv")) parser.add_option("--headers", action="store_true", dest="headersOption", default=False, help="Prints the CSV-formatted headers for results") (options, args) = parser.parse_args() hasSpines = options.hasSpines headersOption = options.headersOption parameterSetName = options.params if (headersOption): if hasSpines: suffix = "spines" else: suffix = "nospines" headerTuples = zip( ["out"] * 6 + ["in"] * 6, range(0,501,100) * 2, [suffix] * 12) headerItems = ",".join(["%s.%dHz.%s" % x for x in headerTuples]) print ("cellName,parameterSet," + headerItems) exit(0) if (len(args) == 0): print 'Error: a neuron must be specified.' exit(1) neuron_name = args[0] parameterSets = ParameterSets.ParameterSets() parameterSets.Load() parameterSet = parameterSets.parameterSetForName(parameterSetName) directory = NeuronDirectory.NeuronDirectory(parameterSet) directory.Load() neuron = directory.NeuronWithName(neuron_name) neuron.Load() neuron.SetHocRoot(Paths.hocFilesPath()) ###### End standard bootstrap code with spine support ####### simulator = NEURONInterface.NEURONInterface(Paths.hocScriptsPath(), parameterSet) spine_type = 0 if neuron.Arbor() == neuron.kApicalArbor: spine_type = simulator.kApicalSpines elif neuron.Arbor() == neuron.kBasalArbor: spine_type = simulator.kBasalSpines attenuations = simulator.GetAttenuationsForNeuron(neuron, spine_type, hasSpines) print("%s,%s,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f" % ( neuron.Name(), parameterSetName, attenuations.outward_attenuations_by_frequency[0], attenuations.outward_attenuations_by_frequency[100], attenuations.outward_attenuations_by_frequency[200], attenuations.outward_attenuations_by_frequency[300], attenuations.outward_attenuations_by_frequency[400], attenuations.outward_attenuations_by_frequency[500], attenuations.inward_attenuations_by_frequency[0], attenuations.inward_attenuations_by_frequency[100], attenuations.inward_attenuations_by_frequency[200], attenuations.inward_attenuations_by_frequency[300], attenuations.inward_attenuations_by_frequency[400], attenuations.inward_attenuations_by_frequency[500]))