from QuantumATK import *
from AddOns.FET2D.Study.FET2DDeviceSetupParameters import FET2DDeviceSetupParameters
from AddOns.FET2D.Study.FET2DSentaurusDeviceCharacteristics import FET2DSentaurusDeviceCharacteristics

# Define previous model calibration results.
model_calibration_results = {
    'channel_material_name': 'MoS2',
    'contact_material_name': 'Gold',
    'channel_thickness': 1,
    'maxE': 1.1 * eV,
    'contact_orientation': (0, 0, 1),
    'NBands': 8,
    'chi': 4.25 * eV,
    'eps': 3.38,
    'H': 0.0006516 * um,
    'BG': 1.699 * eV,
    'PhiSB': 0.276 * eV,
    'WF': 4.5 * eV,
    'NPparLEV': '1.215:1.215',
    'UpperEnergyValley': 'valley0:valley1:valley2:valley3:valley6:valley7',
    'EMparUEV': '0.801:0.801:0.801:0.801:1.311:1.311',
    'g_cal': '0.210575',
    'LowerEnergyValley': 'valley4:valley5',
    'Eshift': '0.139',
    'EMperpUEV': '1.081:1.081:1.081:1.081:0.714:0.714',
    'V0f_cal': '1',
    'NUpBands': '6',
    'EMperpLEV': '0.484:0.484',
    'EMparLEV': '0.484:0.484',
    'NLowBands': '2',
    'Bf_cal': '0.987581',
    'NPparUEV': '1.773:1.773:0.433:0.433:1.155:1.155',
    'Tf_cal': '1.75296',
    'k_cal': '17.7495',
}

# Define the device setup parameters.
device_setup = FET2DDeviceSetupParameters(
    gate_type=GATE_TYPES.SINGLE_GATE,
    lgate=0.008 * um,
    gate_material_name='Gold',
    ttox=0.0025 * um,
    oxide_material_name='SiO2',
    til=0.002 * um,
    lcontact=0.015 * um,
    lspacer=0.008 * um,
    lbackgate=0.034 * um,
    back_gate_material_name='Gold',
    tbox=0.0025 * um,
    ch_dop=0.0 * cm**-3,
    sd_dop=0.0 * cm**-3,
    nit=0.0 * cm**-3,
    nit_bg=0.0 * cm**-3,
    mumax=50.0 * cm**2 / V / s,
)

# Define the Device Characteristics Study Object.
device_characteristics = FET2DSentaurusDeviceCharacteristics(
    filename='fet2d_device_characterization_1642515686.31.hdf5',
    object_id='FET2DSentaurusDeviceCharacteristics_0',
    device_setup=device_setup,
    model_calibration_results=model_calibration_results,
    log_filename_prefix_default='fet2d_device_characterization_',
)

# Start the calculations.
device_characteristics.update()

# Extract the results.
device_characteristics_results = device_characteristics.extractionResults()

