示例#1
0
    def test_individual_strings(self):
        base_folder = ""
        test_input = [
            # simple case
            {"input": ["scan_0.csv","scan_1.csv","scan_2.csv","scan_3.csv", "fiets_0.csv"], "result": 4, "base_filename":"scan", "extension":".csv", "test": "equal"},
            # unequal case
            {"input": ["scan_0.csv","scan_1.csv","scan_2.csv","scan_3.csv", "fiets_0.csv"], "result": 6, "base_filename":"scan", "extension":".csv", "test": "not equal"},
            # high number
            {"input": ["scan_0.csv","scan_1.csv","scan_2.csv","scan_200.csv", "fiets_0.csv"], "result": 201, "base_filename":"scan", "extension":".csv", "test": "equal"},
            # more numbers
            {"input": [     "/Users/robbert/Dropbox/Amsterdam/20151029/find_t0_crystal_f1_141458/find_t0_crystal_f1_141458_wavenumbers_0.csv",            "/Users/robbert/Dropbox/Amsterdam/20151029/find_t0_crystal_f1_141458/find_t0_crystal_f1_141458_wavenumbers_1.csv",
"/Users/robbert/Dropbox/Amsterdam/20151029/find_t0_crystal_f1_141458/find_t0_crystal_f1_141458_wavenumbers_2.csv", 
"/Users/robbert/Dropbox/Amsterdam/20151029/find_t0_crystal_f1_141458/find_t0_crystal_f1_141458_wavenumbers_3.csv",
"/Users/robbert/Dropbox/Amsterdam/20151029/find_t0_crystal_f1_141458/find_t0_crystal_f1_141458_delays_3.csv"], 
"result": 4, 
"base_filename":"/Users/robbert/Dropbox/Amsterdam/20151029/find_t0_crystal_f1_141458/find_t0_crystal_f1_141458_wavenumbers", 
"extension":".csv", 
"test": "equal"},
        ]
        
        for i in range(len(test_input)):
            res = IOM.find_number_of_scans(base_folder = "", base_filename = test_input[i]["base_filename"], extension = test_input[i]["extension"], flag_verbose = self.flag_verbose, test_input = test_input[i]["input"])
            if test_input[i]["test"] == "equal":
                self.assertEqual(res, test_input[i]["result"])
            elif test_input[i]["test"] == "not equal":
                self.assertNotEqual(res, test_input[i]["result"])
            else:
                print("Invalid test")
示例#2
0
 def test_import_delays_A(self):    
     """
     Multiple delays
     """
     de, n_de = IOM.import_delays(self.file_dict_A, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_de, 5)
     self.assertEqual(de[0], 0)
     self.assertEqual(de[-1], 400)
示例#3
0
 def test_import_delays_B(self):  
     """
     Single delay
     """
     de, n_de = IOM.import_delays(self.file_dict_B, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_de, 1)
     self.assertEqual(de[0], 300)
     self.assertEqual(de[-1], 300)
示例#4
0
    def test_import_slowModulation_A(self):
        
        sm, sm_names, n_sm = IOM.import_slow_modulation(self.file_dict_A, self.fileformat, flag_verbose = self.flag_verbose)

        print(sm, sm_names, n_sm)
        
        self.assertEqual(sm, numpy.array([]))
        self.assertEqual(sm_names, numpy.array([]))
        self.assertEqual(n_sm, 1)
示例#5
0
 def test_ndarray_1d_2d_inv(self):
     """
     In is same as out.
     """  
     n_var_in = (1,4)
     var_in = numpy.zeros(n_var_in)
     var_out, n_var_out = IOM.check_and_make_list(var_in, flag_verbose = self.flag_verbose)      
     self.assertEqual(n_var_in, n_var_out)
     res = numpy.all(var_in == var_out)
     self.assertTrue(res)
示例#6
0
 def test_list_of_strings(self):
     base_folder = ""
     test_input = [
         {"input": ["fiets_123456.csv", "fiets_123456_LV_fileformat.345"], "result": 345, "test": "equal"},
     ]
     
     for i in range(len(test_input)):
         res = IOM.find_LV_fileformat(base_folder, flag_verbose = self.flag_verbose, test_input = test_input[i]["input"])
         if test_input[i]["test"] == "equal":
             self.assertEqual(res, test_input[i]["result"])
         elif test_input[i]["test"] == "not equal":
             self.assertNotEqual(res, test_input[i]["result"])
         else:
             print("Invalid test")
