def test_McStasMetaData_add_info_title(self):
     """
     Test that title can be set
     """
     meta_data = McStasMetaData()
     meta_data.set_title("title_test")
     self.assertEqual(meta_data.title, "title_test")
示例#2
0
def set_dummy_MetaData_2d(name):
    meta_data = McStasMetaData()
    meta_data.component_name = name
    meta_data.dimension = [50, 100]
    meta_data.filename = name + ".dat"

    return meta_data
 def test_McStasMetaData_add_info_ylabel(self):
     """
     Test that ylabel can be set
     """
     meta_data = McStasMetaData()
     meta_data.set_ylabel("ylabel test")
     self.assertEqual(meta_data.ylabel, "ylabel test")
 def test_McStasMetaData_add_info_len(self):
     """
     Test that info can be added to McStasMetaData
     """
     meta_data = McStasMetaData()
     meta_data.add_info("test", 3)
     self.assertEqual(len(meta_data.info), 1)
 def test_McStasMetaData_add_info(self):
     """
     Test that info can be read from McStasMetaData
     """
     meta_data = McStasMetaData()
     meta_data.add_info("test", 3)
     self.assertEqual(meta_data.info["test"], 3)
def set_dummy_MetaDataBinned_1d():
    """
    Sets up simple McStasMetaData object with dimension, 1d case
    """
    meta_data = McStasMetaData()
    meta_data.component_name = "component for 1d"
    meta_data.dimension = 50

    return meta_data
def set_dummy_MetaDataBinned_2d():
    """
    Sets up simple McStasMetaData object with dimensions, 2d case
    """
    meta_data = McStasMetaData()
    meta_data.component_name = "test a component"
    meta_data.dimension = [50, 100]

    return meta_data
示例#8
0
def set_dummy_MetaData_2d(name):
    """
    Sets up a dummy MetaData object for a 2d dataset

    Parameters
    ----------

    name : str
        base for filename, .dat will be appended
    """
    meta_data = McStasMetaData()
    meta_data.component_name = name
    meta_data.dimension = [50, 100]
    meta_data.filename = name + ".dat"

    return meta_data
示例#9
0
def get_dummy_MetaData_2d():
    meta_data = McStasMetaData()
    meta_data.component_name = "test a component"
    meta_data.dimension = [5, 4]
    meta_data.limits = [0.1, 1.1, 2.0, 4.0]
    meta_data.title = "test"
    meta_data.xlabel = "test x"
    meta_data.ylabel = "test y"

    return meta_data
示例#10
0
def get_dummy_MetaData_1d():
    meta_data = McStasMetaData()
    meta_data.component_name = "component for 1d"
    meta_data.dimension = 50
    meta_data.limits = [0.1, 1.1]
    meta_data.title = "test"
    meta_data.xlabel = "test x"
    meta_data.ylabel = "test y"

    return meta_data
def set_dummy_MetaDataBinned_1d():
    """
    Sets up simple McStasMetaData object with dimension, 1d case
    """
    meta_data = McStasMetaData()
    meta_data.component_name = "component for 1d"
    meta_data.dimension = 50

    meta_data.limits = [0, 1]
    meta_data.xlabel = ""
    meta_data.ylabel = ""
    meta_data.title = ""
    meta_data.filename = "dummy"

    return meta_data
def set_dummy_MetaDataBinned_2d():
    """
    Sets up simple McStasMetaData object with dimensions, 2d case
    """
    meta_data = McStasMetaData()
    meta_data.component_name = "test a component"
    meta_data.dimension = [5, 4]

    meta_data.limits = [0, 1, 0, 1]
    meta_data.xlabel = ""
    meta_data.ylabel = ""
    meta_data.title = ""
    meta_data.filename = "dummy"

    return meta_data
示例#13
0
def set_dummy_MetaDataBinned_1d():
    """
    Sets up simple McStasMetaData object with dimension, 1d case
    """
    meta_data = McStasMetaData()
    meta_data.component_name = "component for 1d"
    meta_data.filename = "data.dat"
    meta_data.dimension = 50

    meta_data.info = {"Ncount": 40}

    return meta_data
