CamPetro

Vendor and Tool-Specific Mnemonics

On this page

Summary

Beyond the generic family names, each vendor and tool generation has its own mnemonic patterns, especially for array and multi-spacing tools. This page describes how to recognise them, how to read a channel name for what it tells you, and how to pick the shallow, medium and deep members of an array. Use it when a file contains tool-specific channels that a generic alias dictionary does not cover.

Inputs and outputs

Item Notes
Input Curve mnemonics and descriptions The description field often names the tool
Input Header fields that name the service company and tool Used to choose the vendor pattern set
Output The family of each channel For example deep induction
Output Shallow, medium and deep picks for each array Ordered by depth of investigation

Equations

There is no governing equation. The procedure is:

  1. Identify the service company, the tool and whether the data are wireline or logging while drilling (LWD) from the header, the curve descriptions and the file name. Do not rely on the mnemonics alone.
  2. Choose the pattern set for that vendor and tool generation. A pattern is a rule that reads a name and extracts what it encodes: a family, a spacing or depth of investigation, a frequency, an environmental correction level.
  3. Group the channels of each array and order them by the quantity the name encodes.
  4. Assign the shallowest, a middle and the deepest channel to the shallow, medium and deep resistivity families. The rule used below is that a larger number means a deeper reading, which holds for the array families it covers.
  5. Record which channels were left out, and why.

Single-value calculator

No calculator: this method is a procedure, not a single equation.

Behavior

The run below recognises four groups from twenty names: an induction array (AT10 to AT90), a laterolog array (RLA1 to RLA5), and two LWD propagation groups (attenuation and phase, each at one frequency). For each it returns shallow, medium and deep members: for the induction array AT10, AT30 and AT90, for the laterolog array RLA1, RLA3 and RLA5, and for the LWD groups A16H, A34H, A40H and P16H, P34H, P40H. GR and DT do not match an array pattern and are passed to the generic dictionary. The medium pick is simply the middle channel by rank, which is a convenience and not a physical statement.

Parameter guidance

Pattern sets. Keep one set per vendor, and within a vendor one per tool generation, because names are reused and redefined. Treat a pattern as a hypothesis and test it on the values: the deep channel of an array should read the same or higher in a resistive bed with shoulders, and all channels should converge in a thick, uniform, non-invaded bed.

Depth-of-investigation rule. For array tools the rank order of the number in the name usually follows the depth of investigation, but check the tool documentation. LWD propagation names combine a measurement type (attenuation or phase), a spacing and a frequency, and each combination has its own depth of investigation, so the ordering must be done within a group of the same type and frequency, which the code does.

Processing level. Names often carry a suffix or a descriptor that says whether the curve is raw, environmentally corrected, or at a different vertical resolution. Resolve these in the same way as on Mnemonic Conventions and Curve Families, and prefer the level your later steps expect. Neutron curves in particular must be matched to the right correction, see Neutron Tool Selection.

Worked example

Twenty channel names from a wireline induction array, a laterolog array and an LWD propagation tool, grouped and ordered by the number each name encodes:

import re

# Array tools name each channel by a number that encodes depth of investigation or spacing.
# Rule of thumb used here: the smallest number is the shallowest reading, the largest the deepest.
ARRAY_PATTERNS = [
    ("induction array (DOI in inches)", re.compile(r"^at(\d{2})$", re.I)),
    ("laterolog array (RLA1..RLA5)",    re.compile(r"^rla(\d)$", re.I)),
    ("LWD propagation (A/P + spacing + frequency)", re.compile(r"^([ap])(\d{2})([hl])$", re.I)),
]


def classify(names):
    groups = {}
    for n in names:
        for label, rx in ARRAY_PATTERNS:
            m = rx.match(n)
            if m:
                if label.startswith("LWD"):
                    key = f"{m.group(1).upper()}{m.group(3).upper()}"  # attenuation or phase, high or low frequency
                    rank = int(m.group(2))
                else:
                    key, rank = "", int(m.group(1))
                groups.setdefault((label, key), []).append((rank, n))
    return groups


def pick_depths(group):
    """Shallow, medium and deep members of an ordered array."""
    ordered = [n for _, n in sorted(group)]
    return {"shallow": ordered[0], "medium": ordered[len(ordered) // 2], "deep": ordered[-1]}


names = ["AT10", "AT20", "AT30", "AT60", "AT90", "RLA1", "RLA2", "RLA3", "RLA4", "RLA5",
         "A16H", "A22H", "A34H", "A40H", "P16H", "P22H", "P34H", "P40H", "GR", "DT"]
for (label, key), members in classify(names).items():
    picks = pick_depths(members)
    tag = f" [{key}]" if key else ""
    print(f"{label}{tag}: " + ", ".join(f"{k}={v}" for k, v in picks.items()))
print("not an array channel:", ", ".join(n for n in names if not any(rx.match(n) for _, rx in ARRAY_PATTERNS)))

Output

induction array (DOI in inches): shallow=AT10, medium=AT30, deep=AT90
laterolog array (RLA1..RLA5): shallow=RLA1, medium=RLA3, deep=RLA5
LWD propagation (A/P + spacing + frequency) [AH]: shallow=A16H, medium=A34H, deep=A40H
LWD propagation (A/P + spacing + frequency) [PH]: shallow=P16H, medium=P34H, deep=P40H
not an array channel: GR, DT

Assumptions and limitations

  • The vendor and tool were identified correctly. A pattern applied to the wrong vendor can be silently wrong.
  • The number in an array channel name increases with depth of investigation. This is the usual convention but not universal.
  • The channels are not already composites. A file may contain a merged curve named like a channel.
  • Names have not been edited by a third party. Re-exported files sometimes rename channels.

QC checks

  • Plot the channels of each array together. They should overlay in thick uniform beds and separate in a consistent order across invasion, thin beds and conductive shoulders.
  • The shallow, medium and deep picks differ. If two of them are the same channel, the array has too few members or the pattern has failed.
  • The picks are of the same tool and run. Mixing an induction medium with a laterolog deep is a common mistake.
  • Channels left out by the patterns were reviewed.
  • Units of each channel are consistent (all ohm·m, or all conductivity).

Going Deeper

The proliferation of mnemonics follows the history of the tools. Early induction and laterolog tools gave one to three resistivity curves with short names. Array tools produce a set of curves, usually at several depths of investigation and vertical resolutions, so the names carry numbers. LWD tools add the dimension of frequency and the choice between attenuation and phase measurements. A generic dictionary can only treat these as a single family, which is why array tools need their own rules. When the names carry no usable structure, the description field in the header and the tool documentation are the only reliable sources.

References

References will be added once verified.

Python reference implementation

Python reference implementation

The Python reference implementation is available to registered users with a verified email address. Register or sign in to view it.