    """
        This example script imports a set of spectral files from a folder and
        creates a workset from that dataset.
    """
    import umetrics
    import glob
    import tempfile
    from tkinter import messagebox, Tk
    import xml.etree.ElementTree as ET

    def show_message(message):
        # Show a tkinter messagebox with the message.
        tk_main=Tk()
        tk_main.withdraw()
        messagebox.showinfo(title='Create spectral project', message=message)
        tk_main.destroy()

    def run():
        show_message('This script will import a number of NIR spectra, create a new project, SNV filter the data and fit a PCA model.')
        # Close the current open project
        project = umetrics.SimcaApp.get_active_project()
        if project.is_open:
            if not umetrics.simca.ProjectHandler.close_project(project, True):
                return

        # The paths for data files and where the project should be saved
        scriptpath = os.path.dirname(os.path.realpath(__file__))
        datapath = os.path.join(scriptpath, 'data/*.spc')
        projectpath=os.path.join(tempfile.gettempdir(), 'spectralproject.usp')
        if os.path.isfile(projectpath):
            os.remove(projectpath)

        # Read all spectral files (*.spc) from a directory
        files = glob.glob(datapath)

        # Create an XML tree with the spc open options.
        # If we don't supply these options, SIMCA will popup a dialog and ask for them.
        spcoptions=ET.Element('Settings')
        spcoptions.set('IncludeOrdinalValues', '1')
        spcoptions.set('IncludeAllValues', '1')
        spcoptions.set('IncludeXStartPt', '')
        spcoptions.set('IncludeXEndPt', '')
        spcoptions.set('NumberOfIncludedIntervals', '0')
        spcoptions.set('UseAverage', '0')

        data = umetrics.impdata.read_file(files, openoptions=ET.tostring(spcoptions))

        # Specify primary and secondary ID
        # Set first row to primary variable ID
        data.importspec.set_row_type(0, umetrics.impdata.ImportSpecification.rowtype.primaryvarid)
        # Set the wavenumbers in the second row to secondary variables IDs
        data.importspec.set_row_type(1, umetrics.impdata.ImportSpecification.rowtype.secondaryvarid)
        # Set the first column in the second row to 'Wave Number'. Then the secondary ID will get the correct name
        data.set(1,0, 'Wave Number')

        # Set first column to primary observation ID
        data.importspec.set_col_type(0, umetrics.impdata.ImportSpecification.columntype.primaryobsid)
        # Set second colum to secondary observation ID
        data.importspec.set_col_type(1, umetrics.impdata.ImportSpecification.columntype.secondaryobsid)
        # And the third
        data.importspec.set_col_type(2, umetrics.impdata.ImportSpecification.columntype.secondaryobsid)

        # Create a new project
        project = umetrics.simca.ProjectHandler.create_project(projectpath)

        # Create the dataset
        ds_num = project.create_dataset(data, "TheDataset")

        # Set the project as the active project in SIMCA to be able to show plots
        umetrics.SimcaApp.set_active_project(project)

        # Filter the dataset using SNV
        filter=project.create_filter(ds_num)
        filter.add_filter_type(umetrics.simca.filtertype.snv)
        filter.apply_filter('snv_filtered')
        ds_num = next(info.ID for info in project.get_dataset_infos() if info.name == 'snv_filtered')

        # Create a workset for the model
        workset = project.create_workset('snv_filtered')

        # Change scaling to center for all variables
        workset.set_variable_scale_type([], umetrics.simca.scaletype.ctr)

        # Exclude the first three variables
        workset.exclude_variables([0, 1, 2])

        # Create the model and autofit
        model = workset.create_model()
        project.fit_model(model[0])

        # Save it.
        project.save()

        # Create Summary of fit plot and score scatter plot
        builder = umetrics.SimcaApp.plot_list_builder()
        builder.score_scatter_plot()

    if __name__ == "__main__":
        run()