Beispiel #1
0
 def format_jr6(self):
     data =  self.machine_data.get_data()
     data = RockPyData(column_names=['x', 'y', 'z'],
                             data=data,
                             units=['A m^2', 'A m^2', 'A m^2'])
     data.define_alias('m', ( 'x', 'y', 'z'))
     self._raw_data  = {'data': data.append_columns('mag', data.magnitude('m'))}
Beispiel #2
0
 def format_sushibar(self):
     data = RockPyData(column_names=['field', 'x', 'y', 'z'],
                       data=self.machine_data.out_afdemag()
                       )  # , units=['mT', 'Am2', 'Am2', 'Am2'])
     data.define_alias('m', ('x', 'y', 'z'))
     self._raw_data['data'] = data.append_columns('mag',
                                                  data.magnitude('m'))
Beispiel #3
0
 def format_cryomag(self):
     data = self.machine_data.float_data
     header = self.machine_data.float_header
     data = RockPyData(column_names=header, data=data)
     data.define_alias('m', ( 'x', 'y', 'z'))
     # data = data.append_columns('mag', data.magnitude('m'))
     self._raw_data  = {'data': data.append_columns('mag', data.magnitude('m'))}
Beispiel #4
0
 def format_sushibar(self):
     data = RockPyData(column_names=['temp', 'x', 'y', 'z', 'sm'],
                       data=self.machine_data.out_trm(),
                       # units=['C', 'mT', 'A m^2', 'A m^2', 'A m^2']
                       )
     data.define_alias('m', ( 'x', 'y', 'z'))
     # data = data.append_columns('mag', data.magnitude('m'))
     self._raw_data  = {'data': data.append_columns('mag', data.magnitude('m'))}
Beispiel #5
0
 def format_cryomag(self):
     data = RockPyData(column_names=self.machine_data.float_header,
                            data=self.machine_data.get_float_data())
     if self.demag_type != 'af3':
         idx = [i for i, v in enumerate(self.machine_data.steps) if v == self.demag_type]
         data = data.filter_idx(idx)
     data.define_alias('m', ('x', 'y', 'z'))
     self._raw_data['data'] = data.append_columns('mag', data.magnitude('m'))
     self._raw_data['data'].rename_column('step', 'field')
Beispiel #6
0
 def format_jr6(self):
     data = self.machine_data.get_data()
     data = RockPyData(column_names=['x', 'y', 'z'],
                       data=data,
                       units=['A m^2', 'A m^2', 'A m^2'])
     data.define_alias('m', ('x', 'y', 'z'))
     self._raw_data = {
         'data': data.append_columns('mag', data.magnitude('m'))
     }
Beispiel #7
0
 def format_cryomag(self):
     data = self.machine_data.float_data
     header = self.machine_data.float_header
     data = RockPyData(column_names=header, data=data)
     data.define_alias('m', ('x', 'y', 'z'))
     # data = data.append_columns('mag', data.magnitude('m'))
     self._raw_data = {
         'data': data.append_columns('mag', data.magnitude('m'))
     }
Beispiel #8
0
 def format_sushibar(self):
     data = RockPyData(
         column_names=['temp', 'x', 'y', 'z', 'sm'],
         data=self.machine_data.out_trm(),
         # units=['C', 'mT', 'A m^2', 'A m^2', 'A m^2']
     )
     data.define_alias('m', ('x', 'y', 'z'))
     # data = data.append_columns('mag', data.magnitude('m'))
     self._raw_data = {
         'data': data.append_columns('mag', data.magnitude('m'))
     }
Beispiel #9
0
 def format_cryomag(self):
     data = RockPyData(column_names=self.machine_data.float_header,
                       data=self.machine_data.get_float_data())
     if self.demag_type != 'af3':
         idx = [
             i for i, v in enumerate(self.machine_data.steps)
             if v == self.demag_type
         ]
         data = data.filter_idx(idx)
     data.define_alias('m', ('x', 'y', 'z'))
     self._raw_data['data'] = data.append_columns('mag',
                                                  data.magnitude('m'))
     self._raw_data['data'].rename_column('step', 'field')
