\(\renewcommand\AA{\unicode{x212B}}\)
SaveGDA v1¶
 
SaveGDA dialog.¶
Summary¶
Save a group of focused banks to the MAUD three-column GDA format
See Also¶
Properties¶
| Name | Direction | Type | Default | Description | 
|---|---|---|---|---|
| InputWorkspace | Input | WorkspaceGroup | Mandatory | A GroupWorkspace where every sub-workspace is a single-spectra focused run corresponding to a particular bank | 
| OutputFilename | Input | string | Mandatory | The name of the file to save to. Allowed extensions: [‘.gda’] | 
| GSASParamFile | Input | string | Mandatory | GSAS calibration file containing conversion factors from D to TOF. Allowed extensions: [‘.ipf’, ‘.prm’, ‘.parm’, ‘.iprm’] | 
| GroupingScheme | Input | int list | An array of bank IDs, where the value at element i is the ID of the bank in GSASParamFile to associate spectrum i with | 
Description¶
Takes a WorkspaceGroup whose children are single-spectra workspaces
corresponding to focused banks, and saves them to the MAUD-readable
.gda format.
GDA Format¶
GDA is a text-based format. The file is divided into sections for each bank. Each section begins with a header, which has the following format::
BANK <bank number> <number of points> <number of lines> RALF <min TOF> 96 <min TOF> <resolution> ALT
- bank numberis simply and index for the bank
- number of pointsis the number of sets of data-points which will be saved from this bank
- number of linesis the number of lines the points will take up. Since there are 4 points per line, this will be- number of points / 4, rounded up
- min TOFis the minimum time-of-flight value in this bank
- resolutionis the mean difference between adjacent TOF-values (normalised by TOF) in the bank
The data then follows. We have 4 points per line, where each point
consists of three values, TOF * 32 (time-of-flight is scaled by 32
for legacy reasons in MAUD - see D to TOF Conversion for a detailed
explanation of where the TOF values come from), intensity * 1000
and error * 1000. TOF, intensity and error correspond
to the x, y and e columns of a Mantid workspaces
respectively.
All numbers apart from resolution are saved as integers. In addition, every line, including the header, must be exactly 80 characters long, so any short lines are right-padded with spaces.
D to TOF Conversion¶
Warning
TOF values in the output file will only match the actual recorded TOF values if the GSAS calibration file contains the correct conversion factors for each bank.
SaveGDA takes input in D-spacing, and applies the GSAS conversion (explained at AlignDetectors), using parameters from the calibration file, to convert back to time-of-flight. The caveat here is that, if the calibration file contains the wrong conversion factors, then the TOF values will not match the ones that were actually recorded.
This is not necessarily a problem, as once the file is loaded into MAUD, as long as the same conversion factors are used (ie the MAUD calibration file should be created from the same GSAS calibration file as was used to run SaveGDA), the data will still be aligned in MAUD. When doing texture focusing with ISIS_Powder for GEM, matching up all the calibration files should be taken care of automatically.
This approach is taken because it was impractical to create a MAUD calibration file containing the correct conversion factors for a workspace with a large number of banks - we just don’t have enough data to do it. Instead we fake the time-of-flight recordings in order to get good alignment in MAUD.
Usage¶
import os
# Banks 1 to 4 of a previous texture focus in isis_powder
# We don't use the full 160 banks as the test becomes too slow
input_group = Load(Filename="GEM61785_D_texture_banks_1_to_4.nxs",
                   OutputWorkspace="SaveGDAtest_GEM61785")
output_file = os.path.join(config["defaultsave.directory"], "GEM61785.gda")
SaveGDA(InputWorkspace=input_group,
        OutputFilename=output_file,
        GSASParamFile="GEM_PF1_PROFILE.IPF",
        # Assign spectra 1, 2 and 3 to bank 2 in calib file, and spectrum 4 to bank 3
        GroupingScheme=[2, 2, 2, 3])
with open(output_file) as f:
    file_contents = f.read().split("\n")
# Print the header and the 4 lines from the middle of the file
# rstrip the header just to make the doctest script happy
print(file_contents[0].rstrip())
for i in range(100, 104):
    print(file_contents[i])
Output:
BANK 1 4246  1062 RALF  27388  96  27388 0.001 ALT
   40348    380   60   40388    285   52   40427    338   56   40467    218   47
   40507    232   49   40546    181   44   40586    171   43   40626    206   47
   40666    246   50   40706    161   40   40746    126   37   40786    124   37
   40826    131   40   40866    221   48   40906    157   40   40946    169   41
Categories: AlgorithmIndex | DataHandling\Text | Diffraction\DataHandling
Source¶
C++ header: SaveGDA.h
C++ source: SaveGDA.cpp
