private static Offset <ObserverResult> BuildObserverOffset(FlatBufferBuilder builder, ObserverDataContainer observer) { var neuronId = NeuronId.CreateNeuronId(builder, observer.Definition.NeuronIndex, observer.Definition.RegionIndex); var observerType = builder.CreateString(observer.Definition.Type); var observerOffset = Observer.CreateObserver(builder, neuronId, observerType); VectorOffset?metadataOffset = null; if (observer.Data.Metadata != null) { metadataOffset = ObserverResult.CreateMetadataVector(builder, observer.Data.Metadata); } VectorOffset?plainDataOffset = null; if (observer.Data.PlainData != null) { plainDataOffset = ObserverResult.CreatePlainDataVector(builder, observer.Data.PlainData); } VectorOffset?floatDataOffset = null; if (observer.Data.FloatData != null) { floatDataOffset = ObserverResult.CreateFloatDataVector(builder, observer.Data.FloatData); } ObserverResult.StartObserverResult(builder); ObserverResult.AddObserver(builder, observerOffset); if (metadataOffset.HasValue) { ObserverResult.AddMetadata(builder, metadataOffset.Value); } if (plainDataOffset.HasValue) { ObserverResult.AddPlainData(builder, plainDataOffset.Value); } if (floatDataOffset.HasValue) { ObserverResult.AddFloatData(builder, floatDataOffset.Value); } return(ObserverResult.EndObserverResult(builder)); }
private void ApplyObservers(SimulationModel model, ModelResponse diff) { for (int i = 0; i < diff.ObserverResultsLength; i++) { ObserverResult observerData = diff.GetObserverResults(i); NeuronId neuronId = observerData.Observer.NeuronId; var definition = new ObserverDefinition(neuronId.Neuron, neuronId.Region, observerData.Observer.Type); model.Observers[definition] = new ObserverData( CopyObserverArrayData(observerData.MetadataLength, (n => observerData.GetMetadata(n))), observerData.GetPlainDataBytes()?.ToArray(), CopyObserverArrayData(observerData.FloatDataLength, (n => observerData.GetFloatData(n)))); } }