Skip to content

Commit 892c3f8

Browse files
committed
Revert back to multiple gsas calls
1 parent e297df4 commit 892c3f8

File tree

6 files changed

+428
-83
lines changed

6 files changed

+428
-83
lines changed

qt/python/mantidqtinterfaces/mantidqtinterfaces/Engineering/gui/engineering_diffraction/tabs/gsas2/call_G2sc.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -25,31 +25,26 @@ def add_phases(project, phase_files):
2525
project.add_phase(os.path.join(phase_file))
2626

2727

28-
def add_histograms(data_filenames, project, instruments, number_regions, banks_per_file):
28+
def add_histograms(data_filenames, project, instruments, number_regions):
2929
# Validation checks
30-
if len(data_filenames) < 1:
31-
raise ValueError("You must provide at least one data file.")
30+
if len(data_filenames) != 1:
31+
raise ValueError("You must provide only one data file.")
3232

3333
if len(instruments) != 1:
34-
raise ValueError("You must provide exactly one instrument file.")
35-
36-
if banks_per_file <= 1:
37-
raise ValueError("Each data file must contain multiple banks.")
38-
39-
expected_total_regions = len(data_filenames) * banks_per_file
40-
if number_regions != expected_total_regions:
41-
raise ValueError(f"Expected {expected_total_regions} total regions, but found {number_regions}.")
42-
43-
# Add histograms for each file and each bank within that file
44-
for file_index, data_filename in enumerate(data_filenames):
45-
for bank_index in range(1, banks_per_file + 1): # GSAS-II uses 1-based indexing
46-
project.add_powder_histogram(
47-
datafile=os.path.join(data_filename),
48-
iparams=os.path.join(instruments[0]), # Use the single instrument file
49-
phases=project.phases(),
50-
databank=bank_index, # Bank within this data file
51-
instbank=bank_index, # Corresponding bank in instrument file
52-
)
34+
raise ValueError("You must provide only one instrument file.")
35+
36+
if number_regions <= 1:
37+
raise ValueError("The data file must contain multiple banks.")
38+
39+
# Add histograms for each bank within that file
40+
for bank_index in range(1, number_regions + 1): # GSAS-II uses 1-based indexing
41+
project.add_powder_histogram(
42+
datafile=os.path.join(data_filenames[0]),
43+
iparams=os.path.join(instruments[0]), # Use the single instrument file
44+
phases=project.phases(),
45+
databank=bank_index, # Bank within this data file
46+
instbank=bank_index, # Corresponding bank in instrument file
47+
)
5348

5449

5550
def add_pawley_reflections(pawley_reflections, project, d_min):
@@ -225,7 +220,6 @@ def main():
225220
mantid_pawley_reflections = inputs_dict["mantid_pawley_reflections"]
226221
d_spacing_min = inputs_dict["d_spacing_min"]
227222
number_of_regions = inputs_dict["number_of_regions"]
228-
banks_per_file = inputs_dict["banks_per_file"]
229223
gsasii_scriptable_path = inputs_dict["gsasii_scriptable_path"]
230224

231225
# Call GSASIIscriptable
@@ -235,7 +229,7 @@ def main():
235229
gsas_project = G2sc.G2Project(filename=project_path)
236230

237231
add_phases(gsas_project, phase_files)
238-
add_histograms(data_files, gsas_project, instrument_files, number_of_regions, banks_per_file)
232+
add_histograms(data_files, gsas_project, instrument_files, number_of_regions)
239233

240234
if refinement_method == "Pawley" and mantid_pawley_reflections:
241235
add_pawley_reflections(mantid_pawley_reflections, gsas_project, d_spacing_min)

qt/python/mantidqtinterfaces/mantidqtinterfaces/Engineering/gui/engineering_diffraction/tabs/gsas2/gsas2_handler.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,15 +79,13 @@ class GSAS2Config:
7979
override_cell_lengths: A list of cell length overrides.
8080
d_spacing_min: The minimum d-spacing value.
8181
number_of_regions: The number of regions to configure.
82-
banks_per_file: Number of banks per file.
8382
"""
8483

8584
limits: Optional[List[Union[int, float]]] = field(default_factory=list)
8685
mantid_pawley_reflections: Optional[List[Union[str, int]]] = None
8786
override_cell_lengths: Optional[List[List[float]]] = None
8887
d_spacing_min: float = 1.0
8988
number_of_regions: int = 1
90-
banks_per_file: int = 0
9189

9290

9391
class GSAS2Handler(object):
@@ -325,7 +323,6 @@ def to_json(self) -> str:
325323
"override_cell_lengths": self.config.override_cell_lengths,
326324
"d_spacing_min": self.config.d_spacing_min,
327325
"number_of_regions": self.config.number_of_regions,
328-
"banks_per_file": self.config.banks_per_file,
329326
"gsasii_scriptable_path": str(self.gsasii_scriptable_path),
330327
}
331328
return json.dumps(inputs_dict, separators=(",", ":"))

qt/python/mantidqtinterfaces/mantidqtinterfaces/Engineering/gui/engineering_diffraction/tabs/gsas2/model.py

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import subprocess
1313
from dataclasses import dataclass, field
1414
from pathlib import Path
15-
from typing import List, Optional, Union, Tuple, TypeAlias
15+
from typing import Dict, List, Optional, Union, Tuple, TypeAlias
1616

1717
import matplotlib.pyplot as plt
1818
from matplotlib.axes import Axes
@@ -125,13 +125,11 @@ class GSAS2RuntimeState:
125125
Attributes:
126126
number_of_regions: Number of regions in the model.
127127
number_histograms: Number of histograms in the model.
128-
banks_per_file: Number of banks per file.
129128
d_spacing_min: The minimum d-spacing value.
130129
"""
131130

132131
number_of_regions: int = 0
133132
number_histograms: int = 0
134-
banks_per_file: int = 0
135133
d_spacing_min: float = 1.0
136134

137135

@@ -203,6 +201,41 @@ def run_model(
203201
project_name: str,
204202
rb_num: Optional[str] = None,
205203
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,
206239
) -> Optional[int]:
207240
self.clear_input_components()
208241
if not self.initial_validation(project_name, load_parameters):
@@ -340,7 +373,6 @@ def _create_gsas2_config(self) -> GSAS2Config:
340373
override_cell_lengths=self.get_override_lattice_parameters(),
341374
d_spacing_min=self.dSpacing_min,
342375
number_of_regions=self.state.number_of_regions,
343-
banks_per_file=self.state.banks_per_file,
344376
)
345377

346378
def _initialize_gsas2_handler(
@@ -571,10 +603,6 @@ def generate_reflections_from_space_group(self) -> None:
571603
# =========
572604

573605
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-
578606
if len(self.file_paths.instrument_files) != 1:
579607
logger.error("* You must provide exactly one instrument file.")
580608
return False
@@ -605,7 +633,6 @@ def understand_data_structure(self) -> None:
605633
return False
606634

607635
self.state.number_of_regions = number_of_regions
608-
self.state.banks_per_file = banks_per_file[0] if banks_per_file else 0
609636
return True
610637

611638
def validate_x_limits(self, users_limits: Optional[List[List[float]]]) -> bool:

0 commit comments

Comments
 (0)