Beispiel #10
0
 def format_pmd(self):
     data = RockPyData(column_names=['field', 'x', 'y', 'z'], data=self.machine_data.out_afdemag())
     data.define_alias('m', ('x', 'y', 'z'))
     self._raw_data['data'] = data.append_columns('mag', data.magnitude('m'))
Beispiel #11
0
class TestRockPyData(TestCase):
    def setUp(self):
        # run before each test
        self.testdata = ((1, 2, 3, 4),
                         (1, 6, 7, 8),
                         (1, 2, 11, 12),
                         (1, 6, 55, 66))

        self.col_names = ('F', 'Mx', 'My', 'Mz')
        self.row_names = ('1.Zeile', '2.Zeile_A', '3.Zeile', '4.Zeile_A')
        self.units = ('T', 'mT', 'fT', 'pT')

        self.RPD = RockPyData(column_names=self.col_names, row_names=self.row_names, units=self.units,
                              data=self.testdata)

    def test_column_names(self):
        self.assertEqual(self.RPD.column_names, list(self.col_names))

    def test_column_count(self):
        self.assertEqual(self.RPD.column_count, len(self.col_names))

    def test__find_duplicate_variable_rows(self):
        # self.assertTrue((self.RPD._find_duplicate_variables()[0] == np.array([0, 1, 2])).all())
        self.assertEqual(self.RPD._find_duplicate_variable_rows(), [(0, 1, 2, 3)])

        # redefine variabe alias to the first two columns
        self.RPD.define_alias('variable', ('F', 'Mx'))
        self.assertEqual(self.RPD._find_duplicate_variable_rows(), [(0, 2), (1, 3)])

    def test_rename_column(self):
        self.RPD.rename_column('Mx', 'M_x')
        self.assertEqual(self.RPD.column_names, ['F', 'M_x', 'My', 'Mz'])

    def test_append_rows(self):
        d1 = [[5, 6, 7, 8], [9, 10, 11, 12]]
        self.RPD = self.RPD.append_rows(d1, ('5.Zeile', '6.Zeile'))
        self.assertTrue(np.array_equal(self.RPD.v[-2:, :], np.array(d1)))
        d2 = [5, 6, 7, 8]
        self.RPD = self.RPD.append_rows(d2, '5.Zeile')
        self.assertTrue(np.array_equal(self.RPD.v[-1, :], np.array(d2)))
        # lets try with other RockPyData object
        rpd = copy.deepcopy(self.RPD)
        rpd.rename_column('Mx', 'M_x')
        self.RPD = self.RPD.append_rows(rpd)
        # TODO: add assert
        #print self.RPD

    def test_delete_rows(self):
        self.RPD = self.RPD.delete_rows((0, 2))
        self.assertTrue(np.array_equal(self.RPD.v, np.array(self.testdata)[(1, 3), :]))

    def test_eliminate_duplicate_variable_rows(self):
        # check for one variable column
        self.RPD = self.RPD.eliminate_duplicate_variable_rows()
        self.assertTrue(np.array_equal(self.RPD.v, np.array([]).reshape(0, 4)))

    def test_eliminate_duplicate_variable_rows2(self):
        # check for two variable columns
        self.RPD.define_alias('variable', ('F', 'Mx'))
        rpd = self.RPD.eliminate_duplicate_variable_rows(substfunc='mean')
        self.assertTrue(np.array_equal(rpd.v, np.array([[1., 2., 7., 8.], [1., 6., 31., 37.]])))
        self.assertTrue(np.array_equal(rpd.e, np.array([[0., 0., 4., 4.], [0., 0., 24., 29.]])))
        rpd = self.RPD.eliminate_duplicate_variable_rows(substfunc='last')
        self.assertTrue(np.array_equal(rpd.v, np.array([[1., 2., 11., 12.], [1., 6., 55., 66.]])))


    def test_mean(self):
        self.RPD = self.RPD.mean()
        self.assertTrue(np.array_equal(self.RPD.v, np.array([[1., 4., 19., 22.5]])))
        np.testing.assert_allclose(self.RPD.e, np.array([[0., 2., 20.976, 25.273]]), atol=0.01)

    def test_max(self):
        self.RPD = self.RPD.max()
        self.assertTrue(np.array_equal(self.RPD.v, np.array([[1., 6., 55., 66.]])))

    def test_filter_row_names(self):
        self.assertEqual(self.RPD.filter_row_names(('1.Zeile', '3.Zeile')).row_names, ['1.Zeile', '3.Zeile'])

    def test_filter_match_row_names(self):
        # get all rows ending with '_A'
        self.assertEqual(self.RPD.filter_match_row_names('.*_A').row_names, ['2.Zeile_A', '4.Zeile_A'])

    def test_append_columns(self):
        cb = self.RPD.column_count
        d = (8, 7, 6, 5)
        self.RPD = self.RPD.append_columns('neue Spalte', d)
        self.assertEqual(cb + 1, self.RPD.column_count)
        self.assertTrue(np.array_equal(self.RPD['neue Spalte'].v, np.array(d)))

    def test_sort(self):
        self.assertTrue(np.array_equal(self.RPD.sort('Mx')['Mx'].v, np.array((2, 2, 6, 6))))

    #def test_interpolate(self):
    #    self.RPD.define_alias('variable', 'My')
    #    iv = (1, 11, 33, 55, 100)
    #    self.assertTrue(np.array_equal((self.RPD.interpolate(iv))['My'].v, np.array(iv)))
    #    self.assertTrue(np.array_equal((self.RPD.interpolate(iv))['Mx'].v[1:-1], np.array([2., 4., 6.])))


    def test_magnitude(self):
        self.RPD.define_alias('m', ('Mx', 'My', 'Mz'))
        self.RPD = self.RPD.append_columns('mag', self.RPD.magnitude('m'))
        np.testing.assert_allclose(self.RPD['mag'].v, np.array([5.38516481, 12.20655562, 16.40121947, 86.12200648]), atol=1e-5)


    def test_column_names_to_indices(self):
        self.assertEqual( self.RPD.column_names_to_indices(('Mx', 'Mz')), [1,3])

    def test_interation(self):
        # TODO: add proper assertion
        for l in self.RPD:
            #print l
            pass

    def test_add_errors(self):
        d = RockPyData(column_names=['A', 'B'])
        #d['A'].v = 1  # Attribute Error NoneType has no attribute, maybe initialize to np.nan?
        #d['B'] = 2
        #d['A'].e = 4
        #d['B'].e = 5
        d = d.append_rows([1, 2])
        #print d
        d.e = [[4, 5]]

        self.assertEqual(5., d['B'].e)

    def test_data_assignment(self):
        print self.RPD
        # set only values
        self.RPD['Mx'] = [1.1, 1.2, 1.3, 1.4]
        print self.RPD
        # set values and errors
        self.RPD['Mx'] = [[[1.1, 0.11]], [[1.2, 0.12]], [[1.3, 0.13]], [[1.4, 0.14]]]
        print self.RPD
