def get_file_contents(self):
     """
     Reader specific class to access the contents of the file
     All reader classes that inherit from FileReader must implement
     """
     x = np.zeros(0)
     y = np.zeros(0)
     self.current_dataset = plottable_1D(x, y)
     self.current_datainfo = DataInfo()
     self.current_datainfo.meta_data["blah"] = self.nextline()
     self.send_to_output()
 def setUp(self):
     self.reader = FileReader()
     self.bad_file = "ACB123.txt"
     self.good_file = "123ABC.txt"
     self.msg = "Unable to find file at: {}\n".format(self.bad_file)
     self.msg += "Please check your file path and try again."
     x = np.zeros(0)
     y = np.zeros(0)
     self.reader.current_dataset = plottable_1D(x, y)
     self.reader.current_datainfo = DataInfo()
     self.reader.send_to_output()
 def get_file_contents(self):
     """
     Reader specific class to access the contents of the file
     All reader classes that inherit from FileReader must implement
     """
     x = np.zeros(0)
     y = np.zeros(0)
     self.current_dataset = plottable_1D(x,y)
     self.current_datainfo = DataInfo()
     self.current_datainfo.meta_data["blah"] = self.nextline()
     self.send_to_output()
Пример #4
0
    def _initialize_new_data_set(self, parent_list = None):
        """
        A private class method to generate a new 1D or 2D data object based on the type of data within the set.
        Outside methods should call add_data_set() to be sure any existing data is stored properly.

        :param parent_list: List of names of parent elements
        """

        if parent_list is None:
            parent_list = []
        if self._find_intermediate(parent_list, "Qx"):
            self.current_dataset = plottable_2D()
        else:
            x = np.array(0)
            y = np.array(0)
            self.current_dataset = plottable_1D(x, y)
        self.current_datainfo.filename = self.raw_data.filename
 def reset_state(self):
     self.current_dataset = plottable_1D(np.empty(0), np.empty(0), np.empty(0), np.empty(0))
     self.current_datainfo = DataInfo()
     self.datasets = []
     self.raw_data = None
     self.errors = set()
     self.logging = []
     self.output = []
     self.detector = Detector()
     self.collimation = Collimation()
     self.aperture = Aperture()
     self.process = Process()
     self.source = Source()
     self.sample = Sample()
     self.trans_spectrum = TransmissionSpectrum()
     self.upper = 5
     self.lower = 5
Пример #6
0
 def reset_state(self):
     self.current_dataset = plottable_1D(np.empty(0), np.empty(0), np.empty(0), np.empty(0))
     self.current_datainfo = DataInfo()
     self.datasets = []
     self.raw_data = None
     self.errors = set()
     self.logging = []
     self.output = []
     self.detector = Detector()
     self.collimation = Collimation()
     self.aperture = Aperture()
     self.process = Process()
     self.source = Source()
     self.sample = Sample()
     self.trans_spectrum = TransmissionSpectrum()
     self.upper = 5
     self.lower = 5
Пример #7
0
    def _initialize_new_data_set(self, parent_list=None):
        """
        A private class method to generate a new 1D or 2D data object based on
        the type of data within the set. Outside methods should call
        add_data_set() to be sure any existing data is stored properly.

        :param parent_list: List of names of parent elements
        """

        if parent_list is None:
            parent_list = []
        if self._find_intermediate(parent_list, "Qx"):
            self.current_dataset = plottable_2D()
        else:
            x = np.array(0)
            y = np.array(0)
            self.current_dataset = plottable_1D(x, y)
        self.current_datainfo.filename = self.raw_data.filename
