Glacier Geo checklist:
- Write a python based petrophysical software - CHECK
- Use software in a bunch of basins - CHECK
- Connect to Geographix directly without using any LAS files - CHECKITY CHECK YOURSELF #beforeya #reckyaself
Every blue moon I write about Flint (a software I wrote for interpreting logs). More often than that I am adding tweaks and features for doing things more simply than commercial software. This last quarter I added a database connection to Geographix. This means I can view any digital curves and tops in Geographix without exporting an LAS first. Yes, and tops. Flint could become a commercial Petro tool that also has the middleware to query other oil and gas databases.
Pros for Flint missing in Prizm:
- Petro model that can perform loops
- Interactive curve editing (fix all those spikes on RHOB)
- Depth shifting individual curves
- Interactive curve splicing (no Excel necessary)
- Runs on Windows, Mac, and Linux
All non-technical people are allowed to stop reading now. The rest gets into the weeds. So all you data and code hunters continue!
I added a little option to connect to Geographix. In about 5 seconds I can have a well open. Or I can completely switch to a different project in 5 seconds. Prizm can take about a minute to open before you can query for a well. It can take a minute to switch from one GeoGraphix project to another.
Now how do I query for curves? Simple, little SQL query returns all the curve data I need based on a UWI and curve set name. Here is an example for an imported curve set (any LAS loaded into GGX go into Imported curve sets).
SELECT DBA.GX_WELL_CURVE_VALUES.WELLID, DBA.GX_WELL_CURVE_VALUES.CURVESET, DBA.GX_WELL_CURVE_VALUES.CURVENAME,
DBA.GX_WELL_CURVE_VALUES.VERSION, DBA.GX_WELL_CURVE_VALUES.CURVE_VALUES, DBA.GX_WELL_CURVE.CMD_TYPE,
DBA.GX_WELL_CURVE.CURVE_UOM, DBA.GX_WELL_CURVE.DATE_MODIFIED, DBA.GX_WELL_CURVE.DESCRIPTION, DBA.GX_WELL_CURVE.TOOL_TYPE,
DBA.GX_WELL_CURVE.REMARK, DBA.GX_WELL_CURVESET.TOPDEPTH, DBA.GX_WELL_CURVESET.BASEDEPTH, DBA.GX_WELL_CURVESET.DEPTHINCR,
DBA.GX_WELL_CURVESET.LOG_JOB, DBA.GX_WELL_CURVESET.LOG_TRIP, DBA.GX_WELL_CURVESET.SOURCE_FILE,
DBA.GX_WELL_CURVE_VALUES, DBA.GX_WELL_CURVE, DBA.GX_WELL_CURVESET
WHERE(GX_WELL_CURVE.WELLID = '%s') AND(GX_WELL_CURVE.CURVESET = '%s') AND
(GX_WELL_CURVE_VALUES.WELLID = GX_WELL_CURVE.WELLID)
AND(GX_WELL_CURVE.WELLID = GX_WELL_CURVESET.WELLID) AND
(GX_WELL_CURVE.CURVENAME = GX_WELL_CURVE_VALUES.CURVENAME)
AND(GX_WELL_CURVE.CURVESET = GX_WELL_CURVESET.CURVESET) AND
(GX_WELL_CURVESET.CURVESET = GX_WELL_CURVE_VALUES.CURVESET)
GX_WELL_CURVE.CURVESET, GX_WELL_CURVE.CURVENAME, GX_WELL_CURVE.WELLID, GX_WELL_CURVE_VALUES.CURVESET,
Curve data is not saved as a value per row, rather an entire curve is saved into a single cell as a BLOB. If you pass that array of bytes to a simple little method you can get back an array of floats. Here is a little python snippet. I get rid of LAS nulls (-999.25) and any chance of Not A Number (nan).
What is the point of all of this? Keep coding all you people out there! Small little snippets add up to big programs. A problem isn't solved with one fell swoop. It is usually thousand of precision slices. The beautiful marble sculptures from Italy were not made with a sledgehammer.
#GeoGraphix #GlacierGeosciences #Petrophysics #Python #SQL #Dev