Building a LAS file from scratch

When you create a lasio.LASFile from scratch, it comes with some default metadata:

>>> import lasio
>>> las = lasio.LASFile()
>>> las.header
{'Version': [HeaderItem(mnemonic="VERS", unit="", value="2.0", descr="CWLS log ASCII Standa"),
 HeaderItem(mnemonic="WRAP", unit="", value="NO", descr="One line per depth ste"),
 HeaderItem(mnemonic="DLM", unit="", value="SPACE", descr="Column Data Section ")],
'Well': [HeaderItem(mnemonic="STRT", unit="m", value="nan", descr="START DEPTH"),
 HeaderItem(mnemonic="STOP", unit="m", value="nan", descr="STOP DEPTH"),
 HeaderItem(mnemonic="STEP", unit="m", value="nan", descr="STEP"),
 HeaderItem(mnemonic="NULL", unit="", value="-9999.25", descr="NULL VALUE"),
 HeaderItem(mnemonic="COMP", unit="", value="", descr="COMPANY"),
 HeaderItem(mnemonic="WELL", unit="", value="", descr="WELL"),
 HeaderItem(mnemonic="FLD", unit="", value="", descr="FIELD"),
 HeaderItem(mnemonic="LOC", unit="", value="", descr="LOCATION"),
 HeaderItem(mnemonic="PROV", unit="", value="", descr="PROVINCE"),
 HeaderItem(mnemonic="CNTY", unit="", value="", descr="COUNTY"),
 HeaderItem(mnemonic="STAT", unit="", value="", descr="STATE"),
 HeaderItem(mnemonic="CTRY", unit="", value="", descr="COUNTRY"),
 HeaderItem(mnemonic="SRVC", unit="", value="", descr="SERVICE COMPANY"),
 HeaderItem(mnemonic="DATE", unit="", value="", descr="DATE"),
 HeaderItem(mnemonic="UWI", unit="", value="", descr="UNIQUE WELL ID"),
 HeaderItem(mnemonic="API", unit="", value="", descr="API NUMBER")],
'Curves': [],
'Parameter': [],
'Other': ''}

In our case, let’s set the correct date:

>>> from datetime import datetime
>>> las.well.DATE = datetime.today().strftime('%Y-%m-%d %H:%M:%S')

And add some new header fields:

>>> las.params['ENG'] = lasio.HeaderItem('ENG', value='Kent Inverarity')
>>> las.params['LMF'] = lasio.HeaderItem('LMF', value='GL')
>>> las.other = 'Example of how to create a LAS file from scratch using lasio'

We will invent some data for a curve:

>>> import numpy as np
>>> depths = np.arange(10, 50, 0.5)
>>> synth = np.log10(depths)*5+np.random.random(len(depths))
>>> synth[:8] = np.nan

...add these to the LASFile object:

>>> las.append_curve('DEPT', depths, unit='m')
>>> las.append_curve('SYNTH', synth, descr='fake data')

And write the result to files:

>>> las.write('scratch_v1.2.las', version=1.2)
>>> las.write('scratch_v2.las', version=2)

Here is the resulting scratch_v1.2.las:

  1~Version ---------------------------------------------------
  2VERS.   1.2 : CWLS LOG ASCII STANDARD - VERSION 1.2
  3WRAP.    NO : One line per depth step
  4DLM . SPACE : Column Data Section Delimiter
  5~Well ------------------------------------------------------
  6STRT.m       10.00000 : START DEPTH
  7STOP.m       49.50000 : STOP DEPTH
  8STEP.m        0.50000 : STEP
  9NULL.        -9999.25 : NULL VALUE
 10COMP.         COMPANY :
 11WELL.            WELL :
 12FLD .           FIELD :
 13LOC .        LOCATION :
 14PROV.        PROVINCE :
 15CNTY.          COUNTY :
 16STAT.           STATE :
 17CTRY.         COUNTRY :
 18SRVC. SERVICE COMPANY :
 19DATE.            DATE : 2023-01-26 14:58:21
 20UWI .  UNIQUE WELL ID :
 21API .      API NUMBER :
 22~Curve Information -----------------------------------------
 23DEPT .m  :
 24SYNTH.   : fake data
 25~Params ----------------------------------------------------
 26ENG. Kent Inverarity :
 27LMF.              GL :
 28~Other -----------------------------------------------------
 29Example of how to create a LAS file from scratch using lasio
 30~ASCII -----------------------------------------------------
 31   10.00000   -9999.25
 32   10.50000   -9999.25
 33   11.00000   -9999.25
 34   11.50000   -9999.25
 35   12.00000   -9999.25
 36   12.50000   -9999.25
 37   13.00000   -9999.25
 38   13.50000   -9999.25
 39   14.00000    6.32656
 40   14.50000    6.32279
 41   15.00000    6.24716
 42   15.50000    6.07168
 43   16.00000    6.40693
 44   16.50000    6.74994
 45   17.00000    6.16163
 46   17.50000    7.08836
 47   18.00000    6.31721
 48   18.50000    7.19034
 49   19.00000    6.72278
 50   19.50000    7.01719
 51   20.00000    7.49475
 52   20.50000    6.92995
 53   21.00000    7.44739
 54   21.50000    7.55360
 55   22.00000    6.94753
 56   22.50000    7.64236
 57   23.00000    7.74817
 58   23.50000    7.23852
 59   24.00000    7.88034
 60   24.50000    7.07664
 61   25.00000    7.19182
 62   25.50000    7.62403
 63   26.00000    7.80678
 64   26.50000    7.93082
 65   27.00000    8.08903
 66   27.50000    7.81581
 67   28.00000    8.08901
 68   28.50000    7.60532
 69   29.00000    7.86530
 70   29.50000    7.72080
 71   30.00000    7.74472
 72   30.50000    7.68292
 73   31.00000    8.00722
 74   31.50000    8.12406
 75   32.00000    7.60265
 76   32.50000    7.73699
 77   33.00000    7.72325
 78   33.50000    8.02248
 79   34.00000    8.04029
 80   34.50000    8.65056
 81   35.00000    8.30488
 82   35.50000    8.59884
 83   36.00000    7.83725
 84   36.50000    8.72173
 85   37.00000    7.95948
 86   37.50000    8.12969
 87   38.00000    8.75692
 88   38.50000    8.73753
 89   39.00000    8.22793
 90   39.50000    8.86533
 91   40.00000    8.56819
 92   40.50000    9.00213
 93   41.00000    8.51844
 94   41.50000    8.81121
 95   42.00000    8.51106
 96   42.50000    8.28359
 97   43.00000    8.65719
 98   43.50000    8.33235
 99   44.00000    8.52983
