pyref_core/lib.rs
1pub mod enums;
2pub mod errors;
3pub mod io;
4pub mod loader;
5pub mod documentation {
6 // No code changes needed here
7}
8
9// Re-export key types and functions for easier access
10pub use enums::{ExperimentType, HeaderValue};
11pub use errors::FitsLoaderError;
12pub use loader::{read_experiment, read_experiment_pattern, read_fits, read_multiple_fits};
13
14/// Reads a FITS file and converts it to a Polars DataFrame.
15///
16/// # Arguments
17///
18/// * `file_path` - Path to the FITS file to read
19/// * `experiment_type` - Type of experiment (e.g., `ExperimentType::Xrr`)
20///
21/// # Returns
22///
23/// A `Result` containing either the DataFrame or a `FitsLoaderError`.
24///
25/// # Example
26///
27/// ```
28/// use pyref_core::{read_fits_file, ExperimentType};
29/// use std::path::Path;
30///
31/// let df = read_fits_file("path/to/file.fits", ExperimentType::Xrr);
32/// ```
33pub fn read_fits_file(
34 file_path: impl AsRef<std::path::Path>,
35 experiment_type: ExperimentType,
36) -> Result<polars::prelude::DataFrame, FitsLoaderError> {
37 let path = file_path.as_ref().to_path_buf();
38 let header_items = experiment_type.get_keys();
39 loader::read_fits(path, &header_items)
40}
41
42/// Reads all FITS files in a directory and combines them into a single DataFrame.
43///
44/// # Arguments
45///
46/// * `dir_path` - Path to the directory containing FITS files
47/// * `experiment_type` - Type of experiment (e.g., `ExperimentType::Xrr`)
48///
49/// # Returns
50///
51/// A `Result` containing either the combined DataFrame or a `FitsLoaderError`.
52///
53/// # Example
54///
55/// ```
56/// use pyref_core::{read_experiment_dir, ExperimentType};
57///
58/// let df = read_experiment_dir("path/to/directory", ExperimentType::Xrr);
59/// ```
60pub fn read_experiment_dir(
61 dir_path: impl AsRef<str>,
62 experiment_type: ExperimentType,
63) -> Result<polars::prelude::DataFrame, FitsLoaderError> {
64 let header_items = experiment_type.get_keys();
65 loader::read_experiment(dir_path.as_ref(), &header_items)
66}
67
68/// Reads multiple FITS files and combines them into a single DataFrame.
69///
70/// # Arguments
71///
72/// * `file_paths` - Collection of paths to FITS files
73/// * `experiment_type` - Type of experiment (e.g., `ExperimentType::Xrr`)
74///
75/// # Returns
76///
77/// A `Result` containing either the combined DataFrame or a `FitsLoaderError`.
78///
79/// # Example
80///
81/// ```
82/// use pyref_core::{read_multiple_fits_files, ExperimentType};
83/// use std::path::PathBuf;
84///
85/// let paths = vec![
86/// PathBuf::from("path/to/file1.fits"),
87/// PathBuf::from("path/to/file2.fits"),
88/// ];
89/// let df = read_multiple_fits_files(paths, ExperimentType::Xrr);
90/// ```
91pub fn read_multiple_fits_files(
92 file_paths: Vec<std::path::PathBuf>,
93 experiment_type: ExperimentType,
94) -> Result<polars::prelude::DataFrame, FitsLoaderError> {
95 let header_items = experiment_type.get_keys();
96 loader::read_multiple_fits(file_paths, &header_items)
97}
98
99/// Reads FITS files matching a pattern in a directory and combines them into a single DataFrame.
100///
101/// # Arguments
102///
103/// * `dir_path` - Path to the directory containing FITS files
104/// * `pattern` - Glob pattern to match files (e.g., "Y6_refl_*.fits")
105/// * `experiment_type` - Type of experiment (e.g., `ExperimentType::Xrr`)
106///
107/// # Returns
108///
109/// A `Result` containing either the combined DataFrame or a `FitsLoaderError`.
110///
111/// # Example
112///
113/// ```
114/// use pyref_core::{read_fits_with_pattern, ExperimentType};
115///
116/// let df = read_fits_with_pattern("path/to/directory", "Y6_refl_*.fits", ExperimentType::Xrr);
117/// ```
118pub fn read_fits_with_pattern(
119 dir_path: impl AsRef<str>,
120 pattern: impl AsRef<str>,
121 experiment_type: ExperimentType,
122) -> Result<polars::prelude::DataFrame, FitsLoaderError> {
123 loader::read_experiment_pattern(dir_path.as_ref(), pattern.as_ref(), experiment_type)
124}