Exemple #1
0
def test_derived_quantity_sum(exp, convert_name):
    fudge_data_1 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [0.5, 0.6, 0.7]
    })
    fudge_data_2 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [1, 1.2, 1.4]
    })

    name_1 = convert_name('TEST1~wavelength-1~replicate-0')
    name_2 = convert_name('TEST1~wavelength-1~replicate-1')
    group_name = convert_name('TEST1~wavelength-1')
    desired_quantities = {group_name: 11.400000000000002 * ureg.pC}
    data_dict = {name_1: fudge_data_1, name_2: fudge_data_2}

    def charge(data, cond):
        charges = data['Photocurrent (nA)'].values* \
            data['Time (ms)'].values*ureg.nA*ureg.ms
        total_charge = charges.sum().to(ureg.pC)
        return total_charge

    actual_quantities = exp.derived_quantity(data_dict=data_dict,
                                             quantity_func=charge,
                                             sum_along='replicate')

    assertDataDictEqual(actual_quantities, desired_quantities)
Exemple #2
0
def testExtractDerivedQuantityPSD(exp, convert_name):
    """
    Attempts to extract the PSD from a set of data
    """
    fudge_data_1 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [0.5, 0.6, 0.7]
    })
    fudge_data_2 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [1, 1.2, 1.4]
    })
    name_1 = convert_name('TEST1~wavelength-1~replicate-0')
    name_2 = convert_name('TEST1~wavelength-1~replicate-1')
    data_dict = {name_1: fudge_data_1, name_2: fudge_data_2}

    def powerSpectrum(data, cond):
        return power_spectrum(data)

    actual_psd_data = exp.derived_quantity(data_dict=data_dict,
                                           quantity_func=powerSpectrum)
    desired_psd_data = {
        name_1: power_spectrum(fudge_data_1),
        name_2: power_spectrum(fudge_data_2)
    }
    assertDataDictEqual(actual_psd_data, desired_psd_data)
Exemple #3
0
def test_master_data_dict_exclude_c(exp, exp_data, convert_name):
    names = [convert_name(name) for name in \
        [
        'TEST1~temperature=25.0~wavelength=1',
        'TEST1~temperature=25.0~wavelength=2',
        'TEST1~temperature=35.0~wavelength=1',
        'TEST1~temperature=35.0~wavelength=2',
        ]]
    data_dict = {
        names[0]: 1.0,
        names[1]: 2.0,
        names[2]: 3.0,
        names[3]: 4.0,
    }
    desired_data = {
        convert_name('TEST1~temperature=c~wavelength=x'): {
            convert_name('TEST1~temperature=25.0~wavelength=x'):
            pd.DataFrame({
                'wavelength': [1, 2],
                'Value': [1.0, 2.0]
            }),
            convert_name('TEST1~temperature=35.0~wavelength=x'):
            pd.DataFrame({
                'wavelength': [1, 2],
                'Value': [3.0, 4.0]
            }),
        },
    }
    actual_data = exp.master_data_dict(data_dict,
                                       c_axis_exclude=['wavelength'])
    assertDataDictEqual(actual_data, desired_data)
Exemple #4
0
def testExtractDerivedQuantityMean(exp, convert_name):
    """
    Attempst to extract the mean from a set of data
    """
    fudge_data_1 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [0.5, 0.6, 0.7]
    })
    fudge_data_2 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [1, 1.2, 1.4]
    })
    mean_data_1 = np.float64(0.6)
    mean_data_2 = np.float64(1.2)
    name_1 = convert_name('TEST1~wavelength-1~replicate-0')
    name_2 = convert_name('TEST1~wavelength-1~replicate-1')
    desired_quantities = {name_1: mean_data_1, name_2: mean_data_2}
    data_dict = {name_1: fudge_data_1, name_2: fudge_data_2}

    def getPhotocurrentMean(pandas_dict, cond):
        return np.mean(pandas_dict['Photocurrent (nA)'].values)

    actual_quantities = exp.derived_quantity(data_dict=data_dict,
                                             quantity_func=getPhotocurrentMean,
                                             average_along=None)

    assertDataDictEqual(actual_quantities, desired_quantities)
