striplog - Lithological Logs
Quick Reference
python
from striplog import Striplog, Interval, Component
# Create from intervals
intervals = [
Interval(top=0, base=10, components=[Component({'lithology': 'sandstone'})]),
Interval(top=10, base=25, components=[Component({'lithology': 'shale'})]),
Interval(top=25, base=40, components=[Component({'lithology': 'limestone'})]),
]
strip = Striplog(intervals)
# Load from file
strip = Striplog.from_csv('lithology.csv') # Columns: top, base, lithology
# Access and display
print(strip)
strip.plot()
df = strip.to_dataframe()
Key Classes
| Class | Purpose |
|---|---|
Striplog | Main log container - holds intervals |
Interval | Depth interval with top, base, and components |
Component | Rock type definition with properties |
Lexicon | Rock type dictionary with synonyms |
Legend | Visualization styles (colors, patterns) |
Essential Operations
Create from CSV
python
# CSV format: top,base,lithology
strip = Striplog.from_csv('lithology.csv')
strip.plot()
Create from Description Text
python
from striplog import Striplog, Lexicon description = """ 0.0 - 5.5 m: Fine to medium sandstone 5.5 - 12.0 m: Grey shale with silt laminations 12.0 - 18.5 m: Massive limestone, fossiliferous """ strip = Striplog.from_description(description, lexicon=lexicon)
Query and Extract
python
# Get interval at depth
interval = strip.read_at(z=15)
print(interval.primary.lithology)
# Crop to depth range
subset = strip.crop((10, 30))
# Unique lithologies
lithologies = strip.unique('lithology')
Statistics
python
# Net-to-gross for specific lithology
ntg = strip.net_to_gross(pattern={'lithology': 'sandstone'})
print(f"Sandstone: {ntg * 100:.1f}%")
# Merge adjacent same-lithology intervals
merged = strip.merge_neighbours()
Well Correlation
python
import matplotlib.pyplot as plt
wells = [Striplog.from_csv(f'well{i}.csv') for i in range(1, 4)]
fig, axes = plt.subplots(1, 3, figsize=(10, 8), sharey=True)
for ax, well, name in zip(axes, wells, ['Well 1', 'Well 2', 'Well 3']):
well.plot(ax=ax, legend=legend)
ax.set_title(name)
plt.tight_layout()
plt.savefig('correlation.png')
Export
python
strip.to_csv('output.csv')
strip.to_las('output.las')
strip.to_json('output.json')
df = strip.to_dataframe()
Hatch Patterns
| Pattern | Code | Typical Use |
|---|---|---|
| Dots | ... | Sandstone |
| Dashes | --- | Shale |
| Plus | +++ | Limestone |
| X | xxx | Dolomite |
| V | vvv | Volcanic |
Common Issues
| Issue | Solution |
|---|---|
| Text not parsing | Define a Lexicon with synonyms |
| Wrong colors | Create custom Legend with Decor objects |
| Gaps in log | Check interval top/base values match |
| Plot looks wrong | Verify depth direction (increasing down) |
References
- •Lexicon Configuration - Rock type dictionaries and synonyms
- •Component Definitions - Properties and multi-attribute intervals
Scripts
- •scripts/create_striplog.py - Create striplog from CSV or text data