import os
from dataclasses import dataclass
from .config import FILE_SUFFIXES, MEASUREMENT_SUBDIRS
[docs]@dataclass
class MeasurementPaths:
    """
    The `MeasurementPaths` class provides file- and directory-paths relevant for
    a XRD measurement and is used by other classes and functions of this package.
    Parameter:
        :measurements_dir:          Path to the measurements directory
        :measurement_id:            ID of the measurement
        :subdir_data:               Subdirectory for data
        :subdir_refined:            Subdirectory for refined data
        :subdir_results:            Subdirectory for result
        :suffix_data:               Suffix for scan data file
        :suffix_meta:               Suffix for meta data file
        :suffix_protocol:           Suffix for measurement protocol file
        :suffix_refined_data:       Suffix for refined data file
        :suffix_refinement_results: Suffix for refinement results file
        :suffix_source_data:        Suffix for source data file
    """
    measurements_dir: str
    measurement_id: str
    subdir_data: str = MEASUREMENT_SUBDIRS["data"]
    subdir_refined: str = MEASUREMENT_SUBDIRS["refinement"]
    subdir_results: str = MEASUREMENT_SUBDIRS["results"]
    suffix_data: str = FILE_SUFFIXES["data"]
    suffix_meta: str = FILE_SUFFIXES["meta"]
    suffix_protocol: str = FILE_SUFFIXES["protocol"]
    suffix_refined_data: str = FILE_SUFFIXES["refined"]
    suffix_refinement_results: str = FILE_SUFFIXES["refined"]
    suffix_source_data: str = FILE_SUFFIXES["source_data"]
    @property
    def dir_data(self) -> str:
        """Returns path to data directory."""
        return os.path.join(
            self.measurements_dir,
            self.measurement_id,
            self.subdir_data,
        )
    @property
    def dir_refinement(self) -> str:
        """Returns path to refinement directory."""
        return os.path.join(
            self.dir_data,
            self.subdir_refined,
        )
    @property
    def dir_results(self) -> str:
        """Returns path to results directory."""
        return os.path.join(
            self.measurements_dir,
            self.measurement_id,
            self.subdir_results,
        )
    @property
    def file_data(self) -> str:
        """Returns path to data file (``.csv``)."""
        return os.path.join(
            self.dir_data,
            self.measurement_id + self.suffix_data + ".csv",
        )
    @property
    def file_log(self) -> str:
        """Returns path to log file (``.log``)."""
        return os.path.join(
            self.measurements_dir,
            self.measurement_id,
            self.measurement_id + ".log",
        )
    @property
    def file_meta(self) -> str:
        """Returns path to meta file (``.json``)."""
        return os.path.join(
            self.dir_data,
            self.measurement_id + self.suffix_meta + ".json",
        )
    @property
    def file_protocol(self) -> str:
        """Returns path to protocol file (``.md``)."""
        return os.path.join(
            self.measurements_dir,
            self.measurement_id,
            self.measurement_id + self.suffix_protocol + ".md",
        )
    @property
    def file_refined_data(self) -> str:
        """Returns path to refined data file (``.md``)."""
        return os.path.join(
            self.dir_data,
            self.measurement_id + self.suffix_refined_data + ".csv",
        )
    @property
    def file_refinement_result(self) -> str:
        """Returns path to refinement results file (``.json``)."""
        return os.path.join(
            self.dir_data,
            self.measurement_id + self.suffix_refinement_results + ".json",
        )
    @property
    def file_source_data(self) -> str:
        """Returns path to source archive file (``.zip``)."""
        return os.path.join(
            self.dir_data,
            self.measurement_id + self.suffix_source_data + ".zip",
        )
[docs]    def get_cif_file_path(self, phase: str) -> str:
        """Return path to a cif file for a specified phase (``.cif``)."""
        return os.path.join(
            self.dir_results,
            self.measurement_id + self.suffix_refined_data + "_" + phase + ".cif",
        )