示例#14
0
def load_metadata(data_folder_name):
    """
    Function that loads metadata from a mcstas simulation

    Returns list of metadata objects corresponding to each monitor, all
    information is taken from mccode.sim file.

    Parameters
    ----------

    first argument : str
        path to folder from which metadata should be loaded
    """

    if not os.path.isdir(data_folder_name):
        raise NameError("Given data directory does not exist.")

    # Find all data files in generated folder
    files_in_folder = os.listdir(data_folder_name)

    # Raise an error if mccode.sim is not available
    if "mccode.sim" not in files_in_folder:
        raise NameError("No mccode.sim in data folder.")

    instrument_parameters = {}

    # Open mccode to read metadata for all datasets written to disk
    with open(os.path.join(data_folder_name, "mccode.sim"), "r") as f:

        # Loop that reads mccode.sim sections
        metadata_list = []
        current_object = None
        in_data = False
        in_sim = False
        for lines in f:
            # Could read other details about run

            if lines == "end data\n":
                # No more data for this metadata object
                # Add parameter information
                current_object.add_info("Parameters", instrument_parameters)
                # Extract the information
                current_object.extract_info()
                # Add to metadata list
                if current_object.filename != "":
                    metadata_list.append(current_object)
                # Stop reading data
                in_data = False

            if in_sim:
                if "Param" in lines:
                    parm_lst = lines.split(':')[1].split('=')
                    try:
                        value = float(parm_lst[1].strip())
                    except ValueError:
                        value = parm_lst[1].strip()

                    instrument_parameters[parm_lst[0].strip()] = value

            if in_data:
                # This line contains info to be added to metadata
                colon_index = lines.index(":")
                key = lines[2:colon_index]
                value = lines[colon_index + 2:].strip()
                current_object.add_info(key, value)

            if lines == "begin data\n":
                # Found data section, create new metadata object
                current_object = McStasMetaData()
                # Start recording data to metadata object
                in_data = True

            if 'begin simulation:' in lines:
                in_sim = True
            if 'end simulation:' in lines:
                in_sim = False

        # Close mccode.sim
        f.close()

        # Create a list for McStasData instances to return
        results = []

        # Load datasets described in metadata list individually
        for metadata in metadata_list:
            # Load data with numpy
            data = np.loadtxt(data_folder_name + "/" +
                              metadata.filename.rstrip())

            # Split data into intensity, error and ncount
            if type(metadata.dimension) == int:
                xaxis = data.T[0, :]
                Intensity = data.T[1, :]
                Error = data.T[2, :]
                Ncount = data.T[3, :]

            elif len(metadata.dimension) == 2:
                xaxis = []  # Assume evenly binned in 2d
                data_lines = metadata.dimension[1]
                Intensity = data.T[:, 0:data_lines - 1]
                Error = data.T[:, data_lines:2 * data_lines - 1]
                Ncount = data.T[:, 2 * data_lines:3 * data_lines - 1]

    return metadata_list
示例#15
0
def set_dummy_MetaData_1d():
    meta_data = McStasMetaData()
    meta_data.component_name = "component for 1d"
    meta_data.dimension = 50

    return meta_data
示例#16
0
def set_dummy_MetaData_2d():
    meta_data = McStasMetaData()
    meta_data.component_name = "test a component"
    meta_data.dimension = [50, 100]

    return meta_data
示例#17
0
def load_results(data_folder_name):
    """
    Function for loading data from a mcstas simulation

    Loads data on all monitors in a McStas data folder, and returns these
    as a list of McStasData objects.

    Parameters
    ----------

    first argument : str
        path to folder from which data should be loaded

    """

    if not os.path.isdir(data_folder_name):
        raise NameError("Given data directory does not exist.")

    # Find all data files in generated folder
    files_in_folder = os.listdir(data_folder_name)

    # Raise an error if mccode.sim is not available
    if "mccode.sim" not in files_in_folder:
        raise NameError("No mccode.sim in data folder.")

    # Open mccode to read metadata for all datasets written to disk
    with open(os.path.join(data_folder_name, "mccode.sim"), "r") as f:

        # Loop that reads mccode.sim sections
        metadata_list = []
        current_object = None
        in_data = False
        for lines in f:
            # Could read other details about run

            if lines == "end data\n":
                # No more data for this metadata object
                # Extract the information
                current_object.extract_info()
                # Add to metadata list
                if current_object.filename != "":
                    metadata_list.append(current_object)
                # Stop reading data
                in_data = False

            if in_data:
                # This line contains info to be added to metadata
                colon_index = lines.index(":")
                key = lines[2:colon_index]
                value = lines[colon_index + 2:]
                current_object.add_info(key, value)

            if lines == "begin data\n":
                # Found data section, create new metadata object
                current_object = McStasMetaData()
                # Start recording data to metadata object
                in_data = True

    # Create a list for McStasData instances to return
    results = []

    # Load datasets described in metadata list individually
    for metadata in metadata_list:
        # Load data with numpy
        data = np.loadtxt(
            os.path.join(data_folder_name, metadata.filename.rstrip()))

        # Split data into intensity, error and ncount
        if type(metadata.dimension) == int:
            xaxis = data.T[0, :]
            Intensity = data.T[1, :]
            Error = data.T[2, :]
            Ncount = data.T[3, :]

        elif len(metadata.dimension) == 2:
            xaxis = []  # Assume evenly binned in 2d
            data_lines = metadata.dimension[1]

            Intensity = data[0:data_lines, :]
            Error = data[data_lines:2 * data_lines, :]
            Ncount = data[2 * data_lines:3 * data_lines, :]
        else:
            raise NameError("Dimension not read correctly in data set " +
                            "connected to monitor named " +
                            metadata.component_name)

        # The data is saved as a McStasData object
        result = McStasData(metadata, Intensity, Error, Ncount, xaxis=xaxis)

        # Add this result to the results list
        results.append(result)

    # Return list of McStasData objects
    return results
