Beispiel #1
0
        public void MatrixCreatorTest_GetHammingMatrix()
        {
            //arrange
            var expectedG = new byte[, ]
            {
                { 1, 0, 0, 0, 1, 1, 0 },
                { 0, 1, 0, 0, 1, 0, 1 },
                { 0, 0, 1, 0, 1, 1, 1 },
                { 0, 0, 0, 1, 0, 1, 1 }
            };
            var expectedH = new byte[, ]
            {
                { 1, 1, 1, 0, 1, 0, 0 },
                { 1, 0, 1, 1, 0, 1, 0 },
                { 0, 1, 1, 1, 0, 0, 1 }
            };
            //act
            var m       = new MatrixCreator();
            var actualG = m.GeneratingMatrix;
            var actualH = m.HammingCodesMatrix;

            //assert
            CollectionAssert.AreEqual(expectedG, actualG);
            CollectionAssert.AreEqual(expectedH, actualH);
        }
        public void AddNullToMatrixExpectedException()
        {
            DataCreator <int, Position <IPoint <int> > > dataCreator = new MatrixCreator <int, Position <IPoint <int> > >();
            var matrix = dataCreator.Create();

            matrix.Add(null);
        }
Beispiel #3
0
        public void CreateMatrix()
        {
            DataCreator <int, Position <IPoint <int> > > dataCreator = new MatrixCreator <int, Position <IPoint <int> > >();
            var matrix         = dataCreator.Create();
            var expectedMatrix = new Matrix <Position <IPoint <int> > >();

            var expectedType = expectedMatrix.GetType();
            var realType     = matrix.GetType();

            Assert.AreEqual(expectedType, realType);
        }
        private void EncodedCipherRecieved(string encodedText)
        {
            _matrix = MatrixCreator.GetCodeConstructionsFromCipher(encodedText);
            var coll = new List <HCodeBlockViewModel>();

            foreach (var constr in _matrix)
            {
                coll.Add(new HCodeBlockViewModel(constr));
            }

            HCodesCollection = new ObservableCollection <HCodeBlockViewModel>(coll);
        }
        public MatrixViewModel(IEventAggregator ea)
        {
            _eventAggregator = ea;
            _eventAggregator.GetEvent <EnterTextEncodedEvent>().Subscribe(EncodedCipherRecieved);

            GMatrixEditCommand = new DelegateCommand <DataGridCellEditEndingEventArgs>(OnCellEdited);
            SendMessageCommand = new DelegateCommand(SendMessage, CanSend).ObservesProperty(() => HCodesCollection);

            MatrixCreator             = new MatrixCreator();
            GeneratingCodesCollection = new ObservableCollection <ObservableCollection <byte> >
                                            (ConvertTwoDimArrayToListArrays(MatrixCreator.GeneratingMatrix));
            CheckCodesCollection = new ObservableCollection <ObservableCollection <byte> >
                                       (ConvertTwoDimArrayToListArrays(MatrixCreator.HammingCodesMatrix));
        }
        public static IDataCollection <Container <Matrix <Position <IPoint <int> > > > > CreateContainerCollections()
        {
            var positionCreator = new PositionCreator <int, IPoint <int> >();
            var firstPosition   = positionCreator.Create();
            var secondPosition  = positionCreator.Create();
            var thirdPosition   = positionCreator.Create();
            var fourthPosition  = positionCreator.Create();
            var fifthPosition   = positionCreator.Create();

            for (var i = 0; i < 10; i++)
            {
                firstPosition.Add(new Point3D <int>(i, i, i));
                secondPosition.Add(new Point3D <int>(i, i, i));
                thirdPosition.Add(new Point3D <int>(i, i, i));
                fourthPosition.Add(new Point3D <int>(i, i, i));
                fifthPosition.Add(new Point3D <int>(i, i, i));
            }

            var matrixCreator = new MatrixCreator <int, Position <IPoint <int> > >();
            var firstMatrix   = matrixCreator.Create();
            var secondMatrix  = matrixCreator.Create();
            var thirdMatrix   = matrixCreator.Create();

            firstMatrix.Add((Position <IPoint <int> >)firstPosition);
            firstMatrix.Add((Position <IPoint <int> >)secondPosition);
            firstMatrix.Add((Position <IPoint <int> >)thirdPosition);

            secondMatrix.Add((Position <IPoint <int> >)fifthPosition);
            secondMatrix.Add((Position <IPoint <int> >)fourthPosition);
            secondMatrix.Add((Position <IPoint <int> >)thirdPosition);

            thirdMatrix.Add((Position <IPoint <int> >)secondPosition);
            thirdMatrix.Add((Position <IPoint <int> >)fourthPosition);
            thirdMatrix.Add((Position <IPoint <int> >)thirdPosition);

            var containerCreator = new ContainerCreator <int, Matrix <Position <IPoint <int> > > >();
            var container        = containerCreator.Create();

            container.Add((Matrix <Position <IPoint <int> > >)firstMatrix);
            container.Add((Matrix <Position <IPoint <int> > >)secondMatrix);
            container.Add((Matrix <Position <IPoint <int> > >)thirdMatrix);

            var containerColectionCreator = new ContainerCollectionCreator <int, Container <Matrix <Position <IPoint <int> > > > >();
            var containerCollection       = containerColectionCreator.Create();

            containerCollection.Add((Container <Matrix <Position <IPoint <int> > > >)container);
            return(containerCollection);
        }
