Skip to content

Commit d14289a

Browse files
committed
Courtesy of Eva: Add µm support for .top, .stp files
1 parent a78c218 commit d14289a

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

AFMReader/stp.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313

1414
# pylint: disable=too-many-locals
15+
# pylint: disable=too-many-statements
1516
def load_stp( # noqa: C901 (ignore too complex)
1617
file_path: Path | str, header_encoding: str = "latin-1"
1718
) -> tuple[np.ndarray, float]:
@@ -69,14 +70,20 @@ def load_stp( # noqa: C901 (ignore too complex)
6970
if cols_match is None:
7071
raise ValueError(f"[{filename}] : 'cols' not found in file header.")
7172
cols = int(cols_match.group(1))
72-
x_real_size_match = re.search(r"X Amplitude: (\d+\.?\d*) nm", header_decoded)
73+
x_real_size_match = re.search(r"X Amplitude: (\d+\.?\d*) (µm|nm)", header_decoded)
7374
if x_real_size_match is None:
7475
raise ValueError(f"[{filename}] : 'X Amplitude' not found in file header.")
7576
x_real_size = float(x_real_size_match.group(1))
76-
y_real_size_match = re.search(r"Y Amplitude: (\d+\.?\d*) nm", header_decoded)
77+
x_units = x_real_size_match.group(2)
78+
if x_units == "µm":
79+
x_real_size *= 1000
80+
y_real_size_match = re.search(r"Y Amplitude: (\d+\.?\d*) (µm|nm)", header_decoded)
7781
if y_real_size_match is None:
7882
raise ValueError(f"[{filename}] : 'Y Amplitude' not found in file header.")
7983
y_real_size = float(y_real_size_match.group(1))
84+
y_units = y_real_size_match.group(2)
85+
if y_units == "µm":
86+
y_real_size *= 1000
8087
if x_real_size != y_real_size:
8188
raise NotImplementedError(
8289
f"[{filename}] : X scan size (nm) does not equal Y scan size (nm) ({x_real_size}, {y_real_size})"

AFMReader/top.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
# pylint: disable=too-many-locals
1515
# pylint: disable=too-many-statements
16+
# pylint: disable=too-many-branches
1617
def load_top( # noqa: C901 (ignore too complex)
1718
file_path: Path | str, header_encoding: str = "latin-1"
1819
) -> tuple[np.ndarray, float]:
@@ -70,14 +71,20 @@ def load_top( # noqa: C901 (ignore too complex)
7071
if cols_match is None:
7172
raise ValueError(f"[{filename}] : 'cols' not found in file header.")
7273
cols = int(cols_match.group(1))
73-
x_real_size_match = re.search(r"X Amplitude: (\d+\.?\d*) nm", header_decoded)
74+
x_real_size_match = re.search(r"X Amplitude: (\d+\.?\d*) (µm|nm)", header_decoded)
7475
if x_real_size_match is None:
7576
raise ValueError(f"[{filename}] : 'X Amplitude' not found in file header.")
7677
x_real_size = float(x_real_size_match.group(1))
77-
y_real_size_match = re.search(r"Y Amplitude: (\d+\.?\d*) nm", header_decoded)
78+
x_units = x_real_size_match.group(2)
79+
if x_units == "µm":
80+
x_real_size *= 1000
81+
y_real_size_match = re.search(r"Y Amplitude: (\d+\.?\d*) (µm|nm)", header_decoded)
7882
if y_real_size_match is None:
7983
raise ValueError(f"[{filename}] : 'Y Amplitude' not found in file header.")
8084
y_real_size = float(y_real_size_match.group(1))
85+
y_units = y_real_size_match.group(2)
86+
if y_units == "µm":
87+
y_real_size *= 1000
8188
if x_real_size != y_real_size:
8289
raise NotImplementedError(
8390
f"[{filename}] : X scan size (nm) does not equal Y scan size (nm) ({x_real_size}, {y_real_size})"

0 commit comments

Comments
 (0)