示例#18
0
 def test_McStasMetaData_return_type(self):
     """
     Test that newly created McStasMetaData has correct type
     """
     meta_data = McStasMetaData()
     self.assertIsInstance(meta_data, McStasMetaData)
示例#19
0
    def test_McStasMetaData_long_read_2d(self):
        """
        Test that extract_info can read appropriate info, 2d case
        """
        meta_data = McStasMetaData()
        meta_data.add_info("type", "array_2d(500, 12)")
        meta_data.add_info("component", "test_A_COMP")
        meta_data.add_info("filename", "test_A_name")
        meta_data.add_info("xlimits", "-2.4 5.99 0.92 3.68")
        meta_data.add_info("xlabel", "test A xlabel")
        meta_data.add_info("ylabel", "test A ylabel")
        meta_data.add_info("title", "test A title")

        meta_data.extract_info()  # Converts info to attributes

        self.assertEqual(len(meta_data.dimension), 2)
        self.assertEqual(meta_data.dimension[0], 500)
        self.assertEqual(meta_data.dimension[1], 12)
        self.assertIs(meta_data.component_name, "test_A_COMP")
        self.assertIs(meta_data.filename, "test_A_name")
        self.assertEqual(len(meta_data.limits), 4)
        self.assertEqual(meta_data.limits[0], -2.4)
        self.assertEqual(meta_data.limits[1], 5.99)
        self.assertEqual(meta_data.limits[2], 0.92)
        self.assertEqual(meta_data.limits[3], 3.68)
        self.assertIs(meta_data.xlabel, "test A xlabel")
        self.assertIs(meta_data.ylabel, "test A ylabel")
        self.assertIs(meta_data.title, "test A title")
示例#20
0
    def test_McStasMetaData_long_read_1d(self):
        """
        Test that extract_info can read appropriate info, 1d case
        """
        meta_data = McStasMetaData()
        meta_data.add_info("type", "array_1d(500)")
        meta_data.add_info("component", "test_A COMP")
        meta_data.add_info("filename", "test_A name")
        meta_data.add_info("xlimits", " 0.92 3.68")
        meta_data.add_info("xlabel", "test A xlabel")
        meta_data.add_info("ylabel", "test A ylabel")
        meta_data.add_info("title", "test A title")

        meta_data.extract_info()  # Converts info to attributes

        self.assertIsInstance(meta_data.dimension, int)
        self.assertEqual(meta_data.dimension, 500)
        self.assertIs(meta_data.component_name, "test_A COMP")
        self.assertIs(meta_data.filename, "test_A name")
        self.assertEqual(len(meta_data.limits), 2)
        self.assertEqual(meta_data.limits[0], 0.92)
        self.assertEqual(meta_data.limits[1], 3.68)
        self.assertIs(meta_data.xlabel, "test A xlabel")
        self.assertIs(meta_data.ylabel, "test A ylabel")
        self.assertIs(meta_data.title, "test A title")
示例#21
0
 def test_McStasMetaData_init(self):
     """
     Test that newly created McStasMetaData has no content
     """
     meta_data = McStasMetaData()
     self.assertEqual(len(meta_data.info), 0)