The most frequent question encountered from a new user is: "Does Madagascar do [some needed process]?" The first level of classification is therefore by types of geophysical procedures. Then the classifications below try to follow's the user's workflow:

1. What sort of data must be processed/imaged: 3-D, 2-D, prestack, poststack?
2. If a velocity model is needed, which sort is available? A v(x,z) one, a v(z) or a constant velocity?
3. Which algorithm to use if several are available.

All program names below should be prefixed with "sf".

# Manipulating irregular datasets, regularization and sorting

• Shot interpolation: infill
• Data binning: intbin
• Data binning in 1-D slices: bin1
• Data binning in 2-D slices: bin
• Data regularization in 2-D using plane-wave destruction: planereg2
• Data regularization in 3-D using plane-wave destruction: planereg3
• Convert CMPs to shots for regular 2-D geometry: cmp2shot
• Convert shots to CMPs for regular 2-D geometry: shot2cmp

# Interpolation tools

## Making holes

• Cut an elliptic hole in data (for interpolation tests): hole
• Create a synthetic irregular dataset for interpolation tests: syntop

## Actual interpolation

• Linear interpolation: lint1
• 1-D cubic spline interpolation: spline
• Data interpolation in 2-D slices using helix preconditioning: invbin
• 1-D inverse interpolation: invbin1
• Leveler inverse interpolation in 1-D: levint
• Find MISSing Input values and Filter in 1-D: misif
• Missing data interpolation in 1-D: miss1
• 2-D missing data interpolation: miss2
• Missing data interpolation (N-dimensional) using shaping regularization: miss3
• Multi-dimensional missing data interpolation: miss
• Multiscale missing data interpolation (N-dimensional): msmiss
• 2-D missing data interpolation by differential offset continuation: ofilp
• 1-D ENO (Essentially Non Oscillatory) interpolation: remap1
• ENO interpolation in 2-D slices: enoint2
• 2-D trace interpolation to a denser grid using PWD ("beyond aliasing" method): dealias
• Shot interpolation: infill
• Testing forward interpolation in 1-D: inttest1
• Testing forward interpolation in 2-D: inttest2
• Missing data interpolation in 2-D by Laplacian regularization: lapfill
• Missing data interpolation using one or two prediction-error filters: maskinv
• Missing data interpolation in 2-D using plane-wave destruction: planemis2
• Missing data interpolation in 3-D using plane-wave destruction: planemis3
• Missing data interpolation in 2-D using plane-wave destruction and shaping regularization: pmshape2

# Classic preprocessing

Excludes: (1) denoising; (2) moveouts/stretches, and (3) interpolations, which will get their own sections.

• Stretch of the time axis: stretch guide, stretch
• Amplitude balancing: abalance
• Compute data envelope: envelope
• Automatic gain control: agc
• Bandpass filtering: bandpass
• Bandpass filtering using erf function: erf
• Deconvolution (N-dimensional): decon
• 1-D convolution: conv
• Dip filtering (2-D or 3-D): dipfilter
• Muting: mutter
• Stack a dataset over one of the dimensions: stack
• Time power gain: tpow
• Frequency spectra: spectra
• Frequency spectra in 2-D: spectra2
• Static correction: datstretch. Use the the datum= parameter to specify file holding time shifts.

# Wavelet estimation

• Mono-frequency wavelet estimation: monof
• Gaussian wavelet estimation in 2-D: monof2
• Ricker wavelet estimation: ricker

# Denoising/S-N separation

• Denoising using stationary wavelet transform: swtdenoise
• Remove bursty noise by IRLS: deburst
• Burst noise removal using PEF: pefdeburst
• Remove spikes in by sliding 1-D medians: despike
• Remove spikes in by sliding 2-D medians: despike2
• Remove spikes in by sliding 3-D medians: despike3
• Signal and noise separation (N-dimensional): signoi
• Local signal and noise separation (N-dimensional): losignoi
• Signal and noise separation using plane-wave destruction filters: planesignoi
• Signal and noise separation using both frequency components and dips: explanesignoi
• Signal and noise separation using frequency components: expsignoi

# Tracewise stretch/moveout operators

These operators do not carry energy from one trace to the other. The operation can be performed independently on each trace.

# DMO/AMO/Offset continuation

• Kirchhoff DMO with antialiasing by reparameterization: dmo
• Azimuth moveout by log-stretch F-K operator: fkamo
• Offset continuation by log-stretch F-K operator: fkdmo
• Offset continuation by finite differences: fincon
• DMO and stack by finite-difference offset continuation: finstack

