npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

las-js

v3.4.2

Published

A zero-dependency JS library for reading/parsing .Las files

Downloads

1,762

Readme

Snyk Vulnerabilities for npm package npm type definitions npm bundle size GitHub issues NPM npm

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!