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

# Define previous parameter extraction results.
parameter_extraction_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,
    'qatk_bands': '0.367\n1.081\n1.923\n0.989\n0.346\n0.801\n1.773\n0.989\n0.254\n1.081\n0.618\n0.989\n0.346\n0.801\n1.773\n0.989\n0.367\n1.081\n1.923\n0.989\n0.344\n0.801\n0.433\n0.989\n0.254\n1.081\n0.618\n0.989\n0.344\n0.801\n0.433\n0.989\n0.452\n0.484\n0.911\n0.85\n0.485\n0.484\n1.215\n0.85\n0.527\n0.484\n1.589\n0.85\n0.485\n0.484\n1.215\n0.85\n0.312\n0.714\n0.542\n0.989\n0.204\n1.311\n1.155\n0.989\n0.713\n0.714\n1.153\n0.989\n0.204\n1.311\n1.155\n0.989',
    'PhiSB': 0.276 * eV,
}

# Define the Model Calibration Study Object.
model_calibration = FET2DSentaurusModelCalibration(
    filename='fet2d_model_calibration_1642515594.46.hdf5',
    object_id='FET2DSentaurusModelCalibration_0',
    workfunction=7.835 * eV,
    parameter_extraction_results=parameter_extraction_results,
    log_filename_prefix_default='fet2d_model_calibration_',
)

# Start the calculations.
model_calibration.update()

# Extract the results.
model_calibration_results = model_calibration.extractionResults()

# 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_1642515596.36.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()