# Whole-image stretching

• Stolt stretch: stoltstretch
• Cartesian-Coordinates to Riemannian-Coordinates interpolation: c2r

# Autopicking

• Automatic traveltime picking: pick0
• Automatic picking from semblance-like panels: pick, pick2
• Generate stereopicks from time-migration velocities and slopes: pgen
• Generate stereotomography picks from time migration: spicks
• Picking local maxima on the first axis: max1
• Picking by plane-wave construction: pwpick
• Preconditioning for traveltime picking: shearer

# Velocity analysis

• Velocity transform: velmod
• Slope-based velocity transform: pveltran
• Hyperbolic Radon transform with conjugate-directions inversion: cgscan
• Velocity analysis: vscan
• 3-D zero-offset WEMVA: zomva
• 3-D S/R WEMVA with extended split-step: srmva
• Simple tomography test: tomo

# Velocity continuation

• Post-stack 2-D velocity continuation by Chebyshev-tau method: chebvc
• Velocity continuation: fourvc
• Velocity continuation after NMO: fourvc0
• Velocity continuation with semblance computation: fourvc2
• Post-stack velocity continuation by implicit finite differences: velcon
• 3-D finite-difference velocity continuation on a helix: velcon3

# Velocity and data converters

• Convert RMS to interval velocity: dix
• Convert RMS to interval velocity using LS and shaping regularization: dixshape
• V(t) function for a linear V(Z) profile: voft
• Conversion from depth to time in a V(z) medium: depth2time
• Time-to-depth conversion in V(z): time2depth
• Convert RMS to interval velocity using LS and plane-wave construction: pwdix

# Ray tracing

The programs below take as input a velocity model and output ray trajectories.

## 2-D, v(x,z)

• Huygens wavefront tracing: hwt2d
• For layered media: layer
• Second-order cell ray tracing with locally parabolic rays: cell2.
• Ray tracing by a Runge-Kutta integrator: rays2

## 2-D, v(x,z), anisotropic media

• Ray tracing in VTI media by a Runge-Kutta integrator: rays2a

# Traveltimes computation

• Analytical traveltime in 2-D, linear v(z): vofz
• Huygens wavefront tracing (ray-based method): hwtex, hwt2d

# Modeling

All methods below deal with acoustic data, unless noted otherwise. Also, to be in the modeling section, a program/chain of programs must produce actual seismograms, not just traveltime curves. Those go into the "Traveltime computation" section.

Programs listed below create time-domain seismic data (wavefield at z=0, i.e. hyperbolas) given a reflectivity model (wavefield at t=0 in the exploding reflector paradigm). Sometimes it is suggestive to plot "shots", i.e. one or several wavefronts at various times. One way to do it with downward-continuation based shot-modeling algorithm is to save the whole wavefield in the time domain, then to extract the slices at the appropriate times. This can get storage-intensive, and slow as it can be IO-bound. Another way is to use a reverse-time procedure and simply save the appropriate time snapshots. This is very CPU-intensive and artifacts can easily appear. The cheapest and the most elegant way is to remember that a wavefront at time t originating from a shot is indistinguishable from the migration impulse response of a spike at time t at the same x location. So to originate a series of wavefronts at intervals dt from a shot at location x and time t, one just has to migrate a sequence of spikes separated by dt at location x. This way, any of the programs in the "migration" section can also be used to create "shots" – including those programs based on survey-sinking!

## Creating reflectivity models

• For linear arrivals: spike, followed by bandpass or convolution (conv) with a wavelet
• Simple 2-D synthetics with crossing plane waves: make
• Generates the 3-D Qdome model: qdome
• Generates the 2-D Sigmoid model: sigmoid
• Generates the 2-D Synmarine model, spreads it across offsets and applies moveout: synmarine (bandpass or convolution with a wavelet still needed)
• Generates the 2-D Conflicting Dips model: conflict
• Simple synthetics with random reflectivity: randrefl

• Synthetics with bursts of noise: burstnoise
• Add random noise to the data: noise

## Creating falsely irregular data

• Cut an elliptic hole in data: hole
• Remove random shot gathers from a 2-D dataset: shotholes

## Creating velocity models

• Generate 2-D layered velocity model from specified interfaces: unif2
• Generate 3-D layered velocity model from specified interfaces: unif3