Exemple #5
0
def testExtractDerivedQuantityPSDAverage(exp, convert_name):
    fudge_data_1 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [0.5, 0.6, 0.7]
    })
    fudge_data_2 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [1, 1.2, 1.4]
    })
    name_1 = convert_name('TEST1~wavelength-1~replicate-0')
    name_2 = convert_name('TEST1~wavelength-1~replicate-1')
    data_dict = {name_1: fudge_data_1, name_2: fudge_data_2}
    data_psd_1 = power_spectrum(fudge_data_1)
    data_psd_2 = power_spectrum(fudge_data_2)
    data_psd_1.iloc[:, 1:] += data_psd_2.iloc[:, 1:]
    data_psd_1.iloc[:, 1:] /= 2

    def powerSpectrum(data, cond):
        return power_spectrum(data)

    desired_psd = data_psd_1
    desired_data_dict = {convert_name('TEST1~wavelength-1'): desired_psd}
    actual_data_dict = exp.derived_quantity(data_dict=data_dict,
                                            quantity_func=powerSpectrum,
                                            average_along='replicate')
    assertDataDictEqual(actual_data_dict, desired_data_dict)
Exemple #6
0
def test_average_data_pandas(exp, convert_name):
    fudge_data_1 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [0.5, 0.6, 0.7]
    })
    fudge_data_2 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [1, 1.2, 1.4]
    })
    averaged_data = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [0.75, 0.9, 1.05]
    })
    condition_1 = {'frequency': 8500, 'wavelength': 1, 'replicate': 0}
    condition_2 = {'frequency': 8500, 'wavelength': 1, 'replicate': 1}
    name_1 = convert_name('TEST1~wavelength-1~replicate-0')
    name_2 = convert_name('TEST1~wavelength-1~replicate-1')
    group_name = convert_name('TEST1~wavelength-1')
    data_dict = {name_1: fudge_data_1, name_2: fudge_data_2}

    averaged_data_desired = {group_name: averaged_data}
    averaged_data_actual_first = exp.average_data(data_dict,
                                                  average_along='replicate',
                                                  averaging_type='first')
    averaged_data_actual_last = exp.average_data(data_dict,
                                                 average_along='replicate',
                                                 averaging_type='last')
    assertDataDictEqual(averaged_data_actual_first, averaged_data_desired)
    assertDataDictEqual(averaged_data_actual_last, averaged_data_desired)
Exemple #7
0
def test_data_from_master(exp, exp_data):
    js, ns = exp_data['major_separator'], exp_data['minor_separator']
    master_data = pd.DataFrame({'wavelength': [1, 2], 'Value': [3, 4]})
    name1 = 'TEST1' + js + 'wavelength' + ns + '1'
    name2 = 'TEST1' + js + 'wavelength' + ns + '2'
    desired_data = {name1: 3, name2: 4}
    actual_data = exp.data_from_master(master_data)
    assertDataDictEqual(actual_data, desired_data)
Exemple #8
0
def test_group_by_value(exp, convert_name):
    actual_data = exp['exp'].group_data(
            data_dict=exp['data_dict'], group_along='wavelength', grouping_type='value')
    desired_data = {
        convert_name('TEST1~wavelength-1'): {
            convert_name('TEST1~wavelength-1~replicate-0'): exp['fudge_data_1'],
            convert_name('TEST1~wavelength-1~replicate-1'): exp['fudge_data_2'],}}
    assertDataDictEqual(actual_data, desired_data)
Exemple #9
0
def test_group_data_none(exp):
    """
    Assert that when group_along is none we just pass through the data
    """
    desired_data = exp['data_dict']
    actual_data = exp['exp'].group_data(
        data_dict=exp['data_dict'], group_along=None)
    assertDataDictEqual(actual_data, desired_data)
Exemple #10
0
def test_condition_from_name_units(exp,exp_data, convert_name):
    name = convert_name('TEST1~wavelength=100nm~temperature=25K')
    desired_condition = {
        'wavelength': ureg.nm * 100,
        'temperature': ureg.degK * 25,
        'frequency': exp_data['frequency']}
    actual_condition = exp.conditionFromName(name)
    assertDataDictEqual(actual_condition, desired_condition)
Exemple #11
0
def test_generate_groups_value(exp, convert_name):
    desired_groups = {
        convert_name('TEST1~replicate-0'): {
             convert_name('TEST1~wavelength-1~replicate-0'): None},
        convert_name('TEST1~replicate-1'): {
            convert_name('TEST1~wavelength-1~replicate-1'): None}}
    actual_groups = exp['exp'].generate_groups(
            data_dict=exp['data_dict'], group_along='replicate', grouping_type='value')
    assertDataDictEqual(actual_groups, desired_groups)
