#!/usr/bin/python from lib import NeuronDirectory from lib import ParameterSets from optparse import OptionParser import itertools # This should be called with /-delimited sequences of action-neuron pairs. Each action- # neuron pair is a comma-delimited list of actions, then a colon, then a comma-delimited list of # neurons. Optionally, this may be followed by another colon and a command-line option to be passed # to the underlying command (any "--" prefix should be omitted). Neurons can be specified by any # name (or group name) recognized by the 'list.py' script. # # Examples: # Scripts/Python/generateComputationCommands attenuation,geometry:old-apical,old-basal / mbpap:whole # Scripts/Python/generateComputationCommands attenuation:old-apical,old-basal:nospines / mbpap:whole # # This approach lets you specify many commands at once, even if they are applied to different # subsets of neurons. parser = OptionParser() 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")) def makeCommand(script, neuron, optionString, parameterSetName): if len(optionString) > 0: return "Scripts/Python/%s %s %s --params %s;" % (script, neuron, optionString, parameterSetName) else: return "Scripts/Python/%s %s --params %s;" % (script, neuron, parameterSetName) def printString(s): print s def CommandsForCommandGroup(commandGroup, directory, parameterSetName): """A commandgroup is a 2 or 3 item list. The first is a comma-delimited list of actions, the second is a comma-delimited list of neuron names, and the third, if present, is the name of an option that should be passed to the commands.""" actionString = commandGroup[0] neuronNameString = commandGroup[1] if len(commandGroup) > 2: optionString = "--" + commandGroup[2] else: optionString = "" actions = actionString.split(",") neuronNames = neuronNameString.split(",") neuronNames = directory.ExpandNeuronNames(neuronNames) return [makeCommand(a, n, optionString, parameterSetName) for a in actions for n in neuronNames] (options, args) = parser.parse_args() parameterSetName = options.params specificationString = "".join(args) parameterSets = ParameterSets.ParameterSets() parameterSets.Load() parameterSet = parameterSets.parameterSetForName(parameterSetName) directory = NeuronDirectory.NeuronDirectory(parameterSet) directory.Load() commandGroups = specificationString.split("/") parsedCommandGroups = [CommandsForCommandGroup(x, directory, parameterSetName) for x in [eachCommandGroup.split(":") for eachCommandGroup in commandGroups]] commands = [command for eachList in parsedCommandGroups for command in eachList] [printString(s) for s in commands]