Skip to content

Dart library for parsing standard well log files (Geophysical well logs)

License

Notifications You must be signed in to change notification settings

laslibs/las_dart

Repository files navigation

LasDart is a Dart 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

Pub

Add dependency to pubspec.yaml

las_dart: latest_version
  • Usage
import  'package:las_dart/las_dart.dart';
var  myLas  =  new  LasDart('A10.las'); 
  • Read data

Use LasDart.data to get a 2-dimensional array containing the readings of each log,

Or LasDart.dataStripped to get the same as above but with all rows containing null values stripped off

read() async {

try {

var data =  await myLas.data();

print(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] ...]

  

*/

  

var dataStripped =  await myLas.dataStripped();

  

print(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) {

print(error.toString());

}

}
  • Get the log headers
// ...

var  headers  =  await  myLas.header();

print(headers);

// ['DEPTH', 'GR', 'NPHI', 'RHOB']

// ...
  • Get the log headers descriptions
//...

var  headerAndDescr  =  await  myLas.headerAndDescr();

print(headerAndDescr);

// {DEPT: Measured Depth, CILD: Deep Induction R Conductivity, CALN: Compensated Neutron Caliper (Diameter)},

// ...
  • Get a particular column, say Gamma Ray log
// ...

var  gammaRay  =  await  myLas.column('GR');

print(gammaRay);

// [-999.25, -999.25, -999.25, -999.25, -999.25, 122.03, 123.14, ...]

// ...
// ...

// get column with null values stripped

var  gammaRay  =  await  myLas.columnStripped('GR');

print(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

// ...

var  well  =  await  myLas.wellParams()

/* returns
 [
   WellProps {
  unit=FEET,
  key=STRT,
  value=2363.20,
  nullValue=WellProps {
    unit=FEET,
    value=2363.20,
    description=none,
  },
  description=none,
}, WellProps {
  unit=FEET,
  key=STOP,
  value=2692.20,
  nullValue=WellProps {
    unit=FEET,
    value=2692.20,
    description=none,
  },
  description=none,
}
 ] */

// 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()

/* returns 
[WellProps {
  unit=FEET,
  key=DEPT,
  value=00 001 00 00,
  description=Measured Depth,
}, WellProps {
  unit=mMHO,
  key=CILD,
  value=07 110 45 00,
  description=Deep Induction R Conductivity,
}, WellProps {
  unit=in,
  key=CALN,
  value=45 280 24 00,
  description=Compensated Neutron Caliper (Diameter),
}]
*/

// 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

// ...

VAR  param  =  await  myLas.logParams(); 
/* returns
[WellProps {
  unit=none,
  key=BASE,
  value=TULSA, OK,
  description=Home base of logging unit,
}, WellProps {
  unit=none,
  key=ENG,
  value=SHELDON TYLER,
  description=Recording Engineer,
}, WellProps {
  unit=none,
  key=WIT,
  value=BILL STOUT,
  description=Witnessed by,
}]
*/

// This is the same for all well parameters present in the file

// ...
  • Get the number of rows and columns
// ...

var  numRows  =  await  myLas.rowCount() // 4

var  numColumns  =  await  myLas.columnCount() // 3081

// ...
  • Get the version and wrap
// ...

var  version  =  await  myLas.version() // '2.0'

var  wrap  =  await  myLas.wrap() // true

// ...
  • Get other information
// ...

var  other  =  await  myLas.other()

print(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 |

  • Support

LasDart is an MIT-licensed open source project. You can help it grow by becoming a sponsor/supporter.Become a Patron!

About

Dart library for parsing standard well log files (Geophysical well logs)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages