\(\renewcommand\AA{\unicode{x212B}}\)
Table of Contents
Load an XML or Map file, which contains definition of detectors grouping, to a GroupingWorkspace.
Name | Direction | Type | Default | Description |
---|---|---|---|---|
InputFile | Input | string | Mandatory | The XML or Map file with full path. Allowed extensions: [‘.xml’, ‘.map’] |
InputWorkspace | Input | MatrixWorkspace | Optional: An input workspace with the instrument we want to use. This will override what is specified in the grouping file. | |
OutputWorkspace | Output | GroupingWorkspace | The output workspace containing the loaded grouping information. |
This algorithm is used to generate a GroupingWorkspace from an XML or Map file containing detectors’ grouping information.
Extension: .xml
If the InputWorkspace
is specified, it overrides what is given in
the file. This is useful for loading a grouping for an instrument that
is not the most recent one.
Example 1 (using detector IDs and explicit group ID):
<?xml version="1.0" encoding="UTF-8" ?>
<detector-grouping instrument="VULCAN">
<group ID="4">
<detids>28750-29981</detids>
<component>bank21</component>
</group>
<group ID="5">
<component>bank26</component>
</group>
</detector-grouping>
Example 2 (using detector IDs and default group ID):
<?xml version="1.0" encoding="UTF-8" ?>
<detector-grouping instrument="VULCAN">
<group>
<detids>28750-29981</detids>
<component>bank21</component>
</group>
<group>
<component>bank26</component>
</group>
</detector-grouping>
Example 3 (using spectra number - note that no instrument is required):
<?xml version="1.0" encoding="UTF-8" ?>
<detector-grouping>
<group ID="1">
<ids>3,34-44,47</ids>
</group>
<group ID="2">
<ids>26</ids>
<ids>27,28</ids>
</group>
</detector-grouping>
Extension: .map
The file must have the following format* (extra space and comments starting with # are allowed):
"unused number1"
"unused number2"
"number_of_input_spectra1"
"input spec1" "input spec2" "input spec3" "input spec4"
"input spec5 input spec6"
**
"unused number2"
"number_of_input_spectra2"
"input spec1" "input spec2" "input spec3" "input spec4"
* each phrase in ” ” is replaced by a single integer
** the section of the file that follows is repeated once for each group
Some programs require that “unused number1” is the number of groups specified in the file but Mantid ignores that number and all groups contained in the file are read regardless. “unused number2” is in other implementations the group’s spectrum number but in this algorithm it is is ignored and can be any integer (not necessarily the same integer)
An example of an input file follows:
3
1
64
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64
2
60
65 66 67 68 69 70 71 72 73 74
75 76 77 78 79 80 81 82 83 84
85 86 87 88 89 90 91 92 93 94
95 96 97 98 99 100 101 102 103 104
105 106 107 108 109 110 111 112 113 114
115 116 117 118 119 120 121 122 123 124
3
60
125 126 127 - 180 181 182 183 184
# create some grouping file
import mantid
filename=mantid.config.getString("defaultsave.directory")+"test.xml"
f=open(filename,'w')
f.write('<?xml version="1.0" encoding="UTF-8" ?> \n')
f.write('<detector-grouping instrument="VULCAN"> \n')
f.write(' <group ID="1"> \n')
f.write(' <detids>28750-29981</detids> \n')
f.write(' <component>bank23</component> \n')
f.write(' </group> \n')
f.write(' <group ID="2"> \n')
f.write(' <component>bank26</component> \n')
f.write(' <component>bank27</component> \n')
f.write(' </group> \n')
f.write(' </detector-grouping>')
f.close()
#load the grouping file
ws=LoadDetectorsGroupingFile("test.xml")
#check some values
format_string = "Detector {}, with ID {}, in spectrum {} belongs to group {:.0f}"
sid=0
print(format_string.format(ws.getDetector(sid).getName(), ws.getDetector(sid).getID(),
sid, ws.dataY(sid)[0]))
sid=2500
print(format_string.format(ws.getDetector(sid).getName(), ws.getDetector(sid).getID(),
sid, ws.dataY(sid)[0]))
sid=5000
print(format_string.format(ws.getDetector(sid).getName(), ws.getDetector(sid).getID(),
sid, ws.dataY(sid)[0]))
Output:
Detector bank21(0,0), with ID 26250, in spectrum 0 belongs to group 0
Detector bank23(49,1), with ID 29094, in spectrum 2500 belongs to group 1
Detector bank27(98,2), with ID 34438, in spectrum 5000 belongs to group 2
Example - Loading from map file:
# create some grouping file
import mantid
filename=mantid.config.getString("defaultsave.directory")+"test.map"
f=open(filename,'w')
f.write('3\n')
f.write('1\n')
f.write('64\n')
f.write('1 - 64\n')
f.write('2\n')
f.write('60\n')
f.write('65 - 124\n')
f.write('3\n')
f.write('60\n')
f.write('125 - 184\n')
f.close()
#load the grouping file
ws=LoadDetectorsGroupingFile("test.map")
#check some values
print("Spectrum 0 belongs to group {}".format(ws.readY(0)[0]))
print("Spectrum 65 belongs to group {}".format(ws.readY(65)[0]))
print("Spectrum 125 belongs to group {}".format(ws.readY(125)[0]))
Output:
Spectrum 0 belongs to group 1.0
Spectrum 65 belongs to group 2.0
Spectrum 125 belongs to group 3.0
Categories: AlgorithmIndex | DataHandling\Grouping | Transforms\Grouping
C++ header: LoadDetectorsGroupingFile.h (last modified: 2020-03-25)
C++ source: LoadDetectorsGroupingFile.cpp (last modified: 2020-08-03)