Skip to content

Commit

Permalink
process(None) return pd.Series of units
Browse files Browse the repository at this point in the history
  • Loading branch information
martin-brajer committed May 31, 2021
1 parent 70b6fcb commit 22e9e95
Show file tree
Hide file tree
Showing 5 changed files with 121 additions and 56 deletions.
17 changes: 12 additions & 5 deletions physicslab/experiment/curie_temperature.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,25 @@ def process(data):
Parameter :attr:`data` must include temperature and magnetization.
See :class:`Columns` for details and column names.
:param data: Measured data
:param data: Measured data. If None, return units instead
:type data: pandas.DataFrame
:return: Derived quantities listed in :meth:`Columns.output`.
:return: Derived quantities listed in :meth:`Columns.output` or units
:rtype: pandas.Series
"""
measurement = Measurement(data)
if data is None:
from physicslab.experiment import UNITS
name = UNITS
curie_temperature = 'K'

curie_temperature = measurement.analyze()
else:
name = get_name(data)
measurement = Measurement(data)

curie_temperature = measurement.analyze()

return pd.Series(
data=(curie_temperature,),
index=Columns.output(), name=get_name(data))
index=Columns.output(), name=name)


class Columns(_ColumnsBase):
Expand Down
41 changes: 27 additions & 14 deletions physicslab/experiment/hall.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

from scipy.constants import e as elementary_charge

from physicslab.electricity import carrier_concentration, Mobility, Resistance
from physicslab.electricity import Carrier_concentration, Mobility, Resistance
from physicslab.ui import plot_grid
from physicslab.utility import _ColumnsBase, squarificate, get_name

Expand All @@ -24,29 +24,42 @@ def process(data, thickness=None, sheet_resistance=None):
The optional parameters allows to calculate additional quantities:
`concentration` and `mobility`.
:param data: Measured data
:type data: pandas.DataFrame
:param data: Measured data. If None, return units instead
:type data: pandas.DataFrame or None
:param thickness: Sample dimension perpendicular to the plane marked
by the electrical contacts, defaults to None
:type thickness: float, optional
:param sheet_resistance: Defaults to None
:type sheet_resistance: float, optional
:return: Derived quantities listed in :meth:`Columns.output`.
:return: Derived quantities listed in :meth:`Columns.output` or units
:rtype: pandas.Series
"""
measurement = Measurement(data)
(concentration, mobility) = [np.nan] * 2

sheet_density, conductivity_type, residual = measurement.analyze()
if thickness is not None:
concentration = carrier_concentration(sheet_density, thickness)
if sheet_resistance is not None:
mobility = Mobility.from_sheets(sheet_density, sheet_resistance)
if data is None:
from physicslab.experiment import UNITS
import physicslab.electricity as el
name = UNITS
sheet_density = el.Carrier_sheet_concentration.UNIT
conductivity_type = '<str>'
residual = 'T^2' # Squared y-axis while fitting.
concentration = el.Carrier_concentration.UNIT
mobility = el.Mobility.UNIT

else:
name = get_name(data)
measurement = Measurement(data)
(concentration, mobility) = [np.nan] * 2

sheet_density, conductivity_type, residual = measurement.analyze()
if thickness is not None:
concentration = Carrier_concentration.from_sheet_density(
sheet_density, thickness)
if sheet_resistance is not None:
mobility = Mobility.from_sheets(sheet_density, sheet_resistance)

return pd.Series(
data=(sheet_density, conductivity_type, residual,
concentration, mobility),
index=Columns.output(), name=get_name(data))
index=Columns.output(), name=name)