100   44.50000    9.04601
101   45.00000    8.53333
102   45.50000    9.20433
103   46.00000    8.60132
104   46.50000    8.94629
105   47.00000    8.60415
106   47.50000    8.56460
107   48.00000    9.35277
108   48.50000    8.65887
109   49.00000    9.33907
110   49.50000    9.30430

and scratch_v2.las:

  1~Version ---------------------------------------------------
  2VERS.   2.0 : CWLS log ASCII Standard -VERSION 2.0
  3WRAP.    NO : One line per depth step
  4DLM . SPACE : Column Data Section Delimiter
  5~Well ------------------------------------------------------
  6STRT.m           10.00000 : START DEPTH
  7STOP.m           49.50000 : STOP DEPTH
  8STEP.m            0.50000 : STEP
  9NULL.            -9999.25 : NULL VALUE
 10COMP.                     : COMPANY
 11WELL.                     : WELL
 12FLD .                     : FIELD
 13LOC .                     : LOCATION
 14PROV.                     : PROVINCE
 15CNTY.                     : COUNTY
 16STAT.                     : STATE
 17CTRY.                     : COUNTRY
 18SRVC.                     : SERVICE COMPANY
 19DATE. 2023-01-26 14:58:21 : DATE
 20UWI .                     : UNIQUE WELL ID
 21API .                     : API NUMBER
 22~Curve Information -----------------------------------------
 23DEPT .m  :
 24SYNTH.   : fake data
 25~Params ----------------------------------------------------
 26ENG. Kent Inverarity :
 27LMF.              GL :
 28~Other -----------------------------------------------------
 29Example of how to create a LAS file from scratch using lasio
 30~ASCII -----------------------------------------------------
 31   10.00000   -9999.25
 32   10.50000   -9999.25
 33   11.00000   -9999.25
 34   11.50000   -9999.25
 35   12.00000   -9999.25
 36   12.50000   -9999.25
 37   13.00000   -9999.25
 38   13.50000   -9999.25
 39   14.00000    6.32656
 40   14.50000    6.32279
 41   15.00000    6.24716
 42   15.50000    6.07168
 43   16.00000    6.40693
 44   16.50000    6.74994
 45   17.00000    6.16163
 46   17.50000    7.08836
 47   18.00000    6.31721
 48   18.50000    7.19034
 49   19.00000    6.72278
 50   19.50000    7.01719
 51   20.00000    7.49475
 52   20.50000    6.92995
 53   21.00000    7.44739
 54   21.50000    7.55360
 55   22.00000    6.94753
 56   22.50000    7.64236
 57   23.00000    7.74817
 58   23.50000    7.23852
 59   24.00000    7.88034
 60   24.50000    7.07664
 61   25.00000    7.19182
 62   25.50000    7.62403
 63   26.00000    7.80678
 64   26.50000    7.93082
 65   27.00000    8.08903
 66   27.50000    7.81581
 67   28.00000    8.08901
 68   28.50000    7.60532
 69   29.00000    7.86530
 70   29.50000    7.72080
 71   30.00000    7.74472
 72   30.50000    7.68292
 73   31.00000    8.00722
 74   31.50000    8.12406
 75   32.00000    7.60265
 76   32.50000    7.73699
 77   33.00000    7.72325
 78   33.50000    8.02248
 79   34.00000    8.04029
 80   34.50000    8.65056
 81   35.00000    8.30488
 82   35.50000    8.59884
 83   36.00000    7.83725
 84   36.50000    8.72173
 85   37.00000    7.95948
 86   37.50000    8.12969
 87   38.00000    8.75692
 88   38.50000    8.73753
 89   39.00000    8.22793
 90   39.50000    8.86533
 91   40.00000    8.56819
 92   40.50000    9.00213
 93   41.00000    8.51844
 94   41.50000    8.81121
 95   42.00000    8.51106
 96   42.50000    8.28359
 97   43.00000    8.65719
 98   43.50000    8.33235
 99   44.00000    8.52983
100   44.50000    9.04601
101   45.00000    8.53333
102   45.50000    9.20433
103   46.00000    8.60132
104   46.50000    8.94629
105   47.00000    8.60415
106   47.50000    8.56460
107   48.00000    9.35277
108   48.50000    8.65887
109   49.00000    9.33907
110   49.50000    9.30430