示例#1
0
        public static string FrameParametersToString(FrameParams frameParams)
        {
            var sb = new StringBuilder();

            string separator = Environment.NewLine;

            sb.Append("avg TOF length = \t" + frameParams.GetValueDouble(FrameParamKeyType.AverageTOFLength));
            sb.Append(separator);
            sb.Append("cal intercept = \t" + frameParams.GetValueDouble(FrameParamKeyType.CalibrationIntercept));
            sb.Append(separator);
            sb.Append("cal slope = \t" + frameParams.GetValueDouble(FrameParamKeyType.CalibrationSlope));
            sb.Append(separator);
            sb.Append("frame type = \t" + frameParams.GetValueDouble(FrameParamKeyType.FrameType));
            sb.Append(separator);
            sb.Append("pressure back = \t" + frameParams.GetValueDouble(FrameParamKeyType.PressureBack));
            sb.Append(separator);
            sb.Append("pressure front = \t" + frameParams.GetValueDouble(FrameParamKeyType.PressureFront));
            sb.Append(separator);
            sb.Append("high pressure funnel pressure= \t" + frameParams.GetValueDouble(FrameParamKeyType.HighPressureFunnelPressure));
            sb.Append(separator);
            sb.Append("ion funnel trap pressure= \t" + frameParams.GetValueDouble(FrameParamKeyType.IonFunnelTrapPressure));
            sb.Append(separator);
            sb.Append("quadrupole pressure = \t" + frameParams.GetValueDouble(FrameParamKeyType.QuadrupolePressure));
            sb.Append(separator);
            sb.Append("rear ion funnel pressure = \t" + frameParams.GetValueDouble(FrameParamKeyType.RearIonFunnelPressure));
            sb.Append(separator);
            sb.Append("start time = \t" + frameParams.GetValueDouble(FrameParamKeyType.StartTimeMinutes));
            sb.Append(separator);
            sb.Append("num scans = \t" + frameParams.GetValueInt32(FrameParamKeyType.Scans));
            sb.Append(separator);
            sb.Append("IMF profile = \t" + frameParams.GetValue(FrameParamKeyType.MultiplexingEncodingSequence));

            return(sb.ToString());
        }
示例#2
0
        /// <summary>
        /// Display frame parameters.
        /// </summary>
        /// <param name="fp">
        /// The fp.
        /// </param>
        public static void DisplayFrameParameters(FrameParams fp)
        {
            var sb = new StringBuilder();

            var separator = Environment.NewLine;

            sb.Append("avg TOF length = \t" + fp.GetValueDouble(FrameParamKeyType.AverageTOFLength, 0));
            sb.Append(separator);
            sb.Append("cal intercept = \t" + fp.CalibrationIntercept);
            sb.Append(separator);
            sb.Append("cal slope = \t" + fp.CalibrationSlope);
            sb.Append(separator);
            sb.Append("frame type = \t" + fp.FrameType);
            sb.Append(separator);
            sb.Append("pressure back = \t" + fp.GetValueDouble(FrameParamKeyType.PressureBack, 0));
            sb.Append(separator);
            sb.Append("pressure front = \t" + fp.GetValueDouble(FrameParamKeyType.PressureFront, 0));
            sb.Append(separator);
            sb.Append("high pressure funnel pressure= \t" + fp.GetValueDouble(FrameParamKeyType.HighPressureFunnelPressure, 0));
            sb.Append(separator);
            sb.Append("ion funnel trap pressure= \t" + fp.GetValueDouble(FrameParamKeyType.IonFunnelTrapPressure, 0));
            sb.Append(separator);
            sb.Append("quadrupole pressure = \t" + fp.GetValueDouble(FrameParamKeyType.QuadrupolePressure, 0));
            sb.Append(separator);
            sb.Append("rear ion funnel pressure = \t" + fp.GetValueDouble(FrameParamKeyType.RearIonFunnelPressure, 0));
            sb.Append(separator);
            sb.Append("start time = \t" + fp.GetValueDouble(FrameParamKeyType.StartTimeMinutes, 0));
            sb.Append(separator);
            sb.Append("num scans = \t" + fp.Scans);
            sb.Append(separator);
            sb.Append("IMF profile = \t" + fp.GetValue(FrameParamKeyType.MultiplexingEncodingSequence));

            Console.WriteLine(sb.ToString());
        }
示例#3
0
    private void Update()
    {
        // each batch will be updated in separate thread
        for (int batchIndex = 0; batchIndex < m_batches.Length; batchIndex++)
        {
            // to avoid allocations while creating delegates like ()=> UpdateBatch(frameParams)
            // i'm sending frame params as object and then cast it to FrameParams
            FrameParams frameParams = new FrameParams
            {
                BatchIndex = batchIndex,
                DeltaTime  = Time.deltaTime,
                Time       = Time.time
            };

            // creation of new task allocates some memory but i can't do anythung with it
            m_tasks[batchIndex] = Task.Factory.StartNew(UpdateBatch, frameParams);
        }

        // just wait all tasks to be completed
        Task.WaitAll(m_tasks);

        // and send all objects to render
        for (int batchIndex = 0; batchIndex < m_batches.Length; batchIndex++)
        {
            Graphics.DrawMeshInstanced(m_mesh, 0, m_material, m_batches[batchIndex].Objects);
        }
    }
