Пример #1
0
 /// <summary>
 ///     Add an existing stream object.
 /// </summary>
 /// <param name="stream">The stream.</param>
 public void Add(ISeismicStream stream)
 {
     foreach (var seismicTrace in stream.Traces)
     {
         Traces.Add(seismicTrace);
     }
 }
Пример #2
0
        public static void Write(this ISeismicStream stream, string filename, string type)
        {
            SeismicFileFactory seismicFile;

            switch (type)
            {
            case "msd":
            case "mseed":
                seismicFile = new MiniseedFileFactory();
                break;

            case ".gse":
                throw new NotSupportedException("The file you are trying to write is not supported");
                break;

            case "sac":
                throw new NotSupportedException("The file you are trying to write is not supported yet");
                break;

            default:
                throw new NotSupportedException("The file you are trying to write is not supported");
            }

            seismicFile.Write(stream, filename);
        }
Пример #3
0
 public static void Filter(this ISeismicStream stream, DigitalFilter filtertype)
 {
     foreach (var trace in stream.Traces)
     {
         trace.Filter(filtertype);
     }
 }
Пример #4
0
        public GatherViewer(ISeismicStream stream)
        {
            InitializeComponent();
            _waveformViewer = new WaveformViewer();
            _waveformViewer.UpdatePayload(stream);
            var newItem = layoutControlGroup1.AddItem();

            newItem.Control     = _waveformViewer;
            newItem.TextVisible = false;
        }
Пример #5
0
 /// <summary>
 /// Wrtie to the specified filename
 /// </summary>
 /// <param name="stream"></param>
 /// <param name="filename"></param>
 public abstract void Write(ISeismicStream stream, string filename);
Пример #6
0
 public override void Write(ISeismicStream stream, string filename)
 {
     MiniseedWriterWrapper.Write(stream, filename);
 }
Пример #7
0
        internal static void Write(ISeismicStream stream, string filepath)
        {
            var wdir = Path.GetDirectoryName(filepath);

            if (wdir == null)
            {
                throw new Exception("The given filepath is invalid");
            }

            var outputFile  = Path.GetFileName(filepath);
            var processInfo = new ProcessStartInfo
            {
                FileName = "spmswrite.exe",
                RedirectStandardInput = true,
                WorkingDirectory      = wdir,
                UseShellExecute       = false,
                CreateNoWindow        = true,
                Arguments             = $"\"{outputFile}\""
            };

            using (var p = Process.Start(processInfo))
            {
                if (p == null)
                {
                    throw new Exception("Fail to start spmswrite.exe");
                }
                using (var bw = new BinaryWriter(p.StandardInput.BaseStream))
                {
                    bw.Write(stream.Count);
                    foreach (var trace in stream.Traces)
                    {
                        var miniSeedHeader = trace.Header as MiniseedHeader;

                        // refer to xls document for the spec

                        // some fallback when the header is created using the generic trace header
                        bw.Write(StringToByteArray(miniSeedHeader?.FullSourceName ?? trace.Header.SourceName, 50));
                        bw.Write(miniSeedHeader?.HpStartTime ?? MiniseedHeader.GetHpTime(trace.Header.StartTime));
                        var sampleType = miniSeedHeader?.OriginSampleType ?? 'f';
                        bw.Write(sampleType);
                        bw.Write(BitConverter.GetBytes((double)trace.Header.SamplingRate));
                        bw.Write(BitConverter.GetBytes(trace.Header.Npts));

                        // trace data buffer
                        byte[] buff;
                        switch (sampleType)
                        {
                        case 'i':
                            buff = new byte[trace.Data.Length * sizeof(int)];
                            var intSamples = Array.ConvertAll(trace.Data, Convert.ToInt32);
                            Buffer.BlockCopy(intSamples, 0, buff, 0, buff.Length);
                            break;

                        case 'd':
                            buff = new byte[trace.Data.Length * sizeof(double)];
                            var doubleSamples = Array.ConvertAll(trace.Data, Convert.ToDouble);
                            Buffer.BlockCopy(doubleSamples, 0, buff, 0, buff.Length);
                            break;

                        default:
                            buff = new byte[trace.Data.Length * sizeof(float)];
                            Buffer.BlockCopy(trace.Data, 0, buff, 0, buff.Length);
                            break;
                        }
                        bw.Write(buff);
                    }
                }
            }
        }