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(); } } }
public void CreateDB_test1(int frameCountToWrite) { DataReaderTests.DataReaderTests.PrintMethodName(System.Reflection.MethodBase.GetCurrentMethod()); var fiTarget = new FileInfo(FileRefs.WriterTest10Frames); if (fiTarget.Exists) { fiTarget.Delete(); } var executingAssembly = System.Reflection.Assembly.GetExecutingAssembly(); using (var writer = new DataWriter(fiTarget.FullName, executingAssembly)) { writer.CreateTables("int"); var globalParameters = new GlobalParams(); globalParameters.AddUpdateValue(GlobalParamKeyType.Bins, 400000) .AddUpdateValue(GlobalParamKeyType.BinWidth, 0.25) .AddUpdateValue(GlobalParamKeyType.DateStarted, DateTime.Now) .AddUpdateValue(GlobalParamKeyType.NumFrames, frameCountToWrite) .AddUpdateValue(GlobalParamKeyType.TOFIntensityType, "ADC"); writer.InsertGlobal(globalParameters) .AddUpdateGlobalParameter(GlobalParamKeyType.TimeOffset, 1) .AddUpdateGlobalParameter(GlobalParamKeyType.InstrumentName, "IMS_Test"); Console.WriteLine("Adding frame 1"); const float SECONDS_PER_FRAME = 1.25f; var randGenerator = new Random(); for (var frameNum = 1; frameNum <= frameCountToWrite; frameNum++) { var fp = new FrameParams(); fp.AddUpdateValue(FrameParamKeyType.FrameType, (int)UIMFData.FrameType.MS1) .AddUpdateValue(FrameParamKeyType.CalibrationSlope, 0.3476349957054481) .AddUpdateValue(FrameParamKeyType.CalibrationIntercept, 0.03434148864746093) .AddUpdateValue(FrameParamKeyType.AverageTOFLength, 163366.6666666667) .AddUpdateValue(FrameParamKeyType.StartTimeMinutes, frameNum * SECONDS_PER_FRAME) .AddUpdateValue(FrameParamKeyType.Scans, 600); writer.InsertFrame(frameNum, fp); for (var scanNumber = 1; scanNumber <= 600; scanNumber++) { if (scanNumber == 1 | scanNumber % 100 == 0) { Console.WriteLine("Adding frame " + frameNum + ", scan " + scanNumber); } var intensities = new int[148000]; for (var i = 0; i < intensities.Length; i++) { var nextRandom = randGenerator.Next(0, 255); if (nextRandom < 250) { intensities[i] = 0; } else { intensities[i] = nextRandom; } } writer.InsertScan(frameNum, fp, scanNumber, intensities, globalParameters.BinWidth); } } writer.UpdateGlobalStats(); Console.WriteLine("Wrote 10 frames of data to " + fiTarget.FullName); } }
private static void WriterTest() { var fiTestFile = new FileInfo("TestOutput.uimf"); try { if (fiTestFile.Exists) { fiTestFile.Delete(); } } catch (IOException) { Console.WriteLine("Existing " + fiTestFile.Name + " file exists and cannot be deleted (locked)"); return; } catch (Exception ex) { Console.WriteLine("Existing " + fiTestFile.Name + " file exists and cannot be deleted: " + ex.Message); return; } try { Console.WriteLine("Creating " + fiTestFile.FullName); using (var writer = new DataWriter(fiTestFile.FullName)) { writer.CreateTables(); var globalParameters = new GlobalParams(); globalParameters.AddUpdateValue(GlobalParamKeyType.Bins, 400000) .AddUpdateValue(GlobalParamKeyType.BinWidth, 0.25) .AddUpdateValue(GlobalParamKeyType.DateStarted, DateTime.Now) .AddUpdateValue(GlobalParamKeyType.TOFIntensityType, "ADC") .AddUpdateValue(GlobalParamKeyType.TOFCorrectionTime, 0.0); writer.InsertGlobal(globalParameters); globalParameters = writer.GetGlobalParams(); writer.AddUpdateGlobalParameter(GlobalParamKeyType.TimeOffset, 1) .AddUpdateGlobalParameter(GlobalParamKeyType.InstrumentName, "IMS_Test") .FlushUimf(); const float SECONDS_PER_FRAME = 1.25f; var randGenerator = new Random(); for (var frameNum = 1; frameNum <= 5; frameNum++) { var fp = new FrameParams(); fp.AddUpdateValue(FrameParamKeyType.FrameType, (int)UIMFLibrary.DataReader.FrameType.MS1) .AddUpdateValue(FrameParamKeyType.CalibrationSlope, 0.3476349957054481) .AddUpdateValue(FrameParamKeyType.CalibrationIntercept, 0.03434148864746093) .AddUpdateValue(FrameParamKeyType.AverageTOFLength, 163366.6666666667) .AddUpdateValue(FrameParamKeyType.StartTimeMinutes, frameNum * SECONDS_PER_FRAME); writer.InsertFrame(frameNum, fp) .AddUpdateFrameParameter(frameNum, FrameParamKeyType.Accumulations, "18") .AddUpdateFrameParameter(frameNum, FrameParamKeyType.TOFLosses, randGenerator.Next(0, 150).ToString()); for (var scanNumber = 1; scanNumber < 600; scanNumber++) { if (scanNumber == 1 | scanNumber % 100 == 0) { Console.WriteLine("Adding frame " + frameNum + ", scan " + scanNumber); } var intensities = new int[148000]; for (var i = 0; i < intensities.Length; i++) { var nextRandom = randGenerator.Next(0, 255); if (nextRandom < 250) { intensities[i] = 0; } else { intensities[i] = nextRandom; } } writer.InsertScan(frameNum, fp, scanNumber, intensities, globalParameters.BinWidth); } } } Console.WriteLine("Wrote 5 frames of data to \n" + fiTestFile.FullName); } catch (Exception ex) { Console.WriteLine("Error testing the writer: " + ex.Message); } }