## 3-D, prestack, v(x,z)

• Extended split step wavefield extrapolation method: srmod

## 3-D, prestack, v(z)

• Kirchhoff method using analytical Green's functions: kirmod3

## 3-D, zero-offset, v(x,z)

• Extended split step wavefield extrapolation method: sstep2, zomig

## 3-D, zero-offset, const.v

• Stolt (F-K) method: stolt

## 2.5-D, v(z)

• Kirchhoff method using analytical Green's functions: kirmod

## 2-D, prestack, v(x,z)

• Unknown ray-based method: shoot2
• Second-order cell ray tracing with locally parabolic rays: cell2.
• Ray tracing by a Runge-Kutta integrator: rays2
• Time-domain acoustic FD: afmod, awe, awefd, awefd1, afdm2d
• Time-domain acoustic linearized FD: lwefd, lwefd1
• DSR-based survey-continuation WE method: dsr2

## 2-D, prestack, v(x,z), anisotropic media

• Ray tracing in VTI media by a Runge-Kutta integrator: rays2a

## 2-D, prestack, v(z)

• DSR-based survey-continuation WE method: dsr
• spike, bandpass, inverse NMO
• Analytical traveltime in a linear slowness squared model: s2ofz

## 2-D, zero-offset, v(x,z)

• Implicit finite-difference method, 15 and 45 degree approximation: mig45
• Riemannian Wavefield Extrapolation: rwezomig

## 2-D, zero-offset, v(z)

• Wavefield-extrapolation, phase-shift method: gazdag
• Kirchhoff with antialiasing: kirchnew
• 1-D convolution modeling: ai2refl

## Elastic modeling

• Time-domain FD method: ewefd

## Unconventional outputs

• Outputs PP and PS seismograms in the tau-p domain: modrefl3

## Uncertain

• modrefl ("Normal reflectivity modeling", according to sfdoc -k). Takes as input files with vp, vs and rho, but it is not clear whether it outputs a 2-D or 3-D file, and if modeling is with ray or WE methods.
• 2-D, unknown if prestack or zero-offset, v(x,z), Born modeling: aborn, born2d

# Migration

Below, "v(x,z)" means "works when the velocity has lateral velocity variations, and will try to do something about them". This corresponds to what is widely called depth migration, but possibly to "smart" time migrations as well. The "const. v" term will be applied to algorithms that can only deal with constant velocity, regardless of whether the output is in depth or time. The "v(z)" term describes all other migrations. Note that the above terms apply even to migrations that do not need a velocity model!

It is assumed that a 3-D prestack algorithm will be able to migrate a 2-D prestack or a 3-D poststack, that a v(x,z) will be able to deal with a constant-velocity case, and so on. Exceptions to these rules will be highlighted.

The term "survey-sinking" was preferred to "source-receiver" because it can be done in either midpoint-offset, or in source-receiver coordinates, and the two differ in their treatment of amplitudes (a CMP gather is not a wavefield).

## 3-D, prestack, wide-azimuth, v(x,z)

• Survey-sinking scheme in midpoint-offset coordinates with extended split-step extrapolator: srmig, srmig2

## 3-D, prestack, common-azimuth, v(x,z)

• Extended split-step extrapolator: camig

## 3-D, prestack, one-azimuth, const. v

The "one-azimuth" term was employed to underline that they take as input 3-D data with a single offset dimension, but they do not employ the common-azimuth approximation[1] when computing ky.

## 3-D, poststack, const. v

• F-K scheme: stolt, with impulse response examples in sep/forwd
• Kirchhoff with antialiasing: mig3, migsteep3

## 2-D, prestack, v(x,z)

• Survey-sinking scheme in midpoint-offset coordinates with PSPI extrapolator: dsr
• Survey-sinking scheme in midpoint-offset coordinates with split-step extrapolator: dsr2
• Shot-profile scheme, Riemannian extrapolator: rwe2d, rwesrmig

## 2-D, prestack, v(z)

• Slope-based migration: pmig

## 2-D, prestack, const. v

• Angle-gather migration: agmig

## 2-D, poststack, v(x,z)

• Implicit finite-difference extrapolator, 15 and 45 degree approximations: mig45
• Riemannian extrapolator: rwezomig

## 2-D, poststack, v(z)

• Phase-shift extrapolator: gazdag
• Kirchhoff with antialiasing: kirchnew
• Least-squares Kirchhoff with antialiasing: kirchinv

