las-js
v3.4.2
Published
A zero-dependency JS library for reading/parsing .Las files
Downloads
1,762
Readme
las-js is a zero-dependency JavaScript library for parsing .Las file (Geophysical well log files).
Currently supports only version 2.0 of LAS Specification. For more information about this format, see the Canadian Well Logging Society product page.
How to use
Installing
NPM
$npm install las-js
Yarn
$yarn add las-js
Browser
<script defer src="https://cdn.jsdelivr.net/npm/las-js/dist/browser.js"></srcipt>
Usage
import/require las-js module
Node
// common js const { Las } = require('las-js'); // esm import { Las } from 'las-js'; const myLas = new Las(`./sample/example1.las`);
You can also pass LAS file contents directly to constructor
// common js const { Las } = require('las-js'); const fs = require('fs'); const data = fs.readFileSync(`./sample/example1.las`, { encoding: 'utf8' }); // add loadFile: false to constructor options const myLas = new Las(data, { loadFile: false });
Browser
las-js adds a global class Lasjs
const input = document.getElementById('file-input');
input.addEventListener('change', async e => {
const file = e.target.files[0];
const myLas = new Lasjs(file);
});
// or
const myLas = new Lasjs('https://raw.githubusercontent.com/iykekings/las-js/master/src/__test__/sample/A10.las'); // url - only on browser
Read data
Use Laspy.data to get a 2-dimensional array containing the readings of each log, Or Lasjs.dataStripped to get the same as above but with all rows containing null values stripped off
async function read() { try { const data = await myLas.data(); console.log(data); /** [[2650.0, 177.825, -999.25, -999.25], [2650.5, 182.5, -999.25,-999.25], [2651.0,180.162, -999.25, -999.25], [2651.5, 177.825, -999.25, -999.25], [2652.0, 177.825, -999.25, -999.25] ...] */ const dataStripped = await myLas.dataStripped(); console.log(dataStripped); /** [[2657.5, 212.002, 0.16665, 1951.74597], [2658.0, 201.44, 0.1966, 1788.50696], [2658.5, 204.314, 0.21004, 1723.21204], [2659.0, 212.075, 0.22888, 1638.328], [2659.5, 243.536, 0.22439, 1657.91699]...] */ } catch (error) { console.log(error); } }
Get the log headers
// ... const headers = await myLas.header(); console.log(headers); // ['DEPTH', 'GR', 'NPHI', 'RHOB'] // ...
Get the log headers descriptions
//... const headerAndDescr = await myLas.headerAndDescr(); console.log(headerAndDescr) // {DEPTH: 'DEPTH', GR: 'Gamma Ray', NPHI: 'Neutron Porosity', RHOB: 'Bulk density'} // ...
Get a particular column, say Gamma Ray log
// ... const gammaRay = await myLas.column('GR'); console.log(gammaRay); // [-999.25, -999.25, -999.25, -999.25, -999.25, 122.03, 123.14, ...] // ...
// ... // get column with null values stripped const gammaRay = await myLas.columnStripped('GR'); console.log(gammaRay); // [61.61, 59.99, 54.02, 50.87, 54.68, 64.39, 77.96, ...] // ...
Note this returns the column, after all the data has been stripped off their null values, which means that valid data in a particular column would be stripped off if there is another column that has a null value at that particular row
Get the Well Parameters
Presents a way of accessing the details of individual well parameters.
The details include the following:
1. descr - Description/ Full name of the well parameter 2. units - Its unit measurements 3. value - Value
// ... const well = await myLas.wellParams() const start = well.STRT.value // 1670.0 const stop = well.STOP.value // 1669.75 const null_value = well.NULL.value // -999.25 // Any other well parameter present in the file, can be gotten with the same syntax above // ...
Get the Curve Parameters
Presents a way of accessing the details of individual log columns.
The details include the following:
1. descr - Description/ Full name of the log column 2. units - Unit of the log column measurements 3. value - API value of the log column
// ... const curve = await myLas.curveParams() const NPHI = curve.NPHI.descr // 'Neutron Porosity' const RHOB = curve.RHOB.descr // 'Bulk density' // This is the same for all log column present in the file // ...
Get the Parameters of the well
The details include the following:
1. descr - Description/ Full name of the log column 2. units - Unit of the log column measurements 3. value - API value of the log column
// ... const param = await myLas.logParams(); // 'BOTTOM HOLE TEMPERATURE' const BHT = param.BHT.descr // 'BOTTOM HOLE TEMPERATURE' const BHTValaue = param.BHT.value // 35.5 const BHTUnits = param.BHT.units // 'DEGC' // This is the same for all well parameters present in the file // ...
Get the number of rows and columns
// ... const numRows = await myLas.rowCount() // 4 const numColumns = await myLas.columnCount() // 3081 // ...
Get the version and wrap
// ... const version = await myLas.version() // '2.0' const wrap = await myLas.wrap() // true // ...
Get other information
// ... const other = await myLas.other() console.log(other) // Note: The logging tools became stuck at 625 metres causing the data between 625 metres and 615 metres to be invalid. // ...
Export to CSV
For node, this writes a csv file to the current working directory, with headers of the well and data section only for node. For browser, this returns a File Blob, that can be downloaded by using URL.createObjectURL
//... await myLas.toCsv('result') // result.csv has been created Successfully! //...
result.csv
| DEPT | RHOB | GR | NPHI | | ---- | ------- | ------- | ----- | | 0.5 | -999.25 | -999.25 | -0.08 | | 1.0 | -999.25 | -999.25 | -0.08 | | 1.5 | -999.25 | -999.25 | -0.04 | | ... | ... | ... | ... | | 1.3 | -999.25 | -999.25 | -0.08 |
Or get the version of csv with null values stripped
// ... await myLas.toCsvStripped('clean') // clean.csv has been created Successfully! // ...
clean.csv
| DEPT | RHOB | GR | NPHI | | ---- | ----- | ---- | ----- | | 80.5 | 2.771 | 18.6 | -6.08 | | 81.0 | 2.761 | 17.4 | -6.0 | | 81.5 | 2.752 | 16.4 | -5.96 | | ... | ... | ... | ... | | 80.5 | 2.762 | 16.2 | -5.06 |
Browser and Node Supports
las-js is written in typescript and compiles to es6.
- Browser Supports IE 10 and 11 - (doesn't yet support url) Doesn't support Opera Mini
- Node Tested 0n 8, 10 and 12
Support
las-js is an MIT-licensed open source project. You can help it grow by becoming a sponsor/supporter.Become a Patron!