Exemple #12
0
def test_data_from_master_units(exp_units, convert_name):
    desired_name = convert_name('TEST1~temperature=305K~wavelength=25nm')
    master_data = pd.DataFrame({
        'temperature (K)': [305],
        'wavelength (nm)': [25],
        'voltage (mV)': [1.5]
    })
    desired_data = {desired_name: 1.5 * ureg.mV}
    actual_data = exp_units.data_from_master(master_data)
    assertDataDictEqual(actual_data, desired_data)
Exemple #13
0
def test_group_by_name(exp, convert_name):

    actual_data = exp['exp'].group_data(
        data_dict=exp['data_dict'], group_along='replicate', grouping_type='name')
    desired_data = {
        convert_name('TEST1~wavelength-1'): {
            convert_name('TEST1~wavelength-1~replicate-0'): exp['fudge_data_1'],
            convert_name('TEST1~wavelength-1~replicate-1'): exp['fudge_data_2']}}

    # Assert all values inside the pandas array are identical
    assertDataDictEqual(actual_data, desired_data)
Exemple #14
0
def testGenerateGroups(exp, convert_name):

    desired_groups = {convert_name('TEST1~wavelength-1'): {
        convert_name('TEST1~wavelength-1~replicate-0'): None,
        convert_name('TEST1~wavelength-1~replicate-1'): None,
    }}

    actual_groups = exp['exp'].generate_groups(
        data_dict=exp['data_dict'], group_along='replicate')

    assertDataDictEqual(actual_groups, desired_groups)
Exemple #15
0
def testGenerateMasterDataDict1Var(exp, exp_data):
    js, ns = exp_data['major_separator'], exp_data['minor_separator']
    name1 = 'TEST1' + js + 'wavelength' + ns + '1'
    name2 = 'TEST1' + js + 'wavelength' + ns + '2'
    name_all = 'TEST1' + js + 'wavelength' + ns + 'all'
    data_dict = {name1: 3.0, name2: 4.0}
    desired_data = {
        name_all: pd.DataFrame({
            'wavelength': [1, 2],
            'Value': [3.0, 4.0]
        })
    }
    actual_data = exp.master_data_dict(data_dict)
    assertDataDictEqual(actual_data, desired_data)
Exemple #16
0
def test_master_data_dict_1var_units(exp_units, convert_name):
    name1 = convert_name('TEST1~wavelength=1nm')
    name2 = convert_name('TEST1~wavelength=2nm')
    name_all = convert_name('TEST1~wavelength=all')
    data_dict = {name1: 3.0 * ureg.nA, name2: 4.0 * ureg.nA}
    desired_data = {
        name_all:
        pd.DataFrame({
            'wavelength (nm)': [1, 2],
            'current (nA)': [3.0, 4.0]
        })
    }
    actual_data = exp_units.master_data_dict(data_dict)
    assertDataDictEqual(actual_data, desired_data)
Exemple #17
0
def test_master_data_dict_2var(exp, exp_data, convert_name):
    js, ns = exp_data['major_separator'], exp_data['minor_separator']
    master_data = pd.DataFrame({
        'wavelength': [0, 1, 2, 0, 1, 2],
        'temperature': [25.0, 25.0, 25.0, 35.0, 35.0, 35.0],
        'Value': [0, 1, 2, 3, 4, 5]
    })
    names = [
        convert_name('TEST1~temperature=25.0~wavelength=0'),
        convert_name('TEST1~temperature=25.0~wavelength=1'),
        convert_name('TEST1~temperature=25.0~wavelength=2'),
        convert_name('TEST1~temperature=35.0~wavelength=0'),
        convert_name('TEST1~temperature=35.0~wavelength=1'),
        convert_name('TEST1~temperature=35.0~wavelength=2'),
    ]
    data_dict = {name: i for i, name in enumerate(names)}
    desired_data = {
        convert_name('TEST1~temperature=x~wavelength=c'): {
            convert_name('TEST1~temperature=x~wavelength=0'):
            pd.DataFrame({
                'temperature': [25.0, 35.0],
                'Value': [0, 3]
            }),
            convert_name('TEST1~temperature=x~wavelength=1'):
            pd.DataFrame({
                'temperature': [25.0, 35.0],
                'Value': [1, 4]
            }),
            convert_name('TEST1~temperature=x~wavelength=2'):
            pd.DataFrame({
                'temperature': [25.0, 35.0],
                'Value': [2, 5]
            })
        },
        convert_name('TEST1~temperature=c~wavelength=x'): {
            convert_name('TEST1~temperature=25.0~wavelength=x'):
            pd.DataFrame({
                'wavelength': [0, 1, 2],
                'Value': [0, 1, 2]
            }),
            convert_name('TEST1~temperature=35.0~wavelength=x'):
            pd.DataFrame({
                'wavelength': [0, 1, 2],
                'Value': [3, 4, 5]
            })
        },
    }

    actual_data = exp.master_data_dict(data_dict)
    assertDataDictEqual(actual_data, desired_data)
