Examples

This section provides detailed examples of using pyAOBS for various tasks.

Basic Model Operations

Reading and Writing Models

from pyAOBS.model_building import ZeltVelocityModel2d

# Read a model
model = ZeltVelocityModel2d("input_model.in")

# Modify velocities
model.scale_velocities(1.1)  # Increase all velocities by 10%

# Save the modified model
model.save("output_model.in")

Velocity Analysis

import numpy as np
from pyAOBS.model_building import ZeltVelocityModel2d

model = ZeltVelocityModel2d("velocity.in")

# Create a profile
x = np.linspace(0, 100, 1000)  # 100 km profile
z = np.ones_like(x) * 2.0      # At 2 km depth

# Get velocities along the profile
velocities = model.get_profile(x, z)

# Calculate statistics
mean_vel = np.mean(velocities)
std_vel = np.std(velocities)
print(f"Mean velocity: {mean_vel:.2f} km/s")
print(f"Standard deviation: {std_vel:.2f} km/s")

Advanced Visualization

Custom Plotting

from pyAOBS.visualization import ZeltModelVisualizer
import matplotlib.pyplot as plt

model = ZeltVelocityModel2d("velocity.in")
visualizer = ZeltModelVisualizer(model)

# Create a custom figure
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 12))

# Plot velocity model
visualizer.plot_zeltmodel(ax=ax1)
ax1.set_title("Velocity Model")

# Plot velocity profile
x = np.linspace(0, 100, 1000)
z = np.ones_like(x) * 2.0
velocities = model.get_profile(x, z)
ax2.plot(x, velocities)
ax2.set_title("Velocity Profile at 2 km Depth")
ax2.set_xlabel("Distance (km)")
ax2.set_ylabel("Velocity (km/s)")

plt.tight_layout()
plt.savefig("velocity_analysis.png")

Rock Classification Examples

Basic Classification

from pyAOBS.utils.isrock import RockClassifier

classifier = RockClassifier()

# Single velocity classification
vp = 6.5  # km/s
rock_type = classifier.classify_by_vp(vp)
print(f"Rock type for Vp={vp} km/s: {rock_type}")

# Batch classification
velocities = [5.5, 6.0, 6.5, 7.0]
rock_types = [classifier.classify_by_vp(v) for v in velocities]
for v, r in zip(velocities, rock_types):
    print(f"Vp={v} km/s -> {r}")

Model Analysis

import numpy as np
from pyAOBS.model_building import ZeltVelocityModel2d
from pyAOBS.utils.isrock import RockClassifier

# Load model and classifier
model = ZeltVelocityModel2d("velocity.in")
classifier = RockClassifier()

# Create a grid of points
x = np.linspace(0, 100, 100)
z = np.linspace(0, 10, 50)
X, Z = np.meshgrid(x, z)

# Get velocities at all points
velocities = model.get_velocities(X.flatten(), Z.flatten())

# Classify rocks at all points
rock_types = [classifier.classify_by_vp(v) for v in velocities]

# Count rock types
from collections import Counter
rock_distribution = Counter(rock_types)
for rock, count in rock_distribution.most_common():
    print(f"{rock}: {count} points")