Beispiel #7
0
        public void GetCodeConstructionsFromCipherTest()
        {
            //arrange
            var cipher   = "0010010010111011111111";
            var defaultG = new byte[, ]
            {
                { 1, 0, 0, 0, 1, 1, 0 },
                { 0, 1, 0, 0, 1, 0, 1 },
                { 0, 0, 1, 0, 1, 1, 1 },
                { 0, 0, 0, 1, 0, 1, 1 }
            };
            var expectedCodes = new byte[][]
            {
                new byte[] { 0, 0, 0, 1, 0, 1, 1, 1 },
                new byte[] { 1, 0, 1, 0, 0, 1, 0, 1 },
                new byte[] { 0, 1, 0, 1, 1, 0, 1, 0 },
                new byte[] { 0, 1, 0, 1, 1, 0, 1, 0 },
                new byte[] { 1, 1, 1, 1, 1, 1, 1, 1 },
                new byte[] { 0, 1, 1, 1, 0, 1, 0, 0 }
            };
            //act
            var m           = new MatrixCreator(defaultG);
            var actualCodes = m.GetCodeConstructionsFromCipher(cipher);

            //assert
            Assert.That.AreEqual(expectedCodes, actualCodes, (
                                     (m1, m2) =>
            {
                if (m1.Where((t, i) => t.Length != m2[i].Length).Any())
                {
                    return(false);
                }

                for (var j = 0; j < m2.Length; j++)
                {
                    for (var k = 0; k < m2[0].Length; k++)
                    {
                        if (m1[j][k] != m2[j][k])
                        {
                            return(false);
                        }
                    }
                }
                return(true);
            }));
        }
