Wyckoff Position Analysis Skill
Analyzes crystal structure CIF files to determine Wyckoff position multiplicities and approximate fractional coordinates for the first atom of each Wyckoff position.
Dependencies
- pymatgen (for CIF parsing and SpacegroupAnalyzer)
- spglib (used internally by pymatgen for symmetry detection)
- Python standard library: fractions
Key Functions
analyze_wyckoff_position_multiplicities_and_coordinates(filepath)
Main entry point. Parses a CIF file, determines Wyckoff positions, and returns multiplicities and coordinates as rational fraction strings (denominator ≤ 12).
float_to_frac_str(val, max_denom=12)
Converts a float to a rational string with bounded denominator.
coords_to_frac_strs(coords, max_denom=12)
Converts an array of 3 coordinates to fraction strings.
validate_result(result, filepath)
Validates output structure, key consistency, total atom count, and fraction format.
Algorithm
- Parse CIF file with pymatgen Structure.from_file()
- Run SpacegroupAnalyzer to detect symmetry and Wyckoff letters
- Group atoms by Wyckoff letter, summing counts for multiplicity
- For each unique letter, take the first atom's original fractional coordinates
- Convert coordinates to rational fractions with denominator ≤ 12
Usage Example
pythonimport sys sys.path.insert(0, '/app/environment/skills/evo-wyckoff/scripts') from utils import analyze_wyckoff_position_multiplicities_and_coordinates, validate_result # Analyze a CIF file filepath = '/root/cif_files/FeS2_mp-226.cif' result = analyze_wyckoff_position_multiplicities_and_coordinates(filepath) print(result) # Validate the result validate_result(result, filepath)
Writing solution.py
The task requires writing the function at /root/workspace/solution.py:
pythonimport sys sys.path.insert(0, '/app/environment/skills/evo-wyckoff/scripts') from utils import analyze_wyckoff_position_multiplicities_and_coordinates # The function is directly importable and usable # Example: result = analyze_wyckoff_position_multiplicities_and_coordinates('/root/cif_files/FeS2_mp-226.cif')


