private void SimulatedReadoutData() { ReadoutData rd = new ReadoutData(2); }
public void AddHist(ReadoutData rd) { Channel0Hist.Add(rd.Channel[0].Energies()); Channel1Hist.Add(rd.Channel[1].Energies()); }
public void SetWaveform(ReadoutData rd) { if (rd.Channel[0].Event.Length > 0 && rd.Channel[0].Event[0].Waveform != null) { Channel0DigitalProbe1 = CopyByteArray(rd.Channel[0].Event[0].Waveform.DTrace1); Channel0DigitalProbe2 = CopyByteArray(rd.Channel[0].Event[0].Waveform.DTrace2); Channel0VirtualProbe1 = CopyUShortArray(rd.Channel[0].Event[0].Waveform.Trace1); Channel0VirtualProbe2 = CopyUShortArray(rd.Channel[0].Event[0].Waveform.Trace2); } if (rd.Channel[1].Event.Length > 0 && rd.Channel[1].Event[0].Waveform != null) { Channel1DigitalProbe1 = CopyByteArray(rd.Channel[1].Event[0].Waveform.DTrace1); Channel1DigitalProbe2 = CopyByteArray(rd.Channel[1].Event[0].Waveform.DTrace2); Channel1VirtualProbe1 = CopyUShortArray(rd.Channel[1].Event[0].Waveform.Trace1); Channel1VirtualProbe2 = CopyUShortArray(rd.Channel[1].Event[0].Waveform.Trace2); } }
/// <summary> /// Simulation update /// </summary> /// <returns></returns> public bool OnSimulationUpdate(ReadoutData rd) { //Debug.WriteLine("boooo {0}", rd.Channel[0].Energies().Count); Log.MCAData.AddHist(rd); Log.MCAData.SetWaveform(rd); return true; }
/// <summary> /// Update histogram /// </summary> /// <param name="rd"></param> /// <returns></returns> public bool OnExperimentUpdate(ReadoutData rd) { Log.MCAData.AddHist(rd); Log.MCAData.SetWaveform(rd); return true; }
/// <summary> /// Computes the readout layer. /// </summary> /// <param name="predictors">The predictors.</param> /// <param name="readoutData">The detailed computed data.</param> /// <returns>An output vector of the computed and naturalized values.</returns> public double[] Compute(double[] predictors, out ReadoutData readoutData) { //Check readyness if (!Trained) { throw new InvalidOperationException($"Readout layer is not trained. Build function has to be called before Compute function can be used."); } //Normalize predictors double[] nrmPredictors = NormalizePredictors(predictors); //Compute all readout units CompositeResult[] unitsResults = ComputeReadoutUnits(nrmPredictors, out double[] nrmOutputVector); //Build readout units results ReadoutData.ReadoutUnitData[] readoutUnitsData = new ReadoutData.ReadoutUnitData[unitsResults.Length]; for (int unitIdx = 0; unitIdx < readoutUnitsData.Length; unitIdx++) { readoutUnitsData[unitIdx] = new ReadoutData.ReadoutUnitData() { Name = _readoutUnitCollection[unitIdx].Name, Index = _readoutUnitCollection[unitIdx].Index, Task = _readoutUnitCollection[unitIdx].Task, CompResult = unitsResults[unitIdx], RawNrmDataValue = nrmOutputVector[unitIdx], RawNatDataValue = _outputFeatureFilterCollection[unitIdx].ApplyReverse(nrmOutputVector[unitIdx]), FinalNatDataValue = _outputFeatureFilterCollection[unitIdx].ApplyReverse(nrmOutputVector[unitIdx]) }; } //Compute all "One Takes All" groups ReadoutData.OneTakesAllGroupData[] groupsData = null; if (_oneTakesAllGroupCollection != null) { groupsData = new ReadoutData.OneTakesAllGroupData[_oneTakesAllGroupCollection.Length]; for (int groupIdx = 0; groupIdx < _oneTakesAllGroupCollection.Length; groupIdx++) { int groupInnerWinnerIdx = _oneTakesAllGroupCollection[groupIdx].Compute(unitsResults, out CompositeResult groupResult, out double[] groupOutputVector); int layerWinnerIdx = _oneTakesAllGroupCollection[groupIdx].MemberReadoutUnitIndexCollection[groupInnerWinnerIdx]; groupsData[groupIdx] = new ReadoutData.OneTakesAllGroupData() { GroupName = _oneTakesAllGroupCollection[groupIdx].Name, WinningReadoutUnitName = _readoutUnitCollection[layerWinnerIdx].Name, WinningReadoutUnitIndex = layerWinnerIdx, MemberWinningGroupIndex = groupInnerWinnerIdx, MemberReadoutUnitIndexes = _oneTakesAllGroupCollection[groupIdx].MemberReadoutUnitIndexCollection.ToArray(), CompResult = groupResult, MemberProbabilities = groupOutputVector }; //Update nrmOuputVector for (int i = 0; i < _oneTakesAllGroupCollection[groupIdx].MemberReadoutUnitIndexCollection.Count; i++) { if (i == groupInnerWinnerIdx) { nrmOutputVector[_oneTakesAllGroupCollection[groupIdx].MemberReadoutUnitIndexCollection[i]] = InternalDataRange.Max; } else { nrmOutputVector[_oneTakesAllGroupCollection[groupIdx].MemberReadoutUnitIndexCollection[i]] = InternalDataRange.Min; } //nrmOutputVector[_oneTakesAllGroupCollection[groupIdx].MemberReadoutUnitIndexCollection[i]] = groupOutputVector[i]; } } } //Output data finalization double[] natOuputVector = NaturalizeOutputs(nrmOutputVector); for (int unitIdx = 0; unitIdx < readoutUnitsData.Length; unitIdx++) { readoutUnitsData[unitIdx].FinalNatDataValue = natOuputVector[unitIdx]; } readoutData = new ReadoutData(nrmOutputVector, natOuputVector, readoutUnitsData, groupsData); return(natOuputVector); }