Exemple #18
0
def testLookup(exp, convert_name):
    fudge_data = pd.DataFrame(
        {'Time (ms)': [1, 2, 3],
        'Voltage (V)': [0,0.1, 0.2]})
    exp.data = {
        convert_name('TEST1~wavelengths-1~temperatures-25'):fudge_data,
        convert_name('TEST1~wavelengths-2~temperatures-25'):fudge_data,
        convert_name('TEST1~wavelengths-2~temperatures-35'):fudge_data,
        convert_name('TEST1~wavelengths-2~temperatures-35'):fudge_data,
                    }
    data_actual = exp.lookup(temperatures=25)
    data_desired = {
        convert_name('TEST1~wavelengths-1~temperatures-25'):fudge_data,
        convert_name('TEST1~wavelengths-2~temperatures-25'):fudge_data,}
    assertDataDictEqual(data_actual, data_desired)
Exemple #19
0
def test_units_init(ureg):
    wavelength = ureg.nm * np.array([500, 505])
    temperature = ureg.degK * np.array([25.0, 35.0])
    sampling_frequency = ureg.Hz * 1.0
    my_exp = Experiment(kind='test',
                        name='TEST1',
                        wavelength=wavelength,
                        temperature=temperature,
                        sampling_frequency=sampling_frequency)
    desired_factors = {'wavelength': wavelength, 'temperature': temperature}
    desired_constants = {'sampling_frequency': sampling_frequency}
    actual_factors = my_exp.factors
    actual_constants = my_exp.constants
    assertDataDictEqual(actual_factors, desired_factors)
    assertDataDictEqual(actual_constants, desired_constants)
Exemple #20
0
def test_average_data_scalar(exp, convert_name):
    fudge_data_1 = 2.0
    fudge_data_2 = 3.0
    averaged_data = 2.5
    condition_1 = {'frequency': 8500, 'wavelength': 1, 'replicate': 0}
    condition_2 = {'frequency': 8500, 'wavelength': 1, 'replicate': 1}
    name_1 = convert_name('TEST1~wavelength-1~replicate-0')
    name_2 = convert_name('TEST1~wavelength-1~replicate-1')
    data_dict = {name_1: fudge_data_1, name_2: fudge_data_2}
    group_name = convert_name('TEST1~wavelength-1')

    averaged_data_desired = {group_name: averaged_data}
    averaged_data_actual = exp.average_data(data_dict,
                                            average_along='replicate')
    assertDataDictEqual(averaged_data_actual, averaged_data_desired)
Exemple #21
0
def test_group_scalar_data(exp, convert_name):
    """
    Tests whether we can compress the derived quantity as a bunch of
    scalar-only dicts into a bunch of plottable and usaable pandas array.
    """
    scalar_data = {convert_name('TEST1~wavelength-1~temperature-25'): 1,
                   convert_name('TEST1~wavelength-1~temperature-35'): 2}

    desired_data = {convert_name('TEST1~wavelength-1'): {
        convert_name('TEST1~wavelength-1~temperature-25'): 1,
        convert_name('TEST1~wavelength-1~temperature-35'): 2,}}

    actual_data = exp['exp'].group_data(
        data_dict=scalar_data, group_along='temperature')

    assertDataDictEqual(actual_data, desired_data)
