示例#1
0
        public static FraserData Fraser(TiltData raw)
        {
            var count      = raw.Npts;
            var fraserDist = new float[count - 3];
            var fraserVal  = new float[count - 3];

            for (var i = 0; i < count - 3; i++)
            {
                var distanceInput = new float[4];
                var valueInput    = new float[4];
                for (var j = 0; j < 4; j++)
                {
                    distanceInput[j] = raw.Distances[i + j];
                    valueInput[j]    = raw.Values[i + j];
                }

                fraserDist[i] = distanceInput.Average();
                fraserVal[i]  = (valueInput[0] + valueInput[1] - valueInput[2] - valueInput[3]);
            }

            Debug.Write("Fraser count: ");
            Debug.WriteLine(count - 3);

            var displacement = fraserDist.First() - raw.Distances.First();
            var xy           = Displacement.NextPoint(raw.X, raw.Y, raw.Bearing, displacement);

            return(new FraserData(raw.Title, count - 3, raw.Spacing, xy[0], xy[1], raw.Bearing, fraserDist, fraserVal));
        }
示例#2
0
        public static TiltData MovingAverage(TiltData raw, int order)
        {
            var npt         = raw.Npts;
            var fLen        = order - 1;
            var movDistance = new float[npt - fLen];
            var movVal      = new float[npt - fLen];

            for (var i = 0; i < npt - fLen; i++)
            {
                var dist = new float[order];
                var val  = new float[order];

                for (var j = 0; j < order; j++)
                {
                    dist[j] = raw.Distances[i + j];
                    val[j]  = raw.Values[i + j];
                }

                movDistance[i] = dist.Average();
                movVal[i]      = val.Average();
            }

            var displacement = movDistance.First() - raw.Distances.First();
            var xy           = Displacement.NextPoint(raw.X, raw.Y, raw.Bearing, displacement);

            return(new TiltData($"{raw.Title}_smooth", npt - fLen, raw.Spacing, xy[0], xy[1], raw.Bearing, movDistance, movVal));
        }
示例#3
0
        private void tsAddData_Click(object sender, EventArgs e)
        {
            var dlg = importRawDialog.ShowDialog();

            if (dlg != DialogResult.OK)
            {
                return;
            }

            var errcount = 0;

            foreach (var t in importRawDialog.FileNames)
            {
                TiltData input = null;
                try
                {
                    input = VLFDataReader.Read(t);
                }
                catch (Exception)
                {
                    errcount++;
                }
                finally
                {
                    if (input != null)
                    {
                        var safename = Path.GetFileNameWithoutExtension(t);
                        var newname  = FindUniqeName(safename, treeViewMain.Nodes[0]);

                        AddNode(newname, treeViewMain.Nodes[0], input);

                        var form2 = new ChartPlot(input.Title, input)
                        {
                            MdiParent = this
                        };
                        form2.Show();
                    }
                }
            }

            if (errcount > 0)
            {
                MessageBox.Show(
                    $"The file(s) you are trying to import encountered an error.{Environment.NewLine}[Failed: {errcount} files, Success: {importRawDialog.FileNames.Length - errcount} files]",
                    @"Import Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
示例#4
0
        public static TiltData CubicSplineNatural(TiltData raw, float spacing, int n)
        {
            var xmin = raw.Distances.Min();
            var npt  = n;

            var newdistances = new float[npt];
            var newtilt      = new float[npt];

            var interpolator = CubicSpline.InterpolateNaturalSorted(Array.ConvertAll(raw.Distances, Convert.ToDouble), Array.ConvertAll(raw.Values, Convert.ToDouble));

            for (var i = 0; i < npt; i++)
            {
                newdistances[i] = xmin + (i * spacing);
                newtilt[i]      = Convert.ToSingle(interpolator.Interpolate(Convert.ToDouble(newdistances[i])));
            }

            return(new TiltData(raw.Title, npt, spacing, raw.X, raw.Y, raw.Bearing, newdistances, newtilt));
        }
示例#5
0
        public static KarousHjeltData KarousHjelt(TiltData raw, float skindepth, int step)
        {
            var distList  = new List <float>();
            var depthList = new List <float>();
            var khList    = new List <float>();


            const float a = 0.1025f;
            const float b = 0.0590f;
            const float c = 0.5615f;


            var x0 = raw.Distances[0];
            var n  = raw.Npts;
            int depthStep;

            if (step == 0 || step > (n / 6))
            {
                depthStep = n / 6;
            }
            else
            {
                depthStep = step;
            }

            for (var i = 0; i < depthStep; i++)
            {
                var k  = i + 1;
                var na = k * 3;
                var nl = n - na;
                var xx = x0 + (na * raw.Spacing);
                for (var j = na; j < nl; j++)
                {
                    var i1 = j - (k * 3);
                    var i2 = j - (k * 2);
                    var i3 = j - (k);
                    var i4 = j + (k);
                    var i5 = j + (k * 2);
                    var i6 = j + (k * 3);

                    var h1 = raw.Values[i1];
                    var h2 = raw.Values[i2];
                    var h3 = raw.Values[i3];
                    var h4 = raw.Values[i4];
                    var h5 = raw.Values[i5];
                    var h6 = raw.Values[i6];

                    var distance = xx + ((j - na) * raw.Spacing);
                    var depth    = -k * raw.Spacing;
                    var value    = (a * h1) + (-b * h2) + (c * h3) + (-c * h4) + (b * h5) + (-a * h6);

                    if (!skindepth.Equals(0))
                    {
                        var dz = Math.Exp(-k * Math.Abs(raw.Spacing) / skindepth);
                        value = value * Convert.ToSingle(dz);
                    }

                    distList.Add(distance);
                    depthList.Add(depth);
                    khList.Add(value);
                }
            }

            var displacement = 3 * raw.Spacing;
            var xy           = Displacement.NextPoint(raw.X, raw.Y, raw.Bearing, displacement);

            return(new KarousHjeltData(raw.Title, raw.Spacing, raw.Npts, skindepth, depthStep, xy[0], xy[1], raw.Bearing, distList.ToArray(),
                                       depthList.ToArray(), khList.ToArray()));
        }
示例#6
0
 public static KarousHjeltData KarousHjelt(TiltData raw, float skindepth)
 {
     return(KarousHjelt(raw, skindepth, 0));
 }