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()); }
/// <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()); }
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); } }
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; } }
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; } }
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); }
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); } }
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); } }