Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
        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));
            }
        }
Example #6
0
        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());
        }
Example #7
0
        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());
            }
        }
Example #8
0
        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.");
            }
        }