class Columns(_ColumnsBase):
Expand All @@ -57,7 +70,7 @@ class Columns(_ColumnsBase):
MAGNETICFIELD = 'B'
HALLVOLTAGE = 'VH'
CURRENT = 'I'
SHEET_DENSITY = 'sheet_density'
SHEET_DENSITY = 'sheet_density' # Carrier.
CONDUCTIVITY_TYPE = 'conductivity_type'
RESIDUAL = 'residual'
CONCENTRATION = 'concentration'
Expand Down
47 changes: 31 additions & 16 deletions physicslab/experiment/magnetism_type.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,33 +24,48 @@ def process(data, diamagnetism=True, ferromagnetism=True):
Output :attr:`ratio_DM_FM` compares max values - probably for the
strongest magnetic field.
:param pandas.DataFrame data: Measured data
:param data: Measured data. If None, return units instead
:type data: pandas.DataFrame or None
:param diamagnetism: Look for diamagnetism contribution, defaults to True
:type diamagnetism: bool, optional
:param ferromagnetism: Look for ferromagnetism contribution,
defaults to True
:type ferromagnetism: bool, optional
:return: Derived quantities listed in :meth:`Columns.output`.
:return: Derived quantities listed in :meth:`Columns.output` or units
:rtype: pandas.Series
"""
measurement = Measurement(data)
(magnetic_susceptibility, offset, saturation, remanence,
coercivity, ratio_DM_FM) = [np.nan] * 6

if diamagnetism:
magnetic_susceptibility, offset = measurement.diamagnetism(
from_residual=True)
if ferromagnetism:
saturation, remanence, coercivity = measurement.ferromagnetism(
from_residual=True)
if diamagnetism and ferromagnetism:
ratio_DM_FM = abs(measurement.data[Columns.DIAMAGNETISM].iloc[-1]
/ measurement.data[Columns.FERROMAGNETISM].iloc[-1])
if data is None:
from physicslab.experiment import UNITS
name = UNITS
# [B] = Oe; [M] = emu
magnetic_susceptibility = 'emu/Oe'
offset = 'emu'
saturation = 'emu'
remanence = 'emu'
coercivity = 'Oe'
ratio_DM_FM = '1'

else:
name = get_name(data)
measurement = Measurement(data)
(magnetic_susceptibility, offset, saturation, remanence,
coercivity, ratio_DM_FM) = [np.nan] * 6

if diamagnetism:
magnetic_susceptibility, offset = measurement.diamagnetism(
from_residual=True)
if ferromagnetism:
saturation, remanence, coercivity = measurement.ferromagnetism(
from_residual=True)
if diamagnetism and ferromagnetism:
ratio_DM_FM = abs(
measurement.data[Columns.DIAMAGNETISM].iloc[-1]
/ measurement.data[Columns.FERROMAGNETISM].iloc[-1])

return pd.Series(
data=(magnetic_susceptibility, offset, saturation, remanence,
coercivity, ratio_DM_FM),
index=Columns.output(), name=get_name(data))
index=Columns.output(), name=name)


class Columns(_ColumnsBase):
Expand Down
32 changes: 25 additions & 7 deletions physicslab/experiment/profilometer.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,22 +22,40 @@ def process(data, **kwargs):
Output `histogram` column (type :class:`~Measurement.Histogram`) stores
histogram data and fit data.
:param data: Measured data
:param data: Measured data. If None, return units instead
:type data: pandas.DataFrame
:param kwargs: All additional keyword arguments are passed to the
:meth:`Measurement.analyze` call.
:return: Derived quantities listed in :meth:`Columns.output`.
:return: Derived quantities listed in :meth:`Columns.output` or units
:rtype: pandas.Series
"""
measurement = Measurement(data)
# () = [np.nan] * 0
if data is None:
from physicslab.experiment import UNITS
name = UNITS
length_unit = 'nm'
if 'nanometer' in kwargs and not kwargs['nanometer']: # Default True.
length_unit = 'm'
m_m = '({m}, {m})'.format(m=length_unit)

expected_values = m_m
variances = m_m
amplitudes = m_m
FWHMs = m_m
thickness = length_unit
histogram = '<class>'

else:
name = get_name(data)
measurement = Measurement(data)
# () = [np.nan] * 0

(expected_values, variances, amplitudes, FWHMs, thickness, histogram
) = measurement.analyze(**kwargs)

(expected_values, variances, amplitudes, FWHMs, thickness, histogram
) = measurement.analyze(**kwargs)
return pd.Series(
data=(expected_values, variances, amplitudes, FWHMs, thickness,
histogram),
index=Columns.output(), name=get_name(data))
index=Columns.output(), name=name)


class Columns(_ColumnsBase):
Expand Down
40 changes: 26 additions & 14 deletions physicslab/experiment/van_der_pauw.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,29 +31,41 @@ def process(data, thickness=None):
The optional parameter allows to calculate additional quantities:
`resistivity` and `conductivity`.
:param data: Measured data
:type data: pandas.DataFrame
:param data: Measured data. If None, return units instead
:type data: pandas.DataFrame or None
:param thickness: Sample dimension perpendicular to the plane marked
by the electrical contacts, defaults to None
:type thickness: float, optional
:return: Derived quantities listed in :meth:`Columns.output`.
:return: Derived quantities listed in :meth:`Columns.output` or units
:rtype: pandas.Series
"""
measurement = Measurement(data)
(resistivity, conductivity) = [np.nan] * 2

Rh, Rv = measurement.analyze()
sheet_resistance, ratio_resistance = Solve.analyze(Rh, Rv)
sheet_conductance = 1 / sheet_resistance
if thickness is not None:
resistivity = Resistivity.from_sheet_resistance(sheet_resistance,
thickness)
conductivity = 1 / resistivity
if data is None:
from physicslab.experiment import UNITS
import physicslab.electricity as el
name = UNITS
sheet_resistance = el.Sheet_Resistance.UNIT
ratio_resistance = '1'
sheet_conductance = el.Sheet_Conductance.UNIT
resistivity = el.Resistivity.UNIT
conductivity = el.Conductivity.UNIT

else:
name = get_name(data)
measurement = Measurement(data)
(resistivity, conductivity) = [np.nan] * 2

Rh, Rv = measurement.analyze()
sheet_resistance, ratio_resistance = Solve.analyze(Rh, Rv)
sheet_conductance = 1 / sheet_resistance
if thickness is not None:
resistivity = Resistivity.from_sheet_resistance(sheet_resistance,
thickness)
conductivity = 1 / resistivity

return pd.Series(
data=(sheet_resistance, ratio_resistance, sheet_conductance,
resistivity, conductivity),
index=Columns.output(), name=get_name(data))
index=Columns.output(), name=name)


class Solve:
Expand Down

0 comments on commit 22e9e95

Please sign in to comment.