setVerbosity(MinimalLog)

# -------------------------------------------------------------
# Fluoroethane configuration
# -------------------------------------------------------------
# Define elements
elements = [Carbon, Carbon, Fluorine, Fluorine, Fluorine, Fluorine, Fluorine, Fluorine]

# Define coordinates
cartesian_coordinates = [[-0.003263937084, -0.            ,  0.            ],
                         [ 1.516263937084, -0.            , -0.            ],
                         [-0.469715381813,  0.            , -1.301600235398],
                         [-0.469715381813, -1.127218869426,  0.650800117699],
                         [-0.469715381813,  1.127218869426,  0.650800117699],
                         [ 1.982715381813,  1.127218869426, -0.650800117699],
                         [ 1.982715381813,  0.            ,  1.301600235398],
                         [ 1.982715381813, -1.127218869426, -0.650800117699]]*Angstrom

# Set up configuration
C2F6_configuration = MoleculeConfiguration(
    elements=elements,
    cartesian_coordinates=cartesian_coordinates
)
C2F6_configuration.findBonds()

# -------------------------------------------------------------
# Fluoroethene configuration
# -------------------------------------------------------------
# Define elements
elements = [Carbon, Carbon, Fluorine, Fluorine, Fluorine, Fluorine]

# Define coordinates
cartesian_coordinates = [[ 0.089971642147,  0.            , -0.            ],
                         [ 1.423028357853,  0.            ,  0.            ],
                         [-0.594324695679,  0.            , -1.173915650421],
                         [-0.594324695679,  0.            ,  1.173915650421],
                         [ 2.107324695679,  0.            ,  1.173915650421],
                         [ 2.107324695679,  0.            , -1.173915650421]]*Angstrom

# Set up configuration
C2F4_configuration = MoleculeConfiguration(
    elements=elements,
    cartesian_coordinates=cartesian_coordinates
)
C2F4_configuration.findBonds()

# -------------------------------------------------------------
# Specify molecular training set
# -------------------------------------------------------------
training_set = MolecularConfigurationsParameters(
    [C2F6_configuration, C2F4_configuration],
    sample_size=100,
    generate_bulk_configurations=True
)

# -------------------------------------------------------------
# Specify fitting parameters
# -------------------------------------------------------------
nl_parameters = NonLinearCoefficientsParameters(
    perform_optimization=True,
    energy_only=False,
)

fitting_parameters = MomentTensorPotentialFittingParameters(
    inner_cutoff_radii=1.0*Angstrom,
    tapering_cutoff_radii=1.1*Angstrom,
    outer_cutoff_radii=5*Angstrom,
    mtp_filename='Carbon_Fluorine_MTP.mtp',
    non_linear_coefficients_parameters=nl_parameters,
)

# -------------------------------------------------------------
# Generate the MTP
# -------------------------------------------------------------
mtp = MomentTensorPotentialTraining(
    'Carbon_Fluorine_MTP.hdf5',
    'Carbon_Fluorine_MTP',
    [training_set],
    calculator=LCAOCalculator(),
    fitting_parameters_list=[fitting_parameters],
    train_test_split=0.9,
)
mtp.update()
