from QATK.Analysis import *
from QATK.Calculators.DFT import *
from QATK.Core import *

vector_a = [0.0, 13.5765, 13.5765]*Angstrom
vector_b = [2.7153, 0.0, 2.7153]*Angstrom
vector_c = [2.7153, 2.7153, 0.0]*Angstrom
lattice = UnitCell(vector_a, vector_b, vector_c)

elements = [Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon]

fractional_coordinates = [[ 0.8 ,  0.  , -0.  ],
                          [ 0.85,  0.25,  0.25],
                          [ 0.  , -0.  ,  0.  ],
                          [ 0.05,  0.25,  0.25],
                          [ 0.2 ,  0.  , -0.  ],
                          [ 0.25,  0.25,  0.25],
                          [ 0.4 ,  0.  , -0.  ],
                          [ 0.45,  0.25,  0.25],
                          [ 0.6 ,  0.  , -0.  ],
                          [ 0.65,  0.25,  0.25]]

silicon_alpha = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
)

k_point_sampling = KpointDensity(
    density_a=4.0 * Angstrom, density_b=4.0 * Angstrom, density_c=4.0 * Angstrom
)

numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=k_point_sampling
)

calculator = LCAOCalculator(
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    checkpoint_handler=NoCheckpointHandler,
)

silicon_alpha.setCalculator(calculator)
silicon_alpha.update()

electron_difference_density = ElectronDifferenceDensity(configuration=silicon_alpha)

electron_difference_density_compressed = CompressedGridValues(electron_difference_density)
