/// <summary> /// The deep copy constructor /// </summary> /// <param name="source">Source instance</param> public InputEncoderSettings(InputEncoderSettings source) : this(source.FeedingCfg, source.VaryingFieldsCfg, source.CoordinatesCfg) { return; }
//Constructor /// <summary> /// Creates an initialized instance. /// </summary> /// <param name="inputEncoderCfg">The configuration of the input encoder.</param> public InputEncoder(InputEncoderSettings inputEncoderCfg) { _encoderCfg = (InputEncoderSettings)inputEncoderCfg.DeepClone(); //Steady fields _numOfSteadyFields = 0; _routedSteadyFieldIndexCollection = new List <int>(); if (_encoderCfg.FeedingCfg.FeedingType == InputFeedingType.Patterned) { FeedingPatternedSettings fps = (FeedingPatternedSettings)_encoderCfg.FeedingCfg; if (fps.SteadyFieldsCfg != null) { _numOfSteadyFields = fps.SteadyFieldsCfg.FieldCfgCollection.Count; for (int i = 0; i < fps.SteadyFieldsCfg.FieldCfgCollection.Count; i++) { if (fps.SteadyFieldsCfg.FieldCfgCollection[i].RouteToReadout) { _routedSteadyFieldIndexCollection.Add(i); } } } } //Varying fields _varyingFields = new List <InputField>(_encoderCfg.VaryingFieldsCfg.TotalNumOfFields); int[] coordinates = _encoderCfg.CoordinatesCfg.GetCoordinates(); int fieldIdx = _numOfSteadyFields; int inputNeuronStartIdx = 0; //External fields foreach (ExternalFieldSettings fieldCfg in _encoderCfg.VaryingFieldsCfg.ExternalFieldsCfg.FieldCfgCollection) { _varyingFields.Add(new InputField(fieldCfg.Name, fieldIdx++, coordinates, Interval.IntN1P1, fieldCfg.FeatureFilterCfg, _encoderCfg.VaryingFieldsCfg.InputSpikesCoderCfg, (fieldCfg.RouteToReadout && _encoderCfg.VaryingFieldsCfg.RouteToReadout), inputNeuronStartIdx )); inputNeuronStartIdx += _varyingFields[(fieldIdx - _numOfSteadyFields) - 1].NumOfInputNeurons; } //Internal input transformers and fields _internalInputTransformerCollection = new List <ITransformer>(); if (_encoderCfg.VaryingFieldsCfg.TransformedFieldsCfg != null) { List <string> names = _encoderCfg.VaryingFieldsCfg.GetNames(); foreach (TransformedFieldSettings fieldCfg in _encoderCfg.VaryingFieldsCfg.TransformedFieldsCfg.FieldCfgCollection) { _internalInputTransformerCollection.Add(TransformerFactory.Create(names, fieldCfg.TransformerCfg)); _varyingFields.Add(new InputField(fieldCfg.Name, fieldIdx++, coordinates, Interval.IntN1P1, fieldCfg.FeatureFilterCfg, _encoderCfg.VaryingFieldsCfg.InputSpikesCoderCfg, (fieldCfg.RouteToReadout && _encoderCfg.VaryingFieldsCfg.RouteToReadout), inputNeuronStartIdx )); inputNeuronStartIdx += _varyingFields[(fieldIdx - _numOfSteadyFields) - 1].NumOfInputNeurons; } } //Internal input generators and fields _internalInputGeneratorCollection = new List <IGenerator>(); if (_encoderCfg.VaryingFieldsCfg.GeneratedFieldsCfg != null) { foreach (GeneratedFieldSettings fieldCfg in _encoderCfg.VaryingFieldsCfg.GeneratedFieldsCfg.FieldCfgCollection) { _internalInputGeneratorCollection.Add(GeneratorFactory.Create(fieldCfg.GeneratorCfg)); _varyingFields.Add(new InputField(fieldCfg.Name, fieldIdx++, coordinates, Interval.IntN1P1, fieldCfg.FeatureFilterCfg, _encoderCfg.VaryingFieldsCfg.InputSpikesCoderCfg, (fieldCfg.RouteToReadout && _encoderCfg.VaryingFieldsCfg.RouteToReadout), inputNeuronStartIdx )); inputNeuronStartIdx += _varyingFields[(fieldIdx - _numOfSteadyFields) - 1].NumOfInputNeurons; } } _routedVaryingFieldCollection = new List <InputField>(_varyingFields.Count); foreach (InputField field in _varyingFields) { if (field.RouteToReadout) { _routedVaryingFieldCollection.Add(field); } } _varyingDataVectorLength = NonFixedVaryingDataVectorLength; NumOfTimePoints = VariableNumOfTimePoints; NumOfRoutedValues = 0; //Input processing queue _inputDataQueue = new List <double[]>(); ResetInputProcessingQueue(); return; }