Skip to content

Latest commit

 

History

History
129 lines (120 loc) · 4.78 KB

File metadata and controls

129 lines (120 loc) · 4.78 KB

sac-format

Rename SacStream

It isn’t a stream so it shouldn’t be called one. I knew this even when I first wrote it, but I didn’t know what else to call it and figured I’d change it later.

Maybe call it Seismogram, or for less typing Trace. Then it’d be SAC::Trace which is nice.

SacStream constructor should use std::filesystem::path not std::string

Testing

Move Unit tests from PsSp

Benchmarks

data2 read/write

not equal_within_tolerance

legacy_write read/write

Corrupt sac-files

Insufficient header

Insufficient Data1

Insuficcient Data2

Insufficient footer

File continues past expected end

Linked headers

npts

leven

iftype

data1

data2

New functionality

Incorporate Ellipticity in geometric calculations

Tried the n-vector stuff, didn’t work. Moving on for now.

Great Circle Arc calculation

Assumes spherical earth

Use Haversine formula to start. Later can move on to Lambert’s formula for long lines (Wikipedia)

Azimuth calculation

Assumes spherical earth

Ensure NPTS updates when data1/data2 updates

This would aid the user in avoiding writing out sac-files that could then not be read in. The issue is, let’s say the user wants to include data2, I cannot simply assume level(false) or iftype(value>1). There needs to be a mechanism that enforces a specification change in the data2 setter.

That also means that the leven and iftype() setters need a mechanism whereby leven must be true for iftype(>1), and if leven is false then iftype(<=1). If leven(false) and iftype(<1), but data2 exists, clear it.

data1 and data2 ought to have same size if data2 exists (changing one changes the other and npts)

when npts changes, size of data1 and data2 should change

ASCII read/write support

Fortran style text files.

Read in
Write out

Support Big-Endian sac-files (currently only little-endian)

Provide functions to update dependent parameters

xminimum/xmaximum

yminimum/ymaximum

depmin/depmen/depmax

String setters should be limited in length

Same rules apply as for the strings themselves.

Installers

Windows

macOS

Linux

Gzipped Tar Archive

RPM

DEB

Refactor Trace

Remove boost dependency

The only reason I need boost is for boost::algorithm::trim(); to remove leading and trailing white spaces. I feel like that is not a great reason to require boost (which is a HUGE library)

Getters and setters

Store data in single-type arrays

Use lookup table

Lookup table to keep track of where data is stored.

Maintain only doubles of the header/footer pairs (e.g., stla/f_stla)

The only time this matters is at read/write. On read, we can read it in as a float and immediately static_cast<double>. On writing, we just static_cast<float> prior to writing. This will get rid of the need to deal with simultaneously updating the double and float versions (hard to remember which is which).

Use Enum class for lookup table, not string_view.

CI/CD GitHub workflow

Testing

Ubuntu

Windows

macOS

Code Coverage

Analysis

Code Analysis

ReviewDog

Vale (spelling and grammar)

Style

CPPLint workflow

Will fail if don’t comply.

Automate release notes

Package for download

I think ReviewDog has a yml that could work as an example for this action

Documentation

Update README.org

Short and succinct

GitHub.io website

Fill in documentation

Sac format

Quickstart

Getters/Setters

Trace class

Low-level I/O

Testing

Benchmarking

Example programs

Dependencies

PDF

This involves setting up the export settings for the website for LaTeX.

Example programs

list_sac

convert_sac

  1. convert between v6 and v7
  2. convert between binary and ascii

Namespace sacfmt

Make single-header!

Inbox