private void button_refl_SecondStage_Click(object sender, EventArgs e) { if (!check_refl_MeanVelocity.Checked) { return; } if (string.IsNullOrWhiteSpace(textBox_refl_Contours.Text) || !File.Exists(textBox_refl_Contours.Text)) { return; } ProcessingFlag options = ProcessingFlag.None; if (check_refl_MeanVelocity.Checked) { options |= ProcessingFlag.MeanVelocities; } if (check_refl_Pyramid.Checked) { options |= ProcessingFlag.ShowPyramid; } if (check_refl_SoundCenters.Checked) { options |= ProcessingFlag.DepthsOnXCenters; } if (options == ProcessingFlag.None) { return; } man.ProcessContours(options, textBox_refl_Contours.Text); }
private void buttonProcessFirstEntry_Click(object sender, EventArgs e) { ProcessingFlag options = ProcessingFlag.None; foreach (CheckBox box in flags.Keys) { if (box.Checked) { options |= flags[box]; } } double delta = 0; if (check_fe_Interpolate.Checked && !extractDelta(out delta)) { return; } if (options == ProcessingFlag.None) { return; } man.ProcessFirstEntry(options, delta); }
private void button_refl_FirstStage_Click(object sender, EventArgs e) { ProcessingFlag options = ProcessingFlag.None; if (check_refl_Bind.Checked) { options |= ProcessingFlag.Bind; } if (check_refl_Square.Checked) { options |= ProcessingFlag.SquaredTimes; } if (options == ProcessingFlag.None) { return; } int wave; if (!int.TryParse(textBox_refl_Wave.Text, out wave)) { MessageBox.Show("Не удалось распознать параметр волны.", "Ошибка"); return; } man.ProcessReflectedWave(options, wave); }
private bool checkInput(ProcessingFlag options, string txin) { string file = Path.GetFileNameWithoutExtension(txin); if (options.HasFlag(ProcessingFlag.Project) && !File.Exists(Path.Combine(SourceHeaders, file))) { Writer.WriteLine("Missing SeiSee header for {0}", file); return(false); } if (!File.Exists(Path.Combine(SourceHeaders, Path.ChangeExtension(file, ".txt")))) { Writer.WriteLine("Missing SeisWide header for {0}", file); return(false); } // SeisWide may bind traces incorrectly. There are may be two lines in 'tx.in' file with // the same trace and the same wave number. With such an inconsistency in 'tx.in' this program // will seem work normally, though its results are not supposed to be relevant. // We should track this mistake of binding in tx.in and note user about it. Dictionary <string, string> txinDict = new Dictionary <string, string>(); string[] lines = File.ReadAllLines(txin); bool result = true; foreach (string line in lines) { string[] record = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (record.Length < 5) { continue; } if (txinDict.ContainsKey(record[4])) { if (record[3].Equals(txinDict[record[4]])) { string msg = string.Format("File: {0}{1}Trace {2}, wave {3}: Multiple occurences.", Path.GetFileName(txin), Environment.NewLine, record[4], record[3]); Writer.WriteLine(msg); //MessageBox.Show(msg, "Error"); result = false; } else { txinDict[record[4]] = record[3]; } } else { txinDict.Add(record[4], record[3]); } } return(result); }
public void ProcessReflectedWave(ProcessingFlag options, int wave) { cleanSubdir(SourceBinding); if (options.HasFlag(ProcessingFlag.SquaredTimes)) { File.Delete(ReflectedRev); File.Delete(ReflectedDirect); File.Delete(ReflectedTotal); string header = string.Format(format_refl_squared_times + "\n", "XCenter", "SqrTime", "SqrOffset", "Trace", "Source", "X"); File.AppendAllText(ReflectedTotal, header); File.AppendAllText(ReflectedRev, header); File.AppendAllText(ReflectedDirect, header); } string[] txinFiles = Directory.GetFiles(SourcePicking, "*.in"); foreach (string txin in txinFiles) { string file = Path.GetFileNameWithoutExtension(txin); if (!checkInput(options, txin)) { MessageBox.Show(string.Format("Файл {0} обрабатывать не будем.", file), "Error"); continue; } Writer.WriteLine("...file {0} was checked.", file); processTxin(txin, options, wave); } string last = string.Format(format_txin_separator, 0.0, 0.0, 0.0, -1); File.AppendAllText(TotalBinding, last); Writer.WriteLine("...File {0} was assembled.", Path.GetFileName(TotalBinding)); if (options.HasFlag(ProcessingFlag.SquaredTimes)) { Writer.WriteLine("...File {0} was assembled.", Path.GetFileName(ReflectedTotal)); Writer.WriteLine("...File {0} was assembled.", Path.GetFileName(ReflectedRev)); Writer.WriteLine("...File {0} was assembled.", Path.GetFileName(ReflectedDirect)); } }
public void ProcessContours(ProcessingFlag options, string filename) { string[] lines = File.ReadAllLines(filename); int deltaKm; double sqrTime; string sqrOffset_string = string.Empty; int sqrOffset = 0; SortedList <int, List <double> > pyramid = new SortedList <int, List <double> >(); List <int> offsets = new List <int>(); foreach (string line in lines) { // rec here consists of 'deltaKm' - 'squared time' - 'value on contour in squared deltaKm' string[] rec = line.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries); if (!int.TryParse(rec[0], out deltaKm)) // we need only integer values of deltaKm { continue; } sqrTime = double.Parse(rec[1]); if (sqrOffset_string != rec[2]) { sqrOffset_string = rec[2]; sqrOffset = int.Parse(sqrOffset_string); offsets.Add(sqrOffset); } if (!pyramid.ContainsKey(deltaKm)) { pyramid.Add(deltaKm, new List <double>()); } var slice = pyramid[deltaKm]; int diff = offsets.Count - slice.Count; if (diff > 0) { while (--diff > 0) { slice.Add(0); } slice.Add(sqrTime); } else { string msg = string.Format("Что-то пошло не так. Километр {0} встретился еще раз. \n{1}", deltaKm, line); MessageBox.Show(msg, "Ошибка"); } } string template = Path.Combine(Folder, Path.GetFileNameWithoutExtension(filename)); string fileVelocities = Path.ChangeExtension(filename, "velocities.txt"); bool printEveryVelocity = options.HasFlag(ProcessingFlag.ShowPyramid); var meanVels = calculateMeanVelocities(pyramid, offsets, fileVelocities, printEveryVelocity); if (options.HasFlag(ProcessingFlag.ShowPyramid)) { printPyramid(pyramid, offsets, Path.ChangeExtension(filename, "cleaned_up.txt")); } StringBuilder sb = new StringBuilder(); sb.AppendFormat("{0,5} {1,6}\n", "km", "depth"); foreach (var pair in meanVels) { int km = pair.Key; var slice = pyramid[km]; int index = slice.Count - 1; double time_sqr = slice[index]; int offset_sqr = offsets[index]; double vel = pair.Value; double depth = -Math.Sqrt(vel * vel * time_sqr - offset_sqr) / 2; sb.AppendFormat("{0,5} {1:F3}", km, depth).AppendLine(); } File.WriteAllText(Path.ChangeExtension(filename, "depth.txt"), sb.ToString()); }
private void processTxin(string txin, ProcessingFlag options, int reflWave = 3) { string[] lines = File.ReadAllLines(txin); string outFile = Path.Combine(SourceBinding, Path.GetFileName(txin)); StringBuilder sbTotalBind = new StringBuilder(); StringBuilder sbRev = new StringBuilder(); StringBuilder sbDir = new StringBuilder(); StringBuilder sbReflTotal = new StringBuilder(); StringBuilder sbReflRev = new StringBuilder(); StringBuilder sbReflDir = new StringBuilder(); if (options.HasFlag(ProcessingFlag.Interpolate)) { model.Clear(); } using (StreamWriter file = new StreamWriter(outFile)) { Writer.WriteLine("...creating file:\t{0}", Path.GetFileName(outFile)); string result; double pv = 0; bool isLeft = true; foreach (string line in lines) { if (string.IsNullOrWhiteSpace(line)) { continue; } string[] record = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (record.Length < 4) { string msg = string.Format( "Файл: {0}{1}Не удалось прочесть следующую строку:{1}>{2}<{1}" + "Продолжить обработку, пропустив данную строку?", Path.GetFileName(txin), Environment.NewLine, line); if (MessageBox.Show(msg, "Предупреждение", MessageBoxButtons.YesNo) == DialogResult.Yes) { continue; } else { Writer.WriteLine("......Processing aborted for file {0}", Path.GetFileName(txin)); return; } } double x = double.Parse(record[0]); double time = double.Parse(record[1]); double unc = double.Parse(record[2]); // uncertainty value int wave = int.Parse(record[3]); if (record.Length == 4) { result = string.Format(format_txin_separator, x, time, unc, wave); file.WriteLine(result); if (wave != -1) { isLeft = (time < -0); pv = x; //currPV = (options.HasFlag(ProcessingFlag.Project)) ? distToProj[-1] : pv; sbTotalBind.Append(result).AppendLine(); if (options.HasFlag(ProcessingFlag.Project)) { model.Initialize(txin, pv, distToProj[-1]); } else { model.Initialize(txin, pv); } } continue; } int trace = int.Parse(record[4]); if (traceToDist.ContainsKey(trace)) { x = ((traceToDist[trace].Item1) / 1000.0); } result = string.Format(format_txin_record, x, time, unc, wave, trace); file.WriteLine(result); sbTotalBind.Append(result).AppendLine(); if (options.HasFlag(ProcessingFlag.SquaredTimes) && wave == reflWave) { double xc = (pv + x) / 2; double l = x - pv; string reflResult = string.Format(format_refl_squared_times, xc, time * time, l * l, trace, pv, x); sbReflTotal.AppendLine(reflResult); (isLeft ? sbReflRev : sbReflDir).AppendLine(reflResult); } double currX = (options.HasFlag(ProcessingFlag.Project)) ? distToProj[traceToDist[trace].Item2] : x; if (wave == 1 || wave == 2) { if (options.HasFlag(ProcessingFlag.SplitHodographs)) { double xCenter = (pv + currX) / 2; result = string.Format(format_hodo_record, xCenter, time, wave, trace, pv, currX); (isLeft ? sbRev : sbDir).AppendLine(result); } if (options.HasFlag(ProcessingFlag.Interpolate)) { model.AddRecord(x, time, wave, trace, currX); } } } } File.AppendAllText(TotalBinding, sbTotalBind.ToString()); if (options.HasFlag(ProcessingFlag.SplitHodographs)) { File.AppendAllText(HodoRev, sbRev.ToString()); File.AppendAllText(HodoDirect, sbDir.ToString()); } if (options.HasFlag(ProcessingFlag.SquaredTimes)) { File.AppendAllText(ReflectedTotal, sbReflTotal.ToString()); File.AppendAllText(ReflectedRev, sbReflRev.ToString()); File.AppendAllText(ReflectedDirect, sbReflDir.ToString()); } }
public void ProcessFirstEntry(ProcessingFlag options, double delta) { cleanSubdir(SourceBinding); string prefix = options.HasFlag(ProcessingFlag.Project) ? PrefixProj : PrefixReal; List <string> toBeErased = new List <string>(); if (options.HasFlag(ProcessingFlag.SplitHodographs)) { HodoRev = Path.Combine(SourceVisualize, prefix + "hodograph_rev.txt"); HodoDirect = Path.Combine(SourceVisualize, prefix + "hodograph_dir.txt"); File.Delete(HodoRev); File.Delete(HodoDirect); string header = string.Format(format_hodo_record + "\n", "XCenter", "Time", "Wave", "Trace", "Source", "X"); File.AppendAllText(HodoRev, header); File.AppendAllText(HodoDirect, header); } if (options.HasFlag(ProcessingFlag.Interpolate)) { InterTotal = Path.Combine(SourceVisualize, prefix + "inter_total_" + delta + ".txt"); InterRev = Path.Combine(SourceVisualize, prefix + "inter_rev_" + delta + ".txt"); InterDirect = Path.Combine(SourceVisualize, prefix + "inter_dir_" + delta + ".txt"); File.Delete(InterTotal); File.Delete(InterRev); File.Delete(InterDirect); string header = string.Format(AnotherModel.format_interp + "\n", "XCenter", "Time", "Offset", "SOffset", "Source"); File.AppendAllText(InterTotal, header); File.AppendAllText(InterRev, header); File.AppendAllText(InterDirect, header); } string[] txinFiles = Directory.GetFiles(SourcePicking, "*.in"); Profile p = new Profile(); if (options.HasFlag(ProcessingFlag.Project)) { Profile.ExtractInstance(out p); } foreach (string txin in txinFiles) { string file = Path.GetFileNameWithoutExtension(txin); if (!checkInput(options, txin)) { string msg = string.Format("Файл {0} обрабатывать не будем. Продолжить обработку?", file); DialogResult res = MessageBox.Show(msg, "Error", MessageBoxButtons.YesNo); if (res == DialogResult.Yes) { continue; } else { Writer.WriteLine("...Calculation was aborted."); return; } } Writer.WriteLine("...file {0} was checked.", file); if (options.HasFlag(ProcessingFlag.Project)) { readSeiSeeHeader(Path.Combine(SourceHeaders, file), p); } readSeisWideHeader(Path.Combine(SourceHeaders, file + ".txt")); processTxin(txin, options); if (options.HasFlag(ProcessingFlag.Interpolate)) { model.Interpolate(delta); model.WriteInterpolation(InterTotal, InterRev, InterDirect); } } string last = string.Format(format_txin_separator, 0.0, 0.0, 0.0, -1); File.AppendAllText(TotalBinding, last); Writer.WriteLine("...File {0} was assembled.", Path.GetFileName(TotalBinding)); if (options.HasFlag(ProcessingFlag.SplitHodographs)) { Writer.WriteLine("...File {0} was made.", Path.GetFileName(HodoRev)); Writer.WriteLine("...File {0} was made.", Path.GetFileName(HodoDirect)); } if (options.HasFlag(ProcessingFlag.Interpolate)) { Writer.WriteLine("Interpolation complete."); } }