1"use strict";(globalThis.webpackChunkvrgs_docs_v_3_1=globalThis.webpackChunkvrgs_docs_v_3_1||[]).push([[11671],{52776(e,n,i){i.r(n),i.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"general/wells-seismic/las-well-log-import","title":"Importing LAS Well Logs","description":"This guide covers importing geophysical well log data in LAS 2.0 (Log","source":"@site/versioned_docs/version-3.3/general/wells-seismic/las-well-log-import.md","sourceDirName":"general/wells-seismic","slug":"/general/wells-seismic/las-well-log-import","permalink":"/docs/3.3/general/wells-seismic/las-well-log-import","draft":false,"unlisted":false,"editUrl":"https://github.com/vrgeoscience/vrgs_docs_v3/tree/master/versioned_docs/version-3.3/general/wells-seismic/las-well-log-import.md","tags":[],"version":"3.3","sidebarPosition":1,"frontMatter":{"sidebar_position":1},"sidebar":"docs","previous":{"title":"Auto Structural Mapping","permalink":"/docs/3.3/auto-structure-mapping"},"next":{"title":"Seismic Volumes","permalink":"/docs/3.3/general/wells-seismic/seismic-volumes"}}');var t=i(74848),r=i(28453);const o={sidebar_position:1},l="Importing LAS Well Logs",d={},c=[{value:"What is LAS 2.0?",id:"what-is-las-20",level:2},{value:"Two ways to import",id:"two-ways-to-import",level:2},{value:"1. Batch import \u2014 one new well per file",id:"1-batch-import--one-new-well-per-file",level:3},{value:"2. Per-log import \u2014 attach curves to an existing log",id:"2-per-log-import--attach-curves-to-an-existing-log",level:3},{value:"How LAS fields map to VRGS",id:"how-las-fields-map-to-vrgs",level:2},{value:"Deviation handling",id:"deviation-handling",level:2},{value:"A. The log already has a deviation track",id:"a-the-log-already-has-a-deviation-track",level:3},{value:"B. The log has no track yet",id:"b-the-log-has-no-track-yet",level:3},{value:"Working with imported curves",id:"working-with-imported-curves",level:2},{value:"Round-tripping to JSON",id:"round-tripping-to-json",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2},{value:""WRAP-mode LAS files are not supported"",id:"wrap-mode-las-files-are-not-supported",level:3},{value:""LAS file has no <code>~C</code> section or no curves declared"",id:"las-file-has-no-c-section-or-no-curves-declared",level:3},{value:""Data row column count does not match curve count"",id:"data-row-column-count-does-not-match-curve-count",level:3},{value:"NULL values appear as the curve minimum",id:"null-values-appear-as-the-curve-minimum",level:3},{value:"The log is in the wrong place in 3D",id:"the-log-is-in-the-wrong-place-in-3d",level:3},{value:"KB offset looks wrong",id:"kb-offset-looks-wrong",level:3},{value:"Limitations",id:"limitations",level:2},{value:"See also",id:"see-also",level:2}];function a(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,r.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.header,{children:(0,t.jsx)(n.h1,{id:"importing-las-well-logs",children:"Importing LAS Well Logs"})}),"\n",(0,t.jsxs)(n.p,{children:["This guide covers importing geophysical well log data in ",(0,t.jsx)(n.strong,{children:"LAS 2.0"})," (Log\nASCII Standard) format into VRGS. Use it whenever you receive wireline or\nLWD data \u2014 gamma ray, resistivity, density, neutron, sonic, image-log\nchannels, etc. \u2014 packaged as a ",(0,t.jsx)(n.code,{children:".las"})," file from a contractor, public\nrepository, or in-house log database."]}),"\n",(0,t.jsx)(n.admonition,{title:"Already have a JSON well log?",type:"tip",children:(0,t.jsx)(n.p,{children:"VRGS continues to accept its native JSON well-log format alongside LAS.\nThe LAS importer produces the same internal structure, so curves\nimported from either source render and serialize identically."})}),"\n",(0,t.jsx)(n.h2,{id:"what-is-las-20",children:"What is LAS 2.0?"}),"\n",(0,t.jsxs)(n.p,{children:["LAS is the industry-standard ASCII interchange format for geophysical\nwell logs, maintained by the Canadian Well Logging Society (CWLS). A LAS\n2.0 file is a plain text file organised into named sections, each\nbeginning with a tilde
1(",(0,t.jsx)(n.code,{children:"~"}),"):"]}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"Section"}),(0,t.jsx)(n.th,{children:"Purpose"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~V"})}),(0,t.jsx)(n.td,{children:"Version + WRAP flag"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~W"})}),(0,t.jsx)(n.td,{children:"Well information (name, location, KB elevation, depth range, NULL value)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~C"})}),(0,t.jsx)(n.td,{children:"Curve definitions (mnemonic, unit, description)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~P"})}),(0,t.jsx)(n.td,{children:"Optional parameters (mud, bit size, run conditions)"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~O"})}),(0,t.jsx)(n.td,{children:'Free-form "other" comments'})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~A"})}),(0,t.jsx)(n.td,{children:"ASCII data block \u2014 depth + one column per curve"})]})]})]}),"\n",(0,t.jsx)(n.p,{children:"A minimal LAS file looks like this:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{children:"~V\nVERS. 2.0 : CWLS LOG ASCII STANDARD - VERSION 2.0\nWRAP. NO : ONE LINE PER DEPTH STEP\n~W\nSTRT.M 1670.0000 : START DEPTH\nSTOP.M 1672.0000 : STOP DEPTH\nSTEP.M 1.0000 : STEP\nNULL. -999.25 : NULL VALUE\nWELL. ANY-WELL-1 : WELL\nEKB .M 250.0 : KB ELEVATION\nX .M 500000.0 : SURFACE X\nY .M 6000000.0 : SURFACE Y\n~C\nDEPT.M : DEPTH\nGR .API: GAMMA RAY\n~A\n1670.0000 75.50\n1671.0000 -999.25\n1672.0000 88.10\n"})}),"\n",(0,t.jsxs)(n.p,{children:["VRGS supports ",(0,t.jsx)(n.strong,{children:"LAS 2.0 unwrapped files"}),". Wrapped files (",(0,t.jsx)(n.code,{children:"WRAP. YES"}),") and\nLAS 3.0 files are not supported (see ",(0,t.jsx)(n.a,{href:"#limitations",children:"Limitations"}),")."]}),"\n",(0,t.jsx)(n.h2,{id:"two-ways-to-import",children:"Two ways to import"}),"\n",(0,t.jsx)(n.p,{children:"VRGS offers two entry points depending on whether you are creating new\nwell objects or attaching curves to a well that already exists in the\nproject tree."}),"\n",(0,t.jsx)(n.h3,{id:"1-batch-import--one-new-well-per-file",children:"1. Batch import \u2014 one new well per file"}),"\n",(0,t.jsxs)(n.p,{children:["Use this when the LAS files are the source of truth: each file becomes a\nnew ",(0,t.jsx)(n.code,{children:"Log"})," object in the project tree."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the ",(0,t.jsx)(n.strong,{children:"Project Group"})," menu, choose ",(0,t.jsx)(n.strong,{children:"Import Sed Logs\u2026"})]}),"\n",(0,t.jsxs)(n.li,{children:["In the file-type filter, select ",(0,t.jsx)(n.strong,{children:"LAS Well Log (*.las)"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Multi-select one or more ",(0,t.jsx)(n.code,{children:".las"})," files and click ",(0,t.jsx)(n.strong,{children:"Open"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["VRGS creates a new log per file, names it from the LAS ",(0,t.jsx)(n.code,{children:"WELL"}),"\nmnemonic (or the filename if ",(0,t.jsx)(n.code,{children:"WELL"})," is empty), populates the curves,\nand renders the 3D log strip alongside the well track."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Each log is registered through the standard object factory, so it\nappears in the Data Tree under ",(0,t.jsx)(n.strong,{children:"Logs"})," and persists with the project\non save."]}),"\n",(0,t.jsx)(n.h3,{id:"2-per-log-import--attach-curves-to-an-existing-log",children:"2. Per-log import \u2014 attach curves to an existing log"}),"\n",(0,t.jsxs)(n.p,{children:["Use this when you have already created a ",(0,t.jsx)(n.code,{children:"Log"})," object \u2014 for example you\nimported a deviation survey from a CSV track first, or you want to attach\nnew curves to a re-logged well."]}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["In the Data Tree, ",(0,t.jsx)(n.strong,{children:"right-click the existing log"})," and choose\n",(0,t.jsx)(n.strong,{children:"Import \u2192 Geophysical Log Tracks\u2026"})]}),"\n",(0,t.jsxs)(n.li,{children:["In the file-type filter, select ",(0,t.jsx)(n.strong,{children:"LAS Well Log (*.las)"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["Pick the file and click ",(0,t.jsx)(n.strong,{children:"Open"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["The log's existing curves and data are replaced by the LAS contents.\nThe log's existing ",(0,t.jsx)(n.strong,{children:"deviation track is preserved"})," (see\n",(0,t.jsx)(n.a,{href:"#deviation-handling",children:"Deviation handling"}),")."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"how-las-fields-map-to-vrgs",children:"How LAS fields map to VRGS"}),"\n",(0,t.jsxs)(n.table,{children:[(0,t.jsx)(n.thead,{children:(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.th,{children:"LAS source"}),(0,t.jsx)(n.th,{children:"VRGS destination"}),(0,t.jsx)(n.th,{children:"Notes"})]})}),(0,t.jsxs)(n.tbody,{children:[(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~W WELL"})," / ",(0,t.jsx)(n.code,{children:"UWI"})]}),(0,t.jsx)(n.td,{children:"Log name"}),(0,t.jsx)(n.td,{children:"Falls back to the filename (without extension) if absent"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~W EKB"})," / ",(0,t.jsx)(n.code,{children:"KB"})," / ",(0,t.jsx)(n.code,{children:"EREF"})," / ",(0,t.jsx)(n.code,{children:"EGL"})]}),(0,t.jsx)(n.td,{children:"KB Offset"}),(0,t.jsx)(n.td,{children:"First non-zero match wins"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~W X"})," / ",(0,t.jsx)(n.code,{children:"XCOORD"})," / ",(0,t.jsx)(n.code,{children:"SURFX"})]}),(0,t.jsx)(n.td,{children:"Surface X (Easting)"}),(0,t.jsx)(n.td,{children:"Skipped if the log already has a deviation track"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~W Y"})," / ",(0,t.jsx)(n.code,{children:"YCOORD"})," / ",(0,t.jsx)(n.code,{children:"SURFY"})]}),(0,t.jsx)(n.td,{children:"Surface Y (Northing)"}),(0,t.jsx)(n.td,{children:"Skipped if the log already has a deviation track"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~W STRT"})," / ",(0,t.jsx)(n.code,{children:"STOP"})," / ",(0,t.jsx)(n.code,{children:"STEP"})]}),(0,t.jsx)(n.td,{children:"Used to derive elevation of the log top + validate the data block"}),(0,t.jsx)(n.td,{})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsx)(n.td,{children:(0,t.jsx)(n.code,{children:"~W NULL"})}),(0,t.jsx)(n.td,{children:"Sentinel value treated as missing data"}),(0,t.jsxs)(n.td,{children:["Default ",(0,t.jsx)(n.code,{children:"-999.25"})," if absent"]})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~C"})," mnemonic / unit / description"]}),(0,t.jsxs)(n.td,{children:["Curve ",(0,t.jsx)(n.code,{children:"name"})," / ",(0,t.jsx)(n.code,{children:"unit"})," / ",(0,t.jsx)(n.code,{children:"descr"})]}),(0,t.jsx)(n.td,{children:"One per curve"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~A"})," first column"]}),(0,t.jsx)(n.td,{children:"Depth (assumed measured depth from KB)"}),(0,t.jsx)(n.td,{children:"Drives the deviation interpolation"})]}),(0,t.jsxs)(n.tr,{children:[(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"~A"})," remaining columns"]}),(0,t.jsx)(n.td,{children:"Per-curve sample values"}),(0,t.jsxs)(n.td,{children:["NULL sentinels become true ",(0,t.jsx)(n.code,{children:"null"}),"s"]})]})]})]}),"\n",(0,t.jsxs)(n.p,{children:["After import, each curve also stores ",(0,t.jsx)(n.code,{children:"min"})," / ",(0,t.jsx)(n.code,{children:"max"})," calculated from the\nnon-null data \u2014 these drive the log-track auto-scaling on the 2D log\nplot and the colour map of the 3D log strip."]}),"\n",(0,t.jsx)(n.h2,{id:"deviation-handling",children:"Deviation handling"}),"\n",(0,t.jsx)(n.p,{children:"LAS 2.0 carries no deviation survey \u2014 only depth + curve values. VRGS\nresolves the 3D position of every sample using one of two strategies,\nchosen automatically:"}),"\n",(0,t.jsx)(n.h3,{id:"a-the-log-already-has-a-deviation-track",children:"A. The log already has a deviation track"}),"\n",(0,t.jsxs)(n.p,{children:["If the log has 2 or more deviation samples loaded (e.g. you imported a\n",(0,t.jsx)(n.code,{children:".csv"})," track via ",(0,t.jsx)(n.strong,{children:"Import \u2192 Geophysical Log Tracks\u2026"})," before importing\nthe LAS), VRGS preserves that track and ",(0,t.jsx)(n.strong,{children:"interpolates XYZ at each LAS\ndepth"})," along it."]}),"\n",(0,t.jsx)(n.p,{children:"The interpolation:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsx)(n.li,{children:"Sorts the existing track by Z descending (top first)."}),"\n",(0,t.jsxs)(n.li,{children:["Converts each LAS depth ",(0,t.jsx)(n.code,{children:"d"})," to a target elevation\n",(0,t.jsx)(n.code,{children:"z = KB - d"})," (using the LAS file's ",(0,t.jsx)(n.code,{children:"EKB"})," value)."]}),"\n",(0,t.jsx)(n.li,{children:"Linearly interpolates between the two bracketing track samples to\nplace the curve sample."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"This is the standard workflow when you have a real deviation survey:\nimport the track first as CSV, then layer LAS curves on top."}),"\n",(0,t.jsx)(n.h3,{id:"b-the-log-has-no-track-yet",children:"B. The log has no track yet"}),"\n",(0,t.jsxs)(n.p,{children:["VRGS builds a ",(0,t.jsx)(n.strong,{children:"vertical track"})," from the surface position:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Surface X / Y come from the LAS ",(0,t.jsx)(n.code,{children:"~W"})," X / Y mnemonics, or ",(0,t.jsx)(n.code,{children:"(0, 0)"})," if\nabsent. (You can override before import using\n",(0,t.jsx)(n.code,{children:"CLogImporterLAS::SetSurfacePosition"})," \u2014 there is no UI for this yet.)"]}),"\n",(0,t.jsxs)(n.li,{children:["Surface Z is ",(0,t.jsx)(n.code,{children:"EKB \u2212 STRT"}),", so the top of the LAS depth range sits at\nthe well head."]}),"\n",(0,t.jsxs)(n.li,{children:["Each subsequent sample drops by ",(0,t.jsx)(n.code,{children:"(depth \u2212 STRT)"})," metres."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"This is suitable for vertical wells and quick-look situations. For\ndeviated or horizontal wells, import the deviation survey first (see\nstrategy A)."}),"\n",(0,t.jsx)(n.h2,{id:"working-with-imported-curves",children:"Working with imported curves"}),"\n",(0,t.jsx)(n.p,{children:"Once curves are loaded, VRGS treats them identically to JSON-imported\ncurves:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The 2D log container (the panel that appears alongside the 3D view)\ndraws each curve in its own track. Use the curve picker to select\nwhich mnemonic is the ",(0,t.jsx)(n.strong,{children:"active log"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:["The active curve also drives the ",(0,t.jsx)(n.strong,{children:"3D log strip"})," \u2014 the coloured ribbon\nthat follows the well in the 3D scene, with width and direction\ncontrolled in the log's display options."]}),"\n",(0,t.jsx)(n.li,{children:"RGB tracks (e.g. R/G/B image log channels) can be assembled from any\nthree numeric curves through the same display options."}),"\n",(0,t.jsx)(n.li,{children:"The full curve set is persisted
1with the project as BSON inside the\nlog's database row, so re-opening the project requires no re-import."}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"round-tripping-to-json",children:"Round-tripping to JSON"}),"\n",(0,t.jsx)(n.p,{children:"To share a LAS-imported log with another VRGS user (or to inspect it),\nexport it as JSON:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:["Right-click the log in the Data Tree and choose ",(0,t.jsx)(n.strong,{children:"Export\u2026"})]}),"\n",(0,t.jsxs)(n.li,{children:["Pick ",(0,t.jsx)(n.strong,{children:"JSON Well log (*.json)"})," and save."]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["The exported JSON is the literal contents of the log's\n",(0,t.jsx)(n.code,{children:'m_DigitalLog["JSONLog"]'})," array \u2014 curves, data, deviation \u2014 and can be\nre-imported via ",(0,t.jsx)(n.strong,{children:"Import \u2192 Geophysical Log Tracks\u2026"})," with the\n",(0,t.jsx)(n.strong,{children:"JSON Well Log"})," filter selected."]}),"\n",(0,t.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,t.jsx)(n.h3,{id:"wrap-mode-las-files-are-not-supported",children:'"WRAP-mode LAS files are not supported"'}),"\n",(0,t.jsxs)(n.p,{children:["Your file uses ",(0,t.jsx)(n.code,{children:"WRAP. YES"})," in ",(0,t.jsx)(n.code,{children:"~V"}),", which spreads each depth step across\nmultiple lines. Re-export it as unwrapped from the source software, or\nuse a converter (",(0,t.jsx)(n.code,{children:"lasio"})," in Python, the CWLS ",(0,t.jsx)(n.code,{children:"wrapconv"})," utility, etc.)\nto flatten before importing."]}),"\n",(0,t.jsxs)(n.h3,{id:"las-file-has-no-c-section-or-no-curves-declared",children:['"LAS file has no ',(0,t.jsx)(n.code,{children:"~C"}),' section or no curves declared"']}),"\n",(0,t.jsxs)(n.p,{children:["The ",(0,t.jsx)(n.code,{children:"~C"})," curve-definition section is missing or empty. A valid LAS file\nmust declare at least the depth column. Check that your file is true\nLAS 2.0 and not a renamed CSV."]}),"\n",(0,t.jsx)(n.h3,{id:"data-row-column-count-does-not-match-curve-count",children:'"Data row column count does not match curve count"'}),"\n",(0,t.jsxs)(n.p,{children:["A line in ",(0,t.jsx)(n.code,{children:"~A"})," has a different number of values than the count of ",(0,t.jsx)(n.code,{children:"~C"}),"\nmnemonics. This is most often caused by:"]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Embedded tabs or extra whitespace inside a single value."}),"\n",(0,t.jsx)(n.li,{children:"A truncated last line."}),"\n",(0,t.jsx)(n.li,{children:"Hand-edited data with a missing column."}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"Open the file in a text editor and inspect the failing row."}),"\n",(0,t.jsx)(n.h3,{id:"null-values-appear-as-the-curve-minimum",children:"NULL values appear as the curve minimum"}),"\n",(0,t.jsxs)(n.p,{children:["VRGS converts every value matching the ",(0,t.jsx)(n.code,{children:"~W NULL"})," sentinel into a true\n",(0,t.jsx)(n.code,{children:"null"}),", which the 2D log container plots as the curve minimum (so the\ntrack stays connected). If you see a flat-line at the minimum across an\ninterval, the source file legitimately had ",(0,t.jsx)(n.code,{children:"-999.25"})," values (or\nwhatever sentinel the file declared)."]}),"\n",(0,t.jsx)(n.h3,{id:"the-log-is-in-the-wrong-place-in-3d",children:"The log is in the wrong place in 3D"}),"\n",(0,t.jsxs)(n.p,{children:["If you imported the LAS without a prior deviation track and the LAS\nfile's ",(0,t.jsx)(n.code,{children:"~W X"})," / ",(0,t.jsx)(n.code,{children:"Y"})," mnemonics are missing or zero, the log will sit at\nthe project origin. To fix: import the deviation survey separately as\nCSV via ",(0,t.jsx)(n.strong,{children:"Import \u2192 Geophysical Log Tracks\u2026"}),", then re-import the LAS\ninto the same log \u2014 the existing track will be preserved and the curves\nre-aligned."]}),"\n",(0,t.jsx)(n.h3,{id:"kb-offset-looks-wrong",children:"KB offset looks wrong"}),"\n",(0,t.jsxs)(n.p,{children:["VRGS reads ",(0,t.jsx)(n.code,{children:"EKB"}),", ",(0,t.jsx)(n.code,{children:"KB"}),", ",(0,t.jsx)(n.code,{children:"EREF"}),", then ",(0,t.jsx)(n.code,{children:"EGL"})," in that order, taking the\nfirst non-zero match. If your LAS uses a non-standard mnemonic for the\nKB elevation, the offset will default to ",(0,t.jsx)(n.code,{children:"0.0"})," and the log will be\npositioned at depth = elevation. Either edit the file to use a standard\nmnemonic or set the KB offset manually in the log's properties after\nimport."]}),"\n",(0,t.jsx)(n.h2,{id:"limitations",children:"Limitations"}),"\n",(0,t.jsx)(n.p,{children:"The current importer covers the LAS 2.0 spec as it appears in the vast\nmajority of wireline deliverables. The following are not supported:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"WRAP mode"})," (",(0,t.jsx)(n.code,{children:"WRAP. YES"}),") \u2014 multi-line per depth step."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"LAS 3.0"})," \u2014 the multi-array section model differs significantly and\nneeds a separate parser."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Deviation surveys from sidecar files"})," (e.g. ",(0,t.jsx)(n.code,{children:".dev"}),", ",(0,t.jsx)(n.code,{children:".svy"}),").\nWorkaround: convert to CSV and import as a track first."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"LAS export"})," \u2014 VRGS exports curves only as JSON for now."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Coordinate-system reprojection"}
1)," \u2014 the X/Y mnemonics are taken at\nface value in the project CRS. If your LAS uses lat/lon\n(",(0,t.jsx)(n.code,{children:"SLAT"}),"/",(0,t.jsx)(n.code,{children:"SLON"}),"), set the surface position manually before import."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsxs)(n.strong,{children:[(0,t.jsx)(n.code,{children:"~P"})," parameters"]})," \u2014 read but not currently surfaced in the UI."]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"see-also",children:"See also"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/3.3/trees/data/sedimentary-logs",children:"Sedimentary Logs Context Menu"})," \u2014\nfull reference for the right-click menu on logs."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/3.3/ribbons/ribbon-log",children:"3D Logs Ribbon Tab"})," \u2014 deviation\nediting and dip-domain commands."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.a,{href:"/docs/3.3/ribbons/ribbon-log",children:"2D Logs Ribbon Tab"})," \u2014 log track\ndisplay, RGB tracks, curve selection."]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},28453(e,n,i){i.d(n,{R:()=>o,x:()=>l});var s=i(96540);const t={},r=s.createContext(t);function o(e){const n=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.