示例#7
0
 def import_data(self, flag_verbose = False):
     """
     There can be different file formats, indicated by the file 'LV_file_format.N', where N is the format. The file format should be changed when a new or adapted import method is needed. 
     For example, the format '1' writes data as .csv, while '2' writes data as .bin. Format '1' needs import method 'IOM.import_data_LV_A'. Format 2 can use a modified version of that (add an extra flag indicating .bin files, it should default to .csv to maintain compatibility with older scripts) or make a completly new method 'IOM.import_data_LV_B'. 
     Note that the 'LV_file_format.N' are numbered by numbers, while the versions of 'IOM.import_data_LV_X' are indicated by letters.
     'LV_file_format.666' is reserved for testing purposes.
     
     """
     
     self.verbose("Import data", flag_verbose)
     
     try:
         filelist = os.listdir(self.path)
     except OSError:
         self.printError("Directory can not be found.", inspect.stack())
         return False
     
     if "LV_file_format.1" in filelist:
         self.verbose("  LabView file format 1", flag_verbose)
         res = IOM.import_data_LV_A(self.path, self.base_filename)
         if res:
             R, NR, t1fs_axis, t1fr_axis, w3_axis, phase, lastpump, n_fringes, n_pixels = res
         else:
             # res == False means error in importing
             return False
         
     else:
         self.printError("Unknown file format. Please check 'LV_file_format.N' is present.", inspect.stack())
         return False
     
     self.r[0] = R
     self.r[1] = NR
     self.r_axis[0] = t1fs_axis
     self.r_axis[2] = w3_axis
     self.s_axis[2] = w3_axis
     self.phase_degrees = phase
     
     self.comment = lastpump
     
     if self.n_fringes == 0:
         self.n_fringes = n_fringes
     if self.n_pixels == 0:
         self.n_pixels = n_pixels
     
     self.r_units = ["fs", "fs", "cm-1"]
     
     self.n_scans += 1
     
     return True
示例#8
0
 def test_individual_strings(self):
     base_folder = ""
     test_input = [
         {"input": "fiets_LV_fileformat.3", "result": 34, "test": "not equal"},
         {"input": "fiets_LV_fileformat.3", "result": 3, "test": "equal"},
         {"input": "fiets_LV_fileformat.345", "result": 345, "test": "equal"},
         {"input": "fiets_123_LV_fileformat.345", "result": 345, "test": "equal"},
         {"input": "fiets_123LV_fileformat.345", "result": 345, "test": "equal"},
         {"input": "/Users/robbert/Dropbox/Amsterdam/20151029/find_t0_crystal_f1_141458/find_t0_crystal_f1_141458_LV_fileformat.3", "result": 3, "test": "equal"},
     ]
     
     for i in range(len(test_input)):
         res = IOM.find_LV_fileformat(base_folder, flag_verbose = self.flag_verbose, test_input = test_input[i]["input"])
         if test_input[i]["test"] == "equal":
             self.assertEqual(res, test_input[i]["result"])
         elif test_input[i]["test"] == "not equal":
             self.assertNotEqual(res, test_input[i]["result"])
         else:
             print("Invalid test")
示例#9
0
 def test_import_bins_inverted(self):
     """
     Bins and times have the opposite direction
     """       
     t1_bins, t1_fs, bin_sign, n_t1_bins, n_t1_fs, t1_zero_index = IOM.import_bins(file_dict = self.file_dict_B, fileformat = self.fileformat, flag_verbose = self.flag_verbose)
     
     self.assertTrue(bin_sign)
     
     self.assertEqual(t1_bins[0], 0)
     self.assertEqual(t1_bins[-1], 854)
     self.assertEqual(numpy.shape(t1_bins)[0], 855)
     
     self.assertEqual(t1_fs[0], -301.843484)
     self.assertEqual(t1_fs[-1], 1500.774246)
     self.assertEqual(numpy.shape(t1_fs)[0], 855)
     
     self.assertEqual(n_t1_bins, 855)
     self.assertEqual(n_t1_fs, 712)
     self.assertEqual(t1_zero_index, 143)        