Exemple #22
0
def test_data_from_master_2var(exp, exp_data, convert_name):
    master_data = pd.DataFrame({
        'temperature': [25.0, 25.0, 25.0, 35.0, 35.0, 35.0],
        'wavelength': [0, 1, 2, 0, 1, 2],
        'Value': [0, 1, 2, 3, 4, 5]
    })
    names = [
        convert_name('TEST1~temperature=25.0~wavelength=0'),
        convert_name('TEST1~temperature=25.0~wavelength=1'),
        convert_name('TEST1~temperature=25.0~wavelength=2'),
        convert_name('TEST1~temperature=35.0~wavelength=0'),
        convert_name('TEST1~temperature=35.0~wavelength=1'),
        convert_name('TEST1~temperature=35.0~wavelength=2'),
    ]
    desired_data_dict = {name: i for i, name in enumerate(names)}
    actual_data_dict = exp.data_from_master(master_data)
    assertDataDictEqual(actual_data_dict, desired_data_dict)
Exemple #23
0
def testExecuteExperimentDataCorrect(exp, exp_data, convert_name):
    exp.Execute()
    desired_data = {
        convert_name('TEST1~replicate=0~temperature=25~wavelength=1'):
        exp_data['fake_data'],
        convert_name('TEST1~replicate=1~temperature=25~wavelength=1'):
        exp_data['fake_data'],
        convert_name('TEST1~replicate=0~temperature=50~wavelength=1'):
        exp_data['fake_data'],
        convert_name('TEST1~replicate=1~temperature=50~wavelength=1'):
        exp_data['fake_data'],
        convert_name('TEST1~replicate=0~temperature=25~wavelength=2'):
        exp_data['fake_data'],
        convert_name('TEST1~replicate=1~temperature=25~wavelength=2'):
        exp_data['fake_data'],
        convert_name('TEST1~replicate=0~temperature=50~wavelength=2'):
        exp_data['fake_data'],
        convert_name('TEST1~replicate=1~temperature=50~wavelength=2'):
        exp_data['fake_data'],
    }
    actual_data = exp.data
    assertDataDictEqual(actual_data, desired_data)
Exemple #24
0
def test_sum_data_pandas(exp, convert_name):
    fudge_data_1 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [0.5, 0.6, 0.7]
    })
    fudge_data_2 = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [1, 1.2, 1.4]
    })
    name_1 = convert_name('TEST1~wavelength-1~replicate-0')
    name_2 = convert_name('TEST1~wavelength-1~replicate-1')

    summed_data = pd.DataFrame({
        'Time (ms)': [1, 2, 3],
        'Photocurrent (nA)': [1.5, 1.8, 2.1]
    })

    data_dict = {name_1: fudge_data_1, name_2: fudge_data_2}

    group_name = convert_name('TEST1~wavelength-1')
    summed_data_desired = {group_name: summed_data}

    summed_data_actual = exp.average_data(data_dict, sum_along='replicate')
    assertDataDictEqual(summed_data_actual, summed_data_desired)
