
Product
Announcing Socket Fix 2.0
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
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
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
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
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
//...
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.
las-js is an MIT-licensed open source project. You can help it grow by becoming a sponsor/supporter.Become a Patron!
FAQs
A zero-dependency JS library for reading/parsing .Las files
We found that las-js demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.