示例#10
0
    def test_individual_strings(self):
        base_folder = ""
        test_input = [
            # simplest case
            {"input": [            
"azide_intensity_175815_count_ds0_sp0_sm0_de0_du0_0.csv",
], 
"result": 1, 
"base_filename":"scan", 
"extension":".csv", 
"test": "equal"},
            # fail test
            {"input": [            
"azide_intensity_175815_count_ds0_sp0_sm0_de0_du0_0.csv",
], 
"result": 2, 
"base_filename":"scan", 
"extension":".csv", 
"test": "not equal"},
            # simple case
            {"input": [            
"azide_intensity_175815_count_ds0_sp0_sm0_de0_du0_0.csv",
"azide_intensity_175815_count_ds0_sp0_sm0_de0_du0_1.csv",
"azide_intensity_175815_count_ds1_sp0_sm0_de0_du0_0.csv",
"azide_intensity_175815_count_ds1_sp0_sm0_de0_du0_1.csv",
"azide_intensity_175815_intensity_ds0_sp0_sm0_de0_du0_0.csv",
"azide_intensity_175815_intensity_ds0_sp0_sm0_de0_du0_1.csv",
"azide_intensity_175815_intensity_ds1_sp0_sm0_de0_du0_0.csv",
"azide_intensity_175815_intensity_ds1_sp0_sm0_de0_du0_1.csv",
], 
"result": 2, 
"base_filename":"scan", 
"extension":".csv", 
"test": "equal"},
            # long filenames
            {"input": [            
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds0_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds0_sp0_sm0_de0_du0_1.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds1_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds1_sp0_sm0_de0_du0_1.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds0_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds0_sp0_sm0_de0_du0_1.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds1_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds1_sp0_sm0_de0_du0_1.csv",
], 
"result": 2, 
"base_filename":"scan", 
"extension":".csv", 
"test": "equal"},
            # long filenames, higher numbers
            {"input": [            
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds10_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds10_sp0_sm0_de0_du0_1.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds11_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_count_ds11_sp0_sm0_de0_du0_1.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds10_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds10_sp0_sm0_de0_du0_1.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds11_sp0_sm0_de0_du0_0.csv",
"/Users/robbert/Desktop/20151006/azide_intensity_175815/azide_intensity_175815_intensity_ds11_sp0_sm0_de0_du0_1.csv",
], 
"result": 12, 
"base_filename":"scan", 
"extension":".csv", 
"test": "equal"},
        ]
        
        for i in range(len(test_input)):
            res = IOM.find_number_of_datastates(base_folder = "", flag_verbose = self.flag_verbose, test_input = test_input[i]["input"])
            if test_input[i]["test"] == "equal":
                self.assertEqual(res, test_input[i]["result"])
            elif test_input[i]["test"] == "not equal":
                self.assertNotEqual(res, test_input[i]["result"])
            else:
                print("Invalid test")
示例#11
0
 def test_import_spectraAndDatastates_B(self):
     spds, n_sp, n_ds = IOM.import_spectraAndDatastates(self.file_dict_B, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_ds, 2)
     self.assertEqual(n_sp, 1)
     self.assertTrue(numpy.all(spds == numpy.array([[0,1],[0,-1]])))
示例#12
0
 def test_import_nshots(self):
     n_sh = IOM.import_nshots(self.file_dict_A, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_sh, 100)
示例#13
0
 def test_import_wavelengths(self):
     wl, n_wl = IOM.import_wavelengths(self.file_dict_A, self.fileformat, flag_verbose = self.flag_verbose)    
     self.assertEqual(n_wl, 32)
     self.assertEqual(wl[0], 5078.435469)
     self.assertEqual(wl[-1], 4662.957173)
示例#14
0
 def test_import_wavenumbers(self):
     w3_axis_wn, n_w3 = IOM.import_wavenumbers(self.file_dict_A, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_w3, 32)
     self.assertEqual(w3_axis_wn[0], 1969.110381)
     self.assertEqual(w3_axis_wn[-1], 2144.561837)
示例#15
0
 def test_import_ndatastates_2(self):
     """
     2 datastates
     """
     n_ds = IOM.import_ndatastates(self.file_dict_B, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_ds, 2)
示例#16
0
 def test_import_ndatastates_1(self):
     """
     1 datastate
     """
     n_ds = IOM.import_ndatastates(self.file_dict_A, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_ds, 1)
示例#17
0
 def test_import_nspectra(self):
     
     n_sp = IOM.import_nspectra(self.file_dict_A, self.fileformat, flag_verbose = self.flag_verbose)
     self.assertEqual(n_sp, 1)