Пример #8
0
    def get_file_contents(self):
        self.current_datainfo = DataInfo()
        self.current_dataset = plottable_1D(np.array([]), np.array([]))
        self.current_datainfo.isSesans = True
        self.output = []

        line = self.f_open.readline()
        params = {}
        while not line.startswith("BEGIN_DATA"):
            terms = line.split()
            if len(terms) >= 2:
                params[terms[0]] = " ".join(terms[1:])
            line = self.f_open.readline()
        self.params = params

        if "FileFormatVersion" not in self.params:
            raise FileContentsException("SES file missing FileFormatVersion")
        if float(self.params["FileFormatVersion"]) >= 2.0:
            raise FileContentsException("SASView only supports SES version 1")

        if "SpinEchoLength_unit" not in self.params:
            raise FileContentsException("SpinEchoLength has no units")
        if "Wavelength_unit" not in self.params:
            raise FileContentsException("Wavelength has no units")
        if params["SpinEchoLength_unit"] != params["Wavelength_unit"]:
            raise FileContentsException("The spin echo data has rudely used "
                               "different units for the spin echo length "
                               "and the wavelength.  While sasview could "
                               "handle this instance, it is a violation "
                               "of the file format and will not be "
                               "handled by other software.")

        headers = self.f_open.readline().split()

        self._insist_header(headers, "SpinEchoLength")
        self._insist_header(headers, "Depolarisation")
        self._insist_header(headers, "Depolarisation_error")
        self._insist_header(headers, "Wavelength")

        data = np.loadtxt(self.f_open)

        if data.shape[1] != len(headers):
            raise FileContentsException(
                "File has {} headers, but {} columns".format(
                    len(headers),
                    data.shape[1]))

        if not data.size:
            raise FileContentsException("{} is empty".format(path))
        x = data[:, headers.index("SpinEchoLength")]
        if "SpinEchoLength_error" in headers:
            dx = data[:, headers.index("SpinEchoLength_error")]
        else:
            dx = x * 0.05
        lam = data[:, headers.index("Wavelength")]
        if "Wavelength_error" in headers:
            dlam = data[:, headers.index("Wavelength_error")]
        else:
            dlam = lam * 0.05
        y = data[:, headers.index("Depolarisation")]
        dy = data[:, headers.index("Depolarisation_error")]

        lam_unit = self._unit_fetch("Wavelength")
        x, x_unit = self._unit_conversion(x, "A",
                                          self._unit_fetch(
                                              "SpinEchoLength"))
        dx, dx_unit = self._unit_conversion(
            dx, lam_unit,
            self._unit_fetch("SpinEchoLength"))
        dlam, dlam_unit = self._unit_conversion(
            dlam, lam_unit,
            self._unit_fetch("Wavelength"))
        y_unit = self._unit_fetch("Depolarisation")

        self.current_dataset.x = x
        self.current_dataset.y = y
        self.current_dataset.lam = lam
        self.current_dataset.dy = dy
        self.current_dataset.dx = dx
        self.current_dataset.dlam = dlam
        self.current_datainfo.isSesans = True

        self.current_datainfo._yunit = y_unit
        self.current_datainfo._xunit = x_unit
        self.current_datainfo.source.wavelength_unit = lam_unit
        self.current_datainfo.source.wavelength = lam
        self.current_datainfo.filename = os.path.basename(self.f_open.name)
        self.current_dataset.xaxis(r"\rm{z}", x_unit)
        # Adjust label to ln P/(lam^2 t), remove lam column refs
        self.current_dataset.yaxis(r"\rm{ln(P)/(t \lambda^2)}", y_unit)
        # Store loading process information
        self.current_datainfo.meta_data['loader'] = self.type_name
        self.current_datainfo.sample.name = params["Sample"]
        self.current_datainfo.sample.ID = params["DataFileTitle"]
        self.current_datainfo.sample.thickness = self._unit_conversion(
            float(params["Thickness"]), "cm",
            self._unit_fetch("Thickness"))[0]

        self.current_datainfo.sample.zacceptance = (
            float(params["Theta_zmax"]),
            self._unit_fetch("Theta_zmax"))

        self.current_datainfo.sample.yacceptance = (
            float(params["Theta_ymax"]),
            self._unit_fetch("Theta_ymax"))

        self.send_to_output()