Exemple #25
0
def test_process_photocurrent_simple(convert_name, sim_exp):
    """
    Verifies that, given a sinusoidal input with a known offset and amplitude, the correct data is generated.
    """
    wavelength = np.array([700, 750]) * ureg.nm
    material = ['Au', 'Al']
    gain = 1 * ureg.Mohm
    current_offset = 100
    current_amplitude = 1
    dR_R0_ratio = current_amplitude / current_offset

    reference_condition = dict(material='Au')
    # Ensures no spectral leakage for simple test case
    sin_data = pd.DataFrame({
            'Time (ms)': np.array([0, 1, 2, 3, 4, 5, 6, 7]),
            'Voltage (mV)': current_offset + \
                current_amplitude * np.array([0, -1, 0, 1, 0, -1, 0, 1]),
            'Sync': np.array([1, 0, 0, 0, 1, 0, 0, 0]),
            })
    test_data = {
        convert_name('TEST1~material=Au~wavelength=700nm'): sin_data,
        convert_name('TEST1~material=Al~wavelength=700nm'): sin_data,
        convert_name('TEST1~material=Au~wavelength=750nm'): sin_data,
        convert_name('TEST1~material=Al~wavelength=750nm'): sin_data,
    }
    exp = Experiment(name='TEST1',
                     kind='test',
                     wavelength=wavelength,
                     material=material,
                     gain=gain)
    exp.data = test_data

    R0_actual, dR_actual, inoise_actual = exp.process_photocurrent(
        reference_condition=reference_condition, sim_exp=sim_exp)
    R0_desired = {
        convert_name('TEST1~material=Au~wavelength=700nm~spectra=R0'): 0.93329,
        convert_name('TEST1~material=Al~wavelength=700nm~spectra=R0'): 0.93329,
        convert_name('TEST1~material=Au~wavelength=750nm~spectra=R0'):
        0.948615,
        convert_name('TEST1~material=Al~wavelength=750nm~spectra=R0'):
        0.948615,
    }
    dR_desired = {
        convert_name('TEST1~material=Au~wavelength=700nm~spectra=dR'): \
            0.93329 * dR_R0_ratio,
        convert_name('TEST1~material=Al~wavelength=700nm~spectra=dR'): \
            0.93329 * dR_R0_ratio,
        convert_name('TEST1~material=Au~wavelength=750nm~spectra=dR'): \
            0.948615 * dR_R0_ratio,
        convert_name('TEST1~material=Al~wavelength=750nm~spectra=dR'): \
            0.948615 * dR_R0_ratio,
    }
    inoise_desired = {
        convert_name('TEST1~material=Au~wavelength=700nm'): \
            1.3333333333333333e-21 * ureg.A ** 2 / ureg.Hz,
        convert_name('TEST1~material=Al~wavelength=700nm'): \
            1.3333333333333333e-21 * ureg.A ** 2 / ureg.Hz,
        convert_name('TEST1~material=Au~wavelength=750nm'): \
            1.3333333333333333e-21 * ureg.A ** 2 / ureg.Hz,
        convert_name('TEST1~material=Al~wavelength=750nm'): \
            1.3333333333333333e-21 * ureg.A ** 2 / ureg.Hz,
    }
    assertDataDictEqual(R0_actual, R0_desired)
    assertDataDictEqual(dR_actual, dR_desired)
    assertDataDictEqual(inoise_actual, inoise_desired)
Exemple #26
0
def testGenerateGroupsNone(exp):
    desired_groups = exp['data_dict']
    actual_groups = exp['exp'].generate_groups(
        data_dict=exp['data_dict'], group_along=None)
    assertDataDictEqual(actual_groups, desired_groups)