示例#18
0
    def add_data(self, scan, flag_construct_r = False, flag_verbose = False):

        # import the reference and some other stuff
        if len(self.imported_scans) == 0:

            self.verbose("  importing reference and meta", flag_verbose)

            path_and_filename = self.path + self.base_filename + "_ref.dat"
            out = self.import_reference_VB6(path_and_filename, self.n_pixels)
            self.r_axis[2] = out[0] 
            self.reference = out[1]

            path_and_filename = self.path + self.base_filename + "_meta.txt"
            out = self.import_meta_VB6(path_and_filename)
            self.date = out[0]
            self.data_type_version = out[1]
            self.n_shots = out[2] 
            self.n_fringes = out[3]
            self.phase_degrees = out[4]
            self.comment = out[5]
            # self.temp_scans = out[6]

        # see if we already imported this file
        if scan in self.imported_scans:
            self.printWarning("Scan is already imported, but will be imported anyway because flag_import_override is set to True.", inspect.stack()) 
            return False    
        else:
            self.verbose("  scan has not been imported before ", flag_verbose)

        filename = self.make_filenames(scan)        

        # for the 4 files
        for k in range(4):

            flag_skip_binning = False

            # to distuinguish between the two diagrams
            if k < 2:
                diagram = 0
            else:
                diagram = 1

            # import the data
            try:
                self.verbose("  importing data, data_type_version: " + self.data_type_version, flag_verbose)

                if self.data_type_version == "1.2":
                    [m, fringes] = IOM.import_raw_data(filename[k], n_shots = self.n_shots, n_channels = self.n_channels, flag_counter = False)
                elif self.data_type_version == "1.3":
                    [m, c, fringes] = IOM.import_raw_data(filename[k], n_shots = self.n_shots, n_channels = self.n_channels, flag_counter = True)
                elif self.data_type_version == "1.4":
                    result = self.import_binned_data(filename[k], diagram)
                    flag_skip_binning = True

                    if result == False:
                        try:
                            [m, c, fringes] = self.import_raw_data(filename[k], flag_counter = True)
                            flag_skip_binning = False
                        except IOError:
                            return False

            except IOError:
                return False

            # if the number of fringes can not be set using the meta file, find it here 
            if self.n_fringes == 0:
                self.n_fringes = int(numpy.abs(fringes[1] - fringes[0]))

            # counter
            if self.data_type_version == "1.2":
                # need to reconstruct it
                m_axis, counter, correct_count = self.reconstruct_counter(m, self.x_channel, self.y_channel, fringes[0], fringes[1], flag_plot = False)

            elif self.data_type_version == "1.3":   
                # only need to check the value
                m_axis = c + fringes[0]

                if m_axis[-1] == fringes[1]:
                    correct_count = True
                else:
                    correct_count = False

            elif self.data_type_version == "1.4": 
                # the case where the binning failed and VB6 reverts to data version 1.3
                if flag_skip_binning == False:
                    m_axis = c + fringes[0]

                    if m_axis[-1] == fringes[1]:
                        correct_count = True
                    else:
                        correct_count = False   
                else:
                    correct_count = True

            else:
                self.printError("Unknown data type", inspect.stack())
                correct_count = False

            # check for consistency
            if correct_count == False:
                print("Scan: " + str(scan) + ", File: " + str(k) + ": Miscount!")

                self.incorrect_count[k] += 1

            # if it is consistent, continue to bin the data
            elif flag_skip_binning == False:
                print("Scan: " + str(scan) + ", File: " + str(k) + ": Count is correct!")

                # make b the correct size, if it isn't already
                if numpy.shape(self.b_axis)[-1] == 2:
                    self.make_arrays()

                # bin the data
                self.bin_data(m, m_axis, diagram)

            else:
                print("Scan: " + str(scan) + ", File: " + str(k) + ": Scan imported")


                # all the data is now written into self.b* 

        # construct the actual measurement
        # this should catch the situation that there are 4 miscounts in the first scan
        if type(self.b_count) == numpy.ndarray:
            if flag_construct_r:
                self.construct_r()
            self.imported_scans.append(scan)
            self.n_scans = len(self.imported_scans)            
            return True
        else:
            return False
示例#19
0
    def save_data(self, export_path, r=False, s=True, flag_verbose=False):

        if s and numpy.shape(self.s) != (1,):
            IOM.save_data_PE(export_path, self.base_filename, s=self.s, s_axis=self.s_axis)
        if r and numpy.shape(self.r) != (3,):
            IOM.save_data_PE(export_path, self.base_filename, r=self.r, r_axis=self.r_axis)