Skip to content

Commit a1eabf2

Browse files
committed
Fix pseudopot parsing from outcar
1 parent d79d4a3 commit a1eabf2

File tree

2 files changed

+33
-19
lines changed

2 files changed

+33
-19
lines changed

src/nomad_simulation_parsers/parsers/vasp/xml_parser.py

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ def write_to_archive(self) -> None:
101101
data_parser.annotation_key = vasp.XML2_KEY
102102
xml_parser.convert(data_parser)
103103

104+
self.archive.data = data_parser.data_object
105+
104106
# Fifth pass: PP_OUT to extend with OUTCAR pseudopotential metadata
105107
# This allows OUTCAR to supplement vasprun.xml pseudopotentials with
106108
# detailed metadata (SHA256, LPAW, LULTRA, etc.)
@@ -125,31 +127,40 @@ def write_to_archive(self) -> None:
125127
]
126128
)
127129

128-
outcar_parser = MappingTextParser(filepath=outcar_path)
129-
outcar_parser.text_parser = outcar_supplement_parser
130+
from .outcar_parser import OutcarParser, OutcarTextParser
131+
132+
outcar_parser = OutcarParser(filepath=outcar_path)
133+
outcar_parser.text_parser = OutcarTextParser()
134+
135+
pseudopot_parser = VASPMetainfoParser()
136+
pseudopot_parser.annotation_key = vasp.PP_OUT
137+
pseudopot_parser.data_object = vasp.Pseudopotential()
138+
outcar_parser.convert(pseudopot_parser)
139+
print(pseudopot_parser)
140+
self.archive.data.model_method[0].numerical_settings.append(pseudopot_parser.data_object)
130141

131-
data_parser.annotation_key = vasp.PP_OUT
132142
# Merge by index position: OUTCAR PP[0] extends XML PP[0], etc.
133143
# This preserves XML structure while adding OUTCAR's detailed metadata
134-
outcar_parser.convert(data_parser, update_mode='merge')
144+
# outcar_parser.convert(data_parser, update_mode='merge')
145+
135146

136147
# Clean up duplicate pseudopotentials created by type mismatch
137148
# When PP_OUT merges at index 0 but finds KSpace, creates new PP
138-
model_method = data_parser.data_object.model_method[0]
139-
seen_pp_names = set()
140-
deduplicated_ns = []
141-
for ns in model_method.numerical_settings:
142-
if ns.m_def.name == 'Pseudopotential':
143-
pp_name = getattr(ns, 'name', None)
144-
if pp_name and pp_name in seen_pp_names:
145-
LOGGER.debug(f'Removed duplicate Pseudopotential: {pp_name}')
146-
continue
147-
if pp_name:
148-
seen_pp_names.add(pp_name)
149-
deduplicated_ns.append(ns)
150-
151-
# Replace with deduplicated list
152-
model_method.numerical_settings = deduplicated_ns
149+
# model_method = data_parser.data_object.model_method[0]
150+
# seen_pp_names = set()
151+
# deduplicated_ns = []
152+
# for ns in model_method.numerical_settings:
153+
# if ns.m_def.name == 'Pseudopotential':
154+
# pp_name = getattr(ns, 'name', None)
155+
# if pp_name and pp_name in seen_pp_names:
156+
# LOGGER.debug(f'Removed duplicate Pseudopotential: {pp_name}')
157+
# continue
158+
# if pp_name:
159+
# seen_pp_names.add(pp_name)
160+
# deduplicated_ns.append(ns)
161+
162+
# # Replace with deduplicated list
163+
# model_method.numerical_settings = deduplicated_ns
153164

154165
outcar_parser.close()
155166

src/nomad_simulation_parsers/schema_packages/vasp.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,9 @@ class Pseudopotential(numerical_settings.Pseudopotential):
365365
('derive_is_gw_optimized', ['.TITEL']),
366366
)
367367

368+
add_mapping_annotation(Pseudopotential.m_def, PP_OUT, 'pseudpotential')
369+
370+
368371

369372
try:
370373
m_package.__init_metainfo__()

0 commit comments

Comments
 (0)