xq_poa_bilinear_full module

Extracts PoA parameters using bilinear scaling for a given quantity. Subclass this for easier PoA separations such as the classical one.

  • quantity_a -> area related quantitiy

  • quantity_l -> length related quantity

  • quantity_b -> width related quantity

  • quantity_corner -> corner related quantity

Author: Markus Müller | Markus.Mueller3@tu-dresden.de Author: Mario Krattenmacher | Mario.Krattenmacher@semimod.de

class DMT.extraction.xq_poa_bilinear_full.XQPoaBilinearFull(name, mcard, lib, op_definition, quantity, quantity_scale, sweep_voltage, dut_type=<DMT.core.dut_type.DutTypeInt object>, scale_along='width', scale_at=None, legend_off=True, config=None, exclude=None, corner_rounding=False, use_exact_key=True, nfinger=None, **kwargs)[source]

Bases: XStep

XPoa is the superclass for PoA analysis of electrical quantities. It implements a linear PoA analysis of a given quantity at multiple operating points using the QStep framework.

XPoaBilinearFull can perform a length and/or width related PoA separation for many operating point at the same time

(1) quantity(op) = quantity_a(op) * area + quantity_l * length + quantity_b * width + quantity_corner
length = length + delta_length
width = width + delta_width

at different operating points, depending on the parameter that are passed to this object. The deltas are optimized globally.
Parameters:
namestr

name of this XStep.

mcardDMT.core.McParameterCollection

Modelcard where the parameters dl and db are stored (they will be unique)

libDMT.core.DutLib

Library object that stores all devices of interest for this XStep.

op_definition{DMT.core.specifier:val}

Dict whose keys and values define the operating regions for this XStep. E.g. specifiers:TEMPERATURE:300 would only allow data at temperature 300K.

quantityDMT.core.specifier

The quantity to be scaled, e.g. specifiers.CAPACITANCE + ‘B’ + ‘E’.

quantity_scalefloat

The scaling factor to determine the unit of the quantity, e.g. 1e3 will cause the quantity to be plotted as milli.

sweep_voltageDMT.core.specifier

The voltage that is to be used for sweeping during PoA analysis.

dut_typeDMT.core.DutType

The device type, e.g. DutType.npn.

scale_alongstr

Either ‘’width’, ‘length’ or ‘both’. If ‘width’ or ‘length’, only devices with different scale_along will be used for scaling at fixed other dimension specified by scale_at .

scale_atfloat

Only active if scale_along is ‘width’ or ‘length’. The other dimension is the fixed at scale_at .

legend_offbool, True

Turn the legend in the main_plot off or on.

negativebool

If negative values are to be scaled, this will invert them to generate nicer plots.

configstr

Configuration of the device. (Optional)

corner_roundingBoolean, False

If True, use bilinear corner rounding equation.

excludetuple, None

A tuple whose first entry is the minimum length that is considered for scaling and the second entry the minimum width.

collect_data()[source]

This is overwriten here since this step wants to save the new keys, too!

ensure_input_correct()[source]

Search for all required columns in the data frames. Check whether the scaling specifications make sense.

filter_function(dut)[source]

This function returns true for duts that are suitable for scaling along scale_along at a fixed scale_at value.

fit(line, paras_model)[source]

Set the y-values, using one quantity_a for each line and one quantity_p for all lines.

classmethod get_area(lE0, bE0, dlE, dbE)[source]
classmethod get_area_tex()[source]
get_cols_poa_full()[source]
get_description()[source]

Return a tex description of this XStep. Used for generating the documentation. If not implemented, there is no description for this XStep in the documentation.

get_dut_key(key, dut)[source]

Returns the original DuT key to write back results into a static persistant dataframe

classmethod get_effective_area(lE0, bE0, dlE, dbE, gamma_l=None, gamma_b=None, gamma_c=None, **_kwargs)[source]
classmethod get_effective_area_tex()[source]
classmethod get_effective_perimeter(lE0=None, bE0=None, dlE=None, dbE=None, gamma_l=None, gamma_b=None, gamma_c=None)[source]
classmethod get_effective_perimeter_tex()[source]
get_operating_points(df)[source]
get_plot_along_dimension(along=None, delta=None, op=None, num=None)[source]

Return an array of the quantity along length or width, at width or length with an delta at an operating point and a fit line

get_quantity(df, v_spot)[source]

Extract the base current from a given dataframe at a given voltage v_spot. Errors should have been cought in ensure_input_correct.

get_tex()[source]

Return a tex Representation of the Model that is beeing fitted. This can then be displayed in the UI.

init_data_reference()[source]

Go through all relevant duts and extract I_B.

main_plot()[source]

Overwrite main plot.

optimize()[source]

Fit the model to the reference data.

plot_quantity_bE_a_low()[source]
plot_quantity_bE_b_mid()[source]
plot_quantity_bE_c_high()[source]
plot_quantity_bEdrawn_a()[source]
plot_quantity_bEdrawn_b()[source]
plot_quantity_bEdrawn_c()[source]
plot_quantity_lE_a_low()[source]
plot_quantity_lE_b_mid()[source]
plot_quantity_lE_c_high()[source]
plot_quantity_lEdrawn_a()[source]
plot_quantity_lEdrawn_b()[source]
plot_quantity_lEdrawn_c()[source]
plot_quantity_scaled_fit()[source]

Plot quantity as a function of operating point meas vs fit for multiple geometries for all analyzed duts

plot_quantity_separated()[source]

Plot quantity as a function of operating point meas vs fit for multiple geometries for all analyzed duts

quantity_poa(l_E0=None, b_E0=None, dle=None, dbe=None, quantity_per_area=None, quantity_per_length=0, quantity_per_width=0, quantity_corner=0)[source]

full bilinear scaling equation of a quantity

Parameters:
l_E0, b_E0float !==DRAWN TODO:RENAME!!!!!!!!!!!!!!!!!
dlE, dbEfloat
quantity_per_area, quantity_per_width, quantity_per_length, quantity_cornerfloat
Returns:
quantity_poanp.ndarray
quantity_poa_recr(l_E0=None, b_E0=None, recr=None, dle=None, dbe=None, quantity_per_area=None, quantity_per_length=0, quantity_per_width=0, quantity_corner=0)[source]

full bilinear scaling equation of a quantity with corner rounding

Parameters:
l_E0, b_E0float !==DRAWN TODO:RENAME!!!!!!!!!!!!!!!!!
dlE, dbEfloat
quantity_per_area, quantity_per_width, quantity_per_length, quantity_cornerfloat
recrcorner rounding radius
Returns:
quantity_poanp.ndarray
scaling_plot(mcard=None)[source]

Plots Q/A vs P/A with actual lengths and widths

set_initial_guess(data_reference)[source]

In contrast to XStep set_initial_guess, this method needs to set an initial guess for each line and init the parameter arrays.

set_initial_guess_line(composition, line)[source]

For this simple linear extraction the starting guess need not be very clever. Just assume that quantity_p=0.

staticMetaObject = PySide6.QtCore.QMetaObject("XQPoaBilinearFull" inherits "XStep": )[source]
write_back_results()[source]

Write back the results obtained by this QStep into dut_ref.