Exemple #27
0
def test_master_data_dict_3var(exp, exp_data, convert_name):
    master_data = pd.DataFrame({
        'wavelength': [0, 0, 0, 0, 1, 1, 1, 1],
        'temperature': [25.0, 25.0, 35.0, 35.0, 25.0, 25.0, 35.0, 35.0],
        'material': ['Au', 'Al', 'Au', 'Al', 'Au', 'Al', 'Au', 'Al'],
        'Value': [0, 1, 2, 3, 4, 5, 6, 7]
    })
    names = [
        convert_name('TEST1~material=Au~temperature=25.0~wavelength=0'),
        convert_name('TEST1~material=Al~temperature=25.0~wavelength=0'),
        convert_name('TEST1~material=Au~temperature=35.0~wavelength=0'),
        convert_name('TEST1~material=Al~temperature=35.0~wavelength=0'),
        convert_name('TEST1~material=Au~temperature=25.0~wavelength=1'),
        convert_name('TEST1~material=Al~temperature=25.0~wavelength=1'),
        convert_name('TEST1~material=Au~temperature=35.0~wavelength=1'),
        convert_name('TEST1~material=Al~temperature=35.0~wavelength=1'),
    ]
    data_dict = {name: i for i, name in enumerate(names)}
    desired_data =  \
    {
        'TEST1~material=x~temperature=c~wavelength=0':
            {'TEST1~material=x~temperature=25.0~wavelength=0':
                pd.DataFrame({
                        'material': ['Al', 'Au'],
                        'Value': [1, 0]}),
            'TEST1~material=x~temperature=35.0~wavelength=0':
                pd.DataFrame({
                        'material': ['Al', 'Au'],
                        'Value': [3, 2]}),
            },
        'TEST1~material=x~temperature=c~wavelength=1':
            {'TEST1~material=x~temperature=25.0~wavelength=1':
                pd.DataFrame({
                        'material': ['Al', 'Au'],
                        'Value': [5, 4]}),
            'TEST1~material=x~temperature=35.0~wavelength=1':
                pd.DataFrame({
                        'material': ['Al', 'Au'],
                        'Value': [7, 6]}),
            },
        'TEST1~material=x~temperature=25.0~wavelength=c':
            {'TEST1~material=x~temperature=25.0~wavelength=0':
                pd.DataFrame({
                    'material': ['Al', 'Au'],
                    'Value': [1, 0]}),
            'TEST1~material=x~temperature=25.0~wavelength=1':
                pd.DataFrame({
                    'material': ['Al', 'Au'],
                    'Value': [5, 4]}),
            },

        'TEST1~material=x~temperature=35.0~wavelength=c':
            {'TEST1~material=x~temperature=35.0~wavelength=0':
                pd.DataFrame({
                    'material': ['Al', 'Au'],
                    'Value': [3, 2]}),
            'TEST1~material=x~temperature=35.0~wavelength=1':
                pd.DataFrame({
                    'material': ['Al', 'Au'],
                    'Value': [7, 6]}),
            },
        'TEST1~material=c~temperature=x~wavelength=0':
            {'TEST1~material=Au~temperature=x~wavelength=0':
                pd.DataFrame({
                    'temperature': [25.0, 35.0],
                    'Value': [0, 2]
                    }),
            'TEST1~material=Al~temperature=x~wavelength=0':
                pd.DataFrame({
                    'temperature': [25.0, 35.0],
                    'Value': [1, 3]})
            },
        'TEST1~material=c~temperature=x~wavelength=1':
            {'TEST1~material=Au~temperature=x~wavelength=1':
                pd.DataFrame({
                    'temperature': [25.0, 35.0],
                    'Value': [4, 6]}),
             'TEST1~material=Al~temperature=x~wavelength=1':
                 pd.DataFrame({
                    'temperature': [25.0, 35.0],
                    'Value': [5, 7]}),
            },
        'TEST1~material=Au~temperature=x~wavelength=c':
            {'TEST1~material=Au~temperature=x~wavelength=0':
                pd.DataFrame({
                'temperature': [25.0, 35.0],
                'Value': [0, 2]
                }),
            'TEST1~material=Au~temperature=x~wavelength=1':
                pd.DataFrame({
                    'temperature': [25.0, 35.0],
                    'Value': [4, 6]})
            },
        'TEST1~material=Al~temperature=x~wavelength=c':
            {'TEST1~material=Al~temperature=x~wavelength=0':
                pd.DataFrame({
                    'temperature': [25.0, 35.0],
                    'Value': [1, 3]}),
            'TEST1~material=Al~temperature=x~wavelength=1':
                pd.DataFrame({
                    'temperature': [25.0, 35.0],
                    'Value': [5, 7]}),
            },
        'TEST1~material=c~temperature=25.0~wavelength=x':
            {'TEST1~material=Au~temperature=25.0~wavelength=x':
                pd.DataFrame({
                    'wavelength': [0, 1],
                    'Value': [0, 4]}),
            'TEST1~material=Al~temperature=25.0~wavelength=x':
                pd.DataFrame({
                    'wavelength': [0, 1],
                    'Value': [1, 5]}),
            },
        'TEST1~material=c~temperature=35.0~wavelength=x':
            {'TEST1~material=Au~temperature=35.0~wavelength=x':
                pd.DataFrame({
                        'wavelength': [0, 1],
                        'Value': [2, 6]
                        }),
            'TEST1~material=Al~temperature=35.0~wavelength=x':
                pd.DataFrame({
                    'wavelength': [0, 1],
                    'Value': [3, 7]
                    }),
            },
        'TEST1~material=Au~temperature=c~wavelength=x':
            {'TEST1~material=Au~temperature=25.0~wavelength=x':
                pd.DataFrame({
                    'wavelength': [0, 1],
                    'Value': [0, 4]}),
            'TEST1~material=Au~temperature=35.0~wavelength=x':
                pd.DataFrame({
                    'wavelength': [0, 1],
                    'Value': [2, 6]}),
            },
        'TEST1~material=Al~temperature=c~wavelength=x':
            {'TEST1~material=Al~temperature=25.0~wavelength=x':
                pd.DataFrame({
                    'wavelength': [0, 1],
                    'Value': [1, 5]}),
            'TEST1~material=Al~temperature=35.0~wavelength=x':
                pd.DataFrame({
                    'wavelength': [0, 1],
                    'Value': [3, 7]}),
            }
    }
    actual_data = exp.master_data_dict(data_dict)
    assertDataDictEqual(actual_data, desired_data)