示例#4
0
    private void UpdateBatch(object input)
    {
        FrameParams frameParams = (FrameParams)input;

        for (int cloudIndex = 0; cloudIndex < m_batches[frameParams.BatchIndex].Length; cloudIndex++)
        {
            // just to simplify code below
            int i = frameParams.BatchIndex; int j = cloudIndex;

            // calculate noise based on coordinates of cloud and current time
            float x     = m_batches[i].Clouds[j].X * m_texScale + frameParams.Time * m_timeScale;
            float y     = m_batches[i].Clouds[j].Y * m_texScale + frameParams.Time * m_timeScale;
            float noise = Mathf.PerlinNoise(x, y);

            // based on noise we can understand scale direction
            int dir = noise > m_minNoiseSize ? 1 : -1;

            // calcuate new scale and clamp it
            float shift = m_scaleSize * frameParams.DeltaTime * dir;
            float scale = m_batches[i].Clouds[j].Scale + shift;
            scale = Mathf.Clamp(scale, 0, m_maxScale);
            m_batches[i].Clouds[j].Scale = scale;

            // set new scale to object matrix
            m_batches[i].Objects[j].m00 = scale;
            m_batches[i].Objects[j].m11 = scale;
            m_batches[i].Objects[j].m22 = scale;
        }
    }
示例#5
0
    private void UpdateBatch(object input)
    {
        FrameParams frameParams = (FrameParams)input;

        for (int cloudIndex = 0; cloudIndex < _batches[frameParams.BatchIndex].Length; cloudIndex++)
        {
            int i = frameParams.BatchIndex;
            int j = cloudIndex;

            float x     = _batches[i].Clouds[j].X * TexScale + frameParams.Time * Speed.x;
            float y     = _batches[i].Clouds[j].Y * TexScale + frameParams.Time * Speed.y;
            float noise = Mathf.PerlinNoise(x, y);

            int dir = noise > MinNoiseSize ? 1 : -1;

            float shift = ScaleSize * frameParams.DeltaTime * Speed.magnitude * dir;
            float scale = _batches[i].Clouds[j].Scale + shift;
            scale = Mathf.Clamp(scale, 0, MaxScale);
            _batches[i].Clouds[j].Scale = scale;

            _batches[i].Objects[j].m00 = scale;
            _batches[i].Objects[j].m11 = scale;
            _batches[i].Objects[j].m22 = scale;
        }
    }
示例#6
0
        public FrameParams CalcFrame(OverlayInfo info)
        {
            var frame   = new FrameParams();
            var srcSize = SourceInfo.Size;

            frame.MergedWidth  = srcSize.Width + Math.Max(-info.X, 0) + Math.Max(info.Width + info.X - srcSize.Width, 0);
            frame.MergedHeight = srcSize.Height + Math.Max(-info.Y, 0) + Math.Max(info.Height + info.Y - srcSize.Height, 0);
            frame.MergedAr     = frame.MergedWidth / (double)frame.MergedHeight;
            frame.OutAr        = TargetInfo.Width / (double)TargetInfo.Height;
            var wider = frame.MergedAr > frame.OutAr;

            if (Mode == FramingMode.FitBorders)
            {
                wider = !wider;
            }
            frame.FinalWidth  = wider ? TargetInfo.Width : (int)Math.Round(TargetInfo.Width * (frame.MergedAr / frame.OutAr));
            frame.FinalHeight = wider ? (int)Math.Round(TargetInfo.Height * (frame.OutAr / frame.MergedAr)) : TargetInfo.Height;
            frame.FinalX      = wider ? 0 : (TargetInfo.Width - frame.FinalWidth) / 2;
            frame.FinalY      = wider ? (TargetInfo.Height - frame.FinalHeight) / 2 : 0;
            return(frame);
        }
示例#7
0
    private void Update()
    {
        _deltaTime = _time != null ? TimeScaleManager.Delta : Time.deltaTime;
        for (int batchIndex = 0; batchIndex < _batches.Length; batchIndex++)
        {
            FrameParams frameParams = new FrameParams
            {
                BatchIndex = batchIndex,
                DeltaTime  = _deltaTime,
                Time       = _time != null ? TimeScaleManager.TimeScale * Time.time : Time.time
            };

            _tasks[batchIndex] = Task.Factory.StartNew(UpdateBatch, frameParams);
        }

        Task.WaitAll(_tasks);

        for (int batchIndex = 0; batchIndex < _batches.Length; batchIndex++)
        {
            Graphics.DrawMeshInstanced(CloudMesh, 0, CloudMaterial, _batches[batchIndex].Objects);
        }
    }
        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);
            }
        }
示例#9
0
        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);
            }
        }