Beispiel #12
0
class Parm_Spectra(base.Measurement):
    '''
    '''

    def __init__(self, sample_obj,
                 mtype, mfile, machine,
                 mag_method='',
                 **options):
        super(Parm_Spectra, self).__init__(sample_obj,
                                           mtype, mfile, machine,
                                           **options)

    def format_sushibar(self):
        data = self.machine_data.out_parm_spectra()
        self.af3 = RockPyData(column_names=data[1],
                              data=data[0][0],
                              units=data[2])
        self.af3.define_alias('m', ( 'x', 'y', 'z'))
        self.af3 = self.af3.append_columns('mag', self.af3.magnitude('m'))
        self.af3 = self.af3.append_columns(column_names='mean_window',
                                           data=np.array([self.af3['upper_window'].v + self.af3['lower_window'].v])[
                                                    0] / 2)

        self.data = RockPyData(column_names=data[1],
                               data=data[0][1:],
                               units=data[2])
        self.data.define_alias('m', ( 'x', 'y', 'z'))
        self.data = self.data.append_columns('mag', self.data.magnitude('m'))
        self.data = self.data.append_columns(column_names='mean_window',
                                             data=np.array([self.data['upper_window'].v + self.data['lower_window'].v])[
                                                      0] / 2)
        self.data.define_alias('variable', 'mean_window')

    def _get_cumulative_data(self, subtract_af3=True):
        cumulative_data = deepcopy(self.data)

        if subtract_af3:
            cumulative_data['x'] = cumulative_data['x'].v - self.af3['x'].v
            cumulative_data['y'] = cumulative_data['y'].v - self.af3['y'].v
            cumulative_data['z'] = cumulative_data['z'].v - self.af3['z'].v
            cumulative_data['mag'] = cumulative_data.magnitude('m')

        cumulative_data['x'] = [np.sum(cumulative_data['x'].v[:i]) for i,v in enumerate(cumulative_data['x'].v)]
        cumulative_data['y'] = [np.sum(cumulative_data['y'].v[:i]) for i,v in enumerate(cumulative_data['y'].v)]
        cumulative_data['z'] = [np.sum(cumulative_data['z'].v[:i]) for i,v in enumerate(cumulative_data['z'].v)]
        cumulative_data['mag'] = cumulative_data.magnitude('m')

        return cumulative_data

    def plt_parm_spectra(self, subtract_af3=True, rtn=False, norm=False, fill=False):
        plot_data = deepcopy(self.data)

        if subtract_af3:
            plot_data['x'] = plot_data['x'].v - self.af3['x'].v
            plot_data['y'] = plot_data['y'].v - self.af3['y'].v
            plot_data['z'] = plot_data['z'].v - self.af3['z'].v
            plot_data['mag'] = plot_data.magnitude('m')

        if norm:
            norm_factor = max(plot_data['mag'].v)
        else:
            norm_factor = 1

        if fill:
            plt.fill_between(plot_data['mean_window'].v, 0, plot_data['mag'].v / norm_factor,
                             alpha=0.1,
                             label='pARM spetra')
        else:
            plt.plot(plot_data['mean_window'].v, 0, plot_data['mag'].v / norm_factor,
                     label='pARM spetra')
        if not rtn:
            plt.show()


    def plt_parm_acquisition(self, subtract_af3=True, rtn=False, norm=False):
        plot_data = self._get_cumulative_data(subtract_af3=subtract_af3)

        if norm:
            norm_factor = max(plot_data['mag'].v)
        else:
            norm_factor = 1

        plt.plot(plot_data['mean_window'].v, plot_data['mag'].v / norm_factor, label='pARM acquisition')

        if not rtn:
            plt.show()


    def plt_acq_spec(self, subtract_af3=True, norm=True):
        self.plt_parm_spectra(subtract_af3=subtract_af3, rtn=True, norm=norm, fill=True)
        self.plt_parm_acquisition(subtract_af3=subtract_af3, rtn=True, norm=norm)
        plt.xlabel('AF field [mT]')
        plt.grid()
        plt.show()
