Exemplo n.º 1
0
 private void SimulatedReadoutData()
 {
     ReadoutData rd = new ReadoutData(2);
 }
Exemplo n.º 2
0
 public void AddHist(ReadoutData rd)
 {
     Channel0Hist.Add(rd.Channel[0].Energies());
     Channel1Hist.Add(rd.Channel[1].Energies());
 }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
 /// <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;
 }
Exemplo n.º 5
0
        /// <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;
        }
Exemplo n.º 6
0
        /// <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);
        }