## Migration without a velocity model

• Slope-based 2-D prestack migration, works in v(z) media: pmig

## Least-squares migration

• Kirchhoff, 2-D, post-stack, v(z), with antialiasing: kirchinv

# Image Cosmetics

• Automatic gain control: agc
• Image enhancement by histogram equalization: equal
• Non-stationary spectral balancing: reshape

# Angle gathers

• Illustration of angle gathers: angle
• Another illustration of angle gathers: angle2
• Transform PP angle gathers to PS angle gathers: pp2psang2
• Transform PP angle gathers to PS angle gathers: pp2psang
• Compute angle gathers for time-shift imaging condition: pp2pstsic
• Apply dip correction for angle-gathers computed with absolute offset: absoffdip
• Compute angle gathers for time-shift imaging condition: tshift

# Dip estimation

• Estimate a number of constant dips using plane-wave destruction: dips
• 3-D dip estimation by plane wave destruction: dip
• 2-D two dip estimation by plane wave destruction: twodip2

# Attribute extraction

• Compute intercept and gradient by least squares: avo
• Smooth estimate of instantaneous frequency: iphase
• Canny-like edge detector: canny

# Horizon extraction

• Extract horizons from data: hslice
• Extract a slice using picked surface (usually from a stack or a semblance): slice

# Directional wavefields methods

These algorithms create or use directional wavefields at the surface or in depth. The most-known variety is tau-p, aka p-tau, aka slant stack, aka Linear Radon Transform, aka plane-wave synthesis, aka delayed-shot survey generation, aka Controlled Directional Reception (CDR), aka Controlled Directional Source, aka beam forming, aka plane-wave decomposition. Various people mean various things by these terms, with some agreement that "slant stack" is reserved to more simple flavor of the operation, "plane-wave decomposition" is the more carefully thought one trying to take care of the amplitudes, and CDR refers to shorter cable lengths. The various flavors of beam methods are good cousins of these approaches.

• Time-space-domain slant stack with antialiasing and a rho filter: slant
• High-resolution Linear Radon Transform: radon. Inversion approach trying to maximize spikes in the tau-p domain, and filter out other events, including elliptical ones (you may not want to use this for creating inputs to methods that work with ellipses in the tau-p domain!)
• Modeling that outputs PP and PS seismograms in the tau-p domain: modrefl3
• Normal moveout in tau-p domain: taupmo
• Diffraction imaging in the plane-wave domain: dimag

# Transforms

• Time-space-domain slant stack with antialiasing and a rho filter: slant
• High-resolution Linear Radon Transform: radon. Inversion approach trying to maximize spikes in the tau-p domain, and filter out other events, including elliptical ones (you may not want to use this for creating inputs to methods that work with ellipses in the tau-p domain!)
• Hyperbolic Radon Transform with conjugate-directions inversion: cgscan
• FFT along the first axis: fft1
• FFT: fft3
• Frequency spectra: spectra
• Frequency spectra in 2-D: spectra2
• 1-D Digital Wavelet Transform: dwt
• Multi-dimensional cosine transform: cosft
• Seislet transform: seislet
• Freqlet transform: freqlet

# Smoothers and rougheners

• 2-D smoothing by triangle plane-wave construction shaping: pwdsmooth2
• Recursive Gaussian smoothing on the fast axis: gaussmooth
• Smooth first derivative on the first axis: smoothder
• Multi-dimensional triangle smoothing: smooth
• Smoothing in 2-D by simple regularization: smoothreg2
• Smoothing in 1-D by simple regularization: smoothreg
• First derivative with a maximally linear FIR differentiator: deriv
• Apply 2-D directional high-pass to highlight data: light
• 1-D non-stationary smoothing: nsmooth1
• N-D non-stationary smoothing: nsmooth
• Multi-dimensional smoothing with boxes: boxsmooth
• Half-order integration or differentiation: halfint
• 2-D smoothing by triangle directional shaping: trismooth2

# Programs yet to be classified

