source: sasview/src/sas/sasgui/perspectives/file_converter/cansas_writer.py @ 8976865

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 8976865 was 8976865, checked in by lewis, 8 years ago

Create own CansasReader? subcless in preparation for writing multiple frames

  • Property mode set to 100644
File size: 2.7 KB
Line 
1from sas.sascalc.dataloader.readers.cansas_reader import Reader as CansasReader
2from sas.sascalc.dataloader.data_info import Data1D
3
4import inspect
5
6class CansasWriter(CansasReader):
7
8    def write(self, filename, datainfo, sasentry_attrs=None):
9        """
10        Write the content of a Data1D as a CanSAS XML file
11
12        :param filename: name of the file to write
13        :param datainfo: Data1D object
14        """
15        # Create XML document
16        doc, _ = self._to_xml_doc(datainfo, sasentry_attrs)
17        # Write the file
18        file_ref = open(filename, 'w')
19        if self.encoding == None:
20            self.encoding = "UTF-8"
21        doc.write(file_ref, encoding=self.encoding,
22                  pretty_print=True, xml_declaration=True)
23        file_ref.close()
24
25
26    def _to_xml_doc(self, datainfo, sasentry_attrs=None):
27        """
28        Create an XML document to contain the content of a Data1D
29
30        :param datainfo: Data1D object
31        """
32        if not issubclass(datainfo.__class__, Data1D):
33            raise RuntimeError, "The cansas writer expects a Data1D instance"
34
35        # Get PIs and create root element
36        pi_string = self._get_pi_string()
37        # Define namespaces and create SASroot object
38        main_node = self._create_main_node()
39        # Create ElementTree, append SASroot and apply processing instructions
40        base_string = pi_string + self.to_string(main_node)
41        base_element = self.create_element_from_string(base_string)
42        doc = self.create_tree(base_element)
43        # Create SASentry Element
44        entry_node = self.create_element("SASentry", sasentry_attrs)
45        root = doc.getroot()
46        root.append(entry_node)
47
48        # Add Title to SASentry
49        self.write_node(entry_node, "Title", datainfo.title)
50        # Add Run to SASentry
51        self._write_run_names(datainfo, entry_node)
52        # Add Data info to SASEntry
53        self._write_data(datainfo, entry_node)
54        # Transmission Spectrum Info
55        self._write_trans_spectrum(datainfo, entry_node)
56        # Sample info
57        self._write_sample_info(datainfo, entry_node)
58        # Instrument info
59        instr = self._write_instrument(datainfo, entry_node)
60        #   Source
61        self._write_source(datainfo, instr)
62        #   Collimation
63        self._write_collimation(datainfo, instr)
64        #   Detectors
65        self._write_detectors(datainfo, instr)
66        # Processes info
67        self._write_process_notes(datainfo, entry_node)
68        # Note info
69        self._write_notes(datainfo, entry_node)
70        # Return the document, and the SASentry node associated with
71        #      the data we just wrote
72       
73        return doc, entry_node
Note: See TracBrowser for help on using the repository browser.