This repository provides a modular, configuration-driven framework for Distributed Acoustic Sensing (DAS) preprocessing and Ambient Noise Interferometry (ANI) workflows.
The primary goals are:
-
Preprocessing large-scale DAS datasets
-
Efficient computation of noise cross-correlations (NCFs)
-
Temporal stacking of NCFs (daily, 7d, 15d, 30d)
-
Dispersion imaging (f–v panels) and dispersion curve picking
-
Exploration of data compression strategies (e.g., sketching, low-rank methods) and their impact on virtual source gathers and dispersion results
# Create virtual environment "das_ani"
python -m venv das_ani
# Activate venv
source das_ani/bin/activate
# 3. Upgrade pip (recommend)
pip install --upgrade pip
# 4. Install as editable package
pip install -e .# Create environment
conda env create -f environment.yml
# Activate
conda activate das_ani-envLarge DAS datasets (e.g., preprocessed windows or NCF products) are typically hosted on Google Cloud Storage (GCS).
gsutilinstalled- Authenticated GCP account with read permission
Official documentation: https://cloud.google.com/storage/docs/gsutil
gsutil -m cp -n -r gs://path/to/data .
# or
gsutil -m \ -o "GSUtil:parallel_process_count=1" \ -o "GSUtil:parallel_thread_count=16" \ cp -r "gs://path/to/data" .gsutilGoogle Cloud Storage command-line tool.-m(multi-threading) Enables parallel transfers for faster downloads.cpCopy command (similar to Unixcp), works cloud ↔ local.-n(no-clobber) Skip files that already exist locally.-r(recursive) Copy entire folders.gs://path/to/dataSource path inside a Google Cloud Storage bucket..Destination = current directory.
.
├── .gitignore
├── LICENSE
├── README.md
├── environment.yml
├── pyproject.toml
├── Makefile
├── configs/ # YAML configuration files
│ ├── cc.yaml # Cross-correlation parameters
│ └── disp.yaml # Dispersion + picking parameters
│
├── geometry/
│ └── .gitkeep # Geometry-related inputs (offsets, maps)
│
├── data/
│ ├── preprocessed/ # Preprocessed DAS time windows (.npz)
│ ├── ncf_raw/ # Raw noise cross-correlations (.npy)
│ └── ncf_stacks/ # Stacked NCFs (.npy)
│ ├── daily/
│ ├── 7d/
│ ├── 15d/
│ └── 30d/
│
├── notebooks/
│ ├── geometry.ipynb # Fiber geometry visualization
│ ├── processing.ipynb # End-to-end DAS processing demo
│ ├── dispersion.ipynb # Dispersion imaging & picking
│ └── kernel.ipynb # Tensor Sketch / kernel demos
│
└── src/
├── utils.py # I/O, config helpers, diagnostics
├── ani.py # ANI preprocessing + correlation kernels
├── cc.py # Cross-correlation workflow
├── stack.py # NCF stacking (daily, multi-day)
├── disp.py # Dispersion imaging + picking algorithms
├── disp_pick.py # Dispersion workflow (main script)
└── plot.py # Plotting utilities
All scripts are config-driven via YAML files in configs/. You generally do not need to modify Python code for parameter changes.
make cc_onlyProduces:
data/ncf_raw/*.npyRaw NCFs can be large. It is safe to delete them after stacking if storage is limited.
make stack_onlyProduces:
data/ncf_stacks/<window>/*.npyStack windows are controlled in configs/cc.yaml.
make disp_onlyProduces:
results/dispersion/<window>/VS_xxx/Each virtual source folder contains:
- f–v panel
- frequency & velocity axes
- picked dispersion curve
- metadata (
.json) To process multiple windows:
make disp_only DISP_WINDOWS="daily 7d 15d 30d" NJOBS=12make allRuns:
cc → stack → dispersionThis project is licensed under the MIT License.
See the LICENSE file for full text.