• aliasp: Aliasing test
• approx: Illustrating non-hyperbolic approximations
• autocorr: Autocorrelation for helix filters
• cflow: Fast mean-curvature flow
• costaper: Cosine taper around the borders (N-D)
• cube2list: Maps a cube to a list, given a threshold (clip value)
• deblur: Non-stationary debluring by inversion
• dijkstra: Dijkstra shortest-path algorithm in 2-D
• diplet: Seislet frame
• distance: Computing distance function by fast marching eikonal solver (3-D)
• divn: Smooth division
• eikonal: Fast marching eikonal solver (3-D)
• eikonalvti: Fast marching eikonal solver in VTI media
• erfdm
• exgr: Exact group velocity in VTI media
• extract: Forward interpolation in 2-D slices
• flat3: 3-D flattening (without picking)
• flat: Moveout flattening
• focus: Focusing indicator
• frame: Create a frame for binning
• freqest: Local frequency estimation
• green: Phase-space Green's function from down-marching
• hconv: Convolution of two helix filters
• helicon: Multidimensional convolution and deconvolution by helix transform
• ic: Imaging condition
• icor: Interferometric cross-correlation of time series (zero-lag output)
• idempatch: Patching test
• impl1: 1-D anisotropic diffusion
• impl2: 2-D anisotropic diffusion
• impl3: 3-D anisotropic diffusion
• interp2: Multiple-arrival interpolation
• interp3: Multiple-arrival interpolation from down-marching
• interpt: Multiple-arrival interpolation (yet another)
• intshow: Output interpolation filter
• kolmog: Kolmogoroff spectral factorization
• laps: Compute lagged-products
• linefit: Fit a line to a set of points in 2-D
• lopef: Local Prediction-Error Filter (1-D, 2-D, and 3-D)
• lpef: Find PEF on aliased traces
• lpf: Local prefiction filter (n-dimensional)
• lstk: Local slant stacks (2D)
• mspef: Multi-scale PEF estimation
• nhelicon: Non-stationary helix convolution and deconvolution
• npef: Estimate Non-stationary PEF in N dimensions
• ocparcel: Patching test for out-of-core patching
• octentwt: Tent-like weight for out-of-core patching
• off2abs3: Transform vector-offset to absolute-offset
• off2abs: Transform vector-offset to absolute-offset
• ofpwd2: Objective function of two dips estimation with PWD filters
• ofpwd: Objective function of dip estimation with PWD filters
• ofsemb: Objective function of dip estimation with semblance
• parcel: Patching test
• patch: Patching (N-dimensional)
• pef: Multi-dimensional PEF (prediction error filter) estimation
• postfilter2: Convert B-spline coefficients to data in 2-D
• predict: 2-D plane-wave prediction
• pwd: 3-D plane wave destruction
• pwdsigk: Signal component separation using plane-wave destruction
• refer: Subtract a reference from a grid
• reg2tri: Decimate a regular grid to triplets for triangulation
• ricker1: Convolution with a Ricker wavelet
• rweab: Riemannian Wavefield Extrapolation]:* a,b coefficients
• rwemete2d: 2-D metric tensor
• seisigk: Signal component separation using seislet transforms
• shapebin1: 1-D inverse interpolation with shaping regularization
• shapebin: Data binning in 2-D slices by inverse interpolation
• shapesigk: Signal component separation using plane-wave shaping
• shotprop: Shot propagation
• sic3d: Local slant stacks IC
• sic: Local slant stacks IC
• splinebank: Prepare a filter bank for B-spline plane wave filters
• splinefilter: Convert data to B-spline coefficients
• srsyn: Synthesize shot/receiver wavefields for 3-D SR migration
• tan2ang: Compute cos(theta) from 1/|pm| for time-shift imaging condition
• tcor: Interferometric cross-correlation of time series (zero-lag output)
• tentwt: Tent-like weight for patching
• timeshift: Apply variable time shifts using plane-wave construction
• trapez: Convolution with a trapezoidal filter
• tree: Multiple arrivals with a fast algorithm
• tri2reg: Interpolate triangulated triplets to a regular grid
• trirand: Edit points for triangulation by removing similar and randomizing
• tspline: Helix filters for spline in tension
• twofreq2: 2-D two spectral component estimation
• ucor: Interferometric cross-correlation of time series (zero-lag output)
• warp1: Multicomponent data registration by 1-D warping
• warpscan: Multicomponent data registration analysis
• wdf: Assymptotic Wigner distribution
• wigner: Assymptotic Wigner distribution in space-time
• wilson: Wilson-Burg spectral factorization
• xcor: Cross-correlation of time series (zero-lag output)
• ztrace: Multiple arrivals by depth marching
• The SCons macros in RSFSRC/book/packages

# References

1. Biondi, B., and Palacharla, G.: 3-D prestack migration of common-azimuth data, Geophysics, v. 61, pp. 1822-1832.