Beispiel #1
0
 def _create_NEST(self, nest_name):
     trans_params = {}
     for prop in self.properties.properties:
         name = prop.name
         value = prop.value
         try:
             varname, scale = self.nest_translations[name]
             value = value * scale
         except (ValueError, KeyError):
             varname = self.nest_translations.get(name, name)
         value = UnitHandlerNEST.scale_value(Quantity(value, prop.units))
         if varname is not None:
             trans_params[varname] = value
     self.nest_cell = nest.Create(nest_name, 1, trans_params)
     try:
         receptor_types = nest.GetDefaults(nest_name)['receptor_types']
     except KeyError:
         receptor_types = None
     if self.input_signal is not None:
         port_name, signal = self.input_signal
         generator = nest.Create(
             'step_current_generator', 1,
             {'amplitude_values': pq.Quantity(signal, 'pA'),
              'amplitude_times': (pq.Quantity(signal.times, 'ms') -
                                  self.device_delay * pq.ms),
              'start': float(pq.Quantity(signal.t_start, 'ms')),
              'stop': float(pq.Quantity(signal.t_stop, 'ms'))})
         nest.Connect(generator, self.nest_cell,
                      syn_spec={'receptor_type':
                                (receptor_types[port_name]
                                 if receptor_types else 0),
                                'delay': self.device_delay})
     if self.input_train is not None:
         port_name, signal, connection_properties = self.input_train
         try:
             _, scale = self.nest_translations[port_name]
         except KeyError:
             scale = 1.0
         # FIXME: Should scale units
         weight = connection_properties[0].value * scale
         spike_times = (pq.Quantity(signal, 'ms') +
                        (pq.ms - self.device_delay * pq.ms))
         if any(spike_times < 0.0):
             raise Pype9RuntimeError(
                 "Some spike are less than minimum delay and so can't be "
                 "played into cell ({})".format(
                     ', '.join(
                         str(t) for t in
                         spike_times[spike_times < self.device_delay])))
         generator = nest.Create(
             'spike_generator', 1, {'spike_times': spike_times})
         nest.Connect(generator, self.nest_cell,
                      syn_spec={'receptor_type':
                                (receptor_types[port_name]
                                 if receptor_types else 0),
                                'delay': float(self.device_delay),
                                'weight': float(weight)})
     self.nest_multimeter = nest.Create(
         'multimeter', 1, {"interval": self.to_float(self.dt, 'ms')})
     nest.SetStatus(
         self.nest_multimeter,
         {'record_from': [self.nest_state_variable]})
     nest.Connect(self.nest_multimeter, self.nest_cell)
     trans_states = {}
     for name, qty in self.initial_states.iteritems():
         try:
             varname, scale = self.nest_translations[name]
             qty = qty * scale
         except (ValueError, KeyError):
             varname = self.nest_translations.get(name, name)
         value = UnitHandlerNEST.scale_value(qty)
         if varname is not None:
             trans_states[varname] = value
     nest.SetStatus(self.nest_cell, trans_states)