Beispiel #8
0
        public void MatrixCreatorTest_ConstructorGenerateMatrix()
        {
            //arrange
            var expectedG = new byte[, ]
            {
                { 1, 0, 0, 0, 1, 1, 0 },
                { 0, 1, 0, 0, 1, 0, 1 },
                { 0, 0, 1, 0, 1, 1, 1 },
                { 0, 0, 0, 1, 0, 1, 1 }
            };

            //act
            var m       = new MatrixCreator(expectedG);
            var actualG = m.GeneratingMatrix;

            //assert
            CollectionAssert.AreEqual(expectedG, actualG);
        }
 private void OnGenMatrixChanged()
 {
     MatrixCreator        = new MatrixCreator(ConvertListArraysToTwoDimArray(GeneratingCodesCollection));
     CheckCodesCollection = new ObservableCollection <ObservableCollection <byte> >
                                (ConvertTwoDimArrayToListArrays(MatrixCreator.HammingCodesMatrix));
 }
        public void TestDemultiplexUIMFSingleFrame()
        {
            // Old: const int numSegments = 24;
            const int numberOfBits  = 4;
            const int lcFramesToSum = 1;

            const string matrixString = "100110101111000";

            var multiplierMatrix     = MatrixCreator.CreateMatrixForDemultiplexing(matrixString);
            var scaledMatrix         = (DenseMatrix)multiplierMatrix.Multiply(2.0 / 16.0);
            var inversedScaledMatrix = (DenseMatrix)scaledMatrix.Inverse();

            Assert.AreEqual(15, inversedScaledMatrix.ColumnCount);
            Assert.AreEqual(15, inversedScaledMatrix.RowCount);

            var expectMatrixVals = new List <int>
            {
                1,
                -1,
                -1,
                1,
                1,
                -1,
                1,
                -1,
                1,
                1,
                1,
                1,
                -1
            };

            for (var i = 0; i < expectMatrixVals.Count; i++)
            {
                Assert.AreEqual(expectMatrixVals[i], inversedScaledMatrix.Values[i], 0.01, "inversedScaledMatrix has unexpected values");
            }

            var uimfFile = VerifyLocalUimfFile(@"Test_Data\9pep_mix_1uM_4bit_50_12Dec11_encoded.uimf");

            if (uimfFile == null)
            {
                var currentDirectory = new DirectoryInfo(".");
                Assert.Fail("UIMF file not found; Current working directory is " + currentDirectory.FullName);
            }

            Console.WriteLine("Opening " + uimfFile.FullName);

            var uimfReader = new DataReader(uimfFile.FullName);

            var globalParams = uimfReader.GetGlobalParams();
            var binWidth     = globalParams.BinWidth;
            var frameNumbers = new List <int>(uimfReader.GetFrameNumbers(UIMFData.FrameType.MS1));

            frameNumbers.AddRange(uimfReader.GetFrameNumbers(UIMFData.FrameType.Calibration));
            frameNumbers.AddRange(uimfReader.GetFrameNumbers(UIMFData.FrameType.MS2));
            frameNumbers.Sort();
            var numFrames = frameNumbers.Count;

            Console.WriteLine("Total Data Frames = " + numFrames);

            var baseFileName = Path.GetFileNameWithoutExtension(uimfFile.Name);

            string newFileName;

            if (baseFileName.Contains("encoded"))
            {
                newFileName = baseFileName.Replace("encoded", "decoded") + ".uimf";
            }
            else
            {
                newFileName = baseFileName + "_decoded.uimf";
            }

            if (uimfFile.DirectoryName == null)
            {
                Assert.Fail("Unable to determine the parent directory of " + uimfFile.FullName);
            }

            var newFile = new FileInfo(Path.Combine(uimfFile.DirectoryName, newFileName));

            var bitSequence = DemultiplexerOptions.GetBitSequence(numberOfBits);

            Assert.AreEqual(matrixString, bitSequence, "Unexpected bit sequence: " + bitSequence + "; expecting " + matrixString);

            if (newFile.Exists)
            {
                Console.WriteLine("Deleting existing decoded UIMF file: " + newFile.FullName);
                try
                {
                    newFile.Delete();
                }
                catch (Exception ex)
                {
                    Assert.Fail("Error deleting file: " + ex.Message);
                }
            }

            Console.WriteLine("Demultiplexing to create " + newFile.FullName);

            var executingAssembly = System.Reflection.Assembly.GetExecutingAssembly();

            using (var uimfWriter = new DataWriter(newFile.FullName, executingAssembly))
            {
                uimfWriter.CreateTables(globalParams.GetValue(GlobalParamKeyType.DatasetType));
                uimfWriter.InsertGlobal(globalParams);


                // Old method of instantiating the Demultiplexer:
                // var firstFrameParams = uimfReader.GetFrameParams(1);
                // var averageTOFLength = firstFrameParams.GetValueDouble(FrameParamKeyType.AverageTOFLength);
                // Demultiplexer demultiplexer = new Demultiplexer(inversedScaledMatrix, numSegments, binWidth, averageTOFLength);

                var demultiplexerOptions = new DemultiplexerOptions();
                var demultiplexer        = new Demultiplexer(demultiplexerOptions);
                var scanToIndexMap       = demultiplexerOptions.ScanToIndexMap;

                var segmentLength = demultiplexer.NumberOfSegments;

                foreach (var currentFrameNumber in frameNumbers)
                {
                    Console.WriteLine("Processing Frame " + currentFrameNumber);

                    // Setup the frame in the UIMFWriter
                    var frameParams = uimfReader.GetFrameParams(currentFrameNumber);
                    uimfWriter.InsertFrame(currentFrameNumber, frameParams);

                    // If we are dealing with a calibration frame, we just want to write the data to the new UIMF file as is
                    if (frameParams.FrameType == UIMFData.FrameType.Calibration)
                    {
                        for (var i = 0; i < frameParams.Scans; i++)
                        {
                            var intensities = uimfReader.GetSpectrumAsBins(
                                currentFrameNumber,
                                currentFrameNumber,
                                frameParams.FrameType,
                                startScanNumber: i,
                                endScanNumber: i);

                            var nonZeroCount = intensities.Count(x => x > 0);
                            uimfWriter.InsertScan(currentFrameNumber, frameParams, i, intensities, binWidth);
                        }

                        continue;
                    }

                    // Data pulled from the UIMF file will not be re-ordered
                    const bool isReordered = false;

                    // Get the data of the frame from the UIMF File
                    var arrayOfIntensityArrays = UIMFDemultiplexer.UIMFDemultiplexer.GetIntensityBlockForDemultiplexing(
                        uimfReader,
                        currentFrameNumber,
                        frameParams.FrameType,
                        segmentLength,
                        scanToIndexMap,
                        isReordered,
                        lcFramesToSum);

                    // Demultiplex the frame, which updates the array
                    var scanDataEnumerable = demultiplexer.DemultiplexFrame(arrayOfIntensityArrays, isReordered);

                    var sortByScanNumberQuery = (from scanData in scanDataEnumerable
                                                 orderby scanData.ScanNumber
                                                 select scanData).ToList();

                    Assert.AreEqual(93, sortByScanNumberQuery.Count);

                    foreach (var scanData in sortByScanNumberQuery)
                    {
                        var dataPoints = new List <Tuple <int, int> >(scanData.BinsToIntensitiesMap.Count);
                        dataPoints.AddRange(from dataPoint in scanData.BinsToIntensitiesMap
                                            where dataPoint.Value != 0
                                            orderby dataPoint.Key
                                            select new Tuple <int, int>(dataPoint.Key, dataPoint.Value));


                        uimfWriter.InsertScan(
                            currentFrameNumber,
                            frameParams,
                            scanData.ScanNumber,
                            dataPoints,
                            binWidth,
                            0);
                    }

                    uimfWriter.FlushUimf();
                }
            }
        }