Beispiel #13
0
def test():
    # define some data for tutorials.rst
    testdata = ((1, 2, 3, 4),
                (2, 6, 7, 8),
                (9, 10, 11, 12))

    testdata2 = ((1, 1),
                 (2, 2),
                 (19, 3))

    # create a rockpydata object with named columns and filled with testdata
    d = RockPyData(column_names=('F', 'Mx', 'My', 'Mz'), row_names=('1.Zeile', '2.Zeile', '3.Zeile'),
                   units=('T', 'mT', 'fT', 'pT'), data=testdata)

    d_json = numpyson.dumps(d)
    print d_json
    dd = numpyson.loads(d_json)
    print repr(dd)

    print "dd:", dd

    #d = d.eliminate_duplicate_variable_rows(substfunc='last')
    #print d._find_unique_variable_rows()
    print('d:\n%s' % d)

    e = RockPyData(column_names=('F', 'Mx'), row_names=('1.Zeile', '2.Zeile', '3.Zeile'),
                   units=('T', 'mT', 'fT', 'pT'), data=testdata2)

    print('e:\n%s' % e)

    print('e+d:\n%s' % (e+d))
    print('e-d:\n%s' % (e-d))
    print('e/d:\n%s' % (e/d))
    print('e*d:\n%s' % (e*d))

    print('d/e:\n%s' % (d/e))
    print('d*e:\n%s' % (d*e))
    print('d+e:\n%s' % (d+e))
    print('d-e:\n%s' % (d-e))

    print d.units
    # define as many aliases as you want
    d.define_alias('M', ('Mx', 'My', 'Mz'))
    d.define_alias('Mzx', ('Mz', 'Mx'))

    # show some data
    # aliases 'all', 'variable' and 'dep_var' are predefined
    print('all:\n%s' % d['all'])
    print('Mzx:\n%s' % d['Mzx'])

    # lets alter some data
    d['Mx'] = np.array((13, 24, 35))

    # show M with modified Mx component
    print('M:\n%s' % d['M'])
    # show Mx
    print('Mx:\n%s' % d['Mx'])
    # we can also alter several columns at once
    d['M'] = ((2, 3, 4),
              (18, 88, 98),
              (39, 89, 99))
    print('M:\n%s' % d['M'])

    # some math fun
    # calculate magnitude of vector 'M' and save it as new column 'magM'
    d = d.append_columns('magM', d.magnitude('M'))

    # calculate values of 'magM' normalized to 100
    #d.append_columns('normM', d.normalize('magM', 100))

    # we can also add arbitrary data in a new column
    d = d.append_columns(("T",), np.array((1, 2, 3)))

    # we can also add an empty column
    d = d.append_columns(("empty",))

    # renaming a column
    d.rename_column('T', 'temp')

    # show all data again, now including magM and T as the last two columns
    print d

    # do a plot of F vs magM
    # plt.plot(d['F'], d['magM'])
    # plt.show()

    # fancy filtering of data
    tf_array = (d['Mx'].v > 10) & (d['Mx'].v < 20)
    print 'filtering:'
    filtered_d = d.filter(tf_array)
    print filtered_d['Mx']

    # arithmetic operations
    e = deepcopy(d)
    # mutlipy one column with value
    e['Mx'].v *= 2
    # calculate difference of two rockpydata objects
    #c = e - d
    #print c

    #c = e + d
    #print c

    #c = e / d
    #print c

    #c = e * d
    #print c

    #print repr(c)

    # test single line object
    l = RockPyData(column_names=('A', 'B', 'C', 'D'), row_names=('1.Zeile',),
                   units=('T', 'mT', 'fT', 'pT'), data=((1, 2, 3, 4),))
    l = l.append_columns('X', (5,))
    print l

    print l['X']

    #print d.mean()
    print d
    print d + (1, 2, 3, 4, 5, 6)

    print d.interpolate(np.arange(2, 10, .5), includesourcedata=True)
    #d.define_alias('variable', 'Mx')
    #print d.interpolate(np.arange(0, 10, .5))

    print "condense:"
    print condense([d, d*2, d*3], substfunc='median')
