|
12 | 12 | import subprocess
|
13 | 13 | from dataclasses import dataclass, field
|
14 | 14 | from pathlib import Path
|
15 |
| -from typing import List, Optional, Union, Tuple, TypeAlias |
| 15 | +from typing import Dict, List, Optional, Union, Tuple, TypeAlias |
16 | 16 |
|
17 | 17 | import matplotlib.pyplot as plt
|
18 | 18 | from matplotlib.axes import Axes
|
@@ -125,13 +125,11 @@ class GSAS2RuntimeState:
|
125 | 125 | Attributes:
|
126 | 126 | number_of_regions: Number of regions in the model.
|
127 | 127 | number_histograms: Number of histograms in the model.
|
128 |
| - banks_per_file: Number of banks per file. |
129 | 128 | d_spacing_min: The minimum d-spacing value.
|
130 | 129 | """
|
131 | 130 |
|
132 | 131 | number_of_regions: int = 0
|
133 | 132 | number_histograms: int = 0
|
134 |
| - banks_per_file: int = 0 |
135 | 133 | d_spacing_min: float = 1.0
|
136 | 134 |
|
137 | 135 |
|
@@ -203,6 +201,41 @@ def run_model(
|
203 | 201 | project_name: str,
|
204 | 202 | rb_num: Optional[str] = None,
|
205 | 203 | user_x_limits: Optional[List[List[float]]] = None,
|
| 204 | + ) -> Optional[Dict[str, int]]: |
| 205 | + """ |
| 206 | + Returns a dictionary mapping data file names to their result counts |
| 207 | + """ |
| 208 | + data_files = load_parameters[2] # Extract data files list |
| 209 | + num_hist = None |
| 210 | + |
| 211 | + for data_file in data_files: |
| 212 | + # Create unique project name for each file |
| 213 | + file_basename = os.path.splitext(os.path.basename(data_file))[0] |
| 214 | + individual_project_name = f"{project_name}_{file_basename}" |
| 215 | + |
| 216 | + # Create modified load_parameters for single file |
| 217 | + single_file_load_params = [ |
| 218 | + load_parameters[0], # instrument_files (reuse same) |
| 219 | + load_parameters[1], # phase_filepaths (reuse same) |
| 220 | + [data_file], # single data file |
| 221 | + ] |
| 222 | + |
| 223 | + num_hist = self._run_single_refinement( |
| 224 | + single_file_load_params, refinement_parameters, individual_project_name, rb_num, user_x_limits |
| 225 | + ) |
| 226 | + |
| 227 | + if not num_hist: |
| 228 | + return |
| 229 | + |
| 230 | + return num_hist |
| 231 | + |
| 232 | + def _run_single_refinement( |
| 233 | + self, |
| 234 | + load_parameters: list, |
| 235 | + refinement_parameters: list, |
| 236 | + project_name: str, |
| 237 | + rb_num: Optional[str] = None, |
| 238 | + user_x_limits: Optional[List[List[float]]] = None, |
206 | 239 | ) -> Optional[int]:
|
207 | 240 | self.clear_input_components()
|
208 | 241 | if not self.initial_validation(project_name, load_parameters):
|
@@ -340,7 +373,6 @@ def _create_gsas2_config(self) -> GSAS2Config:
|
340 | 373 | override_cell_lengths=self.get_override_lattice_parameters(),
|
341 | 374 | d_spacing_min=self.dSpacing_min,
|
342 | 375 | number_of_regions=self.state.number_of_regions,
|
343 |
| - banks_per_file=self.state.banks_per_file, |
344 | 376 | )
|
345 | 377 |
|
346 | 378 | def _initialize_gsas2_handler(
|
@@ -571,10 +603,6 @@ def generate_reflections_from_space_group(self) -> None:
|
571 | 603 | # =========
|
572 | 604 |
|
573 | 605 | def understand_data_structure(self) -> None:
|
574 |
| - if len(self.file_paths.instrument_files) != 1: |
575 |
| - logger.error("* The number of instrument files must be one.") |
576 |
| - return False |
577 |
| - |
578 | 606 | if len(self.file_paths.instrument_files) != 1:
|
579 | 607 | logger.error("* You must provide exactly one instrument file.")
|
580 | 608 | return False
|
@@ -605,7 +633,6 @@ def understand_data_structure(self) -> None:
|
605 | 633 | return False
|
606 | 634 |
|
607 | 635 | self.state.number_of_regions = number_of_regions
|
608 |
| - self.state.banks_per_file = banks_per_file[0] if banks_per_file else 0 |
609 | 636 | return True
|
610 | 637 |
|
611 | 638 | def validate_x_limits(self, users_limits: Optional[List[List[float]]]) -> bool:
|
|
0 commit comments