Beispiel #14
0
class Parm_Spectra(base.Measurement):
    '''
    '''
    def __init__(self,
                 sample_obj,
                 mtype,
                 mfile,
                 machine,
                 mag_method='',
                 **options):
        super(Parm_Spectra, self).__init__(sample_obj, mtype, mfile, machine,
                                           **options)

    def format_sushibar(self):
        data = self.machine_data.out_parm_spectra()
        self.af3 = RockPyData(column_names=data[1],
                              data=data[0][0],
                              units=data[2])
        self.af3.define_alias('m', ('x', 'y', 'z'))
        self.af3 = self.af3.append_columns('mag', self.af3.magnitude('m'))
        self.af3 = self.af3.append_columns(
            column_names='mean_window',
            data=np.array(
                [self.af3['upper_window'].v + self.af3['lower_window'].v])[0] /
            2)

        self.data = RockPyData(column_names=data[1],
                               data=data[0][1:],
                               units=data[2])
        self.data.define_alias('m', ('x', 'y', 'z'))
        self.data = self.data.append_columns('mag', self.data.magnitude('m'))
        self.data = self.data.append_columns(
            column_names='mean_window',
            data=np.array([
                self.data['upper_window'].v + self.data['lower_window'].v
            ])[0] / 2)
        self.data.define_alias('variable', 'mean_window')

    def _get_cumulative_data(self, subtract_af3=True):
        cumulative_data = deepcopy(self.data)

        if subtract_af3:
            cumulative_data['x'] = cumulative_data['x'].v - self.af3['x'].v
            cumulative_data['y'] = cumulative_data['y'].v - self.af3['y'].v
            cumulative_data['z'] = cumulative_data['z'].v - self.af3['z'].v
            cumulative_data['mag'] = cumulative_data.magnitude('m')

        cumulative_data['x'] = [
            np.sum(cumulative_data['x'].v[:i])
            for i, v in enumerate(cumulative_data['x'].v)
        ]
        cumulative_data['y'] = [
            np.sum(cumulative_data['y'].v[:i])
            for i, v in enumerate(cumulative_data['y'].v)
        ]
        cumulative_data['z'] = [
            np.sum(cumulative_data['z'].v[:i])
            for i, v in enumerate(cumulative_data['z'].v)
        ]
        cumulative_data['mag'] = cumulative_data.magnitude('m')

        return cumulative_data

    def plt_parm_spectra(self,
                         subtract_af3=True,
                         rtn=False,
                         norm=False,
                         fill=False):
        plot_data = deepcopy(self.data)

        if subtract_af3:
            plot_data['x'] = plot_data['x'].v - self.af3['x'].v
            plot_data['y'] = plot_data['y'].v - self.af3['y'].v
            plot_data['z'] = plot_data['z'].v - self.af3['z'].v
            plot_data['mag'] = plot_data.magnitude('m')

        if norm:
            norm_factor = max(plot_data['mag'].v)
        else:
            norm_factor = 1

        if fill:
            plt.fill_between(plot_data['mean_window'].v,
                             0,
                             plot_data['mag'].v / norm_factor,
                             alpha=0.1,
                             label='pARM spetra')
        else:
            plt.plot(plot_data['mean_window'].v,
                     0,
                     plot_data['mag'].v / norm_factor,
                     label='pARM spetra')
        if not rtn:
            plt.show()

    def plt_parm_acquisition(self, subtract_af3=True, rtn=False, norm=False):
        plot_data = self._get_cumulative_data(subtract_af3=subtract_af3)

        if norm:
            norm_factor = max(plot_data['mag'].v)
        else:
            norm_factor = 1

        plt.plot(plot_data['mean_window'].v,
                 plot_data['mag'].v / norm_factor,
                 label='pARM acquisition')

        if not rtn:
            plt.show()

    def plt_acq_spec(self, subtract_af3=True, norm=True):
        self.plt_parm_spectra(subtract_af3=subtract_af3,
                              rtn=True,
                              norm=norm,
                              fill=True)
        self.plt_parm_acquisition(subtract_af3=subtract_af3,
                                  rtn=True,
                                  norm=norm)
        plt.xlabel('AF field [mT]')
        plt.grid()
        plt.show()